Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ public class AlterExpression implements Serializable {
private String columnOldName;
private List<ColumnDataType> colDataTypeList;
private List<ColumnDropNotNull> columnDropNotNullList;
private List<ColumnSetNotNull> columnSetNotNullList;
private List<ColumnDropDefault> columnDropDefaultList;
private List<ColumnSetDefault> columnSetDefaultList;
private List<ColumnSetVisibility> columnSetVisibilityList;
Expand Down Expand Up @@ -382,6 +383,13 @@ public void addColDropNotNull(ColumnDropNotNull columnDropNotNull) {
columnDropNotNullList.add(columnDropNotNull);
}

public void addColSetNotNull(ColumnSetNotNull columnSetNotNull) {
if (columnSetNotNullList == null) {
columnSetNotNullList = new ArrayList<>();
}
columnSetNotNullList.add(columnSetNotNull);
}

public List<ColumnDropDefault> getColumnDropDefaultList() {
return columnDropDefaultList;
}
Expand Down Expand Up @@ -527,6 +535,10 @@ public List<ColumnDropNotNull> getColumnDropNotNullList() {
return columnDropNotNullList;
}

public List<ColumnSetNotNull> getColumnSetNotNullList() {
return columnSetNotNullList;
}

public void addParameters(String... params) {
if (parameters == null) {
parameters = new ArrayList<>();
Expand Down Expand Up @@ -1134,6 +1146,9 @@ protected void toStringGeneral(StringBuilder b) {
if (colDataTypeList.size() > 1) {
b.append(")");
}
} else if (getColumnSetNotNullList() != null) {
b.append("COLUMN ");
b.append(PlainSelect.getStringList(columnSetNotNullList));
} else if (getColumnDropNotNullList() != null) {
b.append("COLUMN ");
b.append(PlainSelect.getStringList(columnDropNotNullList));
Expand Down Expand Up @@ -1467,6 +1482,24 @@ public String toString() {
}
}

public static final class ColumnSetNotNull implements Serializable {

private final String columnName;

public ColumnSetNotNull(String columnName) {
this.columnName = columnName;
}

public String getColumnName() {
return columnName;
}

@Override
public String toString() {
return columnName + " SET NOT NULL";
}
}

public static final class ColumnDropDefault implements Serializable {

private final String columnName;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import net.sf.jsqlparser.statement.alter.AlterExpression;
import net.sf.jsqlparser.statement.alter.AlterExpression.ColumnDataType;
import net.sf.jsqlparser.statement.alter.AlterExpression.ColumnDropNotNull;
import net.sf.jsqlparser.statement.alter.AlterExpression.ColumnSetNotNull;
import net.sf.jsqlparser.statement.alter.AlterOperation;
import net.sf.jsqlparser.util.validation.ValidationCapability;
import net.sf.jsqlparser.util.validation.ValidationUtil;
Expand Down Expand Up @@ -47,6 +48,11 @@ public void validate(Alter alter, AlterExpression e) {
ColumnDropNotNull::getColumnName));
}

if (e.getColumnSetNotNullList() != null) {
validateOptionalColumnNames(c, ValidationUtil.map(e.getColumnSetNotNullList(),
ColumnSetNotNull::getColumnName));
}

if (e.getColDataTypeList() != null) {
boolean validateForExist =
!EnumSet.of(AlterOperation.ADD).contains(e.getOperation());
Expand Down
26 changes: 22 additions & 4 deletions src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt
Original file line number Diff line number Diff line change
Expand Up @@ -12213,13 +12213,15 @@ Truncate Truncate():

/**
* Parses common column-level changes shared between the COLUMN-prefixed and bare forms:
* DROP DEFAULT, SET DEFAULT, SET VISIBLE/INVISIBLE, and bracketed multi-column definitions.
* DROP DEFAULT, SET DEFAULT, SET NOT NULL, SET VISIBLE/INVISIBLE, and bracketed multi-column
* definitions.
*/
void AlterExpressionColumnChanges(AlterExpression alterExp):
{
AlterExpression.ColumnDataType alterExpressionColumnDataType = null;
AlterExpression.ColumnDropDefault alterExpressionColumnDropDefault = null;
AlterExpression.ColumnSetDefault alterExpressionColumnSetDefault = null;
AlterExpression.ColumnSetNotNull alterExpressionColumnSetNotNull = null;
AlterExpression.ColumnSetVisibility alterExpressionColumnSetVisibility = null;
}
{
Expand All @@ -12230,6 +12232,9 @@ void AlterExpressionColumnChanges(AlterExpression alterExp):
LOOKAHEAD(3) alterExpressionColumnSetDefault = AlterExpressionColumnSetDefault()
{ alterExp.addColSetDefault(alterExpressionColumnSetDefault); }
|
LOOKAHEAD(4) alterExpressionColumnSetNotNull = AlterExpressionColumnSetNotNull()
{ alterExp.addColSetNotNull(alterExpressionColumnSetNotNull); }
|
LOOKAHEAD(3) alterExpressionColumnSetVisibility = AlterExpressionColumnSetVisibility()
{ alterExp.addColSetVisibility(alterExpressionColumnSetVisibility); }
|
Expand Down Expand Up @@ -12287,6 +12292,19 @@ AlterExpression.ColumnDropNotNull AlterExpressionColumnDropNotNull():
}
}

AlterExpression.ColumnSetNotNull AlterExpressionColumnSetNotNull():
{
String columnName = null;
}
{
columnName = RelObjectName()
<K_SET>
<K_NOT> <K_NULL>
{
return new AlterExpression.ColumnSetNotNull(columnName);
}
}

AlterExpression.ColumnDropDefault AlterExpressionColumnDropDefault():
{
String columnName = null;
Expand Down Expand Up @@ -12926,11 +12944,11 @@ AlterExpression AlterExpressionAddAlterModify():
(
LOOKAHEAD(3) AlterExpressionColumnChanges(alterExp)
|
LOOKAHEAD(2) alterExpressionColumnDataType = AlterExpressionColumnDataType()
{ alterExp.addColDataType(alterExpressionColumnDataType); }
|
LOOKAHEAD(3) alterExpressionColumnDropNotNull = AlterExpressionColumnDropNotNull()
{ alterExp.addColDropNotNull( alterExpressionColumnDropNotNull);}
|
LOOKAHEAD(2) alterExpressionColumnDataType = AlterExpressionColumnDataType()
{ alterExp.addColDataType(alterExpressionColumnDataType); }
)
)
|
Expand Down
17 changes: 16 additions & 1 deletion src/test/java/net/sf/jsqlparser/statement/alter/AlterTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -644,8 +644,23 @@ public void testAlterConstraintWithoutFKSourceColumnsIssue929() throws JSQLParse

@Test
public void testAlterTableAlterColumnDropNotNullIssue918() throws JSQLParserException {
assertSqlCanBeParsedAndDeparsed(
Alter alter = (Alter) assertSqlCanBeParsedAndDeparsed(
"ALTER TABLE \"user_table_t\" ALTER COLUMN name DROP NOT NULL");
AlterExpression expression = alter.getAlterExpressions().get(0);

assertNull(expression.getColDataTypeList());
assertEquals("name", expression.getColumnDropNotNullList().get(0).getColumnName());
assertTrue(expression.getColumnDropNotNullList().get(0).isWithNot());
}

@Test
public void testAlterTableAlterColumnSetNotNull() throws JSQLParserException {
Alter alter = (Alter) assertSqlCanBeParsedAndDeparsed(
"ALTER TABLE user_table ALTER COLUMN name SET NOT NULL");
AlterExpression expression = alter.getAlterExpressions().get(0);

assertNull(expression.getColDataTypeList());
assertEquals("name", expression.getColumnSetNotNullList().get(0).getColumnName());
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,7 @@ public class ReflectionModelTest {
new net.sf.jsqlparser.statement.alter.AlterExpression(),
new net.sf.jsqlparser.statement.alter.AlterExpression.ColumnDataType(false),
new net.sf.jsqlparser.statement.alter.AlterExpression.ColumnDropNotNull("name"),
new net.sf.jsqlparser.statement.alter.AlterExpression.ColumnSetNotNull("name"),
new net.sf.jsqlparser.statement.merge.MergeInsert(),
new net.sf.jsqlparser.statement.alter.DeferrableConstraint(),
new net.sf.jsqlparser.statement.alter.EnableConstraint(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -151,4 +151,10 @@ public void testAlterTableAlterColumnDropNotNullIssue918() throws JSQLParserExce
DatabaseType.DATABASES);
}

@Test
public void testAlterTableAlterColumnSetNotNull() throws JSQLParserException {
validateNoErrors("ALTER TABLE user_table ALTER COLUMN name SET NOT NULL", 1,
DatabaseType.DATABASES);
}

}
Loading