Merge lp:~oontvoo/akiban-sql-parser/alter-rename-column into lp:~akiban-technologies/akiban-sql-parser/trunk

Proposed by Vy Nguyen
Status: Superseded
Proposed branch: lp:~oontvoo/akiban-sql-parser/alter-rename-column
Merge into: lp:~akiban-technologies/akiban-sql-parser/trunk
Diff against target: 335 lines (+178/-16)
16 files modified
src/main/java/com/akiban/sql/parser/AlterTableRenameColumnNode.java (+47/-0)
src/main/java/com/akiban/sql/parser/NodeFactoryImpl.java (+3/-0)
src/main/java/com/akiban/sql/parser/NodeNames.java (+2/-0)
src/main/java/com/akiban/sql/parser/NodeTypes.java (+2/-1)
src/main/java/com/akiban/sql/parser/TableElementNode.java (+1/-1)
src/main/javacc/SQLGrammar.jj (+39/-12)
src/test/resources/com/akiban/sql/parser/alter-rename-column-1.expected (+20/-0)
src/test/resources/com/akiban/sql/parser/alter-rename-column-1.sql (+1/-0)
src/test/resources/com/akiban/sql/parser/alter-rename-column-2.expected (+20/-0)
src/test/resources/com/akiban/sql/parser/alter-rename-column-2.sql (+1/-0)
src/test/resources/com/akiban/sql/parser/alter-rename-table-1.expected (+20/-0)
src/test/resources/com/akiban/sql/parser/alter-rename-table-1.sql (+1/-0)
src/test/resources/com/akiban/sql/parser/rename-column-1.expected (+20/-0)
src/test/resources/com/akiban/sql/parser/rename-column-1.sql (+1/-0)
src/test/resources/com/akiban/sql/unparser/rename-column-1.expected (+0/-1)
src/test/resources/com/akiban/sql/unparser/rename-column-1.sql (+0/-1)
To merge this branch: bzr merge lp:~oontvoo/akiban-sql-parser/alter-rename-column
Reviewer Review Type Date Requested Status
Akiban Technologies Pending
Review via email: mp+146573@code.launchpad.net

This proposal has been superseded by a proposal from 2013-02-05.

Description of the change

Support ALTER-TABLE-RENAME-COLUMN statements and allow option <TABLE> token after ALTER-TABLE-RENAME

Oracle's syntax looks intuitive, so we'll follow that.

Syntax:
ALTERT TABLE <table_name>
       RENAME COLUMN <column_name> [AS | TO] <new_column_name>

To post a comment you must log in.
291. By Vy Nguyen

- transform RENAME-COLUMN to ALTER-TABLE-RENAME-COLUMN
- add tests
- remove NodeToStringTest for RENAME-COLUMN because it is now an ALTER-TABLE node, and none of the existing ALTER-TABLE nodes has a nice NodeToString rep!

292. By Vy Nguyen

more test

293. By Vy Nguyen

Unmerged revisions

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== added file 'src/main/java/com/akiban/sql/parser/AlterTableRenameColumnNode.java'
2--- src/main/java/com/akiban/sql/parser/AlterTableRenameColumnNode.java 1970-01-01 00:00:00 +0000
3+++ src/main/java/com/akiban/sql/parser/AlterTableRenameColumnNode.java 2013-02-05 07:47:21 +0000
4@@ -0,0 +1,47 @@
5+/**
6+ * Copyright © 2012 Akiban Technologies, Inc. All rights
7+ * reserved.
8+ *
9+ * This program and the accompanying materials are made available
10+ * under the terms of the Eclipse Public License v1.0 which
11+ * accompanies this distribution, and is available at
12+ * http://www.eclipse.org/legal/epl-v10.html
13+ *
14+ * This program may also be available under different license terms.
15+ * For more information, see www.akiban.com or contact
16+ * licensing@akiban.com.
17+ *
18+ * Contributors:
19+ * Akiban Technologies, Inc.
20+ */
21+
22+package com.akiban.sql.parser;
23+
24+import com.akiban.sql.StandardException;
25+
26+public class AlterTableRenameColumnNode extends TableElementNode
27+{
28+ private String oldName; // old column name
29+ private String newName; // new column name
30+
31+ @Override
32+ public void init(Object oldN, Object newN)
33+ {
34+ oldName = (String) oldN;
35+ newName = (String) newN;
36+ super.init(oldName, ElementType.AT_RENAME_COLUMN);
37+ }
38+
39+ @Override
40+ public void copyFrom(QueryTreeNode node) throws StandardException
41+ {
42+ super.copyFrom(node);
43+ oldName = ((AlterTableRenameColumnNode)node).oldName;
44+ newName = ((AlterTableRenameColumnNode)node).newName;
45+ }
46+
47+ public String newName()
48+ {
49+ return newName;
50+ }
51+}
52
53=== modified file 'src/main/java/com/akiban/sql/parser/NodeFactoryImpl.java'
54--- src/main/java/com/akiban/sql/parser/NodeFactoryImpl.java 2012-12-25 20:59:36 +0000
55+++ src/main/java/com/akiban/sql/parser/NodeFactoryImpl.java 2013-02-05 07:47:21 +0000
56@@ -629,6 +629,9 @@
57
58 case NodeTypes.AT_RENAME_NODE:
59 return NodeNames.AT_RENAME_NODE_NAME;
60+
61+ case NodeTypes.AT_RENAME_COLUMN_NODE:
62+ return NodeNames.AT_RENAME_COLUMN_NODE_NAME;
63
64 case NodeTypes.DECLARE_STATEMENT_NODE:
65 return NodeNames.DECLARE_STATEMENT_NODE_NAME;
66
67=== modified file 'src/main/java/com/akiban/sql/parser/NodeNames.java'
68--- src/main/java/com/akiban/sql/parser/NodeNames.java 2012-12-25 20:59:36 +0000
69+++ src/main/java/com/akiban/sql/parser/NodeNames.java 2013-02-05 07:47:21 +0000
70@@ -76,6 +76,8 @@
71
72 static final String AT_RENAME_NODE_NAME = "com.akiban.sql.parser.AlterTableRenameNode";
73
74+ static final String AT_RENAME_COLUMN_NODE_NAME = "com.akiban.sql.parser.AlterTableRenameColumnNode";
75+
76 static final String AND_NODE_NAME = "com.akiban.sql.parser.AndNode";
77
78 static final String BASE_COLUMN_NODE_NAME = "com.akiban.sql.parser.BaseColumnNode";
79
80=== modified file 'src/main/java/com/akiban/sql/parser/NodeTypes.java'
81--- src/main/java/com/akiban/sql/parser/NodeTypes.java 2012-12-25 20:59:36 +0000
82+++ src/main/java/com/akiban/sql/parser/NodeTypes.java 2013-02-05 07:47:21 +0000
83@@ -217,7 +217,8 @@
84 public static final int ROW_CTOR_NODE = 166;
85 public static final int GROUP_CONCAT_NODE = 167;
86 public static final int AT_RENAME_NODE = 168;
87- // 169 - 182 available
88+ public static final int AT_RENAME_COLUMN_NODE = 169;
89+ // 170 - 182 available
90 public static final int ALTER_SERVER_NODE = 183;
91 public static final int TIMESTAMP_ADD_FN_NODE = 184;
92 public static final int TIMESTAMP_DIFF_FN_NODE = 185;
93
94=== modified file 'src/main/java/com/akiban/sql/parser/TableElementNode.java'
95--- src/main/java/com/akiban/sql/parser/TableElementNode.java 2012-11-07 17:49:31 +0000
96+++ src/main/java/com/akiban/sql/parser/TableElementNode.java 2013-02-05 07:47:21 +0000
97@@ -55,7 +55,7 @@
98 AT_UNKNOWN, AT_ADD_FOREIGN_KEY_CONSTRAINT, AT_ADD_PRIMARY_KEY_CONSTRAINT,
99 AT_ADD_UNIQUE_CONSTRAINT, AT_ADD_CHECK_CONSTRAINT, AT_DROP_CONSTRAINT,
100 AT_MODIFY_COLUMN, AT_DROP_COLUMN, AT_DROP_INDEX, AT_ADD_INDEX,
101- AT_RENAME
102+ AT_RENAME, AT_RENAME_COLUMN
103 }
104
105 String name;
106
107=== modified file 'src/main/javacc/SQLGrammar.jj'
108--- src/main/javacc/SQLGrammar.jj 2013-01-20 00:54:24 +0000
109+++ src/main/javacc/SQLGrammar.jj 2013-02-05 07:47:21 +0000
110@@ -11897,20 +11897,31 @@
111 {
112 String newColumnName;
113 ColumnReference oldColumnReference;
114+ TableElementList tableElementList;
115+ TableName tableName;
116 }
117 {
118 <COLUMN> oldColumnReference = columnReference()
119 <TO> newColumnName = identifier()
120 {
121- if (oldColumnReference.getTableNameNode() == null)
122+ if ((tableName = oldColumnReference.getTableNameNode()) == null)
123 throw new StandardException("Table name missing in RENAME COLUMN");
124- return (StatementNode)nodeFactory.getNode(NodeTypes.RENAME_NODE,
125- oldColumnReference.getTableNameNode(),
126- oldColumnReference.getColumnName(),
127- newColumnName,
128- Boolean.FALSE,
129- RenameNode.RenameType.COLUMN,
130- parserContext);
131+
132+ tableElementList = (TableElementList)
133+ nodeFactory.getNode(NodeTypes.TABLE_ELEMENT_LIST, parserContext);
134+
135+ tableElementList.addTableElement((TableElementNode)nodeFactory.getNode(NodeTypes.AT_RENAME_COLUMN_NODE,
136+ oldColumnReference.getColumnName(),
137+ newColumnName,
138+ parserContext));
139+
140+ return (StatementNode)nodeFactory.getNode(NodeTypes.ALTER_TABLE_NODE,
141+ tableName,
142+ tableElementList,
143+ new Character('\0'),
144+ new int[] {DDLStatementNode.MODIFY_TYPE},
145+ new int[] {0},
146+ parserContext);
147 }
148 }
149
150@@ -13164,6 +13175,7 @@
151 DataTypeDescriptor typeDescriptor;
152 Token tok = null;
153 String name;
154+ String newCName;
155 TableName newName;
156 long[] autoIncrementInfo = new long[4];
157 }
158@@ -13206,12 +13218,27 @@
159 tableElementList.addTableElement(tableElement);
160 }
161 |
162- <RENAME> [<TO> | <AS>] newName = qualifiedName()
163+ <RENAME>
164+ (
165+ LOOKAHEAD ( {getToken(1).kind == COLUMN} )
166+ <COLUMN> name = identifier() [<TO> | <AS>] newCName = identifier()
167+ {
168+ tableElement = (TableElementNode)nodeFactory.getNode(NodeTypes.AT_RENAME_COLUMN_NODE,
169+ name,
170+ newCName,
171+ parserContext);
172+ }
173+ |
174+ [<TABLE>] [<TO> | <AS>] newName = qualifiedName()
175+ {
176+ tableElement = (TableElementNode)nodeFactory.getNode(NodeTypes.AT_RENAME_NODE,
177+ newName,
178+ parserContext);
179+ }
180+ )
181 {
182+
183 changeType[0] = DDLStatementNode.MODIFY_TYPE;
184- tableElement = (TableElementNode)nodeFactory.getNode(NodeTypes.AT_RENAME_NODE,
185- newName,
186- parserContext);
187 tableElementList.addTableElement(tableElement);
188 }
189 }
190
191=== added file 'src/test/resources/com/akiban/sql/parser/alter-rename-column-1.expected'
192--- src/test/resources/com/akiban/sql/parser/alter-rename-column-1.expected 1970-01-01 00:00:00 +0000
193+++ src/test/resources/com/akiban/sql/parser/alter-rename-column-1.expected 2013-02-05 07:47:21 +0000
194@@ -0,0 +1,20 @@
195+com.akiban.sql.parser.AlterTableNode@71172d81
196+name: t
197+statementType: ALTER TABLE
198+objectName: t
199+compressTable: false
200+sequential: false
201+truncateTable: false
202+purge: false
203+defragment: false
204+truncateEndOfTable: false
205+updateStatistics: false
206+updateStatisticsAll: false
207+indexNameForUpdateStatistics: null
208+tableElementList:
209+ com.akiban.sql.parser.TableElementList@28acaa28
210+
211+ [0]:
212+ com.akiban.sql.parser.AlterTableRenameColumnNode@5fd73cf4
213+ name: c
214+ elementType: AT_RENAME_COLUMN
215\ No newline at end of file
216
217=== added file 'src/test/resources/com/akiban/sql/parser/alter-rename-column-1.sql'
218--- src/test/resources/com/akiban/sql/parser/alter-rename-column-1.sql 1970-01-01 00:00:00 +0000
219+++ src/test/resources/com/akiban/sql/parser/alter-rename-column-1.sql 2013-02-05 07:47:21 +0000
220@@ -0,0 +1,1 @@
221+ALTER TABLE t RENAME COLUMN c TO d
222\ No newline at end of file
223
224=== added file 'src/test/resources/com/akiban/sql/parser/alter-rename-column-2.expected'
225--- src/test/resources/com/akiban/sql/parser/alter-rename-column-2.expected 1970-01-01 00:00:00 +0000
226+++ src/test/resources/com/akiban/sql/parser/alter-rename-column-2.expected 2013-02-05 07:47:21 +0000
227@@ -0,0 +1,20 @@
228+com.akiban.sql.parser.AlterTableNode@71172d81
229+name: t
230+statementType: ALTER TABLE
231+objectName: t
232+compressTable: false
233+sequential: false
234+truncateTable: false
235+purge: false
236+defragment: false
237+truncateEndOfTable: false
238+updateStatistics: false
239+updateStatisticsAll: false
240+indexNameForUpdateStatistics: null
241+tableElementList:
242+ com.akiban.sql.parser.TableElementList@28acaa28
243+
244+ [0]:
245+ com.akiban.sql.parser.AlterTableRenameColumnNode@5fd73cf4
246+ name: c
247+ elementType: AT_RENAME_COLUMN
248\ No newline at end of file
249
250=== added file 'src/test/resources/com/akiban/sql/parser/alter-rename-column-2.sql'
251--- src/test/resources/com/akiban/sql/parser/alter-rename-column-2.sql 1970-01-01 00:00:00 +0000
252+++ src/test/resources/com/akiban/sql/parser/alter-rename-column-2.sql 2013-02-05 07:47:21 +0000
253@@ -0,0 +1,1 @@
254+ALTER TABLE t RENAME COLUMN c AS d
255\ No newline at end of file
256
257=== added file 'src/test/resources/com/akiban/sql/parser/alter-rename-table-1.expected'
258--- src/test/resources/com/akiban/sql/parser/alter-rename-table-1.expected 1970-01-01 00:00:00 +0000
259+++ src/test/resources/com/akiban/sql/parser/alter-rename-table-1.expected 2013-02-05 07:47:21 +0000
260@@ -0,0 +1,20 @@
261+com.akiban.sql.parser.AlterTableNode@43271a80
262+name: t
263+statementType: ALTER TABLE
264+objectName: t
265+compressTable: false
266+sequential: false
267+truncateTable: false
268+purge: false
269+defragment: false
270+truncateEndOfTable: false
271+updateStatistics: false
272+updateStatisticsAll: false
273+indexNameForUpdateStatistics: null
274+tableElementList:
275+ com.akiban.sql.parser.TableElementList@3c3cebf1
276+
277+ [0]:
278+ com.akiban.sql.parser.AlterTableRenameNode@43a63a1c
279+ name: t2
280+ elementType: AT_RENAME
281\ No newline at end of file
282
283=== added file 'src/test/resources/com/akiban/sql/parser/alter-rename-table-1.sql'
284--- src/test/resources/com/akiban/sql/parser/alter-rename-table-1.sql 1970-01-01 00:00:00 +0000
285+++ src/test/resources/com/akiban/sql/parser/alter-rename-table-1.sql 2013-02-05 07:47:21 +0000
286@@ -0,0 +1,1 @@
287+ALTER TABLE t RENAME TABLE AS t2
288\ No newline at end of file
289
290=== added file 'src/test/resources/com/akiban/sql/parser/rename-column-1.expected'
291--- src/test/resources/com/akiban/sql/parser/rename-column-1.expected 1970-01-01 00:00:00 +0000
292+++ src/test/resources/com/akiban/sql/parser/rename-column-1.expected 2013-02-05 07:47:21 +0000
293@@ -0,0 +1,20 @@
294+com.akiban.sql.parser.AlterTableNode@71172d81
295+name: t
296+statementType: ALTER TABLE
297+objectName: t
298+compressTable: false
299+sequential: false
300+truncateTable: false
301+purge: false
302+defragment: false
303+truncateEndOfTable: false
304+updateStatistics: false
305+updateStatisticsAll: false
306+indexNameForUpdateStatistics: null
307+tableElementList:
308+ com.akiban.sql.parser.TableElementList@28acaa28
309+
310+ [0]:
311+ com.akiban.sql.parser.AlterTableRenameColumnNode@5fd73cf4
312+ name: c
313+ elementType: AT_RENAME_COLUMN
314\ No newline at end of file
315
316=== added file 'src/test/resources/com/akiban/sql/parser/rename-column-1.sql'
317--- src/test/resources/com/akiban/sql/parser/rename-column-1.sql 1970-01-01 00:00:00 +0000
318+++ src/test/resources/com/akiban/sql/parser/rename-column-1.sql 2013-02-05 07:47:21 +0000
319@@ -0,0 +1,1 @@
320+RENAME COLUMN t.c TO d
321\ No newline at end of file
322
323=== removed file 'src/test/resources/com/akiban/sql/unparser/rename-column-1.expected'
324--- src/test/resources/com/akiban/sql/unparser/rename-column-1.expected 2013-02-01 22:10:31 +0000
325+++ src/test/resources/com/akiban/sql/unparser/rename-column-1.expected 1970-01-01 00:00:00 +0000
326@@ -1,1 +0,0 @@
327-RENAME COLUMN t.c TO d
328\ No newline at end of file
329
330=== removed file 'src/test/resources/com/akiban/sql/unparser/rename-column-1.sql'
331--- src/test/resources/com/akiban/sql/unparser/rename-column-1.sql 2013-02-01 22:10:31 +0000
332+++ src/test/resources/com/akiban/sql/unparser/rename-column-1.sql 1970-01-01 00:00:00 +0000
333@@ -1,1 +0,0 @@
334-RENAME COLUMN t.c TO d
335\ No newline at end of file

Subscribers

People subscribed via source and target branches

to all changes: