@@ -39,6 +39,7 @@ import net.sf.jsqlparser.statement.*;
3939import net.sf.jsqlparser.statement.alter.*;
4040import net.sf.jsqlparser.statement.comment.*;
4141import net.sf.jsqlparser.statement.create.index.*;
42+ import net.sf.jsqlparser.statement.create.schema.*;
4243import net.sf.jsqlparser.statement.create.table.*;
4344import net.sf.jsqlparser.statement.create.view.*;
4445import net.sf.jsqlparser.statement.delete.*;
@@ -124,6 +125,7 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */
124125| <K_APPLY:"APPLY">
125126| <K_AS: "AS">
126127| <K_ASC:"ASC">
128+ | <K_AUTHORIZATION:"AUTHORIZATION">
127129| <K_BEGIN:"BEGIN">
128130| <K_BETWEEN:"BETWEEN">
129131| <K_BINARY: "BINARY">
@@ -152,6 +154,7 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */
152154| <K_DECLARE: "DECLARE">
153155| <K_DATETIMELITERAL : ("DATE" | "TIME" | "TIMESTAMP") >
154156| <K_DATE_LITERAL : ( "YEAR" | "MONTH" | "DAY" | "HOUR" | "MINUTE" | "SECOND" ) >
157+ | <K_DEFAULT : "DEFAULT">
155158| <K_DEFERRABLE : "DEFERRABLE">
156159| <K_DELAYED : "DELAYED">
157160| <K_DELETE:"DELETE">
@@ -266,6 +269,7 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */
266269| <K_RIGHT:"RIGHT">
267270| <K_ROW: "ROW">
268271| <K_ROWS: "ROWS">
272+ | <K_SCHEMA: "SCHEMA">
269273| <K_SELECT: ("SELECT" | "SEL")>
270274| <K_SEMI : "SEMI">
271275| <K_SEPARATOR:"SEPARATOR">
@@ -430,6 +434,9 @@ Statement SingleStatement() :
430434 LOOKAHEAD(CreateIndex())
431435 stm = CreateIndex()
432436 |
437+ LOOKAHEAD(CreateSchema())
438+ stm = CreateSchema()
439+ |
433440 LOOKAHEAD(CreateTable())
434441 stm = CreateTable()
435442 |
@@ -1136,7 +1143,7 @@ String RelObjectNameWithoutValue() :
11361143 | tk=<K_TEMP> | tk=<K_TEMPORARY> | tk=<K_TYPE> | tk=<K_ISNULL>
11371144 | tk=<K_ZONE> | tk=<K_COLUMNS> | tk=<K_DESCRIBE> | tk=<K_FN> | tk=<K_PATH>
11381145 | tk=<K_DATE_LITERAL> | tk=<K_NEXTVAL> | tk=<K_TRUE> | tk=<K_FALSE> | tk=<K_DUPLICATE>
1139- | tk=<K_READ> | tk=<K_SIZE> | tk=<K_SESSION>
1146+ | tk=<K_READ> | tk=<K_SCHEMA> | tk=< K_SIZE> | tk=<K_SESSION>
11401147 | tk=<K_VIEW> | <K_NOLOCK>
11411148/* | tk=<K_PLACING> | tk=<K_BOTH> | tk=<K_LEADING> | tk=<K_TRAILING> */
11421149 )
@@ -3689,6 +3696,60 @@ ColumnDefinition ColumnDefinition(): {
36893696 }
36903697}
36913698
3699+ CreateSchema CreateSchema():
3700+ {
3701+ Token tk = null;
3702+ CreateTable table = null;
3703+ CreateView view = null;
3704+ CreateSchema schema = new CreateSchema();
3705+ //schema.setSchemaName(System.getProperty("user.name"));
3706+ //schema.setAuthorization(System.getProperty("user.name"));
3707+ List<String> schemaPath = null;
3708+ List<Statement> statements = new ArrayList<Statement>();
3709+ }
3710+ {
3711+ <K_CREATE> <K_SCHEMA>
3712+ [ ( tk=<S_IDENTIFIER> | tk=<S_QUOTED_IDENTIFIER>) { schema.setSchemaName(tk.image); } ]
3713+ [ <K_AUTHORIZATION>
3714+ (tk=<S_IDENTIFIER> | tk=<S_QUOTED_IDENTIFIER>) { schema.setAuthorization(tk.image); }
3715+ ]
3716+
3717+ /* [ <K_DEFAULT> <K_CHARACTER> <K_SET> tk=<S_QUOTED_IDENTIFIER> | <S_IDENTIFIER> {} ] */
3718+
3719+ [schemaPath=PathSpecification() { schema.setSchemaPath(schemaPath); }]
3720+
3721+ (
3722+ LOOKAHEAD(3)
3723+ table = CreateTable()
3724+ {
3725+ table.getTable().setSchemaName(schema.getSchemaName());
3726+ schema.addStatement(table);
3727+ }
3728+ | view = CreateView()
3729+ {
3730+ view.getView().setSchemaName(schema.getSchemaName());
3731+ schema.addStatement(view);
3732+ }
3733+
3734+ )*
3735+ {
3736+ return schema;
3737+ }
3738+ }
3739+
3740+ List<String> PathSpecification():
3741+ {
3742+ Token tk;
3743+ List<String> pathList = new ArrayList<String>();
3744+ }
3745+ {
3746+ <K_PATH> (tk=<S_IDENTIFIER>|tk=<S_QUOTED_IDENTIFIER>) { pathList.add(tk.image); }
3747+ ("," (tk=<S_IDENTIFIER>|tk=<S_QUOTED_IDENTIFIER>) { pathList.add(tk.image); })*
3748+ {
3749+ return pathList;
3750+ }
3751+ }
3752+
36923753CreateTable CreateTable():
36933754{
36943755 CreateTable createTable = new CreateTable();
@@ -3982,6 +4043,8 @@ List<String> CreateParameter():
39824043 |
39834044 tk=<K_PRIMARY> { param.add(tk.image); }
39844045 |
4046+ tk=<K_DEFAULT> { param.add(tk.image); }
4047+ |
39854048 tk=<K_FOREIGN> { param.add(tk.image); }
39864049 |
39874050 tk=<K_REFERENCES> { param.add(tk.image); }
@@ -4126,6 +4189,8 @@ Drop Drop():
41264189 tk=<K_INDEX>
41274190 |
41284191 tk=<K_VIEW>
4192+ |
4193+ tk=<K_SCHEMA>
41294194 )
41304195 { drop.setType(tk.image); }
41314196
0 commit comments