From 46727010a2df7d2d6f9e046b0bfc899e82a1ec6d Mon Sep 17 00:00:00 2001 From: Noldor Date: Fri, 27 Feb 2009 18:46:22 +0000 Subject: Added transaction in sql class git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@3106 17fca916-40b9-46aa-a4ea-0a15b648b75c --- src/modules/objects/class_sql.cpp | 46 ++++++++++++++++++++++++++++++++++++--- src/modules/objects/class_sql.h | 2 ++ 2 files changed, 45 insertions(+), 3 deletions(-) (limited to 'src/modules/objects') diff --git a/src/modules/objects/class_sql.cpp b/src/modules/objects/class_sql.cpp index 156e400d6..01629499d 100644 --- a/src/modules/objects/class_sql.cpp +++ b/src/modules/objects/class_sql.cpp @@ -36,18 +36,18 @@ static KviPointerList sql_instances; static bool checkDuplicatedConnection(QString &szConnectionName) { if(!sql_instances.count()) return false; - bool found=false; + bool bFound=false; for(KviKvsObject_sql *i = sql_instances.first(); i; i = sql_instances.next()) { QSqlQuery *q=i->getQueryConnectionsDict().value(szConnectionName); if (q) { i->closeQueryConnection(q); - found=true; + bFound=true; break; } } - return found; + return bFound; }; static void KviKvsSqlInstanceRegister(KviKvsObject_sql *instance) { @@ -89,6 +89,10 @@ static void KviKvsSqlInstanceUnregister(KviKvsObject_sql *instance) Returns as array the database tables list. !fn: $queryInit() Initialize the query for the database which has to be already connected. + !fn: $transaction() + Begin a transaction. + !fn: $commit() + Commit the transaction. !fn: $setCurrentQuery() Sets the query for the database connection , which has to be already connected, as current query. !fn: $currentQuery() @@ -132,6 +136,8 @@ static void KviKvsSqlInstanceUnregister(KviKvsObject_sql *instance) KVSO_BEGIN_REGISTERCLASS(KviKvsObject_sql,"sql","object") + KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_sql,commit) + KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_sql,beginTransaction) KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_sql,setConnection) KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_sql,setCurrentQuery) KVSO_REGISTER_HANDLER_BY_NAME(KviKvsObject_sql,tablesList) @@ -208,6 +214,40 @@ KVSO_CLASS_FUNCTION(sql,setConnection) c->returnValue()->setBoolean(db.open()); return true; } +KVSO_CLASS_FUNCTION(sql,beginTransaction) +{ + QString szConnectionName; + KVSO_PARAMETERS_BEGIN(c) + KVSO_PARAMETER("connectionName",KVS_PT_STRING,0,szConnectionName) + KVSO_PARAMETERS_END(c) + + QStringList connections = QSqlDatabase::connectionNames(); + if (!connections.contains(szConnectionName)) + { + c->warning(__tr2qs_ctx("Connection %Q does not exists","objects"),&szConnectionName); + return true; + } + QSqlDatabase db=QSqlDatabase::database(szConnectionName); + db.transaction(); + return true; +} +KVSO_CLASS_FUNCTION(sql,commit) +{ + QString szConnectionName; + KVSO_PARAMETERS_BEGIN(c) + KVSO_PARAMETER("connectionName",KVS_PT_STRING,0,szConnectionName) + KVSO_PARAMETERS_END(c) + + QStringList connections = QSqlDatabase::connectionNames(); + if (!connections.contains(szConnectionName)) + { + c->warning(__tr2qs_ctx("Connection %Q does not exists","objects"),&szConnectionName); + return true; + } + QSqlDatabase db=QSqlDatabase::database(szConnectionName); + db.commit(); + return true; +} KVSO_CLASS_FUNCTION(sql,closeConnection) { QString szConnectionName; diff --git a/src/modules/objects/class_sql.h b/src/modules/objects/class_sql.h index a47862afc..7c8168c3f 100644 --- a/src/modules/objects/class_sql.h +++ b/src/modules/objects/class_sql.h @@ -50,6 +50,8 @@ protected: }; bool setConnection(KviKvsObjectFunctionCall *c); bool tablesList(KviKvsObjectFunctionCall *c); + bool beginTransaction(KviKvsObjectFunctionCall *c); + bool commit(KviKvsObjectFunctionCall *c); bool queryResultsSize(KviKvsObjectFunctionCall *c); bool queryNext(KviKvsObjectFunctionCall *c); -- cgit v1.3.1-10-gc9f91