From eb07cd94257b37ec2ea3a4e7033063dc9d20e3fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Constantino=20V=C3=A1zquez=20Blanco?= Date: Thu, 29 Apr 2010 18:11:04 +0200 Subject: [PATCH] feature #206: Isolation of INSERT and REPLACE SQL queries for VirtualMachine objects. --- include/VirtualMachine.h | 8 ++++++++ src/vm/VirtualMachine.cc | 33 +++++++++++++++++++++++++++------ 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/include/VirtualMachine.h b/include/VirtualMachine.h index 68577ed953..bdbeca31de 100644 --- a/include/VirtualMachine.h +++ b/include/VirtualMachine.h @@ -875,6 +875,14 @@ private: * @return 0 on success */ int select_cb(void *nil, int num, char **names, char ** values); + + /** + * Execute an INSERT or REPLACE Sql query. + * @param db The SQL DB + * @param replace Execute an INSERT or a REPLACE + * @return 0 one success + */ + int insert_replace(SqlDB *db, bool replace); /** * Updates the VM history record diff --git a/src/vm/VirtualMachine.cc b/src/vm/VirtualMachine.cc index 8cf043da30..ab28645945 100644 --- a/src/vm/VirtualMachine.cc +++ b/src/vm/VirtualMachine.cc @@ -304,14 +304,14 @@ int VirtualMachine::insert(SqlDB * db) // Insert the template first, so we get a valid template ID. Then the VM // ------------------------------------------------------------------------ - rc = vm_template.insert(db); + rc = vm_template.insert_replace(db, false); if ( rc != 0 ) { goto error_template; } - rc = update(db); + rc = insert_replace(db, false); if ( rc != 0 ) { @@ -336,10 +336,22 @@ error_leases: return -1; } -/* -------------------------------------------------------------------------- */ -/* -------------------------------------------------------------------------- */ +/* ------------------------------------------------------------------------ */ +/* ------------------------------------------------------------------------ */ int VirtualMachine::update(SqlDB * db) +{ + int rc; + + rc = insert_replace(db, true); + + return rc; +} + +/* ------------------------------------------------------------------------ */ +/* ------------------------------------------------------------------------ */ + +int VirtualMachine::insert_replace(SqlDB *db, bool replace) { ostringstream oss; int rc; @@ -361,8 +373,17 @@ int VirtualMachine::update(SqlDB * db) db->free_str(sql_deploy_id); return -1; } - - oss << "INSERT OR REPLACE INTO " << table << " "<< db_names <<" VALUES ("<< + + if(replace) + { + oss << "REPLACE"; + } + else + { + oss << "INSERT"; + } + + oss << " INTO " << table << " "<< db_names <<" VALUES ("<< oid << "," << uid << "," << "'" << sql_name << "'," <<