Merge lp:~mmcm/akiban-sql-parser/more-types into lp:~akiban-technologies/akiban-sql-parser/trunk

Proposed by Mike McMahon
Status: Merged
Approved by: Nathan Williams
Approved revision: 299
Merged at revision: 297
Proposed branch: lp:~mmcm/akiban-sql-parser/more-types
Merge into: lp:~akiban-technologies/akiban-sql-parser/trunk
Diff against target: 284 lines (+118/-6)
2 files modified
src/main/java/com/akiban/sql/types/TypeId.java (+44/-0)
src/main/javacc/SQLGrammar.jj (+74/-6)
To merge this branch: bzr merge lp:~mmcm/akiban-sql-parser/more-types
Reviewer Review Type Date Requested Status
Nathan Williams Approve
Review via email: mp+161005@code.launchpad.net

Description of the change

Handle more data types that the server already has (mostly for MySQL compatibility).

This one of a trio of branches: the others are for the server and the dumper. The overall goal is to always dump something that can be parsed (didn't used to be true) and come reasonably close to dumping something that reflects what's in the AIS. (The exceptional cases are noted in another branch.)

Just parse the {TINY,MEDIUM,LONG}{INT,BLOB,TEXT} that MySQL has.
Parse TEXT that many databases have like CLOB.

None of these need to be reserved words (some of them were before this branch), so there isn't any real harm here, it's just trading off a parse error in the declaration.

To post a comment you must log in.
Revision history for this message
Nathan Williams (nwilliams) wrote :

Simple enough.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'src/main/java/com/akiban/sql/types/TypeId.java'
--- src/main/java/com/akiban/sql/types/TypeId.java 2013-01-19 23:01:16 +0000
+++ src/main/java/com/akiban/sql/types/TypeId.java 2013-04-25 20:26:25 +0000
@@ -186,6 +186,13 @@
186 public static final String BLOB_NAME = "BLOB";186 public static final String BLOB_NAME = "BLOB";
187 public static final String CLOB_NAME = "CLOB";187 public static final String CLOB_NAME = "CLOB";
188 public static final String NCLOB_NAME = "NCLOB";188 public static final String NCLOB_NAME = "NCLOB";
189 public static final String TEXT_NAME = "TEXT";
190 public static final String TINYBLOB_NAME = "TINYBLOB";
191 public static final String TINYTEXT_NAME = "TINYTEXT";
192 public static final String MEDIUMBLOB_NAME = "MEDIUMBLOB";
193 public static final String MEDIUMTEXT_NAME = "MEDIUMTEXT";
194 public static final String LONGBLOB_NAME = "LONGBLOB";
195 public static final String LONGTEXT_NAME = "LONGTEXT";
189 public static final String INTERVAL_YEAR_NAME = "INTERVAL YEAR";196 public static final String INTERVAL_YEAR_NAME = "INTERVAL YEAR";
190 public static final String INTERVAL_MONTH_NAME = "INTERVAL MONTH";197 public static final String INTERVAL_MONTH_NAME = "INTERVAL MONTH";
191 public static final String INTERVAL_YEAR_MONTH_NAME = "INTERVAL YEAR TO MONTH";198 public static final String INTERVAL_YEAR_MONTH_NAME = "INTERVAL YEAR TO MONTH";
@@ -343,6 +350,14 @@
343 public static final TypeId DATETIME_ID = new TypeId(FormatIds.TIMESTAMP_TYPE_ID, DATETIME_NAME);350 public static final TypeId DATETIME_ID = new TypeId(FormatIds.TIMESTAMP_TYPE_ID, DATETIME_NAME);
344 public static final TypeId YEAR_ID = new TypeId(FormatIds.SMALLINT_TYPE_ID, YEAR_NAME);351 public static final TypeId YEAR_ID = new TypeId(FormatIds.SMALLINT_TYPE_ID, YEAR_NAME);
345352
353 public static final TypeId TEXT_ID = new TypeId(FormatIds.CLOB_TYPE_ID, TEXT_NAME);
354 public static final TypeId TINYBLOB_ID = new TypeId(FormatIds.BLOB_TYPE_ID, TINYBLOB_NAME);
355 public static final TypeId TINYTEXT_ID = new TypeId(FormatIds.CLOB_TYPE_ID, TINYTEXT_NAME);
356 public static final TypeId MEDIUMBLOB_ID = new TypeId(FormatIds.BLOB_TYPE_ID, MEDIUMBLOB_NAME);
357 public static final TypeId MEDIUMTEXT_ID = new TypeId(FormatIds.CLOB_TYPE_ID, MEDIUMTEXT_NAME);
358 public static final TypeId LONGBLOB_ID = new TypeId(FormatIds.BLOB_TYPE_ID, LONGBLOB_NAME);
359 public static final TypeId LONGTEXT_ID = new TypeId(FormatIds.CLOB_TYPE_ID, LONGTEXT_NAME);
360
346 private static final TypeId[] ALL_BUILTIN_TYPE_IDS = {361 private static final TypeId[] ALL_BUILTIN_TYPE_IDS = {
347 BOOLEAN_ID,362 BOOLEAN_ID,
348 SMALLINT_ID,363 SMALLINT_ID,
@@ -391,6 +406,14 @@
391 NUMERIC_UNSIGNED_ID,406 NUMERIC_UNSIGNED_ID,
392 DATETIME_ID,407 DATETIME_ID,
393 YEAR_ID,408 YEAR_ID,
409
410 TEXT_ID,
411 TINYBLOB_ID,
412 TINYTEXT_ID,
413 MEDIUMBLOB_ID,
414 MEDIUMTEXT_ID,
415 LONGBLOB_ID,
416 LONGTEXT_ID,
394 };417 };
395418
396 /*419 /*
@@ -681,6 +704,27 @@
681 if (SQLTypeName.equals(CLOB_NAME)) {704 if (SQLTypeName.equals(CLOB_NAME)) {
682 return CLOB_ID;705 return CLOB_ID;
683 }706 }
707 if (SQLTypeName.equals(TEXT_NAME)) {
708 return TEXT_ID;
709 }
710 if (SQLTypeName.equals(TINYBLOB_NAME)) {
711 return TINYBLOB_ID;
712 }
713 if (SQLTypeName.equals(TINYTEXT_NAME)) {
714 return TINYTEXT_ID;
715 }
716 if (SQLTypeName.equals(MEDIUMBLOB_NAME)) {
717 return MEDIUMBLOB_ID;
718 }
719 if (SQLTypeName.equals(MEDIUMTEXT_NAME)) {
720 return MEDIUMTEXT_ID;
721 }
722 if (SQLTypeName.equals(LONGBLOB_NAME)) {
723 return LONGBLOB_ID;
724 }
725 if (SQLTypeName.equals(LONGTEXT_NAME)) {
726 return LONGTEXT_ID;
727 }
684 if (SQLTypeName.equals(XML_NAME)) {728 if (SQLTypeName.equals(XML_NAME)) {
685 return XML_ID;729 return XML_ID;
686 }730 }
687731
=== modified file 'src/main/javacc/SQLGrammar.jj'
--- src/main/javacc/SQLGrammar.jj 2013-04-13 22:25:50 +0000
+++ src/main/javacc/SQLGrammar.jj 2013-04-25 20:26:25 +0000
@@ -498,6 +498,7 @@
498 case VARCHAR:498 case VARCHAR:
499 case INTEGER:499 case INTEGER:
500 case MEDIUMINT:500 case MEDIUMINT:
501 case TINYINT:
501 case INT:502 case INT:
502 case SMALLINT:503 case SMALLINT:
503 case LONGINT:504 case LONGINT:
@@ -1051,6 +1052,7 @@
1051 case DEC:1052 case DEC:
1052 case INTEGER:1053 case INTEGER:
1053 case MEDIUMINT:1054 case MEDIUMINT:
1055 case TINYINT:
1054 case INT:1056 case INT:
1055 case SMALLINT:1057 case SMALLINT:
1056 case LONGINT:1058 case LONGINT:
@@ -1064,6 +1066,13 @@
1064 case BLOB:1066 case BLOB:
1065 case CLOB:1067 case CLOB:
1066 case NCLOB:1068 case NCLOB:
1069 case TEXT:
1070 case MEDIUMBLOB:
1071 case MEDIUMTEXT:
1072 case TINYBLOB:
1073 case TINYTEXT:
1074 case LONGBLOB:
1075 case LONGTEXT:
1067 case BINARY: // LARGE OBJECT1076 case BINARY: // LARGE OBJECT
1068 case XML:1077 case XML:
1069 case INTERVAL:1078 case INTERVAL:
@@ -2151,7 +2160,6 @@
2151| <INSERT: "insert">2160| <INSERT: "insert">
2152| <INT: "int">2161| <INT: "int">
2153| <INTEGER: "integer">2162| <INTEGER: "integer">
2154| <MEDIUMINT: "mediumint">
2155| <INTERSECT: "intersect">2163| <INTERSECT: "intersect">
2156| <INTO: "into">2164| <INTO: "into">
2157| <IS: "is">2165| <IS: "is">
@@ -2378,7 +2386,6 @@
2378| <GROUPING: "grouping">2386| <GROUPING: "grouping">
2379| <EXPLAIN: "explain">2387| <EXPLAIN: "explain">
2380| <LIMIT: "limit">2388| <LIMIT: "limit">
2381| <LONGINT: "bigint">
2382| <LONG: "long">2389| <LONG: "long">
2383| <LTRIM: "ltrim">2390| <LTRIM: "ltrim">
2384| <NONE: "none">2391| <NONE: "none">
@@ -2450,6 +2457,12 @@
2450| <LCASE: "lcase">2457| <LCASE: "lcase">
2451| <LOCATE: "locate">2458| <LOCATE: "locate">
2452| <LOCK: "lock">2459| <LOCK: "lock">
2460| <LONGBLOB: "longblob">
2461| <LONGINT: "bigint">
2462| <LONGTEXT: "longtext">
2463| <MEDIUMBLOB: "mediumblob">
2464| <MEDIUMINT: "mediumint">
2465| <MEDIUMTEXT: "mediumtext">
2453| <MESSAGE_LOCALE: "message_locale">2466| <MESSAGE_LOCALE: "message_locale">
2454| <METHOD: "method">2467| <METHOD: "method">
2455| <MICROSECOND: "microsecond">2468| <MICROSECOND: "microsecond">
@@ -2497,6 +2510,10 @@
2497| <STDOUT: "stdout">2510| <STDOUT: "stdout">
2498| <STRIP: "strip">2511| <STRIP: "strip">
2499| <STYLE: "style">2512| <STYLE: "style">
2513| <TEXT: "text">
2514| <TINYBLOB: "tinyblob">
2515| <TINYINT: "tinyint">
2516| <TINYTEXT: "tinytext">
2500| <TRIGGER: "trigger">2517| <TRIGGER: "trigger">
2501| <TRUNCATE_END: "truncate_end">2518| <TRUNCATE_END: "truncate_end">
2502| <UCASE: "ucase">2519| <UCASE: "ucase">
@@ -4103,6 +4120,7 @@
4103{4120{
4104 int length = 0x80000000-1; // default to 2GB-1 if no length specified4121 int length = 0x80000000-1; // default to 2GB-1 if no length specified
4105 String type;4122 String type;
4123 CharacterTypeAttributes characterAttributes;
4106}4124}
4107{4125{
4108(4126(
@@ -4116,6 +4134,11 @@
4116 type = TypeId.CLOB_NAME;4134 type = TypeId.CLOB_NAME;
4117 }4135 }
4118|4136|
4137 <TEXT> [ length = lengthAndModifier() ]
4138 {
4139 type = TypeId.TEXT_NAME;
4140 }
4141|
4119 <NCLOB> length = lengthAndModifier()4142 <NCLOB> length = lengthAndModifier()
4120 {4143 {
4121 type = TypeId.NCLOB_NAME;4144 type = TypeId.NCLOB_NAME;
@@ -4135,9 +4158,42 @@
4135 {4158 {
4136 type = TypeId.NCLOB_NAME;4159 type = TypeId.NCLOB_NAME;
4137 }4160 }
4161|
4162 <TINYBLOB> [ length = lengthAndModifier() ]
4163 {
4164 type = TypeId.TINYBLOB_NAME;
4165 }
4166|
4167 <TINYTEXT> [ length = lengthAndModifier() ]
4168 {
4169 type = TypeId.TINYTEXT_NAME;
4170 }
4171|
4172 <MEDIUMBLOB> [ length = lengthAndModifier() ]
4173 {
4174 type = TypeId.MEDIUMBLOB_NAME;
4175 }
4176|
4177 <MEDIUMTEXT> [ length = lengthAndModifier() ]
4178 {
4179 type = TypeId.MEDIUMTEXT_NAME;
4180 }
4181|
4182 <LONGBLOB> [ length = lengthAndModifier() ]
4183 {
4184 type = TypeId.LONGBLOB_NAME;
4185 }
4186|
4187 <LONGTEXT> [ length = lengthAndModifier() ]
4188 {
4189 type = TypeId.LONGTEXT_NAME;
4190 }
4138)4191)
4192 characterAttributes = characterTypeAttributes()
4139 {4193 {
4140 DataTypeDescriptor dtd = DataTypeDescriptor.getBuiltInDataTypeDescriptor(type, length);4194 DataTypeDescriptor dtd = DataTypeDescriptor.getBuiltInDataTypeDescriptor(type, length);
4195 if (characterAttributes != null)
4196 dtd = new DataTypeDescriptor(dtd, characterAttributes);
4141 return dtd;4197 return dtd;
4142 }4198 }
4143}4199}
@@ -4150,8 +4206,6 @@
4150}4206}
4151{4207{
4152(4208(
4153 <MEDIUMINT> {typeDescriptor = DataTypeDescriptor.MEDIUMINT;}
4154|
4155 typeDescriptor = exactNumericType()4209 typeDescriptor = exactNumericType()
4156|4210|
4157 typeDescriptor = approximateNumericType()4211 typeDescriptor = approximateNumericType()
@@ -4225,11 +4279,17 @@
4225 {4279 {
4226 return DataTypeDescriptor.getBuiltInDataTypeDescriptor(Types.INTEGER);4280 return DataTypeDescriptor.getBuiltInDataTypeDescriptor(Types.INTEGER);
4227 }4281 }
4282|
4228 <MEDIUMINT>4283 <MEDIUMINT>
4229 {4284 {
4230 return DataTypeDescriptor.MEDIUMINT;4285 return DataTypeDescriptor.MEDIUMINT;
4231 }4286 }
4232|4287|
4288 <TINYINT>
4289 {
4290 return DataTypeDescriptor.getBuiltInDataTypeDescriptor(Types.TINYINT);
4291 }
4292|
4233 <SMALLINT>4293 <SMALLINT>
4234 {4294 {
4235 return DataTypeDescriptor.getBuiltInDataTypeDescriptor(Types.SMALLINT);4295 return DataTypeDescriptor.getBuiltInDataTypeDescriptor(Types.SMALLINT);
@@ -14634,7 +14694,6 @@
14634| tok = <INSERT>14694| tok = <INSERT>
14635| tok = <INT>14695| tok = <INT>
14636| tok = <INTEGER>14696| tok = <INTEGER>
14637| tok = <MEDIUMINT>
14638| tok = <INTERSECT>14697| tok = <INTERSECT>
14639| tok = <INTERVAL>14698| tok = <INTERVAL>
14640| tok = <INTO>14699| tok = <INTO>
@@ -14746,7 +14805,6 @@
14746| tok = <CURRENT_SCHEMA>14805| tok = <CURRENT_SCHEMA>
14747| tok = <EXPLAIN>14806| tok = <EXPLAIN>
14748| tok = <GROUPING>14807| tok = <GROUPING>
14749| tok = <LONGINT>
14750| tok = <LTRIM>14808| tok = <LTRIM>
14751| tok = <RTRIM>14809| tok = <RTRIM>
14752| tok = <TRIM>14810| tok = <TRIM>
@@ -14857,6 +14915,12 @@
14857| tok = <LOCKSIZE>14915| tok = <LOCKSIZE>
14858| tok = <LOGGED>14916| tok = <LOGGED>
14859| tok = <LONG>14917| tok = <LONG>
14918| tok = <LONGBLOB>
14919| tok = <LONGINT>
14920| tok = <LONGTEXT>
14921| tok = <MEDIUMBLOB>
14922| tok = <MEDIUMINT>
14923| tok = <MEDIUMTEXT>
14860| tok = <MESSAGE_LOCALE>14924| tok = <MESSAGE_LOCALE>
14861| tok = <METHOD>14925| tok = <METHOD>
14862| tok = <MICROSECOND>14926| tok = <MICROSECOND>
@@ -14950,11 +15014,15 @@
14950| tok = <SYNONYM>15014| tok = <SYNONYM>
14951| tok = <STYLE>15015| tok = <STYLE>
14952| tok = <T>15016| tok = <T>
15017| tok = <TEXT>
14953| tok = <THEN>15018| tok = <THEN>
14954| tok = <TIME>15019| tok = <TIME>
14955| tok = <TIMESTAMP>15020| tok = <TIMESTAMP>
14956| tok = <TIMESTAMPADD>15021| tok = <TIMESTAMPADD>
14957| tok = <TIMESTAMPDIFF>15022| tok = <TIMESTAMPDIFF>
15023| tok = <TINYBLOB>
15024| tok = <TINYINT>
15025| tok = <TINYTEXT>
14958| tok = <TRIGGER>15026| tok = <TRIGGER>
14959| tok = <TRUNCATE>15027| tok = <TRUNCATE>
14960| tok = <TRUNCATE_END>15028| tok = <TRUNCATE_END>

Subscribers

People subscribed via source and target branches