提交 025129b5 编写于 作者: S SteNicholas 提交者: Liang Zhang

MySQL date function (#4056)

* mysql date funcation
上级 0c56f663
......@@ -54,4 +54,5 @@
<sql-case id="insert_with_str_to_date" value="INSERT INTO t_order(current_date, order_id, user_id) VALUES (str_to_date(?, '%Y-%m-%d'), ?, ?)" db-types="MySQL" />
<sql-case id="insert_on_duplicate_key_update_with_base64_aesencrypt" value="INSERT INTO t_order SET order_id = ?, user_id = ?, status = convert(to_base64(aes_encrypt(?, 'key')) USING utf8) ON DUPLICATE KEY UPDATE status = VALUES(status)" db-types="MySQL" />
<sql-case id="insert_all_with_all_placeholders" value="INSERT ALL INTO t_order (order_id, user_id, status) VALUES (?, ?, ?) INTO t_order (order_id, user_id, status) VALUES (?, ?, ?) INTO t_order (order_id, user_id, status) VALUES (?, ?, ?) SELECT * FROM dual" db-types="Oracle"/>
<sql-case id="insert_with_str_date_add" value="INSERT INTO t_order(current_date, order_id, user_id) VALUES (date_add(now(),interval ? second), ?, ?)" db-types="MySQL" />
</sql-cases>
......@@ -107,8 +107,7 @@ unreservedWord_
| IMPORT | CONCURRENT | XML | POSITION | SHARE | DUMPFILE | CLONE | AGGREGATE | INSTALL | UNINSTALL
| RESOURCE | FLUSH | RESET | RESTART | HOSTS | RELAY | EXPORT | USER_RESOURCES | SLOW | GENERAL | CACHE
| SUBJECT | ISSUER | OLD | RANDOM | RETAIN | MAX_USER_CONNECTIONS | MAX_CONNECTIONS_PER_HOUR | MAX_UPDATES_PER_HOUR
| MAX_QUERIES_PER_HOUR | REUSE | OPTIONAL | HISTORY | NEVER | EXPIRE | TYPE | UNIX_TIMESTAMP | LOWER | UPPER | CONTEXT
| CODE | CHANNEL | SOURCE
| MAX_QUERIES_PER_HOUR | REUSE | OPTIONAL | HISTORY | NEVER | EXPIRE | TYPE | CONTEXT | CODE | CHANNEL | SOURCE
;
schemaName
......@@ -451,8 +450,8 @@ regularFunctionName_
| ST_MULTIPOLYGONFROMWKB | ST_NUMGEOMETRIES | ST_NUMINTERIORRING | ST_NUMINTERIORRINGS | ST_NUMPOINTS | ST_OVERLAPS | ST_POINTFROMGEOHASH
| ST_POINTFROMTEXT | ST_POINTFROMWKB | ST_POINTN | ST_POLYFROMTEXT | ST_POLYFROMWKB | ST_POLYGONFROMTEXT | ST_POLYGONFROMWKB | ST_SIMPLIFY
| ST_SRID | ST_STARTPOINT | ST_SWAPXY | ST_SYMDIFFERENCE | ST_TOUCHES | ST_TRANSFORM | ST_UNION | ST_VALIDATE | ST_WITHIN | ST_X | ST_Y
| TIME | TIMEDIFF | TIMESTAMP | TIMESTAMPADD | TIMESTAMPDIFF | TIME_FORMAT | TIME_TO_SEC
| AES_DECRYPT | AES_ENCRYPT | FROM_BASE64 | TO_BASE64
| TIME | TIMEDIFF | TIMESTAMP | TIMESTAMPADD | TIMESTAMPDIFF | TIME_FORMAT | TIME_TO_SEC | AES_DECRYPT | AES_ENCRYPT | FROM_BASE64 | TO_BASE64
| ADDDATE | ADDTIME | DATE | DATE_ADD | DATE_SUB |
;
matchExpression_
......
......@@ -1516,6 +1516,22 @@ UPPER
: U P P E R
;
ADDDATE
: A D D D A T E
;
ADDTIME
: A D D T I M E
;
DATE_ADD
: D A T E UL_ A D D
;
DATE_SUB
: D A T E UL_ S U B
;
DATEDIFF
: D A T E D I F F
;
......
......@@ -92,7 +92,7 @@ unreservedWord_
| TEMP | TEMPORARY | TRIGGER | TYPE | UNBOUNDED | UNLOGGED | UPDATE
| USAGE | VALID | VALIDATE | WITHIN | WITHOUT | ZONE | GROUPS
| RECURSIVE | INSTANCE | DEFINER | PRESERVE | SQL | LOCAL | CASCADED
| CLOSE | OPEN | NEXT | NAME | NAMES | INTEGER | REAL | DECIMAL
| CLOSE | OPEN | NEXT | NAME | NAMES | INTEGER | REAL | DECIMAL | TYPE
| BOOLEAN | CHAR | TIME | TIMESTAMP | INTERVAL
;
......
......@@ -77,7 +77,7 @@ public final class SQLParserParameterizedTest {
public void assertSupportedSQL() {
String sql = SQL_CASES_LOADER.getSQL(sqlCaseId, sqlCaseType, PARSER_RESULT_SET_REGISTRY.get(sqlCaseId).getParameters());
ParserResult expected = ParserResultSetRegistryFactory.getInstance().getRegistry().get(sqlCaseId);
if (expected.isLongSQL() && Boolean.valueOf(PROPS.getProperty("long.sql.skip", Boolean.TRUE.toString()))) {
if (expected.isLongSQL() && Boolean.parseBoolean(PROPS.getProperty("long.sql.skip", Boolean.TRUE.toString()))) {
return;
}
SQLStatementAssertMessage assertMessage = new SQLStatementAssertMessage(sqlCaseId, sqlCaseType);
......
......@@ -978,4 +978,32 @@
</and-condition>
</sharding-conditions>
</parser-result>
<parser-result sql-case-id="insert_with_str_date_add" parameters="1, 1, 1">
<tables>
<table name="t_order" start-index="12" stop-index="18" />
</tables>
<insert-columns-and-values column-names="current_date,order_id,user_id">
<insert-values>
<insert-value>
<assignment type-for-placeholder="ExpressionProjectionSegment" text-for-placeholder="date_add(now(),interval?second)" type-for-literal="ExpressionProjectionSegment" text-for-literal="date_add(now(),interval1second)"/>
<assignment type-for-placeholder="ParameterMarkerExpressionSegment" text-for-placeholder="1" type-for-literal="LiteralExpressionSegment" text-for-literal="1"/>
<assignment type-for-placeholder="ParameterMarkerExpressionSegment" text-for-placeholder="2" type-for-literal="LiteralExpressionSegment" text-for-literal="1"/>
</insert-value>
</insert-values>
</insert-columns-and-values>
<sharding-conditions>
<and-condition>
<condition column-name="current_date" table-name="t_order" operator="EQUAL">
<value index="0" literal="1" type="varchar" />
</condition>
<condition column-name="order_id" table-name="t_order" operator="EQUAL">
<value index="1" literal="1" type="int" />
</condition>
<condition column-name="user_id" table-name="t_order" operator="EQUAL">
<value index="2" literal="1" type="int" />
</condition>
</and-condition>
</sharding-conditions>
</parser-result>
</parser-result-sets>
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册