Skip to content

Commit

Permalink
Merge pull request #2126 from kuzudb/fix-transaction-syntax
Browse files Browse the repository at this point in the history
Update begin trasaction syntax
  • Loading branch information
andyfengHKU committed Oct 2, 2023
2 parents 850f506 + 353ecef commit f28f3d3
Show file tree
Hide file tree
Showing 52 changed files with 1,340 additions and 1,334 deletions.
6 changes: 4 additions & 2 deletions src/antlr4/Cypher.g4
Original file line number Diff line number Diff line change
Expand Up @@ -184,8 +184,8 @@ oC_Profile
PROFILE : ( 'P' | 'p' ) ( 'R' | 'r' ) ( 'O' | 'o' ) ( 'F' | 'f' ) ( 'I' | 'i' ) ( 'L' | 'l' ) ( 'E' | 'e' ) ;

kU_Transaction
: BEGIN SP READ SP TRANSACTION
| BEGIN SP WRITE SP TRANSACTION
: BEGIN SP TRANSACTION
| BEGIN SP TRANSACTION SP READ SP ONLY
| COMMIT
| COMMIT_SKIP_CHECKPOINT
| ROLLBACK
Expand All @@ -197,6 +197,8 @@ TRANSACTION : ( 'T' | 't' ) ( 'R' | 'r' ) ( 'A' | 'a' ) ( 'N' | 'n' ) ( 'S' | 's

READ : ( 'R' | 'r' ) ( 'E' | 'e' ) ( 'A' | 'a' ) ( 'D' | 'd' ) ;

ONLY : ('O' | 'o' ) ( 'N' | 'n' ) ( 'L' | 'l' ) ( 'Y' | 'y' ) ;

WRITE : ( 'W' | 'w' ) ( 'R' | 'r' ) ( 'I' | 'i' ) ( 'T' | 't' ) ( 'E' | 'e' ) ;

COMMIT : ( 'C' | 'c' ) ( 'O' | 'o' ) ( 'M' | 'm' ) ( 'M' | 'm' ) ( 'I' | 'i' ) ( 'T' | 't' ) ;
Expand Down
4 changes: 2 additions & 2 deletions src/main/connection.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,11 @@ Connection::Connection(Database* database) {
Connection::~Connection() {}

void Connection::beginReadOnlyTransaction() {
query("BEGIN READ TRANSACTION");
query("BEGIN TRANSACTION READ ONLY");
}

void Connection::beginWriteTransaction() {
query("BEGIN WRITE TRANSACTION");
query("BEGIN TRANSACTION");
}

void Connection::commit() {
Expand Down
10 changes: 6 additions & 4 deletions src/parser/transform/transform_transaction.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,12 @@ namespace parser {

std::unique_ptr<Statement> Transformer::transformTransaction(
CypherParser::KU_TransactionContext& ctx) {
if (ctx.READ()) {
return std::make_unique<TransactionStatement>(TransactionAction::BEGIN_READ);
} else if (ctx.WRITE()) {
return std::make_unique<TransactionStatement>(TransactionAction::BEGIN_WRITE);
if (ctx.TRANSACTION()) {
if (ctx.READ()) {
return std::make_unique<TransactionStatement>(TransactionAction::BEGIN_READ);
} else {
return std::make_unique<TransactionStatement>(TransactionAction::BEGIN_WRITE);
}
} else if (ctx.COMMIT()) {
return std::make_unique<TransactionStatement>(TransactionAction::COMMIT);
} else if (ctx.COMMIT_SKIP_CHECKPOINT()) {
Expand Down
4 changes: 2 additions & 2 deletions test/graph_test/graph_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ void BaseGraphTest::commitOrRollbackConnectionAndInitDBIfNecessary(
if (transactionTestType == TransactionTestType::RECOVERY) {
// This creates a new database/conn/readConn and should run the recovery algorithm.
createDBAndConn();
conn->query("BEGIN WRITE TRANSACTION");
conn->query("BEGIN TRANSACTION");
}
}

Expand Down Expand Up @@ -215,7 +215,7 @@ void BaseGraphTest::commitOrRollbackConnection(
} else {
conn->query("ROLLBACK");
}
conn->query("BEGIN WRITE TRANSACTION");
conn->query("BEGIN TRANSACTION");
} else {
if (isCommit) {
conn->query("COMMIT_SKIP_CHECKPOINT");
Expand Down
8 changes: 4 additions & 4 deletions test/main/connection_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -108,13 +108,13 @@ TEST_F(ApiTest, CommitRollbackRemoveActiveTransaction) {

TEST_F(ApiTest, BeginningMultipleTransactionErrors) {
conn->beginWriteTransaction();
ASSERT_FALSE(conn->query("BEGIN WRITE TRANSACTION")->isSuccess());
ASSERT_FALSE(conn->query("BEGIN TRANSACTION")->isSuccess());
conn->beginWriteTransaction();
ASSERT_FALSE(conn->query("BEGIN READ TRANSACTION")->isSuccess());
ASSERT_FALSE(conn->query("BEGIN TRANSACTION READ ONLY")->isSuccess());
conn->beginReadOnlyTransaction();
ASSERT_FALSE(conn->query("BEGIN WRITE TRANSACTION")->isSuccess());
ASSERT_FALSE(conn->query("BEGIN TRANSACTION")->isSuccess());
conn->beginReadOnlyTransaction();
ASSERT_FALSE(conn->query("BEGIN READ TRANSACTION")->isSuccess());
ASSERT_FALSE(conn->query("BEGIN TRANSACTION READ ONLY")->isSuccess());
}

// These two tests are designed to make sure that the explain and profile statements don't create a
Expand Down
4 changes: 2 additions & 2 deletions test/runner/e2e_copy_transaction_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ class TinySnbCopyCSVTransactionTest : public EmptyDBTest {
void copyNodeCSVCommitAndRecoveryTest(TransactionTestType transactionTestType) {
conn->query(createPersonTableCMD);
auto preparedStatement = conn->prepare(copyPersonTableCMD);
conn->query("BEGIN WRITE TRANSACTION");
conn->query("BEGIN TRANSACTION");
auto mapper = PlanMapper(
*getStorageManager(*database), getMemoryManager(*database), getCatalog(*database));
auto physicalPlan =
Expand Down Expand Up @@ -153,7 +153,7 @@ class TinySnbCopyCSVTransactionTest : public EmptyDBTest {
conn->query(copyPersonTableCMD);
conn->query(createKnowsTableCMD);
auto preparedStatement = conn->prepare(copyKnowsTableCMD);
conn->query("BEGIN WRITE TRANSACTION");
conn->query("BEGIN TRANSACTION");
auto mapper = PlanMapper(
*getStorageManager(*database), getMemoryManager(*database), getCatalog(*database));
auto physicalPlan =
Expand Down
2 changes: 1 addition & 1 deletion test/runner/e2e_ddl_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -265,7 +265,7 @@ class TinySnbDDLTest : public DBTest {

void executeQueryWithoutCommit(std::string query) {
auto preparedStatement = conn->prepare(query);
conn->query("BEGIN WRITE TRANSACTION");
conn->query("BEGIN TRANSACTION");
auto mapper = PlanMapper(
*getStorageManager(*database), getMemoryManager(*database), getCatalog(*database));
auto physicalPlan =
Expand Down
8 changes: 4 additions & 4 deletions test/storage/node_insertion_deletion_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ class NodeInsertionDeletionTests : public DBTest {
void initDBAndConnection() {
createDBAndConn();
readConn = std::make_unique<Connection>(database.get());
conn->query("BEGIN WRITE TRANSACTION");
conn->query("BEGIN TRANSACTION");
}

void deleteNode(offset_t id) {
Expand Down Expand Up @@ -56,7 +56,7 @@ TEST_F(NodeInsertionDeletionTests, DeleteAddMixedTest) {
ASSERT_EQ(conn->query(query)->getNext()->getValue(0)->getValue<int64_t>(), 10010);
ASSERT_EQ(readConn->query(query)->getNext()->getValue(0)->getValue<int64_t>(), 10000);
conn->query("COMMIT");
conn->query("BEGIN WRITE TRANSACTION");
conn->query("BEGIN TRANSACTION");
ASSERT_EQ(conn->query(query)->getNext()->getValue(0)->getValue<int64_t>(), 10010);
ASSERT_EQ(readConn->query(query)->getNext()->getValue(0)->getValue<int64_t>(), 10010);

Expand All @@ -67,7 +67,7 @@ TEST_F(NodeInsertionDeletionTests, DeleteAddMixedTest) {
ASSERT_EQ(conn->query(query)->getNext()->getValue(0)->getValue<int64_t>(), 10000);
ASSERT_EQ(readConn->query(query)->getNext()->getValue(0)->getValue<int64_t>(), 10010);
conn->query("COMMIT");
conn->query("BEGIN WRITE TRANSACTION");
conn->query("BEGIN TRANSACTION");
ASSERT_EQ(conn->query(query)->getNext()->getValue(0)->getValue<int64_t>(), 10000);
ASSERT_EQ(readConn->query(query)->getNext()->getValue(0)->getValue<int64_t>(), 10000);

Expand All @@ -78,7 +78,7 @@ TEST_F(NodeInsertionDeletionTests, DeleteAddMixedTest) {
ASSERT_EQ(conn->query(query)->getNext()->getValue(0)->getValue<int64_t>(), 10005);
ASSERT_EQ(readConn->query(query)->getNext()->getValue(0)->getValue<int64_t>(), 10000);
conn->query("COMMIT");
conn->query("BEGIN WRITE TRANSACTION");
conn->query("BEGIN TRANSACTION");
ASSERT_EQ(conn->query(query)->getNext()->getValue(0)->getValue<int64_t>(), 10005);
ASSERT_EQ(readConn->query(query)->getNext()->getValue(0)->getValue<int64_t>(), 10005);
}
Expand Down
2 changes: 1 addition & 1 deletion test/test_files/exceptions/copy/auto_commit.test
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
-CASE CopyCSVStatementWithActiveTransactionError
-STATEMENT CREATE NODE TABLE person (ID INT64, fName STRING, gender INT64, isStudent BOOLEAN, isWorker BOOLEAN, age INT64, eyeSight DOUBLE, birthdate DATE, registerTime TIMESTAMP, lastJobDuration INTERVAL, workedHours INT64[], usedNames STRING[], courseScoresPerTerm INT64[][], grades INT64[4], height float, PRIMARY KEY (ID))
---- ok
-STATEMENT BEGIN WRITE TRANSACTION
-STATEMENT BEGIN TRANSACTION
---- ok
-STATEMENT COPY person FROM "${KUZU_ROOT_DIRECTORY}/dataset/tinysnb/vPerson.csv" (HEADER=TRUE, DELIM=',')
---- error
Expand Down
8 changes: 4 additions & 4 deletions test/test_files/exceptions/ddl/auto_commit.test
Original file line number Diff line number Diff line change
Expand Up @@ -4,28 +4,28 @@
--

-CASE CreateTableAutoTransactionError
-STATEMENT BEGIN WRITE TRANSACTION
-STATEMENT BEGIN TRANSACTION
---- ok
-STATEMENT CREATE NODE TABLE UNIVERSITY(NAME STRING, WEBSITE STRING, REGISTER_TIME DATE, PRIMARY KEY (NAME))
---- error
DDL, Copy, createMacro statements can only run in the AUTO_COMMIT mode. Please commit or rollback your previous transaction if there is any and issue the query without beginning a transaction

-CASE DropTableAutoTransactionError
-STATEMENT BEGIN WRITE TRANSACTION
-STATEMENT BEGIN TRANSACTION
---- ok
-STATEMENT DROP TABLE knows
---- error
DDL, Copy, createMacro statements can only run in the AUTO_COMMIT mode. Please commit or rollback your previous transaction if there is any and issue the query without beginning a transaction

-CASE AlterTableAutoTransactionError
-STATEMENT BEGIN WRITE TRANSACTION
-STATEMENT BEGIN TRANSACTION
---- ok
-STATEMENT ALTER TABLE person DROP gender
---- error
DDL, Copy, createMacro statements can only run in the AUTO_COMMIT mode. Please commit or rollback your previous transaction if there is any and issue the query without beginning a transaction

-CASE CreateMacroAutoTransactionError
-STATEMENT BEGIN WRITE TRANSACTION
-STATEMENT BEGIN TRANSACTION
---- ok
-STATEMENT CREATE MACRO var_macro(x) AS x
---- error
Expand Down
2 changes: 1 addition & 1 deletion test/test_files/tinysnb/exception/transaction.test
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

-CASE ParsingErrorRollbackTest

-STATEMENT BEGIN WRITE TRANSACTION
-STATEMENT BEGIN TRANSACTION
---- ok
-STATEMENT CREATE (p:person {ID: 100})
---- ok
Expand Down
4 changes: 2 additions & 2 deletions test/test_files/tinysnb/update_node/create.test
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@
100|50|4:3|5:3

-CASE InsertNodeWithListTest
-STATEMENT BEGIN WRITE TRANSACTION
-STATEMENT BEGIN TRANSACTION
---- ok
-STATEMENT CREATE (:person {ID:11, workedHours:[1,2,3], usedNames:['A', 'this is a long name']})
---- ok
Expand Down Expand Up @@ -151,7 +151,7 @@
-CASE CreateStructWithWriteTransaction
-STATEMENT CREATE NODE TABLE test(id INT64, prop STRUCT(age INT64, name STRING), PRIMARY KEY(id));
---- ok
-STATEMENT BEGIN WRITE TRANSACTION
-STATEMENT BEGIN TRANSACTION
---- ok
-STATEMENT CREATE (a:test {id:1, prop:{age:10, name:'A'}})
---- ok
Expand Down
10 changes: 5 additions & 5 deletions test/test_files/tinysnb/update_node/set.test
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ abcdefghijklmnopqrstuvwxyz

-CASE SetVeryLongListErrorsTest
-DEFINE STRING_EXCEEDS_OVERFLOW ARANGE 0 5990
-STATEMENT BEGIN WRITE TRANSACTION
-STATEMENT BEGIN TRANSACTION
---- ok
-STATEMENT MATCH (a:person) WHERE a.ID=0 SET a.fName="${STRING_EXCEEDS_OVERFLOW}"
---- error
Expand Down Expand Up @@ -231,7 +231,7 @@ Runtime exception: Maximum length of strings is 4096. Input string's length is 2
1|10

-CASE SetNonNullValueWithWriteTransaction
-STATEMENT BEGIN WRITE TRANSACTION
-STATEMENT BEGIN TRANSACTION
---- ok
-STATEMENT MATCH (a:person) WHERE a.ID=0 RETURN a.age
---- 1
Expand All @@ -243,7 +243,7 @@ Runtime exception: Maximum length of strings is 4096. Input string's length is 2
70

-CASE SetNullValueWithWriteTransaction
-STATEMENT BEGIN WRITE TRANSACTION
-STATEMENT BEGIN TRANSACTION
---- ok
-STATEMENT MATCH (a:person) WHERE a.ID=0 RETURN a.age
---- 1
Expand All @@ -254,7 +254,7 @@ Runtime exception: Maximum length of strings is 4096. Input string's length is 2
---- 1

-CASE MultipleSetListValue
-STATEMENT BEGIN WRITE TRANSACTION
-STATEMENT BEGIN TRANSACTION
---- ok
-STATEMENT MATCH (a:person) WHERE a.ID=10 SET a.usedNames=['abcndwjbwesdsd','microsofthbbjuwgedsd']
---- ok
Expand Down Expand Up @@ -309,7 +309,7 @@ Runtime exception: Maximum length of strings is 4096. Input string's length is 2
{age: 10, name: Alice}
{age: 20, name: Bobdjiweknfwhuwiehfuw}
{age: 30, name: Delta}
-STATEMENT BEGIN WRITE TRANSACTION
-STATEMENT BEGIN TRANSACTION
---- ok
-STATEMENT MATCH (t:test) WHERE t.id=1 SET t.prop={age:11, name:'Alicennewjfnwefwfw'}
---- ok
Expand Down
2 changes: 1 addition & 1 deletion test/test_files/transaction/create_macro/create_macro.test
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ result|6|5.600000|00:20:00|[1,3,2]
9

-CASE createMacroReadTrxError
-STATEMENT BEGIN READ TRANSACTION
-STATEMENT BEGIN TRANSACTION READ ONLY
---- ok
-STATEMENT CREATE MACRO var_macro(x) AS x
---- error
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,12 @@


-CASE insertRelsToDifferentNodesCommitNormalExecution
-STATEMENT BEGIN WRITE TRANSACTION
-STATEMENT BEGIN TRANSACTION
---- ok
-INSERT_STATEMENT_BLOCK INSERT_RELS_TO_DIFFERENT_NODES
-STATEMENT COMMIT
---- ok
-STATEMENT BEGIN WRITE TRANSACTION
-STATEMENT BEGIN TRANSACTION
---- ok
-STATEMENT MATCH (a:person)-[e:knows]->(b:person) WHERE a.ID > 50 RETURN e.length, e.place, e.tag
---- 4
Expand All @@ -29,13 +29,13 @@
||

-CASE insertRelsToDifferentNodesCommitRecovery
-STATEMENT BEGIN WRITE TRANSACTION
-STATEMENT BEGIN TRANSACTION
---- ok
-INSERT_STATEMENT_BLOCK INSERT_RELS_TO_DIFFERENT_NODES
-STATEMENT COMMIT_SKIP_CHECKPOINT
---- ok
-RELOADDB
-STATEMENT BEGIN WRITE TRANSACTION
-STATEMENT BEGIN TRANSACTION
---- ok
-STATEMENT MATCH (a:person)-[e:knows]->(b:person) WHERE a.ID > 50 RETURN e.length, e.place, e.tag
---- 4
Expand All @@ -45,24 +45,24 @@
||

-CASE insertRelsToDifferentNodesRollbackNormalExecution
-STATEMENT BEGIN WRITE TRANSACTION
-STATEMENT BEGIN TRANSACTION
---- ok
-INSERT_STATEMENT_BLOCK INSERT_RELS_TO_DIFFERENT_NODES
-STATEMENT Rollback
---- ok
-STATEMENT BEGIN WRITE TRANSACTION
-STATEMENT BEGIN TRANSACTION
---- ok
-STATEMENT MATCH (a:person)-[e:knows]->(b:person) WHERE a.ID > 50 RETURN e.length, e.place, e.tag
---- 0

-CASE insertRelsToDifferentNodesRollbackRecovery
-STATEMENT BEGIN WRITE TRANSACTION
-STATEMENT BEGIN TRANSACTION
---- ok
-INSERT_STATEMENT_BLOCK INSERT_RELS_TO_DIFFERENT_NODES
-STATEMENT ROLLBACK_SKIP_CHECKPOINT
---- ok
-RELOADDB
-STATEMENT BEGIN WRITE TRANSACTION
-STATEMENT BEGIN TRANSACTION
---- ok
-STATEMENT MATCH (a:person)-[e:knows]->(b:person) WHERE a.ID > 50 RETURN e.length, e.place, e.tag
---- 0
Original file line number Diff line number Diff line change
Expand Up @@ -14,50 +14,50 @@
]

-CASE insertRelsToLargeListCommitNormalExecution
-STATEMENT BEGIN WRITE TRANSACTION
-STATEMENT BEGIN TRANSACTION
---- ok
-INSERT_STATEMENT_BLOCK INSERT_RELS_TO_LARGE_LIST
-STATEMENT COMMIT
---- ok
-STATEMENT BEGIN WRITE TRANSACTION
-STATEMENT BEGIN TRANSACTION
---- ok
-STATEMENT MATCH (a:person)-[e:knows]->(b:person) WHERE a.ID = 0 RETURN e.length, e.place, e.tag
---- 2300
<FILE>:insert_rels_to_large_list_commit.txt

-CASE insertRelsToLargeListCommitRecovery
-STATEMENT BEGIN WRITE TRANSACTION
-STATEMENT BEGIN TRANSACTION
---- ok
-INSERT_STATEMENT_BLOCK INSERT_RELS_TO_LARGE_LIST
-STATEMENT COMMIT_SKIP_CHECKPOINT
---- ok
-RELOADDB
-STATEMENT BEGIN WRITE TRANSACTION
-STATEMENT BEGIN TRANSACTION
---- ok
-STATEMENT MATCH (a:person)-[e:knows]->(b:person) WHERE a.ID = 0 RETURN e.length, e.place, e.tag
---- 2300
<FILE>:insert_rels_to_large_list_commit.txt

-CASE insertRelsToLargeListRollbackNormalExecution
-STATEMENT BEGIN WRITE TRANSACTION
-STATEMENT BEGIN TRANSACTION
---- ok
-INSERT_STATEMENT_BLOCK INSERT_RELS_TO_LARGE_LIST
-STATEMENT Rollback
---- ok
-STATEMENT BEGIN WRITE TRANSACTION
-STATEMENT BEGIN TRANSACTION
---- ok
-STATEMENT MATCH (a:person)-[e:knows]->(b:person) WHERE a.ID = 0 RETURN e.length, e.place, e.tag
---- 2304
<FILE>:insert_rels_to_large_list_rollback.txt

-CASE insertRelsToLargeListRollbackRecovery
-STATEMENT BEGIN WRITE TRANSACTION
-STATEMENT BEGIN TRANSACTION
---- ok
-INSERT_STATEMENT_BLOCK INSERT_RELS_TO_LARGE_LIST
-STATEMENT ROLLBACK_SKIP_CHECKPOINT
---- ok
-RELOADDB
-STATEMENT BEGIN WRITE TRANSACTION
-STATEMENT BEGIN TRANSACTION
---- ok
-STATEMENT MATCH (a:person)-[e:knows]->(b:person) WHERE a.ID = 0 RETURN e.length, e.place, e.tag
---- 2304
Expand Down
Loading

0 comments on commit f28f3d3

Please sign in to comment.