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

Proposed by Vy Nguyen
Status: Merged
Approved by: Nathan Williams
Approved revision: 293
Merged at revision: 289
Proposed branch: lp:~oontvoo/akiban-sql-parser/alter-rename-column
Merge into: lp:~akiban-technologies/akiban-sql-parser/trunk
Diff against target: 336 lines (+179/-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 (+40/-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
Nathan Williams Approve
Review via email: mp+146574@code.launchpad.net

This proposal supersedes a proposal from 2013-02-05.

Description of the change

Support ALTER-TABLE-RENAME-COLUMN statements, allow option <TABLE> token after ALTER-TABLE-RENAME, and transform RENAME-COLUMN to ALTER-TABLE-RENAME-COLUMN.

Oracle's syntax looks intuitive, so we'll follow that.
Syntax:
ALTERT TABLE <table_name>
       RENAME COLUMN <column_name> [AS | TO] <new_column_name>

[Resubmit: Transform RENAME-COLUMN to ALTER-TABLE-COLUMN]

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

This is consistent with both Oracle and Postgres and probably least surprising.

Looks as described. Why was the unparser test deleted? Can we add one for the new ALTER syntax or does that not work through that path?

review: Needs Information
Revision history for this message
Vy Nguyen (oontvoo) wrote :

Unparsing an ALTER-TABLE node (for error message) has not been supported. None of the existing ALTER-TABLE nodes has a nice NodeToString representation. Now that RENAME-COLUMN is an ANLTER-TABLE node, it inherits the 'curse'.

Revision history for this message
Nathan Williams (nwilliams) wrote :

Makes sense.

review: Approve

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:52:19 +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:52:19 +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:52:19 +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:52:19 +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:52:19 +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:52:19 +0000
110@@ -11897,20 +11897,32 @@
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)nodeFactory
133+ .getNode(NodeTypes.TABLE_ELEMENT_LIST, parserContext);
134+
135+ tableElementList.addTableElement((TableElementNode)nodeFactory
136+ .getNode(NodeTypes.AT_RENAME_COLUMN_NODE,
137+ oldColumnReference.getColumnName(),
138+ newColumnName,
139+ parserContext));
140+
141+ return (StatementNode)nodeFactory.getNode(NodeTypes.ALTER_TABLE_NODE,
142+ tableName,
143+ tableElementList,
144+ new Character('\0'),
145+ new int[] {DDLStatementNode.MODIFY_TYPE},
146+ new int[] {0},
147+ parserContext);
148 }
149 }
150
151@@ -13164,6 +13176,7 @@
152 DataTypeDescriptor typeDescriptor;
153 Token tok = null;
154 String name;
155+ String newCName;
156 TableName newName;
157 long[] autoIncrementInfo = new long[4];
158 }
159@@ -13206,12 +13219,27 @@
160 tableElementList.addTableElement(tableElement);
161 }
162 |
163- <RENAME> [<TO> | <AS>] newName = qualifiedName()
164+ <RENAME>
165+ (
166+ LOOKAHEAD ( {getToken(1).kind == COLUMN} )
167+ <COLUMN> name = identifier() [<TO> | <AS>] newCName = identifier()
168+ {
169+ tableElement = (TableElementNode)nodeFactory.getNode(NodeTypes.AT_RENAME_COLUMN_NODE,
170+ name,
171+ newCName,
172+ parserContext);
173+ }
174+ |
175+ [<TABLE>] [<TO> | <AS>] newName = qualifiedName()
176+ {
177+ tableElement = (TableElementNode)nodeFactory.getNode(NodeTypes.AT_RENAME_NODE,
178+ newName,
179+ parserContext);
180+ }
181+ )
182 {
183+
184 changeType[0] = DDLStatementNode.MODIFY_TYPE;
185- tableElement = (TableElementNode)nodeFactory.getNode(NodeTypes.AT_RENAME_NODE,
186- newName,
187- parserContext);
188 tableElementList.addTableElement(tableElement);
189 }
190 }
191
192=== added file 'src/test/resources/com/akiban/sql/parser/alter-rename-column-1.expected'
193--- src/test/resources/com/akiban/sql/parser/alter-rename-column-1.expected 1970-01-01 00:00:00 +0000
194+++ src/test/resources/com/akiban/sql/parser/alter-rename-column-1.expected 2013-02-05 07:52:19 +0000
195@@ -0,0 +1,20 @@
196+com.akiban.sql.parser.AlterTableNode@71172d81
197+name: t
198+statementType: ALTER TABLE
199+objectName: t
200+compressTable: false
201+sequential: false
202+truncateTable: false
203+purge: false
204+defragment: false
205+truncateEndOfTable: false
206+updateStatistics: false
207+updateStatisticsAll: false
208+indexNameForUpdateStatistics: null
209+tableElementList:
210+ com.akiban.sql.parser.TableElementList@28acaa28
211+
212+ [0]:
213+ com.akiban.sql.parser.AlterTableRenameColumnNode@5fd73cf4
214+ name: c
215+ elementType: AT_RENAME_COLUMN
216\ No newline at end of file
217
218=== added file 'src/test/resources/com/akiban/sql/parser/alter-rename-column-1.sql'
219--- src/test/resources/com/akiban/sql/parser/alter-rename-column-1.sql 1970-01-01 00:00:00 +0000
220+++ src/test/resources/com/akiban/sql/parser/alter-rename-column-1.sql 2013-02-05 07:52:19 +0000
221@@ -0,0 +1,1 @@
222+ALTER TABLE t RENAME COLUMN c TO d
223\ No newline at end of file
224
225=== added file 'src/test/resources/com/akiban/sql/parser/alter-rename-column-2.expected'
226--- src/test/resources/com/akiban/sql/parser/alter-rename-column-2.expected 1970-01-01 00:00:00 +0000
227+++ src/test/resources/com/akiban/sql/parser/alter-rename-column-2.expected 2013-02-05 07:52:19 +0000
228@@ -0,0 +1,20 @@
229+com.akiban.sql.parser.AlterTableNode@71172d81
230+name: t
231+statementType: ALTER TABLE
232+objectName: t
233+compressTable: false
234+sequential: false
235+truncateTable: false
236+purge: false
237+defragment: false
238+truncateEndOfTable: false
239+updateStatistics: false
240+updateStatisticsAll: false
241+indexNameForUpdateStatistics: null
242+tableElementList:
243+ com.akiban.sql.parser.TableElementList@28acaa28
244+
245+ [0]:
246+ com.akiban.sql.parser.AlterTableRenameColumnNode@5fd73cf4
247+ name: c
248+ elementType: AT_RENAME_COLUMN
249\ No newline at end of file
250
251=== added file 'src/test/resources/com/akiban/sql/parser/alter-rename-column-2.sql'
252--- src/test/resources/com/akiban/sql/parser/alter-rename-column-2.sql 1970-01-01 00:00:00 +0000
253+++ src/test/resources/com/akiban/sql/parser/alter-rename-column-2.sql 2013-02-05 07:52:19 +0000
254@@ -0,0 +1,1 @@
255+ALTER TABLE t RENAME COLUMN c AS d
256\ No newline at end of file
257
258=== added file 'src/test/resources/com/akiban/sql/parser/alter-rename-table-1.expected'
259--- src/test/resources/com/akiban/sql/parser/alter-rename-table-1.expected 1970-01-01 00:00:00 +0000
260+++ src/test/resources/com/akiban/sql/parser/alter-rename-table-1.expected 2013-02-05 07:52:19 +0000
261@@ -0,0 +1,20 @@
262+com.akiban.sql.parser.AlterTableNode@43271a80
263+name: t
264+statementType: ALTER TABLE
265+objectName: t
266+compressTable: false
267+sequential: false
268+truncateTable: false
269+purge: false
270+defragment: false
271+truncateEndOfTable: false
272+updateStatistics: false
273+updateStatisticsAll: false
274+indexNameForUpdateStatistics: null
275+tableElementList:
276+ com.akiban.sql.parser.TableElementList@3c3cebf1
277+
278+ [0]:
279+ com.akiban.sql.parser.AlterTableRenameNode@43a63a1c
280+ name: t2
281+ elementType: AT_RENAME
282\ No newline at end of file
283
284=== added file 'src/test/resources/com/akiban/sql/parser/alter-rename-table-1.sql'
285--- src/test/resources/com/akiban/sql/parser/alter-rename-table-1.sql 1970-01-01 00:00:00 +0000
286+++ src/test/resources/com/akiban/sql/parser/alter-rename-table-1.sql 2013-02-05 07:52:19 +0000
287@@ -0,0 +1,1 @@
288+ALTER TABLE t RENAME TABLE AS t2
289\ No newline at end of file
290
291=== added file 'src/test/resources/com/akiban/sql/parser/rename-column-1.expected'
292--- src/test/resources/com/akiban/sql/parser/rename-column-1.expected 1970-01-01 00:00:00 +0000
293+++ src/test/resources/com/akiban/sql/parser/rename-column-1.expected 2013-02-05 07:52:19 +0000
294@@ -0,0 +1,20 @@
295+com.akiban.sql.parser.AlterTableNode@71172d81
296+name: t
297+statementType: ALTER TABLE
298+objectName: t
299+compressTable: false
300+sequential: false
301+truncateTable: false
302+purge: false
303+defragment: false
304+truncateEndOfTable: false
305+updateStatistics: false
306+updateStatisticsAll: false
307+indexNameForUpdateStatistics: null
308+tableElementList:
309+ com.akiban.sql.parser.TableElementList@28acaa28
310+
311+ [0]:
312+ com.akiban.sql.parser.AlterTableRenameColumnNode@5fd73cf4
313+ name: c
314+ elementType: AT_RENAME_COLUMN
315\ No newline at end of file
316
317=== added file 'src/test/resources/com/akiban/sql/parser/rename-column-1.sql'
318--- src/test/resources/com/akiban/sql/parser/rename-column-1.sql 1970-01-01 00:00:00 +0000
319+++ src/test/resources/com/akiban/sql/parser/rename-column-1.sql 2013-02-05 07:52:19 +0000
320@@ -0,0 +1,1 @@
321+RENAME COLUMN t.c TO d
322\ No newline at end of file
323
324=== removed file 'src/test/resources/com/akiban/sql/unparser/rename-column-1.expected'
325--- src/test/resources/com/akiban/sql/unparser/rename-column-1.expected 2013-02-01 22:10:31 +0000
326+++ src/test/resources/com/akiban/sql/unparser/rename-column-1.expected 1970-01-01 00:00:00 +0000
327@@ -1,1 +0,0 @@
328-RENAME COLUMN t.c TO d
329\ No newline at end of file
330
331=== removed file 'src/test/resources/com/akiban/sql/unparser/rename-column-1.sql'
332--- src/test/resources/com/akiban/sql/unparser/rename-column-1.sql 2013-02-01 22:10:31 +0000
333+++ src/test/resources/com/akiban/sql/unparser/rename-column-1.sql 1970-01-01 00:00:00 +0000
334@@ -1,1 +0,0 @@
335-RENAME COLUMN t.c TO d
336\ No newline at end of file

Subscribers

People subscribed via source and target branches

to all changes: