Skip to content

Commit 8a238f5

Browse files
committed
Merge origin/master
Conflicts: src/test/java/net/sf/jsqlparser/statement/alter/AlterTest.java
2 parents 3b89cd2 + f4b10cf commit 8a238f5

File tree

6 files changed

+59
-26
lines changed

6 files changed

+59
-26
lines changed

README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,11 @@ Also I would like to know about needed examples or documentation stuff.
6666

6767
## Extensions in the latest SNAPSHOT version 3.2
6868

69+
* allow **ON** as a value in a set statement (`SET myvalue = ON`)
70+
* support for **ALTER TABLE ONLY mytable ... **
71+
* allow foreign key definition in alter statements without referenced columns specification
72+
* allow datatype **binary** for column definitions
73+
* support for **ALTER TABLE COLUMN DROP NOT NULL**
6974

7075
## Extensions of JSqlParser releases
7176

src/main/java/net/sf/jsqlparser/statement/alter/Alter.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,14 @@
1212
import java.util.ArrayList;
1313
import java.util.Iterator;
1414
import java.util.List;
15-
1615
import net.sf.jsqlparser.schema.Table;
1716
import net.sf.jsqlparser.statement.Statement;
1817
import net.sf.jsqlparser.statement.StatementVisitor;
1918

2019
public class Alter implements Statement {
2120

2221
private Table table;
22+
private boolean useOnly = false;
2323

2424
private List<AlterExpression> alterExpressions;
2525

@@ -31,6 +31,14 @@ public void setTable(Table table) {
3131
this.table = table;
3232
}
3333

34+
public boolean isUseOnly() {
35+
return useOnly;
36+
}
37+
38+
public void setUseOnly(boolean useOnly) {
39+
this.useOnly = useOnly;
40+
}
41+
3442
public void addAlterExpression(AlterExpression alterExpression) {
3543
if (alterExpressions == null) {
3644
alterExpressions = new ArrayList<AlterExpression>();
@@ -55,7 +63,11 @@ public void accept(StatementVisitor statementVisitor) {
5563
public String toString() {
5664

5765
StringBuilder b = new StringBuilder();
58-
b.append("ALTER TABLE ").append(table.getFullyQualifiedName()).append(" ");
66+
b.append("ALTER TABLE ");
67+
if (useOnly) {
68+
b.append("ONLY ");
69+
}
70+
b.append(table.getFullyQualifiedName()).append(" ");
5971

6072
Iterator<AlterExpression> altIter = alterExpressions.iterator();
6173

src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt

Lines changed: 10 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1152,7 +1152,7 @@ String RelObjectName() :
11521152
{ Token tk = null; String result = null; }
11531153
{
11541154
(result = RelObjectNameWithoutValue() | tk=<K_TOP> | tk=<K_VALUE> | tk=<K_VALUES>
1155-
| tk=<K_INTERVAL> | tk=<K_START>)
1155+
| tk=<K_INTERVAL> | tk=<K_START> | tk=<K_ON>)
11561156

11571157
{
11581158
if (tk!=null) result=tk.image;
@@ -1182,7 +1182,7 @@ String RelObjectNameExt():
11821182
{
11831183
( result=RelObjectName() | tk=<K_LEFT> | tk=<K_RIGHT> | tk=<K_SET>
11841184
| tk=<K_DOUBLE> | tk=<K_IF> | <K_OPTIMIZE> | tk=<K_LIMIT>
1185-
| tk=<K_OFFSET>)
1185+
| tk=<K_OFFSET> )
11861186
{
11871187
if (tk!=null) result=tk.image;
11881188
return result;
@@ -1296,7 +1296,7 @@ PlainSelect PlainSelect() #PlainSelect:
12961296
|
12971297
(
12981298
<K_DISTINCT> { Distinct distinct = new Distinct(); plainSelect.setDistinct(distinct); }
1299-
[ "ON" "(" distinctOn=SelectItemsList() { plainSelect.getDistinct().setOnSelectItems(distinctOn); } ")" ]
1299+
[ LOOKAHEAD(2) "ON" "(" distinctOn=SelectItemsList() { plainSelect.getDistinct().setOnSelectItems(distinctOn); } ")" ]
13001300
)
13011301
|
13021302
(
@@ -3688,22 +3688,6 @@ CreateTable CreateTable():
36883688
("("
36893689
coldef = ColumnDefinition()
36903690

3691-
/*
3692-
colDataType = ColDataType()
3693-
{
3694-
columnSpecs = new ArrayList();
3695-
}
3696-
3697-
( parameter=CreateParameter() { columnSpecs.addAll(parameter); } )*
3698-
3699-
{
3700-
coldef = new ColumnDefinition();
3701-
coldef.setColumnName(columnName);
3702-
coldef.setColDataType(colDataType);
3703-
if (columnSpecs.size() > 0)
3704-
coldef.setColumnSpecStrings(columnSpecs);
3705-
columnDefinitions.add(coldef);
3706-
}*/
37073691
{ columnDefinitions.add(coldef); }
37083692

37093693
(
@@ -3862,7 +3846,8 @@ ColDataType ColDataType():
38623846
(
38633847
(tk=<K_CHARACTER> | tk=<K_BIT>) [tk2=<K_VARYING>] { colDataType.setDataType(tk.image + (tk2!=null?" " + tk2.image:"")); }
38643848
| tk=<K_DOUBLE> [LOOKAHEAD(2) tk2=<K_PRECISION>] { colDataType.setDataType(tk.image + (tk2!=null?" " + tk2.image:"")); }
3865-
| ( tk=<S_IDENTIFIER> | tk=<K_DATETIMELITERAL> | tk=<K_DATE_LITERAL> | tk=<K_XML> | tk=<K_INTERVAL> | tk=<DT_ZONE> | tk=<K_CHAR> | tk=<K_SET> )
3849+
| ( tk=<S_IDENTIFIER> | tk=<K_DATETIMELITERAL> | tk=<K_DATE_LITERAL> | tk=<K_XML> | tk=<K_INTERVAL>
3850+
| tk=<DT_ZONE> | tk=<K_CHAR> | tk=<K_SET> | tk=<K_BINARY> )
38663851
{ colDataType.setDataType(tk.image); }
38673852
| tk=<K_UNSIGNED> tk2=<S_IDENTIFIER> {colDataType.setDataType(tk.image + " " + tk2.image);}
38683853
| LOOKAHEAD(2) tk=<K_SIGNED> tk2=<S_IDENTIFIER> {colDataType.setDataType(tk.image + " " + tk2.image);}
@@ -4245,8 +4230,8 @@ AlterExpression AlterExpression():
42454230
[<K_USING> sk4=RelObjectName() { alterExp.addParameters("USING", sk4); }])
42464231
|
42474232
//following two choices regarding foreign keys should be merged
4248-
( <K_FOREIGN> <K_KEY> columnNames=ColumnsNamesList() { alterExp.setFkColumns(columnNames); }
4249-
<K_REFERENCES> tk=<S_IDENTIFIER> columnNames=ColumnsNamesList()
4233+
( <K_FOREIGN> <K_KEY> columnNames=ColumnsNamesList() { alterExp.setFkColumns(columnNames); columnNames = null; }
4234+
<K_REFERENCES> tk=<S_IDENTIFIER> [ columnNames=ColumnsNamesList() ]
42504235
{ alterExp.setFkSourceTable(tk.image); alterExp.setFkSourceColumns(columnNames); }
42514236
[<K_ON> <K_DELETE>
42524237
(<K_CASCADE> { alterExp.setOnDeleteCascade(true); }
@@ -4264,8 +4249,9 @@ AlterExpression AlterExpression():
42644249
fkIndex.setName(sk3);
42654250
fkIndex.setType(tk.image + " " + tk2.image);
42664251
fkIndex.setColumnsNames(columnNames);
4252+
columnNames = null;
42674253
}
4268-
<K_REFERENCES> fkTable=Table() columnNames=ColumnsNamesList()
4254+
<K_REFERENCES> fkTable=Table() [ columnNames=ColumnsNamesList() ]
42694255
{
42704256
fkIndex.setTable(fkTable);
42714257
fkIndex.setReferencedColumnNames(columnNames);
@@ -4399,7 +4385,7 @@ Alter AlterTable():
43994385

44004386
}
44014387
{
4402-
<K_ALTER> <K_TABLE> table=Table() { alter.setTable(table); }
4388+
<K_ALTER> <K_TABLE> [ <K_ONLY> { alter.setUseOnly(true); } ] table=Table() { alter.setTable(table); }
44034389
( alterExp=AlterExpression() { alter.addAlterExpression(alterExp); }
44044390
("," alterExp=AlterExpression() { alter.addAlterExpression(alterExp); } )*
44054391
)

src/test/java/net/sf/jsqlparser/statement/SetStatementTest.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,9 @@ public void testIssue373_2() throws JSQLParserException {
3838
public void testMultiValue() throws JSQLParserException {
3939
assertSqlCanBeParsedAndDeparsed("SET v = 1, c = 3");
4040
}
41+
42+
@Test
43+
public void testValueOnIssue927() throws JSQLParserException {
44+
assertSqlCanBeParsedAndDeparsed("SET standard_conforming_strings = on");
45+
}
4146
}

src/test/java/net/sf/jsqlparser/statement/alter/AlterTest.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -390,6 +390,15 @@ public void testIssue633_2() throws JSQLParserException {
390390
}
391391

392392
@Test
393+
public void testAlterOnlyIssue928() throws JSQLParserException {
394+
assertSqlCanBeParsedAndDeparsed("ALTER TABLE ONLY categories ADD CONSTRAINT pk_categories PRIMARY KEY (category_id)");
395+
}
396+
397+
@Test
398+
public void testAlterConstraintWithoutFKSourceColumnsIssue929() throws JSQLParserException {
399+
assertSqlCanBeParsedAndDeparsed("ALTER TABLE orders ADD CONSTRAINT fk_orders_customers FOREIGN KEY (customer_id) REFERENCES customers");
400+
}
401+
393402
public void testAlterTableAlterColumnDropNotNullIssue918() throws JSQLParserException {
394403
assertSqlCanBeParsedAndDeparsed("ALTER TABLE \"user_table_t\" ALTER COLUMN name DROP NOT NULL");
395404
}

src/test/java/net/sf/jsqlparser/statement/create/CreateTableTest.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -569,4 +569,20 @@ public void testSettingCharacterSetIssue829() throws JSQLParserException {
569569

570570
assertEquals("GBK", colName.getColDataType().getCharacterSet());
571571
}
572+
573+
// @Test
574+
// public void testCreateTableIssue924() throws JSQLParserException {
575+
// assertSqlCanBeParsedAndDeparsed("CREATE TABLE test_descending_indexes (c1 INT, c2 INT, INDEX idx1 (c1 ASC, c2 DESC))");
576+
// }
577+
//
578+
// @Test
579+
// public void testCreateTableIssue924_2() throws JSQLParserException {
580+
// assertSqlCanBeParsedAndDeparsed("CREATE TABLE test_descending_indexes (c1 INT, c2 INT, INDEX idx1 (c1 ASC, c2 ASC), INDEX idx2 (c1 ASC, c2 DESC), INDEX idx3 (c1 DESC, c2 ASC), INDEX idx4 (c1 DESC, c2 DESC))");
581+
// }
582+
583+
@Test
584+
public void testCreateTableIssue921() throws JSQLParserException {
585+
assertSqlCanBeParsedAndDeparsed("CREATE TABLE binary_test (c1 binary (10))");
586+
}
572587
}
588+

0 commit comments

Comments
 (0)