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
1=== modified file 'src/main/java/com/akiban/sql/types/TypeId.java'
2--- src/main/java/com/akiban/sql/types/TypeId.java 2013-01-19 23:01:16 +0000
3+++ src/main/java/com/akiban/sql/types/TypeId.java 2013-04-25 20:26:25 +0000
4@@ -186,6 +186,13 @@
5 public static final String BLOB_NAME = "BLOB";
6 public static final String CLOB_NAME = "CLOB";
7 public static final String NCLOB_NAME = "NCLOB";
8+ public static final String TEXT_NAME = "TEXT";
9+ public static final String TINYBLOB_NAME = "TINYBLOB";
10+ public static final String TINYTEXT_NAME = "TINYTEXT";
11+ public static final String MEDIUMBLOB_NAME = "MEDIUMBLOB";
12+ public static final String MEDIUMTEXT_NAME = "MEDIUMTEXT";
13+ public static final String LONGBLOB_NAME = "LONGBLOB";
14+ public static final String LONGTEXT_NAME = "LONGTEXT";
15 public static final String INTERVAL_YEAR_NAME = "INTERVAL YEAR";
16 public static final String INTERVAL_MONTH_NAME = "INTERVAL MONTH";
17 public static final String INTERVAL_YEAR_MONTH_NAME = "INTERVAL YEAR TO MONTH";
18@@ -343,6 +350,14 @@
19 public static final TypeId DATETIME_ID = new TypeId(FormatIds.TIMESTAMP_TYPE_ID, DATETIME_NAME);
20 public static final TypeId YEAR_ID = new TypeId(FormatIds.SMALLINT_TYPE_ID, YEAR_NAME);
21
22+ public static final TypeId TEXT_ID = new TypeId(FormatIds.CLOB_TYPE_ID, TEXT_NAME);
23+ public static final TypeId TINYBLOB_ID = new TypeId(FormatIds.BLOB_TYPE_ID, TINYBLOB_NAME);
24+ public static final TypeId TINYTEXT_ID = new TypeId(FormatIds.CLOB_TYPE_ID, TINYTEXT_NAME);
25+ public static final TypeId MEDIUMBLOB_ID = new TypeId(FormatIds.BLOB_TYPE_ID, MEDIUMBLOB_NAME);
26+ public static final TypeId MEDIUMTEXT_ID = new TypeId(FormatIds.CLOB_TYPE_ID, MEDIUMTEXT_NAME);
27+ public static final TypeId LONGBLOB_ID = new TypeId(FormatIds.BLOB_TYPE_ID, LONGBLOB_NAME);
28+ public static final TypeId LONGTEXT_ID = new TypeId(FormatIds.CLOB_TYPE_ID, LONGTEXT_NAME);
29+
30 private static final TypeId[] ALL_BUILTIN_TYPE_IDS = {
31 BOOLEAN_ID,
32 SMALLINT_ID,
33@@ -391,6 +406,14 @@
34 NUMERIC_UNSIGNED_ID,
35 DATETIME_ID,
36 YEAR_ID,
37+
38+ TEXT_ID,
39+ TINYBLOB_ID,
40+ TINYTEXT_ID,
41+ MEDIUMBLOB_ID,
42+ MEDIUMTEXT_ID,
43+ LONGBLOB_ID,
44+ LONGTEXT_ID,
45 };
46
47 /*
48@@ -681,6 +704,27 @@
49 if (SQLTypeName.equals(CLOB_NAME)) {
50 return CLOB_ID;
51 }
52+ if (SQLTypeName.equals(TEXT_NAME)) {
53+ return TEXT_ID;
54+ }
55+ if (SQLTypeName.equals(TINYBLOB_NAME)) {
56+ return TINYBLOB_ID;
57+ }
58+ if (SQLTypeName.equals(TINYTEXT_NAME)) {
59+ return TINYTEXT_ID;
60+ }
61+ if (SQLTypeName.equals(MEDIUMBLOB_NAME)) {
62+ return MEDIUMBLOB_ID;
63+ }
64+ if (SQLTypeName.equals(MEDIUMTEXT_NAME)) {
65+ return MEDIUMTEXT_ID;
66+ }
67+ if (SQLTypeName.equals(LONGBLOB_NAME)) {
68+ return LONGBLOB_ID;
69+ }
70+ if (SQLTypeName.equals(LONGTEXT_NAME)) {
71+ return LONGTEXT_ID;
72+ }
73 if (SQLTypeName.equals(XML_NAME)) {
74 return XML_ID;
75 }
76
77=== modified file 'src/main/javacc/SQLGrammar.jj'
78--- src/main/javacc/SQLGrammar.jj 2013-04-13 22:25:50 +0000
79+++ src/main/javacc/SQLGrammar.jj 2013-04-25 20:26:25 +0000
80@@ -498,6 +498,7 @@
81 case VARCHAR:
82 case INTEGER:
83 case MEDIUMINT:
84+ case TINYINT:
85 case INT:
86 case SMALLINT:
87 case LONGINT:
88@@ -1051,6 +1052,7 @@
89 case DEC:
90 case INTEGER:
91 case MEDIUMINT:
92+ case TINYINT:
93 case INT:
94 case SMALLINT:
95 case LONGINT:
96@@ -1064,6 +1066,13 @@
97 case BLOB:
98 case CLOB:
99 case NCLOB:
100+ case TEXT:
101+ case MEDIUMBLOB:
102+ case MEDIUMTEXT:
103+ case TINYBLOB:
104+ case TINYTEXT:
105+ case LONGBLOB:
106+ case LONGTEXT:
107 case BINARY: // LARGE OBJECT
108 case XML:
109 case INTERVAL:
110@@ -2151,7 +2160,6 @@
111 | <INSERT: "insert">
112 | <INT: "int">
113 | <INTEGER: "integer">
114-| <MEDIUMINT: "mediumint">
115 | <INTERSECT: "intersect">
116 | <INTO: "into">
117 | <IS: "is">
118@@ -2378,7 +2386,6 @@
119 | <GROUPING: "grouping">
120 | <EXPLAIN: "explain">
121 | <LIMIT: "limit">
122-| <LONGINT: "bigint">
123 | <LONG: "long">
124 | <LTRIM: "ltrim">
125 | <NONE: "none">
126@@ -2450,6 +2457,12 @@
127 | <LCASE: "lcase">
128 | <LOCATE: "locate">
129 | <LOCK: "lock">
130+| <LONGBLOB: "longblob">
131+| <LONGINT: "bigint">
132+| <LONGTEXT: "longtext">
133+| <MEDIUMBLOB: "mediumblob">
134+| <MEDIUMINT: "mediumint">
135+| <MEDIUMTEXT: "mediumtext">
136 | <MESSAGE_LOCALE: "message_locale">
137 | <METHOD: "method">
138 | <MICROSECOND: "microsecond">
139@@ -2497,6 +2510,10 @@
140 | <STDOUT: "stdout">
141 | <STRIP: "strip">
142 | <STYLE: "style">
143+| <TEXT: "text">
144+| <TINYBLOB: "tinyblob">
145+| <TINYINT: "tinyint">
146+| <TINYTEXT: "tinytext">
147 | <TRIGGER: "trigger">
148 | <TRUNCATE_END: "truncate_end">
149 | <UCASE: "ucase">
150@@ -4103,6 +4120,7 @@
151 {
152 int length = 0x80000000-1; // default to 2GB-1 if no length specified
153 String type;
154+ CharacterTypeAttributes characterAttributes;
155 }
156 {
157 (
158@@ -4116,6 +4134,11 @@
159 type = TypeId.CLOB_NAME;
160 }
161 |
162+ <TEXT> [ length = lengthAndModifier() ]
163+ {
164+ type = TypeId.TEXT_NAME;
165+ }
166+|
167 <NCLOB> length = lengthAndModifier()
168 {
169 type = TypeId.NCLOB_NAME;
170@@ -4135,9 +4158,42 @@
171 {
172 type = TypeId.NCLOB_NAME;
173 }
174+|
175+ <TINYBLOB> [ length = lengthAndModifier() ]
176+ {
177+ type = TypeId.TINYBLOB_NAME;
178+ }
179+|
180+ <TINYTEXT> [ length = lengthAndModifier() ]
181+ {
182+ type = TypeId.TINYTEXT_NAME;
183+ }
184+|
185+ <MEDIUMBLOB> [ length = lengthAndModifier() ]
186+ {
187+ type = TypeId.MEDIUMBLOB_NAME;
188+ }
189+|
190+ <MEDIUMTEXT> [ length = lengthAndModifier() ]
191+ {
192+ type = TypeId.MEDIUMTEXT_NAME;
193+ }
194+|
195+ <LONGBLOB> [ length = lengthAndModifier() ]
196+ {
197+ type = TypeId.LONGBLOB_NAME;
198+ }
199+|
200+ <LONGTEXT> [ length = lengthAndModifier() ]
201+ {
202+ type = TypeId.LONGTEXT_NAME;
203+ }
204 )
205+ characterAttributes = characterTypeAttributes()
206 {
207 DataTypeDescriptor dtd = DataTypeDescriptor.getBuiltInDataTypeDescriptor(type, length);
208+ if (characterAttributes != null)
209+ dtd = new DataTypeDescriptor(dtd, characterAttributes);
210 return dtd;
211 }
212 }
213@@ -4150,8 +4206,6 @@
214 }
215 {
216 (
217- <MEDIUMINT> {typeDescriptor = DataTypeDescriptor.MEDIUMINT;}
218-|
219 typeDescriptor = exactNumericType()
220 |
221 typeDescriptor = approximateNumericType()
222@@ -4225,11 +4279,17 @@
223 {
224 return DataTypeDescriptor.getBuiltInDataTypeDescriptor(Types.INTEGER);
225 }
226+|
227 <MEDIUMINT>
228 {
229 return DataTypeDescriptor.MEDIUMINT;
230 }
231 |
232+ <TINYINT>
233+ {
234+ return DataTypeDescriptor.getBuiltInDataTypeDescriptor(Types.TINYINT);
235+ }
236+|
237 <SMALLINT>
238 {
239 return DataTypeDescriptor.getBuiltInDataTypeDescriptor(Types.SMALLINT);
240@@ -14634,7 +14694,6 @@
241 | tok = <INSERT>
242 | tok = <INT>
243 | tok = <INTEGER>
244-| tok = <MEDIUMINT>
245 | tok = <INTERSECT>
246 | tok = <INTERVAL>
247 | tok = <INTO>
248@@ -14746,7 +14805,6 @@
249 | tok = <CURRENT_SCHEMA>
250 | tok = <EXPLAIN>
251 | tok = <GROUPING>
252-| tok = <LONGINT>
253 | tok = <LTRIM>
254 | tok = <RTRIM>
255 | tok = <TRIM>
256@@ -14857,6 +14915,12 @@
257 | tok = <LOCKSIZE>
258 | tok = <LOGGED>
259 | tok = <LONG>
260+| tok = <LONGBLOB>
261+| tok = <LONGINT>
262+| tok = <LONGTEXT>
263+| tok = <MEDIUMBLOB>
264+| tok = <MEDIUMINT>
265+| tok = <MEDIUMTEXT>
266 | tok = <MESSAGE_LOCALE>
267 | tok = <METHOD>
268 | tok = <MICROSECOND>
269@@ -14950,11 +15014,15 @@
270 | tok = <SYNONYM>
271 | tok = <STYLE>
272 | tok = <T>
273+| tok = <TEXT>
274 | tok = <THEN>
275 | tok = <TIME>
276 | tok = <TIMESTAMP>
277 | tok = <TIMESTAMPADD>
278 | tok = <TIMESTAMPDIFF>
279+| tok = <TINYBLOB>
280+| tok = <TINYINT>
281+| tok = <TINYTEXT>
282 | tok = <TRIGGER>
283 | tok = <TRUNCATE>
284 | tok = <TRUNCATE_END>

Subscribers

People subscribed via source and target branches