drill-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From GitBox <...@apache.org>
Subject [GitHub] [drill] arina-ielchiieva commented on a change in pull request #1850: DRILL-7168: Implement ALTER SCHEMA ADD / REMOVE commands
Date Tue, 10 Sep 2019 11:13:23 GMT
arina-ielchiieva commented on a change in pull request #1850: DRILL-7168: Implement ALTER SCHEMA
ADD / REMOVE commands
URL: https://github.com/apache/drill/pull/1850#discussion_r322683341
 
 

 ##########
 File path: exec/java-exec/src/main/codegen/includes/parserImpls.ftl
 ##########
 @@ -534,6 +534,110 @@ SqlNode SqlDescribeSchema() :
    )
 }
 
+/**
+* Parses ALTER SCHEMA statements:
+*
+* ALTER SCHEMA
+* (FOR TABLE dfs.tmp.nation | PATH '/tmp/schema.json')
+* ADD [OR REPLACE]
+* [COLUMNS (col1 int, col2 varchar)]
+* [PROPERTIES ('prop1'='val1', 'prop2'='val2')]
+*
+* ALTER SCHEMA
+* (FOR TABLE dfs.tmp.nation | PATH '/tmp/schema.json')
+* REMOVE
+* [COLUMNS (`col1`, `col2`)]
+* [PROPERTIES ('prop1', 'prop2')]
+*/
+SqlNode SqlAlterSchema() :
+{
+   SqlParserPos pos;
+   SqlIdentifier table = null;
+   SqlNode path = null;
+}
+{
+   <ALTER> { pos = getPos(); }
+   <SCHEMA>
+    (
+        <FOR> <TABLE> { table = CompoundIdentifier(); }
+        |
+        <PATH> { path = StringLiteral(); }
+    )
+    (
+        <ADD> { return SqlAlterSchemaAdd(pos, table, path); }
+        |
+        <REMOVE> { return SqlAlterSchemaRemove(pos, table, path); }
+    )
+}
+
+SqlNode SqlAlterSchemaAdd(SqlParserPos pos, SqlIdentifier table, SqlNode path) :
+{
+   boolean replace = false;
+   SqlCharStringLiteral schema = null;
+   SqlNodeList properties = null;
+}
+{
+   [ <OR> <REPLACE> { replace = true; } ]
+   [ <COLUMNS> { schema = ParseSchema(); } ]
+   [
+       <PROPERTIES> <LPAREN>
+        {
+             properties = new SqlNodeList(getPos());
+             addProperty(properties);
+        }
+        (
+             <COMMA> { addProperty(properties); }
+        )*
+        <RPAREN>
+   ]
+   {
+        if (schema == null && properties == null) {
+             throw new ParseException("ALTER SCHEMA ADD command must have at least <COLUMNS>
or <PROPERTIES> keyword indicated.");
+        }
+        return new SqlSchema.Add(pos, table, path, SqlLiteral.createBoolean(replace, getPos()),
schema, properties);
+   }
+}
+
+SqlCharStringLiteral ParseSchema() :
 
 Review comment:
   No, all because of context switch, for create schema we use load and paren_string where
each returns some specific result and one of push returns to default context. For alter schema
add we use only paren_string and only this one can return to default context. The reason it
is factored out into separate method is to prevent lookahead. Since first we need context
switch and only then token search. With this method inline lookahead was happening before
context switch and token from different context was never found.

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services

Mime
View raw message