close
Skip to content

Commit f5ecba7

Browse files
authored
fix: support Oracle inline constraint states in CREATE TABLE (#2491)
1 parent 4c6a4fb commit f5ecba7

2 files changed

Lines changed: 50 additions & 1 deletion

File tree

‎src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt‎

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10913,6 +10913,25 @@ CreateIndex CreateIndex():
1091310913
}
1091410914
}
1091510915

10916+
List<String> ColumnDefinitionParameter(): {
10917+
Token tk = null;
10918+
List<String> parameter = new ArrayList<String>();
10919+
} {
10920+
(
10921+
parameter=CreateParameter()
10922+
|
10923+
(
10924+
tk=<K_DEFERRABLE>
10925+
| tk=<K_DISABLE>
10926+
| tk=<K_ENABLE>
10927+
| tk=<K_NOVALIDATE>
10928+
| tk=<K_VALIDATE>
10929+
)
10930+
{ parameter.add(tk.image); }
10931+
)
10932+
{ return parameter; }
10933+
}
10934+
1091610935
ColumnDefinition ColumnDefinition(): {
1091710936
ColumnDefinition coldef;
1091810937
String columnName;
@@ -10922,7 +10941,7 @@ ColumnDefinition ColumnDefinition(): {
1092210941
} {
1092310942
columnName=RelObjectName()
1092410943
colDataType=ColDataType()
10925-
( LOOKAHEAD(2) parameter=CreateParameter() { columnSpecs.addAll(parameter); } )*
10944+
( LOOKAHEAD(2) parameter=ColumnDefinitionParameter() { columnSpecs.addAll(parameter); } )*
1092610945
{
1092710946
coldef = new ColumnDefinition();
1092810947
coldef.setColumnName(columnName);

‎src/test/java/net/sf/jsqlparser/statement/create/CreateTableTest.java‎

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1191,6 +1191,36 @@ void testCreateTableColumnVisibility() throws JSQLParserException {
11911191
createTable.getColumnDefinitions().get(1).getColumnSpecs());
11921192
}
11931193

1194+
@Test
1195+
void testOracleInlineConstraintState() throws JSQLParserException {
1196+
String sqlStr =
1197+
"CREATE TABLE DIAM.IAM_DENEME1 ("
1198+
+ "ID VARCHAR2(36 BYTE) NOT NULL ENABLE,"
1199+
+ "REQUEST_ID VARCHAR2(50 BYTE),"
1200+
+ "CREATE_DATE TIMESTAMP(9),"
1201+
+ "USER_ID VARCHAR2(50 BYTE),"
1202+
+ "CODE VARCHAR2(100 BYTE) NOT NULL ENABLE,"
1203+
+ "IS_OUTSOURCE_ENABLED CHAR(1 BYTE) DEFAULT 1 NOT NULL ENABLE,"
1204+
+ "IS_PASSWORD_NUMERIC CHAR(1 BYTE) DEFAULT 0 NOT NULL ENABLE"
1205+
+ ")";
1206+
1207+
CreateTable createTable = (CreateTable) CCJSqlParserUtil.parse(sqlStr);
1208+
1209+
assertSqlCanBeParsedAndDeparsed(
1210+
"CREATE TABLE test ("
1211+
+ "a NUMBER NOT NULL ENABLE,"
1212+
+ "b NUMBER NOT NULL DISABLE,"
1213+
+ "c NUMBER NOT NULL ENABLE NOVALIDATE,"
1214+
+ "d NUMBER CONSTRAINT d_nn NOT NULL DEFERRABLE VALIDATE"
1215+
+ ")",
1216+
true);
1217+
1218+
assertEquals(Arrays.asList("NOT", "NULL", "ENABLE"),
1219+
createTable.getColumnDefinitions().get(0).getColumnSpecs());
1220+
assertEquals(Arrays.asList("DEFAULT", "1", "NOT", "NULL", "ENABLE"),
1221+
createTable.getColumnDefinitions().get(5).getColumnSpecs());
1222+
}
1223+
11941224
@Test
11951225
void testCreateTableIndexVisibilityWithOtherIndexOptions() throws JSQLParserException {
11961226
assertSqlCanBeParsedAndDeparsed(

0 commit comments

Comments
 (0)