Package org.teiid.language.visitor
Class SQLStringVisitor
- java.lang.Object
-
- org.teiid.language.visitor.AbstractLanguageVisitor
-
- org.teiid.language.visitor.SQLStringVisitor
-
- All Implemented Interfaces:
LanguageObjectVisitor
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 interfaceSQLStringVisitor.Substitutor
-
Field Summary
Fields Modifier and Type Field Description protected StringBuilderbufferprotected booleanshortNameOnlystatic StringTEIID_NATIVE_QUERYprotected static StringUNDEFINEDprotected static StringUNDEFINED_PARAM
-
Constructor Summary
Constructors Constructor Description SQLStringVisitor()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected voidappend(List<? extends LanguageObject> items)Simple utility to append a list of language objects to the current buffer by creating a comma-separated list.voidappend(LanguageObject obj)Appends the string form of the LanguageObject to the current buffer.protected voidappend(LanguageObject[] items)Simple utility to append an array of language objects to the current buffer by creating a comma-separated list.protected voidappendBaseName(NamedTable obj)protected voidappendCallStart(Call call)protected voidappendLateralKeyword()protected voidappendLiteral(Literal obj, Class<?> type)protected voidappendNestedCondition(AndOr parent, Condition condition)protected voidappendQuantifier(SubqueryComparison obj)protected voidappendRightComparison(Comparison obj)protected voidappendSetOperation(SetQuery.Operation operation)protected voidappendSetQuery(SetQuery parent, QueryExpression obj, boolean right)protected voidappendWithKeyword(With obj)protected StringescapeString(String str, String quote)Creates a SQL-safe string.protected StringgetInsertKeyword()protected StringgetLikeRegexString()protected StringgetName(AbstractMetadataRecord object)Gets the name of a group or element from the RuntimeMetadatastatic StringgetRecordName(AbstractMetadataRecord object)Get the name in source or the name if the name in source is not set.static StringgetShortName(String elementName)protected StringgetSourceComment(Command command)static StringgetSQLString(LanguageObject obj)Gets the SQL string representation for a given LanguageObject.protected StringgetUpsertKeyword()protected booleanisInfixFunction(String function)static voidparseNativeQueryParts(String nativeQuery, List<Argument> list, StringBuilder stringBuilder, SQLStringVisitor.Substitutor substitutor)protected StringreplaceElementName(String group, String element)Take the specified derived group and element short names and determine a replacement element name to use instead.protected booleanshouldNestSetChild(SetQuery parent, QueryExpression obj, boolean right)StringtoString()protected booleanuseAsInGroupAlias()Indicates whether group alias should be of the form "...FROM groupA AS X" or "...FROM groupA X".protected booleanuseParensForJoins()protected booleanuseParensForLHSJoins()If a nested left hand join should have parensprotected booleanuseParensForSetQueries()protected booleanuseSelectLimit()voidvisit(AggregateFunction obj)voidvisit(AndOr obj)voidvisit(Argument obj)voidvisit(Array array)voidvisit(Call obj)voidvisit(ColumnReference obj)voidvisit(Comparison obj)voidvisit(Delete obj)voidvisit(DerivedColumn obj)voidvisit(DerivedTable obj)voidvisit(Exists obj)voidvisit(ExpressionValueSource obj)voidvisit(Function obj)voidvisit(GroupBy obj)voidvisit(In obj)voidvisit(Insert obj)voidvisit(IsDistinct isDistinct)voidvisit(IsNull obj)voidvisit(Join obj)voidvisit(Like obj)voidvisit(Limit obj)voidvisit(Literal obj)voidvisit(NamedProcedureCall obj)voidvisit(NamedTable obj)voidvisit(Not obj)voidvisit(OrderBy obj)voidvisit(Parameter obj)voidvisit(ScalarSubquery obj)voidvisit(SearchedCase obj)voidvisit(SearchedWhenClause obj)voidvisit(Select obj)voidvisit(SetClause clause)voidvisit(SetQuery obj)voidvisit(SortSpecification obj)voidvisit(SubqueryComparison obj)voidvisit(SubqueryIn obj)voidvisit(Update obj)voidvisit(WindowFrame windowFrame)voidvisit(WindowFunction windowFunction)voidvisit(WindowSpecification windowSpecification)voidvisit(With obj)voidvisit(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:
visitin interfaceLanguageObjectVisitor- Overrides:
visitin classAbstractLanguageVisitor
-
visit
public void visit(Comparison obj)
- Specified by:
visitin interfaceLanguageObjectVisitor- Overrides:
visitin classAbstractLanguageVisitor
-
appendRightComparison
protected void appendRightComparison(Comparison obj)
-
visit
public void visit(AndOr obj)
- Specified by:
visitin interfaceLanguageObjectVisitor- Overrides:
visitin classAbstractLanguageVisitor
-
visit
public void visit(Delete obj)
- Specified by:
visitin interfaceLanguageObjectVisitor- Overrides:
visitin 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:
visitin interfaceLanguageObjectVisitor- Overrides:
visitin classAbstractLanguageVisitor
-
getShortName
public static String getShortName(String elementName)
- Parameters:
elementName-- Returns:
- Since:
- 4.3
-
visit
public void visit(Call obj)
- Specified by:
visitin interfaceLanguageObjectVisitor- Overrides:
visitin classAbstractLanguageVisitor
-
appendCallStart
protected void appendCallStart(Call call)
-
visit
public void visit(Exists obj)
- Specified by:
visitin interfaceLanguageObjectVisitor- Overrides:
visitin classAbstractLanguageVisitor
-
isInfixFunction
protected boolean isInfixFunction(String function)
-
visit
public void visit(Function obj)
- Specified by:
visitin interfaceLanguageObjectVisitor- Overrides:
visitin classAbstractLanguageVisitor
-
visit
public void visit(NamedTable obj)
- Specified by:
visitin interfaceLanguageObjectVisitor- Overrides:
visitin 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:
visitin interfaceLanguageObjectVisitor- Overrides:
visitin classAbstractLanguageVisitor
-
visit
public void visit(In obj)
- Specified by:
visitin interfaceLanguageObjectVisitor- Overrides:
visitin classAbstractLanguageVisitor
-
visit
public void visit(DerivedTable obj)
- Specified by:
visitin interfaceLanguageObjectVisitor- Overrides:
visitin classAbstractLanguageVisitor
-
appendLateralKeyword
protected void appendLateralKeyword()
-
visit
public void visit(NamedProcedureCall obj)
- Specified by:
visitin interfaceLanguageObjectVisitor- Overrides:
visitin classAbstractLanguageVisitor
-
visit
public void visit(Insert obj)
- Specified by:
visitin interfaceLanguageObjectVisitor- Overrides:
visitin classAbstractLanguageVisitor
-
getInsertKeyword
protected String getInsertKeyword()
-
getUpsertKeyword
protected String getUpsertKeyword()
-
visit
public void visit(ExpressionValueSource obj)
- Specified by:
visitin interfaceLanguageObjectVisitor- Overrides:
visitin classAbstractLanguageVisitor
-
visit
public void visit(Parameter obj)
- Specified by:
visitin interfaceLanguageObjectVisitor- Overrides:
visitin classAbstractLanguageVisitor
-
visit
public void visit(IsNull obj)
- Specified by:
visitin interfaceLanguageObjectVisitor- Overrides:
visitin classAbstractLanguageVisitor
-
visit
public void visit(Join obj)
- Specified by:
visitin interfaceLanguageObjectVisitor- Overrides:
visitin classAbstractLanguageVisitor
-
useParensForLHSJoins
protected boolean useParensForLHSJoins()
If a nested left hand join should have parens- Returns:
-
visit
public void visit(Like obj)
- Specified by:
visitin interfaceLanguageObjectVisitor- Overrides:
visitin classAbstractLanguageVisitor
-
getLikeRegexString
protected String getLikeRegexString()
-
visit
public void visit(Limit obj)
- Specified by:
visitin interfaceLanguageObjectVisitor- Overrides:
visitin classAbstractLanguageVisitor
-
visit
public void visit(Literal obj)
- Specified by:
visitin interfaceLanguageObjectVisitor- Overrides:
visitin classAbstractLanguageVisitor
-
visit
public void visit(Not obj)
- Specified by:
visitin interfaceLanguageObjectVisitor- Overrides:
visitin classAbstractLanguageVisitor
-
visit
public void visit(OrderBy obj)
- Specified by:
visitin interfaceLanguageObjectVisitor- Overrides:
visitin classAbstractLanguageVisitor
-
visit
public void visit(SortSpecification obj)
- Specified by:
visitin interfaceLanguageObjectVisitor- Overrides:
visitin classAbstractLanguageVisitor
-
visit
public void visit(Argument obj)
- Specified by:
visitin interfaceLanguageObjectVisitor- Overrides:
visitin classAbstractLanguageVisitor
-
visit
public void visit(Select obj)
- Specified by:
visitin interfaceLanguageObjectVisitor- Overrides:
visitin classAbstractLanguageVisitor
-
visit
public void visit(SearchedCase obj)
- Specified by:
visitin interfaceLanguageObjectVisitor- Overrides:
visitin classAbstractLanguageVisitor
-
visit
public void visit(SearchedWhenClause obj)
- Specified by:
visitin interfaceLanguageObjectVisitor- Overrides:
visitin classAbstractLanguageVisitor
-
visit
public void visit(ScalarSubquery obj)
- Specified by:
visitin interfaceLanguageObjectVisitor- Overrides:
visitin classAbstractLanguageVisitor
-
visit
public void visit(DerivedColumn obj)
- Specified by:
visitin interfaceLanguageObjectVisitor- Overrides:
visitin classAbstractLanguageVisitor
-
visit
public void visit(SubqueryComparison obj)
- Specified by:
visitin interfaceLanguageObjectVisitor- Overrides:
visitin classAbstractLanguageVisitor
-
appendQuantifier
protected void appendQuantifier(SubqueryComparison obj)
-
visit
public void visit(SubqueryIn obj)
- Specified by:
visitin interfaceLanguageObjectVisitor- Overrides:
visitin classAbstractLanguageVisitor
-
visit
public void visit(Update obj)
- Specified by:
visitin interfaceLanguageObjectVisitor- Overrides:
visitin classAbstractLanguageVisitor
-
visit
public void visit(SetClause clause)
- Specified by:
visitin interfaceLanguageObjectVisitor- Overrides:
visitin classAbstractLanguageVisitor
-
visit
public void visit(SetQuery obj)
- Specified by:
visitin interfaceLanguageObjectVisitor- Overrides:
visitin 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:
visitin interfaceLanguageObjectVisitor- Overrides:
visitin classAbstractLanguageVisitor
-
appendWithKeyword
protected void appendWithKeyword(With obj)
-
visit
public void visit(WithItem obj)
- Specified by:
visitin interfaceLanguageObjectVisitor- Overrides:
visitin classAbstractLanguageVisitor
-
visit
public void visit(WindowFunction windowFunction)
- Specified by:
visitin interfaceLanguageObjectVisitor- Overrides:
visitin classAbstractLanguageVisitor
-
visit
public void visit(WindowSpecification windowSpecification)
- Specified by:
visitin interfaceLanguageObjectVisitor- Overrides:
visitin classAbstractLanguageVisitor
-
visit
public void visit(WindowFrame windowFrame)
- Specified by:
visitin interfaceLanguageObjectVisitor- Overrides:
visitin classAbstractLanguageVisitor
-
visit
public void visit(Array array)
- Specified by:
visitin interfaceLanguageObjectVisitor- Overrides:
visitin 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:
visitin interfaceLanguageObjectVisitor- Overrides:
visitin classAbstractLanguageVisitor
-
-