aboutsummaryrefslogtreecommitdiffstats
path: root/src/modules/objects
diff options
context:
space:
mode:
authorGravatar Noldor2009-02-27 18:46:22 +0000
committerGravatar Noldor2009-02-27 18:46:22 +0000
commit46727010a2df7d2d6f9e046b0bfc899e82a1ec6d (patch)
tree6cf26913c3465f9841a3f85e893b37adc935f439 /src/modules/objects
parentcompilation fix for previous commit (diff)
downloadKVIrc-46727010a2df7d2d6f9e046b0bfc899e82a1ec6d.tar.gz
KVIrc-46727010a2df7d2d6f9e046b0bfc899e82a1ec6d.tar.bz2
KVIrc-46727010a2df7d2d6f9e046b0bfc899e82a1ec6d.zip
Added transaction in sql class
git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@3106 17fca916-40b9-46aa-a4ea-0a15b648b75c
Diffstat (limited to 'src/modules/objects')
-rw-r--r--src/modules/objects/class_sql.cpp46
-rw-r--r--src/modules/objects/class_sql.h2
2 files changed, 45 insertions, 3 deletions
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 <KviKvsObject_sql> 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(<connection_name:string>)
Initialize the query for the database <connection_name> which has to be already connected.
+ !fn: $transaction()
+ Begin a transaction.
+ !fn: $commit()
+ Commit the transaction.
!fn: $setCurrentQuery(<connection_name:string>)
Sets the query for the database connection <connection_name> , which has to be already connected, as current query.
!fn: <connection_name:string> $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);