Merge lp:~mmcm/akiban-sql-parser/create-or-replace-alias into lp:~akiban-technologies/akiban-sql-parser/trunk

Proposed by Mike McMahon
Status: Merged
Approved by: Nathan Williams
Approved revision: 294
Merged at revision: 294
Proposed branch: lp:~mmcm/akiban-sql-parser/create-or-replace-alias
Merge into: lp:~akiban-technologies/akiban-sql-parser/trunk
Diff against target: 344 lines (+68/-22)
11 files modified
src/main/java/com/akiban/sql/parser/CreateAliasNode.java (+13/-4)
src/main/java/com/akiban/sql/parser/NodeFactory.java (+2/-0)
src/main/java/com/akiban/sql/unparser/NodeToString.java (+2/-0)
src/main/javacc/SQLGrammar.jj (+38/-18)
src/test/resources/com/akiban/sql/parser/create-procedure-1.expected (+1/-0)
src/test/resources/com/akiban/sql/parser/create-procedure-2.expected (+1/-0)
src/test/resources/com/akiban/sql/parser/create-procedure-3.expected (+1/-0)
src/test/resources/com/akiban/sql/parser/create-procedure-3a.expected (+7/-0)
src/test/resources/com/akiban/sql/parser/create-procedure-3a.sql (+1/-0)
src/test/resources/com/akiban/sql/unparser/create-procedure-2a.expected (+1/-0)
src/test/resources/com/akiban/sql/unparser/create-procedure-2a.sql (+1/-0)
To merge this branch: bzr merge lp:~mmcm/akiban-sql-parser/create-or-replace-alias
Reviewer Review Type Date Requested Status
Nathan Williams Approve
Review via email: mp+158250@code.launchpad.net

Description of the change

Add OR REPLACE to CREATE ROUTINE/FUNCTION.

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

As described.

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/parser/CreateAliasNode.java'
2--- src/main/java/com/akiban/sql/parser/CreateAliasNode.java 2012-11-07 17:49:31 +0000
3+++ src/main/java/com/akiban/sql/parser/CreateAliasNode.java 2013-04-11 00:26:21 +0000
4@@ -77,6 +77,7 @@
5
6 private String javaClassName;
7 private String methodName;
8+ private boolean createOrReplace;
9 private AliasInfo.Type aliasType;
10 private AliasInfo aliasInfo;
11 private String definition;
12@@ -95,10 +96,12 @@
13 Object targetObject,
14 Object methodName,
15 Object aliasSpecificInfo,
16- Object aliasType)
17+ Object aliasType,
18+ Object createOrReplace)
19 throws StandardException {
20 TableName qn = (TableName)aliasName;
21 this.aliasType = (AliasInfo.Type)aliasType;
22+ this.createOrReplace = (Boolean)createOrReplace;
23
24 initAndCheck(qn);
25
26@@ -122,9 +125,10 @@
27 // 4 - String external name (also passed directly to create alias node - ignore
28 // 5 - ParameterStyle parameter style
29 // 6 - SQLAllowed - SQL control
30- // 7 - Boolean - whether the routine is DETERMINISTIC
31- // 8 - Boolean - CALLED ON NULL INPUT (always TRUE for procedures)
32- // 9 - DataTypeDescriptor - return type (always NULL for procedures)
33+ // 7 - Boolean - CALLED ON NULL INPUT (always TRUE for procedures)
34+ // 8 - DataTypeDescriptor - return type (always NULL for procedures)
35+ // 9 - Boolean - definers rights
36+ // 10 - String - inline definition
37
38 Object[] routineElements = (Object[])aliasSpecificInfo;
39 Object[] parameters = (Object[])routineElements[PARAMETER_ARRAY];
40@@ -231,6 +235,10 @@
41 return javaClassName + "." + methodName;
42 }
43
44+ public boolean isCreateOrReplace() {
45+ return createOrReplace;
46+ }
47+
48 public AliasInfo.Type getAliasType() {
49 return aliasType;
50 }
51@@ -253,6 +261,7 @@
52 public String toString() {
53 return "aliasType: " + aliasType + "\n" +
54 "aliasInfo: " + aliasInfo + "\n" +
55+ "createOrReplace: " + createOrReplace + "\n" +
56 ((definition != null) ?
57 ("definition: " + definition + "\n") :
58 ("javaClassName: " + javaClassName + "\n" +
59
60=== modified file 'src/main/java/com/akiban/sql/parser/NodeFactory.java'
61--- src/main/java/com/akiban/sql/parser/NodeFactory.java 2012-11-07 17:49:31 +0000
62+++ src/main/java/com/akiban/sql/parser/NodeFactory.java 2013-04-11 00:26:21 +0000
63@@ -607,6 +607,7 @@
64 Object targetName,
65 Object aliasSpecificInfo,
66 AliasInfo.Type aliasType,
67+ Boolean createOrReplace,
68 SQLParserContext pc)
69 throws StandardException {
70 int nodeType = NodeTypes.CREATE_ALIAS_NODE;
71@@ -639,6 +640,7 @@
72 methodName,
73 aliasSpecificInfo,
74 aliasType,
75+ createOrReplace,
76 pc);
77 }
78
79
80=== modified file 'src/main/java/com/akiban/sql/unparser/NodeToString.java'
81--- src/main/java/com/akiban/sql/unparser/NodeToString.java 2013-02-01 22:10:31 +0000
82+++ src/main/java/com/akiban/sql/unparser/NodeToString.java 2013-04-11 00:26:21 +0000
83@@ -385,6 +385,8 @@
84
85 protected String createAliasNode(CreateAliasNode node) throws StandardException {
86 StringBuilder str = new StringBuilder(node.statementToString());
87+ if (node.isCreateOrReplace())
88+ str.insert(6, " OR REPLACE");
89 str.append(' ');
90 str.append(toString(node.getObjectName()));
91 switch (node.getAliasType()) {
92
93=== modified file 'src/main/javacc/SQLGrammar.jj'
94--- src/main/javacc/SQLGrammar.jj 2013-02-25 00:17:53 +0000
95+++ src/main/javacc/SQLGrammar.jj 2013-04-11 00:26:21 +0000
96@@ -1414,7 +1414,8 @@
97 * @exception StandardException Thrown on error
98 */
99 StatementNode getCreateAliasNode(Object aliasName, String fullStaticMethodName,
100- Object aliasSpecificInfo, AliasInfo.Type aliasType)
101+ Object aliasSpecificInfo, AliasInfo.Type aliasType,
102+ Boolean createOrReplace)
103 throws StandardException {
104
105 StatementNode aliasNode = (StatementNode)
106@@ -1422,6 +1423,7 @@
107 fullStaticMethodName,
108 aliasSpecificInfo,
109 aliasType,
110+ createOrReplace,
111 parserContext);
112
113 return aliasNode;
114@@ -2473,6 +2475,7 @@
115 | <REF: "ref">
116 | <REFERENCING: "referencing">
117 | <RENAME: "rename">
118+| <REPLACE: "replace">
119 | <RESET: "reset">
120 | <RESULT: "result">
121 | <RETAIN: "retain">
122@@ -3063,9 +3066,17 @@
123 {
124 StatementNode statementNode;
125 Token beginToken;
126+ Boolean createOrReplace = Boolean.FALSE;
127 }
128 {
129 beginToken = <CREATE>
130+ [ LOOKAHEAD ( { getToken(1).kind == OR &&
131+ getToken(2).kind == REPLACE &&
132+ ( getToken(3).kind == SYNONYM ||
133+ getToken(3).kind == PROCEDURE ||
134+ getToken(3).kind == FUNCTION ||
135+ getToken(3).kind == TYPE ) })
136+ <OR> <REPLACE> { createOrReplace = Boolean.TRUE; } ]
137 (
138 statementNode = schemaDefinition()
139 |
140@@ -3073,7 +3084,7 @@
141 |
142 statementNode = triggerDefinition()
143 |
144- statementNode = synonymDefinition()
145+ statementNode = synonymDefinition(createOrReplace)
146 |
147 statementNode = roleDefinition()
148 |
149@@ -3081,11 +3092,11 @@
150 |
151 statementNode = tableDefinition()
152 |
153- statementNode = procedureDefinition()
154+ statementNode = procedureDefinition(createOrReplace)
155 |
156- statementNode = functionDefinition()
157+ statementNode = functionDefinition(createOrReplace)
158 |
159- statementNode = udtDefinition()
160+ statementNode = udtDefinition(createOrReplace)
161 |
162 statementNode = indexDefinition()
163 )
164@@ -10361,16 +10372,18 @@
165 0 - Object[] 3 element array for parameters
166 1 - TableName - specific name
167 2 - Integer - dynamic result set count
168- 3 - String language (always java) - ignore
169- 4 - String external name (also passed directly to create alias node - ignore
170- 5 - Short parameter style (always java) - ignore
171+ 3 - String language
172+ 4 - String external name
173+ 5 - Short parameter style
174 6 - Short - SQL allowed.
175 7 - Boolean - CALLED ON NULL INPUT (always TRUE for procedures)
176 8 - DataTypeDescriptor - return type (always NULL for procedures)
177+ 9 - Boolean - definers rights
178+ 10 - String - inline definition
179 */
180
181 StatementNode
182-procedureDefinition() throws StandardException :
183+procedureDefinition(Boolean createOrReplace) throws StandardException :
184 {
185 TableName procedureName;
186 Object[] procedureElements = new Object[CreateAliasNode.ROUTINE_ELEMENT_COUNT];
187@@ -10385,7 +10398,8 @@
188 return getCreateAliasNode(procedureName,
189 (String)procedureElements[CreateAliasNode.EXTERNAL_NAME],
190 procedureElements,
191- AliasInfo.Type.PROCEDURE);
192+ AliasInfo.Type.PROCEDURE,
193+ createOrReplace);
194 }
195 }
196
197@@ -10639,16 +10653,18 @@
198 0 - Object[] 3 element array for parameters
199 1 - TableName - specific name
200 2 - Integer - dynamic result set count - always 0
201- 3 - String language (always java) - required to be set
202- 4 - String external name (also passed directly to create alias node - ignore
203- 5 - Short parameter style (always java) - required to be set
204+ 3 - String language
205+ 4 - String external name
206+ 5 - Short parameter style
207 6 - Short - SQL allowed.
208 7 - Boolean - CALLED ON NULL INPUT
209 8 - DataTypeDescriptor - return type
210+ 9 - Boolean - definers rights
211+ 10 - String - inline definition
212 */
213
214 StatementNode
215-functionDefinition() throws StandardException :
216+functionDefinition(Boolean createOrReplace) throws StandardException :
217 {
218 TableName functionName;
219 DataTypeDescriptor returnType;
220@@ -10666,7 +10682,8 @@
221 return getCreateAliasNode(functionName,
222 (String)functionElements[CreateAliasNode.EXTERNAL_NAME],
223 functionElements,
224- AliasInfo.Type.FUNCTION);
225+ AliasInfo.Type.FUNCTION,
226+ createOrReplace);
227 }
228 }
229
230@@ -10768,7 +10785,7 @@
231 */
232
233 StatementNode
234-udtDefinition() throws StandardException :
235+udtDefinition(Boolean createOrReplace) throws StandardException :
236 {
237 TableName udtName;
238 String externalName;
239@@ -10781,7 +10798,8 @@
240 return getCreateAliasNode(udtName,
241 externalName,
242 null,
243- AliasInfo.Type.UDT);
244+ AliasInfo.Type.UDT,
245+ createOrReplace);
246 }
247 }
248
249@@ -10909,7 +10927,7 @@
250 }
251
252 StatementNode
253-synonymDefinition() throws StandardException :
254+synonymDefinition(Boolean createOrReplace) throws StandardException :
255 {
256 TableName synonymName;
257 TableName targetName;
258@@ -10922,6 +10940,7 @@
259 targetName,
260 null,
261 AliasInfo.Type.SYNONYM,
262+ createOrReplace,
263 parserContext);
264 }
265 }
266@@ -14880,6 +14899,7 @@
267 | tok = <RELEASE>
268 | tok = <RENAME>
269 | tok = <REPEATABLE>
270+| tok = <REPLACE>
271 | tok = <REFERENCING>
272 | tok = <RESET>
273 | tok = <RESTART>
274
275=== modified file 'src/test/resources/com/akiban/sql/parser/create-procedure-1.expected'
276--- src/test/resources/com/akiban/sql/parser/create-procedure-1.expected 2012-10-16 22:34:31 +0000
277+++ src/test/resources/com/akiban/sql/parser/create-procedure-1.expected 2013-04-11 00:26:21 +0000
278@@ -1,6 +1,7 @@
279 com.akiban.sql.parser.CreateAliasNode@77925ae
280 aliasType: PROCEDURE
281 aliasInfo: (IN x INTEGER, OUT y DOUBLE) LANGUAGE java PARAMETER STYLE java
282+createOrReplace: false
283 javaClassName: com.akiban.ProcTest
284 methodName: fooBar
285 name: test.foo_bar
286
287=== modified file 'src/test/resources/com/akiban/sql/parser/create-procedure-2.expected'
288--- src/test/resources/com/akiban/sql/parser/create-procedure-2.expected 2012-10-16 22:34:31 +0000
289+++ src/test/resources/com/akiban/sql/parser/create-procedure-2.expected 2013-04-11 00:26:21 +0000
290@@ -1,6 +1,7 @@
291 com.akiban.sql.parser.CreateAliasNode@114beb40
292 aliasType: PROCEDURE
293 aliasInfo: () LANGUAGE java PARAMETER STYLE akiban_loadable_plan
294+createOrReplace: false
295 javaClassName: com.akiban
296 methodName: PlanTest
297 name: test.foo_baz
298
299=== modified file 'src/test/resources/com/akiban/sql/parser/create-procedure-3.expected'
300--- src/test/resources/com/akiban/sql/parser/create-procedure-3.expected 2012-10-18 15:40:30 +0000
301+++ src/test/resources/com/akiban/sql/parser/create-procedure-3.expected 2013-04-11 00:26:21 +0000
302@@ -1,6 +1,7 @@
303 com.akiban.sql.parser.CreateAliasNode@258b678c
304 aliasType: PROCEDURE
305 aliasInfo: (IN x INTEGER, OUT y DOUBLE) LANGUAGE SQL PARAMETER STYLE row
306+createOrReplace: false
307 definition: SELECT $1 * 3.0
308 name: test.foo_too
309 statementType: CREATE PROCEDURE
310\ No newline at end of file
311
312=== added file 'src/test/resources/com/akiban/sql/parser/create-procedure-3a.expected'
313--- src/test/resources/com/akiban/sql/parser/create-procedure-3a.expected 1970-01-01 00:00:00 +0000
314+++ src/test/resources/com/akiban/sql/parser/create-procedure-3a.expected 2013-04-11 00:26:21 +0000
315@@ -0,0 +1,7 @@
316+com.akiban.sql.parser.CreateAliasNode@258b678c
317+aliasType: PROCEDURE
318+aliasInfo: (IN x INTEGER, OUT y DOUBLE) LANGUAGE SQL PARAMETER STYLE row
319+createOrReplace: true
320+definition: SELECT $1 * 3.0
321+name: test.foo_too
322+statementType: CREATE PROCEDURE
323\ No newline at end of file
324
325=== added file 'src/test/resources/com/akiban/sql/parser/create-procedure-3a.sql'
326--- src/test/resources/com/akiban/sql/parser/create-procedure-3a.sql 1970-01-01 00:00:00 +0000
327+++ src/test/resources/com/akiban/sql/parser/create-procedure-3a.sql 2013-04-11 00:26:21 +0000
328@@ -0,0 +1,1 @@
329+CREATE OR REPLACE PROCEDURE test.foo_too(IN x INT, OUT y DOUBLE) LANGUAGE SQL PARAMETER STYLE ROW AS 'SELECT $1 * 3.0'
330\ No newline at end of file
331
332=== added file 'src/test/resources/com/akiban/sql/unparser/create-procedure-2a.expected'
333--- src/test/resources/com/akiban/sql/unparser/create-procedure-2a.expected 1970-01-01 00:00:00 +0000
334+++ src/test/resources/com/akiban/sql/unparser/create-procedure-2a.expected 2013-04-11 00:26:21 +0000
335@@ -0,0 +1,1 @@
336+CREATE OR REPLACE PROCEDURE test.foo_too(IN x INTEGER, OUT y DOUBLE) LANGUAGE javascript PARAMETER STYLE variables NO SQL AS 'y = x;'
337\ No newline at end of file
338
339=== added file 'src/test/resources/com/akiban/sql/unparser/create-procedure-2a.sql'
340--- src/test/resources/com/akiban/sql/unparser/create-procedure-2a.sql 1970-01-01 00:00:00 +0000
341+++ src/test/resources/com/akiban/sql/unparser/create-procedure-2a.sql 2013-04-11 00:26:21 +0000
342@@ -0,0 +1,1 @@
343+CREATE OR REPLACE PROCEDURE test.foo_too(IN x INT, OUT y DOUBLE) LANGUAGE JAVASCRIPT PARAMETER STYLE VARIABLES AS 'y = x;' NO SQL
344\ No newline at end of file

Subscribers

People subscribed via source and target branches