diff --git a/Documentation/Changelog.md b/Documentation/Changelog.md index e6f1f809f..a063e96fb 100644 --- a/Documentation/Changelog.md +++ b/Documentation/Changelog.md @@ -29,6 +29,7 @@ For more details, please refer to: as JSON objects (beta level functionality). For more details, please refer to: +* [MariaDB MaxScale 2.0.5 Release Notes](Release-Notes/MaxScale-2.0.5-Release-Notes.md) * [MariaDB MaxScale 2.0.4 Release Notes](Release-Notes/MaxScale-2.0.4-Release-Notes.md) * [MariaDB MaxScale 2.0.3 Release Notes](Release-Notes/MaxScale-2.0.3-Release-Notes.md) * [MariaDB MaxScale 2.0.2 Release Notes](Release-Notes/MaxScale-2.0.2-Release-Notes.md) diff --git a/Documentation/Release-Notes/MaxScale-2.0.5-Release-Notes.md b/Documentation/Release-Notes/MaxScale-2.0.5-Release-Notes.md new file mode 100644 index 000000000..becf7b416 --- /dev/null +++ b/Documentation/Release-Notes/MaxScale-2.0.5-Release-Notes.md @@ -0,0 +1,47 @@ +# MariaDB MaxScale 2.0.5 Release Notes + +Release 2.0.5 is a GA release. + +This document describes the changes in release 2.0.5, when compared to +release [2.0.4](MaxScale-2.0.4-Release-Notes.md). + +If you are upgrading from release 1.4, please also read the following +release notes: +[2.0.4](./MaxScale-2.0.4-Release-Notes.md), +[2.0.3](./MaxScale-2.0.3-Release-Notes.md), +[2.0.2](./MaxScale-2.0.2-Release-Notes.md), +[2.0.1](./MaxScale-2.0.1-Release-Notes.md) and +[2.0.0](./MaxScale-2.0.0-Release-Notes.md). + +For any problems you encounter, please submit a bug report at +[Jira](https://jira.mariadb.org). + +## Bug fixes + +[Here](https://jira.mariadb.org/issues/?jql=project%20%3D%20MXS%20AND%20issuetype%20%3D%20Bug%20AND%20status%20%3D%20Closed%20AND%20fixVersion%20%3D%202.0.5) +is a list of bugs fixed since the release of MaxScale 2.0.4. + +* [MXS-1130](https://jira.mariadb.org/browse/MXS-1130): Unexpected length encoding 'ff' encountered +* [MXS-1123](https://jira.mariadb.org/browse/MXS-1123): connect_timeout setting causes frequent disconnects +* [MXS-1081](https://jira.mariadb.org/browse/MXS-1081): Avro data file corruption +* [MXS-1025](https://jira.mariadb.org/browse/MXS-1025): qc_sqlite always reports " Statement was parsed, but not classified" + +## Known Issues and Limitations + +There are some limitations and known issues within this version of MaxScale. +For more information, please refer to the [Limitations](../About/Limitations.md) document. + +## Packaging + +RPM and Debian packages are provided for the Linux distributions supported +by MariaDB Enterprise. + +Packages can be downloaded [here](https://mariadb.com/resources/downloads). + +## Source Code + +The source code of MaxScale is tagged at GitHub with a tag, which is derived +from the version of MaxScale. For instance, the tag of version `X.Y.Z` of MaxScale +is `maxscale-X.Y.Z`. + +The source code is available [here](https://github.com/mariadb-corporation/MaxScale). diff --git a/query_classifier/qc_sqlite/qc_sqlite.c b/query_classifier/qc_sqlite/qc_sqlite.c index 040332eae..054496f5f 100644 --- a/query_classifier/qc_sqlite/qc_sqlite.c +++ b/query_classifier/qc_sqlite/qc_sqlite.c @@ -1778,6 +1778,17 @@ void mxs_sqlite3Update(Parse* pParse, SrcList* pTabList, ExprList* pChanges, Exp exposed_sqlite3ExprDelete(pParse->db, pWhere); } +void mxs_sqlite3Savepoint(Parse *pParse, int op, Token *pName) +{ + QC_TRACE(); + + QC_SQLITE_INFO* info = this_thread.info; + ss_dassert(info); + + info->status = QC_QUERY_PARSED; + info->type_mask = QUERY_TYPE_WRITE; +} + void maxscaleCollectInfoFromSelect(Parse* pParse, Select* pSelect, int sub_select) { QC_SQLITE_INFO* info = this_thread.info; diff --git a/query_classifier/qc_sqlite/sqlite-src-3110100/src/parse.y b/query_classifier/qc_sqlite/sqlite-src-3110100/src/parse.y index 0c23fa3c7..6fa7afdd9 100644 --- a/query_classifier/qc_sqlite/sqlite-src-3110100/src/parse.y +++ b/query_classifier/qc_sqlite/sqlite-src-3110100/src/parse.y @@ -99,6 +99,7 @@ extern void mxs_sqlite3DropTable(Parse*, SrcList*, int, int, int); extern void mxs_sqlite3EndTable(Parse*, Token*, Token*, u8, Select*, SrcList*); extern void mxs_sqlite3Insert(Parse*, SrcList*, Select*, IdList*, int,ExprList*); extern void mxs_sqlite3RollbackTransaction(Parse*); +extern void mxs_sqlite3Savepoint(Parse *pParse, int op, Token *pName); extern int mxs_sqlite3Select(Parse*, Select*, SelectDest*); extern void mxs_sqlite3StartTable(Parse*,Token*,Token*,int,int,int,int); extern void mxs_sqlite3Update(Parse*, SrcList*, ExprList*, Expr*, int); @@ -339,6 +340,22 @@ cmd ::= END trans_opt. {sqlite3CommitTransaction(pParse);} cmd ::= ROLLBACK trans_opt. {sqlite3RollbackTransaction(pParse);} %endif +%ifdef MAXSCALE +savepoint_opt ::= SAVEPOINT. +savepoint_opt ::= . +work_opt ::= WORK. +work_opt ::= . +cmd ::= SAVEPOINT nm(X). { + mxs_sqlite3Savepoint(pParse, SAVEPOINT_BEGIN, &X); +} +cmd ::= RELEASE savepoint_opt nm(X). { + mxs_sqlite3Savepoint(pParse, SAVEPOINT_RELEASE, &X); +} +cmd ::= ROLLBACK work_opt TO savepoint_opt nm(X). { + mxs_sqlite3Savepoint(pParse, SAVEPOINT_ROLLBACK, &X); +} +%endif + %ifndef MAXSCALE savepoint_opt ::= SAVEPOINT. savepoint_opt ::= . @@ -603,6 +620,7 @@ columnid(A) ::= nm(X). { UNSIGNED VALUE VIEW /*VIRTUAL*/ /*WITH*/ + WORK %endif . %wildcard ANY. diff --git a/query_classifier/qc_sqlite/sqlite-src-3110100/tool/mkkeywordhash.c b/query_classifier/qc_sqlite/sqlite-src-3110100/tool/mkkeywordhash.c index 5940f1c4d..7a6ce5782 100644 --- a/query_classifier/qc_sqlite/sqlite-src-3110100/tool/mkkeywordhash.c +++ b/query_classifier/qc_sqlite/sqlite-src-3110100/tool/mkkeywordhash.c @@ -462,6 +462,7 @@ static Keyword aKeywordTable[] = { { "WHEN", "TK_WHEN", ALWAYS }, { "WHERE", "TK_WHERE", ALWAYS }, #ifdef MAXSCALE + { "WORK", "TK_WORK", ALWAYS }, { "WRITE", "TK_WRITE", ALWAYS }, #endif { "ZEROFILL", "TK_ZEROFILL", ALWAYS }, diff --git a/query_classifier/test/maxscale.test b/query_classifier/test/maxscale.test index 6b3fe828e..95a3c130e 100644 --- a/query_classifier/test/maxscale.test +++ b/query_classifier/test/maxscale.test @@ -71,3 +71,9 @@ COMMIT WORK; ROLLBACK; ROLLBACK WORK; +SAVEPOINT id; +ROLLBACK WORK TO SAVEPOINT id; +ROLLBACK TO SAVEPOINT id; +ROLLBACK WORK TO id; +ROLLBACK TO id; +RELEASE SAVEPOINT id;