ToSqlContext.java
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
package org.apache.doris.common.util;
import java.io.Closeable;
/*
* This class is used to control the behavior of certain toSql() methods. The usage is as follows:
*
* try (ToSqlContext toSqlContext =ToSqlContext.getOrNewThreadLocalContext()) {
* toSqlContext.setNeedSlotRefId(false); // set some property
* inlineViewDef = viewDefStmt.toSql(); // call some toSql() methods
* }
*
* This class implements "Closable" interface, and it should be closed right after being used.
* To prevent it from affecting other following logic.
*
*/
public class ToSqlContext implements Closeable {
// Used to control whether to output the slotId in the toSql() method of SlotRef.
private boolean needSlotRefId;
private static ThreadLocal<ToSqlContext> threadLocalInfo = new ThreadLocal<ToSqlContext>();
public ToSqlContext() {
}
public void setNeedSlotRefId(boolean needSlotRefId) {
this.needSlotRefId = needSlotRefId;
}
public boolean isNeedSlotRefId() {
return needSlotRefId;
}
public static ToSqlContext get() {
return threadLocalInfo.get();
}
public static ToSqlContext getOrNewThreadLocalContext() {
ToSqlContext toSqlContext = threadLocalInfo.get();
if (toSqlContext == null) {
toSqlContext = new ToSqlContext();
threadLocalInfo.set(toSqlContext);
}
return toSqlContext;
}
@Override
public void close() {
threadLocalInfo.remove();
}
}