Package org.teiid.language.visitor
Class SQLStringVisitor
- java.lang.Object
-
- org.teiid.language.visitor.AbstractLanguageVisitor
-
- org.teiid.language.visitor.SQLStringVisitor
-
- All Implemented Interfaces:
LanguageObjectVisitor
- Direct Known Subclasses:
CassandraSQLVisitor
,IckleConversionVisitor
,N1QLVisitor
,SimpleDBSQLVisitor
,SpreadsheetCriteriaVisitor
,SQLConversionVisitor
public class SQLStringVisitor extends AbstractLanguageVisitor
Creates a SQL string for a LanguageObject subtree. Instances of this class are not reusable, and are not thread-safe.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interface
SQLStringVisitor.Substitutor
-
Field Summary
Fields Modifier and Type Field Description protected StringBuilder
buffer
protected boolean
shortNameOnly
static String
TEIID_NATIVE_QUERY
protected static String
UNDEFINED
protected static String
UNDEFINED_PARAM
-
Constructor Summary
Constructors Constructor Description SQLStringVisitor()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected void
append(List<? extends LanguageObject> items)
Simple utility to append a list of language objects to the current buffer by creating a comma-separated list.void
append(LanguageObject obj)
Appends the string form of the LanguageObject to the current buffer.protected void
append(LanguageObject[] items)
Simple utility to append an array of language objects to the current buffer by creating a comma-separated list.protected void
appendBaseName(NamedTable obj)
protected void
appendCallStart(Call call)
protected void
appendLateralKeyword()
protected void
appendLiteral(Literal obj, Class<?> type)
protected void
appendNestedCondition(AndOr parent, Condition condition)
protected void
appendQuantifier(SubqueryComparison obj)
protected void
appendRightComparison(Comparison obj)
protected void
appendSetOperation(SetQuery.Operation operation)
protected void
appendSetQuery(SetQuery parent, QueryExpression obj, boolean right)
protected void
appendWithKeyword(With obj)
protected String
escapeString(String str, String quote)
Creates a SQL-safe string.protected String
getInsertKeyword()
protected String
getLikeRegexString()
protected String
getName(AbstractMetadataRecord object)
Gets the name of a group or element from the RuntimeMetadatastatic String
getRecordName(AbstractMetadataRecord object)
Get the name in source or the name if the name in source is not set.static String
getShortName(String elementName)
protected String
getSourceComment(Command command)
static String
getSQLString(LanguageObject obj)
Gets the SQL string representation for a given LanguageObject.protected String
getUpsertKeyword()
protected boolean
isInfixFunction(String function)
static void
parseNativeQueryParts(String nativeQuery, List<Argument> list, StringBuilder stringBuilder, SQLStringVisitor.Substitutor substitutor)
protected String
replaceElementName(String group, String element)
Take the specified derived group and element short names and determine a replacement element name to use instead.protected boolean
shouldNestSetChild(SetQuery parent, QueryExpression obj, boolean right)
String
toString()
protected boolean
useAsInGroupAlias()
Indicates whether group alias should be of the form "...FROM groupA AS X" or "...FROM groupA X".protected boolean
useParensForJoins()
protected boolean
useParensForLHSJoins()
If a nested left hand join should have parensprotected boolean
useParensForSetQueries()
protected boolean
useSelectLimit()
void
visit(AggregateFunction obj)
void
visit(AndOr obj)
void
visit(Argument obj)
void
visit(Array array)
void
visit(Call obj)
void
visit(ColumnReference obj)
void
visit(Comparison obj)
void
visit(Delete obj)
void
visit(DerivedColumn obj)
void
visit(DerivedTable obj)
void
visit(Exists obj)
void
visit(ExpressionValueSource obj)
void
visit(Function obj)
void
visit(GroupBy obj)
void
visit(In obj)
void
visit(Insert obj)
void
visit(IsDistinct isDistinct)
void
visit(IsNull obj)
void
visit(Join obj)
void
visit(Like obj)
void
visit(Limit obj)
void
visit(Literal obj)
void
visit(NamedProcedureCall obj)
void
visit(NamedTable obj)
void
visit(Not obj)
void
visit(OrderBy obj)
void
visit(Parameter obj)
void
visit(ScalarSubquery obj)
void
visit(SearchedCase obj)
void
visit(SearchedWhenClause obj)
void
visit(Select obj)
void
visit(SetClause clause)
void
visit(SetQuery obj)
void
visit(SortSpecification obj)
void
visit(SubqueryComparison obj)
void
visit(SubqueryIn obj)
void
visit(Update obj)
void
visit(WindowFrame windowFrame)
void
visit(WindowFunction windowFunction)
void
visit(WindowSpecification windowSpecification)
void
visit(With obj)
void
visit(WithItem obj)
-
Methods inherited from class org.teiid.language.visitor.AbstractLanguageVisitor
visit, visitNode, visitNodes, visitNodes
-
-
-
-
Field Detail
-
TEIID_NATIVE_QUERY
public static final String TEIID_NATIVE_QUERY
- See Also:
- Constant Field Values
-
UNDEFINED
protected static final String UNDEFINED
- See Also:
- Constant Field Values
-
UNDEFINED_PARAM
protected static final String UNDEFINED_PARAM
- See Also:
- Constant Field Values
-
buffer
protected StringBuilder buffer
-
shortNameOnly
protected boolean shortNameOnly
-
-
Method Detail
-
getName
protected String getName(AbstractMetadataRecord object)
Gets the name of a group or element from the RuntimeMetadata- Returns:
- the name of that element or group as defined in the source
-
getRecordName
public static String getRecordName(AbstractMetadataRecord object)
Get the name in source or the name if the name in source is not set.- Returns:
-
append
public void append(LanguageObject obj)
Appends the string form of the LanguageObject to the current buffer.- Parameters:
obj
- the language object instance
-
append
protected void append(List<? extends LanguageObject> items)
Simple utility to append a list of language objects to the current buffer by creating a comma-separated list.- Parameters:
items
- a list of LanguageObjects
-
append
protected void append(LanguageObject[] items)
Simple utility to append an array of language objects to the current buffer by creating a comma-separated list.- Parameters:
items
- an array of LanguageObjects
-
escapeString
protected String escapeString(String str, String quote)
Creates a SQL-safe string. Simply replaces all occurrences of ' with ''- Parameters:
str
- the input string- Returns:
- a SQL-safe string
-
visit
public void visit(AggregateFunction obj)
- Specified by:
visit
in interfaceLanguageObjectVisitor
- Overrides:
visit
in classAbstractLanguageVisitor
-
visit
public void visit(Comparison obj)
- Specified by:
visit
in interfaceLanguageObjectVisitor
- Overrides:
visit
in classAbstractLanguageVisitor
-
appendRightComparison
protected void appendRightComparison(Comparison obj)
-
visit
public void visit(AndOr obj)
- Specified by:
visit
in interfaceLanguageObjectVisitor
- Overrides:
visit
in classAbstractLanguageVisitor
-
visit
public void visit(Delete obj)
- Specified by:
visit
in interfaceLanguageObjectVisitor
- Overrides:
visit
in classAbstractLanguageVisitor
-
replaceElementName
protected String replaceElementName(String group, String element)
Take the specified derived group and element short names and determine a replacement element name to use instead. Most commonly, this is used to strip the group name if the group is a pseudo-group (DUAL) or the element is a pseudo-group (ROWNUM). It may also be used to strip special information out of the name in source value in some specialized cases. By default, this method returns null, indicating that the normal group and element name logic should be used (group + "." + element). Subclasses should override and implement this method if desired.- Parameters:
group
- Group name, may be nullelement
- Element name, never null- Returns:
- Replacement element name to be used as is (no modification will occur)
- Since:
- 5.0
-
visit
public void visit(ColumnReference obj)
- Specified by:
visit
in interfaceLanguageObjectVisitor
- Overrides:
visit
in classAbstractLanguageVisitor
-
getShortName
public static String getShortName(String elementName)
- Parameters:
elementName
-- Returns:
- Since:
- 4.3
-
visit
public void visit(Call obj)
- Specified by:
visit
in interfaceLanguageObjectVisitor
- Overrides:
visit
in classAbstractLanguageVisitor
-
appendCallStart
protected void appendCallStart(Call call)
-
visit
public void visit(Exists obj)
- Specified by:
visit
in interfaceLanguageObjectVisitor
- Overrides:
visit
in classAbstractLanguageVisitor
-
isInfixFunction
protected boolean isInfixFunction(String function)
-
visit
public void visit(Function obj)
- Specified by:
visit
in interfaceLanguageObjectVisitor
- Overrides:
visit
in classAbstractLanguageVisitor
-
visit
public void visit(NamedTable obj)
- Specified by:
visit
in interfaceLanguageObjectVisitor
- Overrides:
visit
in classAbstractLanguageVisitor
-
appendBaseName
protected void appendBaseName(NamedTable obj)
-
useAsInGroupAlias
protected boolean useAsInGroupAlias()
Indicates whether group alias should be of the form "...FROM groupA AS X" or "...FROM groupA X". Certain data sources (such as Oracle) may not support the first form.- Returns:
- boolean
-
visit
public void visit(GroupBy obj)
- Specified by:
visit
in interfaceLanguageObjectVisitor
- Overrides:
visit
in classAbstractLanguageVisitor
-
visit
public void visit(In obj)
- Specified by:
visit
in interfaceLanguageObjectVisitor
- Overrides:
visit
in classAbstractLanguageVisitor
-
visit
public void visit(DerivedTable obj)
- Specified by:
visit
in interfaceLanguageObjectVisitor
- Overrides:
visit
in classAbstractLanguageVisitor
-
appendLateralKeyword
protected void appendLateralKeyword()
-
visit
public void visit(NamedProcedureCall obj)
- Specified by:
visit
in interfaceLanguageObjectVisitor
- Overrides:
visit
in classAbstractLanguageVisitor
-
visit
public void visit(Insert obj)
- Specified by:
visit
in interfaceLanguageObjectVisitor
- Overrides:
visit
in classAbstractLanguageVisitor
-
getInsertKeyword
protected String getInsertKeyword()
-
getUpsertKeyword
protected String getUpsertKeyword()
-
visit
public void visit(ExpressionValueSource obj)
- Specified by:
visit
in interfaceLanguageObjectVisitor
- Overrides:
visit
in classAbstractLanguageVisitor
-
visit
public void visit(Parameter obj)
- Specified by:
visit
in interfaceLanguageObjectVisitor
- Overrides:
visit
in classAbstractLanguageVisitor
-
visit
public void visit(IsNull obj)
- Specified by:
visit
in interfaceLanguageObjectVisitor
- Overrides:
visit
in classAbstractLanguageVisitor
-
visit
public void visit(Join obj)
- Specified by:
visit
in interfaceLanguageObjectVisitor
- Overrides:
visit
in classAbstractLanguageVisitor
-
useParensForLHSJoins
protected boolean useParensForLHSJoins()
If a nested left hand join should have parens- Returns:
-
visit
public void visit(Like obj)
- Specified by:
visit
in interfaceLanguageObjectVisitor
- Overrides:
visit
in classAbstractLanguageVisitor
-
getLikeRegexString
protected String getLikeRegexString()
-
visit
public void visit(Limit obj)
- Specified by:
visit
in interfaceLanguageObjectVisitor
- Overrides:
visit
in classAbstractLanguageVisitor
-
visit
public void visit(Literal obj)
- Specified by:
visit
in interfaceLanguageObjectVisitor
- Overrides:
visit
in classAbstractLanguageVisitor
-
visit
public void visit(Not obj)
- Specified by:
visit
in interfaceLanguageObjectVisitor
- Overrides:
visit
in classAbstractLanguageVisitor
-
visit
public void visit(OrderBy obj)
- Specified by:
visit
in interfaceLanguageObjectVisitor
- Overrides:
visit
in classAbstractLanguageVisitor
-
visit
public void visit(SortSpecification obj)
- Specified by:
visit
in interfaceLanguageObjectVisitor
- Overrides:
visit
in classAbstractLanguageVisitor
-
visit
public void visit(Argument obj)
- Specified by:
visit
in interfaceLanguageObjectVisitor
- Overrides:
visit
in classAbstractLanguageVisitor
-
visit
public void visit(Select obj)
- Specified by:
visit
in interfaceLanguageObjectVisitor
- Overrides:
visit
in classAbstractLanguageVisitor
-
visit
public void visit(SearchedCase obj)
- Specified by:
visit
in interfaceLanguageObjectVisitor
- Overrides:
visit
in classAbstractLanguageVisitor
-
visit
public void visit(SearchedWhenClause obj)
- Specified by:
visit
in interfaceLanguageObjectVisitor
- Overrides:
visit
in classAbstractLanguageVisitor
-
visit
public void visit(ScalarSubquery obj)
- Specified by:
visit
in interfaceLanguageObjectVisitor
- Overrides:
visit
in classAbstractLanguageVisitor
-
visit
public void visit(DerivedColumn obj)
- Specified by:
visit
in interfaceLanguageObjectVisitor
- Overrides:
visit
in classAbstractLanguageVisitor
-
visit
public void visit(SubqueryComparison obj)
- Specified by:
visit
in interfaceLanguageObjectVisitor
- Overrides:
visit
in classAbstractLanguageVisitor
-
appendQuantifier
protected void appendQuantifier(SubqueryComparison obj)
-
visit
public void visit(SubqueryIn obj)
- Specified by:
visit
in interfaceLanguageObjectVisitor
- Overrides:
visit
in classAbstractLanguageVisitor
-
visit
public void visit(Update obj)
- Specified by:
visit
in interfaceLanguageObjectVisitor
- Overrides:
visit
in classAbstractLanguageVisitor
-
visit
public void visit(SetClause clause)
- Specified by:
visit
in interfaceLanguageObjectVisitor
- Overrides:
visit
in classAbstractLanguageVisitor
-
visit
public void visit(SetQuery obj)
- Specified by:
visit
in interfaceLanguageObjectVisitor
- Overrides:
visit
in classAbstractLanguageVisitor
-
appendSetOperation
protected void appendSetOperation(SetQuery.Operation operation)
-
useParensForSetQueries
protected boolean useParensForSetQueries()
-
appendSetQuery
protected void appendSetQuery(SetQuery parent, QueryExpression obj, boolean right)
-
shouldNestSetChild
protected boolean shouldNestSetChild(SetQuery parent, QueryExpression obj, boolean right)
-
visit
public void visit(With obj)
- Specified by:
visit
in interfaceLanguageObjectVisitor
- Overrides:
visit
in classAbstractLanguageVisitor
-
appendWithKeyword
protected void appendWithKeyword(With obj)
-
visit
public void visit(WithItem obj)
- Specified by:
visit
in interfaceLanguageObjectVisitor
- Overrides:
visit
in classAbstractLanguageVisitor
-
visit
public void visit(WindowFunction windowFunction)
- Specified by:
visit
in interfaceLanguageObjectVisitor
- Overrides:
visit
in classAbstractLanguageVisitor
-
visit
public void visit(WindowSpecification windowSpecification)
- Specified by:
visit
in interfaceLanguageObjectVisitor
- Overrides:
visit
in classAbstractLanguageVisitor
-
visit
public void visit(WindowFrame windowFrame)
- Specified by:
visit
in interfaceLanguageObjectVisitor
- Overrides:
visit
in classAbstractLanguageVisitor
-
visit
public void visit(Array array)
- Specified by:
visit
in interfaceLanguageObjectVisitor
- Overrides:
visit
in classAbstractLanguageVisitor
-
getSQLString
public static String getSQLString(LanguageObject obj)
Gets the SQL string representation for a given LanguageObject.- Parameters:
obj
- the root of the LanguageObject hierarchy that needs to be converted. This can be any subtree, and does not need to be a top-level command- Returns:
- the SQL representation of that LanguageObject hierarchy
-
useParensForJoins
protected boolean useParensForJoins()
-
useSelectLimit
protected boolean useSelectLimit()
-
parseNativeQueryParts
public static void parseNativeQueryParts(String nativeQuery, List<Argument> list, StringBuilder stringBuilder, SQLStringVisitor.Substitutor substitutor)
-
visit
public void visit(IsDistinct isDistinct)
- Specified by:
visit
in interfaceLanguageObjectVisitor
- Overrides:
visit
in classAbstractLanguageVisitor
-
-