提交 aacd5d9c authored 作者: Evgenij Ryazanov's avatar Evgenij Ryazanov

Standard no-arg datetime value functions don't have parentheses

上级 4be14cbf
...@@ -4493,17 +4493,17 @@ CALL TRANSLATE('Hello world', 'eo', 'EO') ...@@ -4493,17 +4493,17 @@ CALL TRANSLATE('Hello world', 'eo', 'EO')
" "
"Functions (Time and Date)","CURRENT_DATE"," "Functions (Time and Date)","CURRENT_DATE","
{ CURRENT_DATE [ () ] | CURDATE() | SYSDATE | TODAY } { CURRENT_DATE | CURDATE() | SYSDATE | TODAY }
"," ","
Returns the current date. Returns the current date.
These methods always return the same value within a transaction (default) These methods always return the same value within a transaction (default)
or within a command depending on database mode. or within a command depending on database mode.
"," ","
CURRENT_DATE() CURRENT_DATE
" "
"Functions (Time and Date)","CURRENT_TIME"," "Functions (Time and Date)","CURRENT_TIME","
{ CURRENT_TIME [ ( [ int ] ) ] | LOCALTIME [ ( [ int ] ) ] | CURTIME() } { CURRENT_TIME [ (int) ] | LOCALTIME [ (int) ] | CURTIME([ int ]) }
"," ","
Returns the current time. Returns the current time.
If fractional seconds precision is specified it should be from 0 to 9, 0 is default. If fractional seconds precision is specified it should be from 0 to 9, 0 is default.
...@@ -4513,11 +4513,13 @@ Higher precision is not available before Java 9. ...@@ -4513,11 +4513,13 @@ Higher precision is not available before Java 9.
These methods always return the same value within a transaction (default) These methods always return the same value within a transaction (default)
or within a command depending on database mode. or within a command depending on database mode.
"," ","
CURRENT_TIME() CURRENT_TIME
LOCALTIME
LOCALTIME(9)
" "
"Functions (Time and Date)","CURRENT_TIMESTAMP"," "Functions (Time and Date)","CURRENT_TIMESTAMP","
CURRENT_TIMESTAMP [ ( [ int ] ) ] CURRENT_TIMESTAMP [ (int) ]
"," ","
Returns the current timestamp with time zone. Returns the current timestamp with time zone.
Time zone offset is set to a current time zone offset Time zone offset is set to a current time zone offset
...@@ -4528,11 +4530,12 @@ Higher precision is not available before Java 9. ...@@ -4528,11 +4530,12 @@ Higher precision is not available before Java 9.
This method always returns the same value within a transaction (default) This method always returns the same value within a transaction (default)
or within a command depending on database mode. or within a command depending on database mode.
"," ","
CURRENT_TIMESTAMP() CURRENT_TIMESTAMP
CURRENT_TIMESTAMP(9)
" "
"Functions (Time and Date)","LOCALTIMESTAMP"," "Functions (Time and Date)","LOCALTIMESTAMP","
{ LOCALTIMESTAMP [ ( [ int ] ) ] | NOW( [ int ] ) } { LOCALTIMESTAMP [ (int) ] | NOW( [ int ] ) }
"," ","
Returns the current timestamp. Returns the current timestamp.
If fractional seconds precision is specified it should be from 0 to 9, 6 is default. If fractional seconds precision is specified it should be from 0 to 9, 6 is default.
...@@ -4542,7 +4545,8 @@ Higher precision is not available before Java 9. ...@@ -4542,7 +4545,8 @@ Higher precision is not available before Java 9.
These methods always return the same value within a transaction (default) These methods always return the same value within a transaction (default)
or within a command depending on database mode. or within a command depending on database mode.
"," ","
LOCALTIMESTAMP() LOCALTIMESTAMP
LOCALTIMESTAMP(9)
" "
"Functions (Time and Date)","DATEADD"," "Functions (Time and Date)","DATEADD","
......
...@@ -99,14 +99,14 @@ public class Function extends Expression implements FunctionCall { ...@@ -99,14 +99,14 @@ public class Function extends Expression implements FunctionCall {
LPAD = 91, CONCAT_WS = 92, TO_CHAR = 93, TRANSLATE = 94, /* 95 */ LPAD = 91, CONCAT_WS = 92, TO_CHAR = 93, TRANSLATE = 94, /* 95 */
TO_DATE = 96, TO_TIMESTAMP = 97, ADD_MONTHS = 98, TO_TIMESTAMP_TZ = 99; TO_DATE = 96, TO_TIMESTAMP = 97, ADD_MONTHS = 98, TO_TIMESTAMP_TZ = 99;
public static final int CURDATE = 100, CURTIME = 101, DATE_ADD = 102, public static final int CURRENT_DATE = 100, CURRENT_TIME = 101, LOCALTIME = 102,
DATE_DIFF = 103, DAY_NAME = 104, DAY_OF_MONTH = 105, CURRENT_TIMESTAMP = 103, LOCALTIMESTAMP = 104,
DAY_OF_WEEK = 106, DAY_OF_YEAR = 107, HOUR = 108, MINUTE = 109, DATE_ADD = 105, DATE_DIFF = 106, DAY_NAME = 107, DAY_OF_MONTH = 108,
MONTH = 110, MONTH_NAME = 111, LOCALTIMESTAMP = 112, QUARTER = 113, DAY_OF_WEEK = 109, DAY_OF_YEAR = 110, HOUR = 111, MINUTE = 112,
SECOND = 114, WEEK = 115, YEAR = 116, CURRENT_DATE = 117, MONTH = 113, MONTH_NAME = 114, QUARTER = 115,
CURRENT_TIME = 118, CURRENT_TIMESTAMP = 119, EXTRACT = 120, SECOND = 116, WEEK = 117, YEAR = 118, EXTRACT = 119,
FORMATDATETIME = 121, PARSEDATETIME = 122, ISO_YEAR = 123, FORMATDATETIME = 120, PARSEDATETIME = 121, ISO_YEAR = 122,
ISO_WEEK = 124, ISO_DAY_OF_WEEK = 125, DATE_TRUNC = 132; ISO_WEEK = 123, ISO_DAY_OF_WEEK = 124, DATE_TRUNC = 125;
/** /**
* Pseudo functions for DATEADD, DATEDIFF, and EXTRACT. * Pseudo functions for DATEADD, DATEDIFF, and EXTRACT.
...@@ -284,34 +284,27 @@ public class Function extends Expression implements FunctionCall { ...@@ -284,34 +284,27 @@ public class Function extends Expression implements FunctionCall {
addFunction("REGEXP_LIKE", REGEXP_LIKE, VAR_ARGS, Value.BOOLEAN); addFunction("REGEXP_LIKE", REGEXP_LIKE, VAR_ARGS, Value.BOOLEAN);
// date // date
addFunctionNotDeterministic("CURRENT_DATE", CURRENT_DATE, addFunctionNotDeterministic("CURRENT_DATE", CURRENT_DATE, 0, Value.DATE, false);
0, Value.DATE); addFunctionNotDeterministic("CURDATE", CURRENT_DATE, 0, Value.DATE);
addFunctionNotDeterministic("CURDATE", CURDATE, addFunctionNotDeterministic("SYSDATE", CURRENT_DATE, 0, Value.DATE, false);
0, Value.DATE); addFunctionNotDeterministic("TODAY", CURRENT_DATE, 0, Value.DATE, false);
addFunctionNotDeterministic("TODAY", CURRENT_DATE,
0, Value.DATE); addFunctionNotDeterministic("CURRENT_TIME", CURRENT_TIME, VAR_ARGS, Value.TIME);
addFunctionNotDeterministic("LOCALTIME", LOCALTIME, VAR_ARGS, Value.TIME, false);
addFunctionNotDeterministic("SYSTIME", LOCALTIME, 0, Value.TIME, false);
addFunctionNotDeterministic("CURTIME", LOCALTIME, VAR_ARGS, Value.TIME);
addFunctionNotDeterministic("CURRENT_TIMESTAMP", CURRENT_TIMESTAMP, VAR_ARGS, Value.TIMESTAMP_TZ, false);
addFunctionNotDeterministic("SYSTIMESTAMP", CURRENT_TIMESTAMP, VAR_ARGS, Value.TIMESTAMP_TZ, false);
addFunctionNotDeterministic("LOCALTIMESTAMP", LOCALTIMESTAMP, VAR_ARGS, Value.TIMESTAMP, false);
addFunctionNotDeterministic("NOW", LOCALTIMESTAMP, VAR_ARGS, Value.TIMESTAMP);
addFunction("TO_DATE", TO_DATE, VAR_ARGS, Value.TIMESTAMP); addFunction("TO_DATE", TO_DATE, VAR_ARGS, Value.TIMESTAMP);
addFunction("TO_TIMESTAMP", TO_TIMESTAMP, VAR_ARGS, Value.TIMESTAMP); addFunction("TO_TIMESTAMP", TO_TIMESTAMP, VAR_ARGS, Value.TIMESTAMP);
addFunction("ADD_MONTHS", ADD_MONTHS, 2, Value.TIMESTAMP); addFunction("ADD_MONTHS", ADD_MONTHS, 2, Value.TIMESTAMP);
addFunction("TO_TIMESTAMP_TZ", TO_TIMESTAMP_TZ, VAR_ARGS, Value.TIMESTAMP_TZ); addFunction("TO_TIMESTAMP_TZ", TO_TIMESTAMP_TZ, VAR_ARGS, Value.TIMESTAMP_TZ);
addFunctionNotDeterministic("CURRENT_TIME", CURRENT_TIME,
VAR_ARGS, Value.TIME);
addFunctionNotDeterministic("LOCALTIME", CURRENT_TIME,
VAR_ARGS, Value.TIME);
addFunctionNotDeterministic("SYSTIME", CURRENT_TIME,
0, Value.TIME);
addFunctionNotDeterministic("CURTIME", CURTIME,
0, Value.TIME);
addFunctionNotDeterministic("CURRENT_TIMESTAMP", CURRENT_TIMESTAMP,
VAR_ARGS, Value.TIMESTAMP_TZ);
addFunctionNotDeterministic("SYSDATE", CURRENT_TIMESTAMP,
VAR_ARGS, Value.TIMESTAMP_TZ);
addFunctionNotDeterministic("SYSTIMESTAMP", CURRENT_TIMESTAMP,
VAR_ARGS, Value.TIMESTAMP_TZ);
addFunctionNotDeterministic("LOCALTIMESTAMP", LOCALTIMESTAMP,
VAR_ARGS, Value.TIMESTAMP);
addFunctionNotDeterministic("NOW", LOCALTIMESTAMP,
VAR_ARGS, Value.TIMESTAMP);
addFunction("DATEADD", DATE_ADD, addFunction("DATEADD", DATE_ADD,
3, Value.TIMESTAMP); 3, Value.TIMESTAMP);
addFunction("TIMESTAMPADD", DATE_ADD, addFunction("TIMESTAMPADD", DATE_ADD,
...@@ -422,9 +415,9 @@ public class Function extends Expression implements FunctionCall { ...@@ -422,9 +415,9 @@ public class Function extends Expression implements FunctionCall {
2, Value.NULL); 2, Value.NULL);
addFunctionWithNull("ARRAY_CONTAINS", ARRAY_CONTAINS, 2, Value.BOOLEAN); addFunctionWithNull("ARRAY_CONTAINS", ARRAY_CONTAINS, 2, Value.BOOLEAN);
addFunction("CSVREAD", CSVREAD, addFunction("CSVREAD", CSVREAD,
VAR_ARGS, Value.RESULT_SET, false, false, false); VAR_ARGS, Value.RESULT_SET, false, false, false, true);
addFunction("CSVWRITE", CSVWRITE, addFunction("CSVWRITE", CSVWRITE,
VAR_ARGS, Value.INT, false, false, true); VAR_ARGS, Value.INT, false, false, true, true);
addFunctionNotDeterministic("MEMORY_FREE", MEMORY_FREE, addFunctionNotDeterministic("MEMORY_FREE", MEMORY_FREE,
0, Value.INT); 0, Value.INT);
addFunctionNotDeterministic("MEMORY_USED", MEMORY_USED, addFunctionNotDeterministic("MEMORY_USED", MEMORY_USED,
...@@ -446,11 +439,11 @@ public class Function extends Expression implements FunctionCall { ...@@ -446,11 +439,11 @@ public class Function extends Expression implements FunctionCall {
addFunctionNotDeterministic("CANCEL_SESSION", CANCEL_SESSION, addFunctionNotDeterministic("CANCEL_SESSION", CANCEL_SESSION,
1, Value.BOOLEAN); 1, Value.BOOLEAN);
addFunction("SET", SET, addFunction("SET", SET,
2, Value.NULL, false, false, true); 2, Value.NULL, false, false, true, true);
addFunction("FILE_READ", FILE_READ, addFunction("FILE_READ", FILE_READ,
VAR_ARGS, Value.NULL, false, false, true); VAR_ARGS, Value.NULL, false, false, true, true);
addFunction("FILE_WRITE", FILE_WRITE, addFunction("FILE_WRITE", FILE_WRITE,
2, Value.LONG, false, false, true); 2, Value.LONG, false, false, true, true);
addFunctionNotDeterministic("TRANSACTION_ID", TRANSACTION_ID, addFunctionNotDeterministic("TRANSACTION_ID", TRANSACTION_ID,
0, Value.STRING); 0, Value.STRING);
addFunctionWithNull("DECODE", DECODE, addFunctionWithNull("DECODE", DECODE,
...@@ -468,7 +461,7 @@ public class Function extends Expression implements FunctionCall { ...@@ -468,7 +461,7 @@ public class Function extends Expression implements FunctionCall {
VAR_ARGS, Value.RESULT_SET); VAR_ARGS, Value.RESULT_SET);
// ON DUPLICATE KEY VALUES function // ON DUPLICATE KEY VALUES function
addFunction("VALUES", VALUES, 1, Value.NULL, false, true, false); addFunction("VALUES", VALUES, 1, Value.NULL, false, true, false, true);
} }
/** /**
...@@ -489,24 +482,29 @@ public class Function extends Expression implements FunctionCall { ...@@ -489,24 +482,29 @@ public class Function extends Expression implements FunctionCall {
private static void addFunction(String name, int type, int parameterCount, private static void addFunction(String name, int type, int parameterCount,
int returnDataType, boolean nullIfParameterIsNull, boolean deterministic, int returnDataType, boolean nullIfParameterIsNull, boolean deterministic,
boolean bufferResultSetToLocalTemp) { boolean bufferResultSetToLocalTemp, boolean requireParentheses) {
FUNCTIONS.put(name, new FunctionInfo(name, type, parameterCount, returnDataType, nullIfParameterIsNull, FUNCTIONS.put(name, new FunctionInfo(name, type, parameterCount, returnDataType, nullIfParameterIsNull,
deterministic, bufferResultSetToLocalTemp)); deterministic, bufferResultSetToLocalTemp, requireParentheses));
} }
private static void addFunctionNotDeterministic(String name, int type, private static void addFunctionNotDeterministic(String name, int type,
int parameterCount, int returnDataType) { int parameterCount, int returnDataType) {
addFunction(name, type, parameterCount, returnDataType, true, false, true); addFunctionNotDeterministic(name, type, parameterCount, returnDataType, true);
}
private static void addFunctionNotDeterministic(String name, int type,
int parameterCount, int returnDataType, boolean requireParentheses) {
addFunction(name, type, parameterCount, returnDataType, true, false, true, requireParentheses);
} }
private static void addFunction(String name, int type, int parameterCount, private static void addFunction(String name, int type, int parameterCount,
int returnDataType) { int returnDataType) {
addFunction(name, type, parameterCount, returnDataType, true, true, true); addFunction(name, type, parameterCount, returnDataType, true, true, true, true);
} }
private static void addFunctionWithNull(String name, int type, private static void addFunctionWithNull(String name, int type,
int parameterCount, int returnDataType) { int parameterCount, int returnDataType) {
addFunction(name, type, parameterCount, returnDataType, false, true, true); addFunction(name, type, parameterCount, returnDataType, false, true, true, true);
} }
/** /**
...@@ -801,6 +799,32 @@ public class Function extends Expression implements FunctionCall { ...@@ -801,6 +799,32 @@ public class Function extends Expression implements FunctionCall {
result = ValueString.get(StringUtils.xmlStartDoc(), result = ValueString.get(StringUtils.xmlStartDoc(),
database.getMode().treatEmptyStringsAsNull); database.getMode().treatEmptyStringsAsNull);
break; break;
case CURRENT_DATE: {
result = (database.getMode().dateTimeValueWithinTransaction ? session.getTransactionStart()
: session.getCurrentCommandStart()).convertTo(Value.DATE);
break;
}
case CURRENT_TIME:
case LOCALTIME: {
ValueTime vt = (ValueTime) (database.getMode().dateTimeValueWithinTransaction
? session.getTransactionStart()
: session.getCurrentCommandStart()).convertTo(Value.TIME);
result = vt.convertScale(false, v0 == null ? 0 : v0.getInt());
break;
}
case CURRENT_TIMESTAMP: {
ValueTimestampTimeZone vt = database.getMode().dateTimeValueWithinTransaction
? session.getTransactionStart()
: session.getCurrentCommandStart();
result = vt.convertScale(false, v0 == null ? 6 : v0.getInt());
break;
}
case LOCALTIMESTAMP: {
Value vt = (database.getMode().dateTimeValueWithinTransaction ? session.getTransactionStart()
: session.getCurrentCommandStart()).convertTo(Value.TIMESTAMP);
result = vt.convertScale(false, v0 == null ? 6 : v0.getInt());
break;
}
case DAY_NAME: { case DAY_NAME: {
int dayOfWeek = DateTimeUtils.getSundayDayOfWeek(DateTimeUtils.dateAndTimeFromValue(v0)[0]); int dayOfWeek = DateTimeUtils.getSundayDayOfWeek(DateTimeUtils.dateAndTimeFromValue(v0)[0]);
result = ValueString.get(DateTimeFunctions.getMonthsAndWeeks(1)[dayOfWeek], result = ValueString.get(DateTimeFunctions.getMonthsAndWeeks(1)[dayOfWeek],
...@@ -828,33 +852,6 @@ public class Function extends Expression implements FunctionCall { ...@@ -828,33 +852,6 @@ public class Function extends Expression implements FunctionCall {
database.getMode().treatEmptyStringsAsNull); database.getMode().treatEmptyStringsAsNull);
break; break;
} }
case CURDATE:
case CURRENT_DATE: {
result = (database.getMode().dateTimeValueWithinTransaction ? session.getTransactionStart()
: session.getCurrentCommandStart()).convertTo(Value.DATE);
break;
}
case CURTIME:
case CURRENT_TIME: {
ValueTime vt = (ValueTime) (database.getMode().dateTimeValueWithinTransaction
? session.getTransactionStart()
: session.getCurrentCommandStart()).convertTo(Value.TIME);
result = vt.convertScale(false, v0 == null ? 0 : v0.getInt());
break;
}
case LOCALTIMESTAMP: {
Value vt = (database.getMode().dateTimeValueWithinTransaction ? session.getTransactionStart()
: session.getCurrentCommandStart()).convertTo(Value.TIMESTAMP);
result = vt.convertScale(false, v0 == null ? 6 : v0.getInt());
break;
}
case CURRENT_TIMESTAMP: {
ValueTimestampTimeZone vt = database.getMode().dateTimeValueWithinTransaction
? session.getTransactionStart()
: session.getCurrentCommandStart();
result = vt.convertScale(false, v0 == null ? 6 : v0.getInt());
break;
}
case DATABASE: case DATABASE:
result = ValueString.get(database.getShortName(), result = ValueString.get(database.getShortName(),
database.getMode().treatEmptyStringsAsNull); database.getMode().treatEmptyStringsAsNull);
...@@ -2089,9 +2086,10 @@ public class Function extends Expression implements FunctionCall { ...@@ -2089,9 +2086,10 @@ public class Function extends Expression implements FunctionCall {
case GREATEST: case GREATEST:
min = 1; min = 1;
break; break;
case LOCALTIMESTAMP:
case CURRENT_TIME: case CURRENT_TIME:
case LOCALTIME:
case CURRENT_TIMESTAMP: case CURRENT_TIMESTAMP:
case LOCALTIMESTAMP:
case RAND: case RAND:
max = 1; max = 1;
break; break;
...@@ -2600,7 +2598,10 @@ public class Function extends Expression implements FunctionCall { ...@@ -2600,7 +2598,10 @@ public class Function extends Expression implements FunctionCall {
} }
return builder.append(" END"); return builder.append(" END");
} }
builder.append('('); boolean addParentheses = args.length > 0 || info.requireParentheses;
if (addParentheses) {
builder.append('(');
}
switch (info.type) { switch (info.type) {
case CAST: { case CAST: {
args[0].getSQL(builder).append(" AS "). args[0].getSQL(builder).append(" AS ").
...@@ -2630,7 +2631,10 @@ public class Function extends Expression implements FunctionCall { ...@@ -2630,7 +2631,10 @@ public class Function extends Expression implements FunctionCall {
default: default:
writeExpressions(builder, args); writeExpressions(builder, args);
} }
return builder.append(')'); if (addParentheses) {
builder.append(')');
}
return builder;
} }
@Override @Override
......
...@@ -45,6 +45,11 @@ public final class FunctionInfo { ...@@ -45,6 +45,11 @@ public final class FunctionInfo {
*/ */
final boolean bufferResultSetToLocalTemp; final boolean bufferResultSetToLocalTemp;
/**
* Should the no-arg function require parentheses.
*/
final boolean requireParentheses;
/** /**
* Creates new instance of built-in function information. * Creates new instance of built-in function information.
* *
...@@ -65,9 +70,11 @@ public final class FunctionInfo { ...@@ -65,9 +70,11 @@ public final class FunctionInfo {
* @param bufferResultSetToLocalTemp * @param bufferResultSetToLocalTemp
* should the return value ResultSet be buffered in a local * should the return value ResultSet be buffered in a local
* temporary file? * temporary file?
* @param requireParentheses
* should the no-arg function require parentheses
*/ */
public FunctionInfo(String name, int type, int parameterCount, int returnDataType, boolean nullIfParameterIsNull, public FunctionInfo(String name, int type, int parameterCount, int returnDataType, boolean nullIfParameterIsNull,
boolean deterministic, boolean bufferResultSetToLocalTemp) { boolean deterministic, boolean bufferResultSetToLocalTemp, boolean requireParentheses) {
this.name = name; this.name = name;
this.type = type; this.type = type;
this.parameterCount = parameterCount; this.parameterCount = parameterCount;
...@@ -75,10 +82,12 @@ public final class FunctionInfo { ...@@ -75,10 +82,12 @@ public final class FunctionInfo {
this.nullIfParameterIsNull = nullIfParameterIsNull; this.nullIfParameterIsNull = nullIfParameterIsNull;
this.deterministic = deterministic; this.deterministic = deterministic;
this.bufferResultSetToLocalTemp = bufferResultSetToLocalTemp; this.bufferResultSetToLocalTemp = bufferResultSetToLocalTemp;
this.requireParentheses = requireParentheses;
} }
/** /**
* Creates a copy of built-in function information with a different name. * Creates a copy of built-in function information with a different name. A
* copy will require parentheses.
* *
* @param source * @param source
* the source information * the source information
...@@ -93,6 +102,7 @@ public final class FunctionInfo { ...@@ -93,6 +102,7 @@ public final class FunctionInfo {
nullIfParameterIsNull = source.nullIfParameterIsNull; nullIfParameterIsNull = source.nullIfParameterIsNull;
deterministic = source.deterministic; deterministic = source.deterministic;
bufferResultSetToLocalTemp = source.bufferResultSetToLocalTemp; bufferResultSetToLocalTemp = source.bufferResultSetToLocalTemp;
requireParentheses = true;
} }
} }
...@@ -38,11 +38,11 @@ public class FunctionsMySQL extends FunctionsBase { ...@@ -38,11 +38,11 @@ public class FunctionsMySQL extends FunctionsBase {
static { static {
FUNCTIONS.put("UNIX_TIMESTAMP", new FunctionInfo("UNIX_TIMESTAMP", UNIX_TIMESTAMP, FUNCTIONS.put("UNIX_TIMESTAMP", new FunctionInfo("UNIX_TIMESTAMP", UNIX_TIMESTAMP,
VAR_ARGS, Value.INT, false, false, false)); VAR_ARGS, Value.INT, false, false, false, true));
FUNCTIONS.put("FROM_UNIXTIME", new FunctionInfo("FROM_UNIXTIME", FROM_UNIXTIME, FUNCTIONS.put("FROM_UNIXTIME", new FunctionInfo("FROM_UNIXTIME", FROM_UNIXTIME,
VAR_ARGS, Value.STRING, false, true, false)); VAR_ARGS, Value.STRING, false, true, false, true));
FUNCTIONS.put("DATE", new FunctionInfo("DATE", DATE, FUNCTIONS.put("DATE", new FunctionInfo("DATE", DATE,
1, Value.DATE, false, true, false)); 1, Value.DATE, false, true, false, true));
} }
/** /**
......
...@@ -88,10 +88,10 @@ ALTER TABLE TEST ALTER COLUMN V SET ON UPDATE NULL; ...@@ -88,10 +88,10 @@ ALTER TABLE TEST ALTER COLUMN V SET ON UPDATE NULL;
SELECT COLUMN_NAME, COLUMN_DEFAULT, COLUMN_ON_UPDATE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'TEST' ORDER BY COLUMN_NAME; SELECT COLUMN_NAME, COLUMN_DEFAULT, COLUMN_ON_UPDATE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'TEST' ORDER BY COLUMN_NAME;
> COLUMN_NAME COLUMN_DEFAULT COLUMN_ON_UPDATE > COLUMN_NAME COLUMN_DEFAULT COLUMN_ON_UPDATE
> ----------- --------------------------- ------------------- > ----------- --------------------------- -----------------
> ID null null > ID null null
> V (NEXT VALUE FOR PUBLIC.SEQ) NULL > V (NEXT VALUE FOR PUBLIC.SEQ) NULL
> V2 null CURRENT_TIMESTAMP() > V2 null CURRENT_TIMESTAMP
> rows (ordered): 3 > rows (ordered): 3
ALTER TABLE TEST ALTER COLUMN V DROP ON UPDATE; ALTER TABLE TEST ALTER COLUMN V DROP ON UPDATE;
...@@ -99,10 +99,10 @@ ALTER TABLE TEST ALTER COLUMN V DROP ON UPDATE; ...@@ -99,10 +99,10 @@ ALTER TABLE TEST ALTER COLUMN V DROP ON UPDATE;
SELECT COLUMN_NAME, COLUMN_DEFAULT, COLUMN_ON_UPDATE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'TEST' ORDER BY COLUMN_NAME; SELECT COLUMN_NAME, COLUMN_DEFAULT, COLUMN_ON_UPDATE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'TEST' ORDER BY COLUMN_NAME;
> COLUMN_NAME COLUMN_DEFAULT COLUMN_ON_UPDATE > COLUMN_NAME COLUMN_DEFAULT COLUMN_ON_UPDATE
> ----------- --------------------------- ------------------- > ----------- --------------------------- -----------------
> ID null null > ID null null
> V (NEXT VALUE FOR PUBLIC.SEQ) null > V (NEXT VALUE FOR PUBLIC.SEQ) null
> V2 null CURRENT_TIMESTAMP() > V2 null CURRENT_TIMESTAMP
> rows (ordered): 3 > rows (ordered): 3
DROP TABLE TEST; DROP TABLE TEST;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论