--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javacommons/javastorage/src/server/storagedbhandler.h Mon May 03 12:27:20 2010 +0300
@@ -0,0 +1,213 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: StorageDBHandler
+*
+*/
+
+
+#ifndef STORAGEDBHANDLER_H
+#define STORAGEDBHANDLER_H
+
+#include <stdio.h>
+#include <string>
+#include <sqlite3.h>
+#include <vector>
+
+#include "javaosheaders.h"
+#include "javastorageexception.h"
+
+namespace java
+{
+namespace storage
+{
+
+/**
+ * StorageDBHandler handles database related operations.
+ */
+class StorageDBHandler
+{
+public:
+ /**
+ * Constructor.
+ */
+ StorageDBHandler();
+
+ /**
+ * Destructor. Close all active database connections.
+ */
+ ~StorageDBHandler();
+
+ /**
+ * Open database connection. Session id for the connection is created and
+ * if the database has not been created yet, it is created now.
+ * If the database is one of the default databases and it is has not
+ * been created yet, the database schema is created along with the database.
+ *
+ * Database can be created anywhere access rights are enough. If only
+ * the name of the database is provided it is created to default location.
+ *
+ * @param aDbName the name of the database to be opened.
+ * @return result code. Negative if problems occurred.
+ */
+ int open(const std::wstring& aDbName);
+
+ /**
+ * Close database connection. If connection has open transaction it is
+ * rollbacked. When connection is closed it's removed from open connection
+ * list.
+ *
+ * @return result code. Negative if problems occurred.
+ */
+ int close();
+
+ /**
+ * Start transaction.
+ *
+ * @return result code. Negative if problems occurred.
+ */
+ int startTransaction();
+
+ /**
+ * Prepare SQL statement.
+ *
+ * @param aMessage SQL statement to be prepared.
+ * @return result code. Negative if problems occurred.
+ */
+ int prepare(const std::wstring& aMessage);
+
+ /**
+ * Execute prepared statement.
+ *
+ * @return reference to database response.
+ */
+ std::wstring& executeStmt();
+
+ /**
+ * Commit transaction.
+ *
+ * @return result code. Negative if problems occurred.
+ */
+ int commit();
+
+ /**
+ * Rollback transaction.
+ *
+ * @return result code. Negative if problems occurred.
+ */
+ int rollback();
+
+ /**
+ * Select used connection from connection list.
+ *
+ * @param aSessionID is used to identify correct connection.
+ * @return true if connection found from the list, false otherwise.
+ */
+ bool selectConnection(const std::wstring& aSessionID);
+
+ /**
+ * Get error message from the database.
+ *
+ * @return error message.
+ */
+ const char* getErrorMessage();
+
+ /**
+ * Get error code from the database.
+ *
+ * @return error code.
+ */
+ int getErrorCode();
+
+ /**
+ * Return session id of the current connection.
+ *
+ * @return session id.
+ */
+ std::wstring returnSessionID();
+
+ /**
+ * Database callback method. This is used to log errors.
+ *
+ * @param aNotUsed not used.
+ * @param aArgc received argument amount.
+ * @param aArgv argument value.
+ * @param aAzColName column name.
+ * @return error code.
+ */
+ static int dBCallback(void *aNotUsed,
+ int aArgc,
+ char **aArgv,
+ char **aAzColName);
+
+private:
+
+ /**
+ * Initialise given storage. Create database structures.
+ *
+ * @param aDbName database to be initialized.
+ * @throws JavaStorageException if table creation fails.
+ */
+ void initializeDatabase(const std::string& aDbName)
+ throw(JavaStorageException);
+
+ /**
+ * Check whether given storage is initialized or not.
+ * Supports only predefined tables. If table is not predefined
+ * false is returned.
+ *
+ * @param aStorageName to be checked is initialized.
+ * @return true if already initialized, false otherwise.
+ */
+ bool isDBInitialized(const std::string& aDbName);
+
+ /**
+ * Execute standalone statement against database. Only operation result
+ * code is checked.
+ *
+ * @param aStatement SQL statement to be executed.
+ * @throws JavaStorageException if execution fails.
+ */
+ void executeStandalone(const std::string& aStatement)
+ throw(JavaStorageException);
+
+private:
+ /**
+ * Current database connection.
+ */
+ sqlite3 *iDb;
+
+ /**
+ * Current statement. This is initialized at prepare and
+ * finalized at executeStmt method.
+ * If error occurs while preparing the statement SQLite will finalize
+ * statement.
+ */
+ sqlite3_stmt *iStatement;
+
+ /**
+ * Current database response. This is cleared when executeStmt is
+ * called again.
+ */
+ std::wstring iResultString;
+ bool mHavingTransaction;
+ std::pair<std::wstring, sqlite3*> iCurrentSession;
+ std::vector<std::pair<std::wstring, sqlite3*> > iDbList;
+ std::vector<std::pair<std::wstring, sqlite3*> >::iterator iDbListIter;
+
+};
+
+} // java
+} // storage
+
+#endif // STORAGEDBHANDLER_H