class TdTablePartitioningLevel(BaseSegment): """Partitioning Level. https://docs.teradata.com/reader/eWpPpcMoLGQcZEoyt5AjEg/e0GX8Iw16u1SCwYvc5qXzg partition_expression or COLUMN [[NO] AUTO COMPRESS] [[ALL BUT] column_partition] [ADD constant] column_partition := ([COLUMN|ROW] column_name (, column_name2, ...) NO AUTOCOMPRESS partition_expression := CASE_N, RANGE_N, EXTRACT, expression and in case of multi-level in parenthesis """ type = "td_partitioning_level" match_grammar = OneOf( Sequence( Ref("FunctionNameSegment"), Bracketed(Anything(optional=True)), ), Bracketed( Delimited( Sequence( Ref("FunctionNameSegment"), Bracketed(Anything(optional=True)), ), delimiter=Ref("CommaSegment"), ), ), )
class FromPivotExpressionSegment(BaseSegment): """A PIVOT expression. https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax#pivot_operator """ type = "from_pivot_expression" match_grammar = Sequence("PIVOT", Bracketed(Anything())) parse_grammar = Sequence( "PIVOT", Bracketed( Delimited( Sequence( Ref("FunctionSegment"), Ref("AliasExpressionSegment", optional=True), ), ), "FOR", Ref("SingleIdentifierGrammar"), "IN", Bracketed( Delimited( Sequence( Ref("LiteralGrammar"), Ref("AliasExpressionSegment", optional=True), ), ) ), ), )
class FunctionDefinitionGrammar(BaseSegment): """This is the body of a `CREATE FUNCTION AS` statement.""" match_grammar = Sequence( AnyNumberOf( Sequence( "LANGUAGE", # Not really a parameter, but best fit for now. Ref("ParameterNameSegment"), Sequence( "OPTIONS", Bracketed( Delimited( Sequence( Ref("ParameterNameSegment"), Ref("EqualsSegment"), Anything(), ), delimiter=Ref("CommaSegment"), )), optional=True, ), ), # There is some syntax not implemented here, Sequence( "AS", OneOf( Ref("DoubleQuotedLiteralSegment"), Ref("QuotedLiteralSegment"), Bracketed( OneOf(Ref("ExpressionSegment"), Ref("SelectStatementSegment"))), ), ), ))
class CreateFunctionStatementSegment(BaseSegment): """A `CREATE FUNCTION` statement. This version in the TSQL dialect should be a "common subset" of the structure of the code for those dialects. Updated to include AS after declaration of RETURNS. Might be integrated in ANSI though. postgres: https://www.postgresql.org/docs/9.1/sql-createfunction.html snowflake: https://docs.snowflake.com/en/sql-reference/sql/create-function.html bigquery: https://cloud.google.com/bigquery/docs/reference/standard-sql/user-defined-functions tsql/mssql : https://docs.microsoft.com/en-us/sql/t-sql/statements/create-function-transact-sql?view=sql-server-ver15 """ type = "create_function_statement" match_grammar = Sequence( "CREATE", Sequence("OR", "ALTER", optional=True), "FUNCTION", Anything(), ) parse_grammar = Sequence( "CREATE", Sequence("OR", "ALTER", optional=True), "FUNCTION", Ref("ObjectReferenceSegment"), Ref("FunctionParameterListGrammar"), Sequence( # Optional function return type "RETURNS", Ref("DatatypeSegment"), optional=True, ), Ref("FunctionDefinitionGrammar"), )
class ScriptContentSegment(BaseSegment): """This represents the script content. Because the script content could be written in LUA, PYTHON, JAVA or R there is no further verification. """ type = "script_content" match_grammar = Anything()
class FunctionDefinitionGrammar(BaseSegment): """This is the body of a `CREATE FUNCTION AS` statement. Adjusted from ansi as Transact SQL does not seem to have the QuotedLiteralSegmentand Language. Futhermore the body can contain almost anything like a function with table output. """ type = "function_statement" name = "function_statement" match_grammar = Sequence("AS", Sequence(Anything()))
class ColumnDefinitionSegment(BaseSegment): """A column definition, e.g. for CREATE TABLE or ALTER TABLE.""" type = "column_definition" match_grammar = Sequence( Ref("ColumnReferenceSegment"), # Column name Ref("DatatypeSegment"), # Column type Bracketed(Anything(), optional=True), # For types like VARCHAR(100) AnyNumberOf( Ref("ColumnOptionSegment", optional=True), # Adding Teradata specific column definitions Ref("TdColumnOptionSegment", optional=True), ), )
class FromBeforeExpressionSegment(BaseSegment): """A BEFORE expression.""" type = "from_before_expression" match_grammar = Sequence("BEFORE", Bracketed(Anything())) parse_grammar = Sequence( "BEFORE", Bracketed( OneOf("TIMESTAMP", "OFFSET", "STATEMENT"), Ref("ParameterAssignerSegment"), Ref("ExpressionSegment"), ), )
class FromPivotExpressionSegment(BaseSegment): """A PIVOT expression.""" type = "from_pivot_expression" match_grammar = Sequence("PIVOT", Bracketed(Anything())) parse_grammar = Sequence( "PIVOT", Bracketed( Ref("FunctionSegment"), "FOR", Ref("SingleIdentifierGrammar"), "IN", Bracketed(Delimited(Ref("LiteralGrammar"), delimiter=Ref("CommaSegment"))), ), )
class CreateRoleStatementSegment(BaseSegment): """A `CREATE ROLE` statement. As per: https://www.postgresql.org/docs/current/sql-createrole.html """ type = "create_role_statement" match_grammar = ansi_dialect.get_segment( "CreateRoleStatementSegment").match_grammar.copy( insert=[ Sequence( Ref.keyword("WITH", optional=True), # Very permissive for now. Anything can go here. Anything(), ) ], )
class WithinGroupClauseSegment(BaseSegment): """An WITHIN GROUP clause for window functions. https://www.postgresql.org/docs/current/functions-aggregate.html. """ type = "withingroup_clause" match_grammar = Sequence( "WITHIN", "GROUP", Bracketed(Anything(optional=True)), ) parse_grammar = Sequence( "WITHIN", "GROUP", Bracketed(Ref("OrderByClauseSegment", optional=True)), )
class SelectClauseModifierSegment(BaseSegment): """Things that come after SELECT but before the columns.""" type = "select_clause_modifier" match_grammar = OneOf( Sequence("DISTINCT", Sequence("ON", Bracketed(Anything()), optional=True)), "ALL", ) parse_grammar = OneOf( Sequence( "DISTINCT", Sequence( "ON", Bracketed( Delimited(Ref("ExpressionSegment"), delimiter=Ref("CommaSegment"))), optional=True, ), ), "ALL", )
class CreateModelStatementSegment(BaseSegment): """A `CREATE MODEL` statement. https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_MODEL.html NB: order of keywords matter """ type = "create_model_statement" match_grammar = Sequence( "CREATE", "MODEL", Ref("ObjectReferenceSegment"), Sequence( "FROM", OneOf( Ref("QuotedLiteralSegment"), Bracketed(Ref("SelectableGrammar")), Ref("ObjectReferenceSegment"), ), optional=True, ), Sequence( "TARGET", Ref("ColumnReferenceSegment"), optional=True, ), Sequence( "FUNCTION", Ref("ObjectReferenceSegment"), Bracketed( Delimited(Ref("DatatypeSegment")), optional=True, ), ), Sequence( "RETURNS", Ref("DatatypeSegment"), optional=True, ), Sequence( "SAGEMAKER", Ref("QuotedLiteralSegment"), optional=True, ), Sequence( "IAM_ROLE", OneOf( "DEFAULT", Ref("QuotedLiteralSegment"), ), ), Sequence( "AUTO", OneOf( "ON", "OFF", ), optional=True, ), Sequence( "MODEL_TYPE", OneOf( "XGBOOST", "MLP", "KMEANS", ), optional=True, ), Sequence( "PROBLEM_TYPE", OneOf( "REGRESSION", "BINARY_CLASSIFICATION", "MULTICLASS_CLASSIFICATION", ), optional=True, ), Sequence( "OBJECTIVE", Ref("QuotedLiteralSegment"), optional=True, ), Sequence( "PREPROCESSORS", Ref("QuotedLiteralSegment"), optional=True, ), Sequence( "HYPERPARAMETERS", "DEFAULT", Sequence( "EXCEPT", Bracketed(Delimited(Anything(), ), ), optional=True, ), optional=True, ), Sequence( "SETTINGS", Bracketed( Sequence( "S3_BUCKET", Ref("QuotedLiteralSegment"), Sequence( "KMS_KEY_ID", Ref("QuotedLiteralSegment"), optional=True, ), Sequence( "S3_GARBAGE_COLLECT", OneOf( "ON", "OFF", ), optional=True, ), Sequence( "MAX_CELLS", Ref("NumericLiteralSegment"), optional=True, ), Sequence( "MAX_RUNTIME", Ref("NumericLiteralSegment"), optional=True, ), ), ), optional=True, ), )
class BasicSegment(BaseSegment): """A basic segment for testing parse and expand.""" type = "basic" match_grammar = Anything() parse_grammar = BarKeyword