phonebookengines/contactsmodel/cntplsql/src/cpredictivesearchsettingstable.cpp
changeset 46 efe85016a067
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines/contactsmodel/cntplsql/src/cpredictivesearchsettingstable.cpp	Wed Jun 23 18:02:44 2010 +0300
@@ -0,0 +1,203 @@
+/*
+* Copyright (c) 2010 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: 
+*
+*/
+
+#include "cpredictivesearchsettingstable.h"
+#include "dbsqlconstants.h"
+
+// This macro suppresses log writes
+//#define NO_PRED_SEARCH_LOGS
+#include "predictivesearchlog.h"
+
+
+_LIT(KSqlContactPredSearchSettingsTable, "pred_search_settings");
+
+_LIT(KCreatePredSearchSettingsTable, "CREATE TABLE pred_search_settings (language INTEGER);");
+
+_LIT(KPredSearchSettingsLanguage, "language");
+
+// How many characters the decimal representation of enum QLocale::Language
+// requires.
+const TInt KSizeOfLanguageValue = 8;
+
+//_LIT(KInsertFormat, "INSERT INTO pred_search_settings (language) VALUES (%d);");
+// e.g. "INSERT INTO pred_search_settings (language) VALUES (8);"
+_LIT(KInsertFormat, "INSERT INTO %S (%S) VALUES (%d);");
+
+// e.g. "UPDATE pred_search_settings SET language = 9;"
+_LIT(KUpdateFormat, "UPDATE %S SET %S = %d;");
+
+// e.g. "SELECT language FROM pred_search_settings;"
+_LIT(KSelectFormat, "SELECT %S FROM %S;");
+
+
+
+CPredictiveSearchSettingsTable*
+CPredictiveSearchSettingsTable::NewL(RSqlDatabase& aDatabase)
+	{
+	PRINT(_L("CPredictiveSearchSettingsTable::NewL"));
+	CPredictiveSearchSettingsTable* self =
+		CPredictiveSearchSettingsTable::NewLC(aDatabase);
+	CleanupStack::Pop(self);
+	PRINT(_L("CPredictiveSearchSettingsTable::NewL ends"));
+	return self;
+	}
+
+CPredictiveSearchSettingsTable*
+CPredictiveSearchSettingsTable::NewLC(RSqlDatabase& aDatabase)
+	{
+	PRINT(_L("CPredictiveSearchSettingsTable::NewLC"));
+	CPredictiveSearchSettingsTable* self =
+		new (ELeave) CPredictiveSearchSettingsTable(aDatabase);
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	PRINT(_L("CPredictiveSearchSettingsTable::NewLC ends"));
+	return self;
+	}
+
+CPredictiveSearchSettingsTable::~CPredictiveSearchSettingsTable()
+	{
+	PRINT(_L("CPredictiveSearchSettingsTable dtor"));
+	PRINT(_L("CPredictiveSearchSettingsTable dtor ends"));
+	}
+
+void CPredictiveSearchSettingsTable::CreateInDbL(CContactItem& /*aItem*/)
+	{
+	}
+
+void CPredictiveSearchSettingsTable::UpdateL(const CContactItem& /*aItem*/)
+	{
+	}
+
+void CPredictiveSearchSettingsTable::DeleteL(const CContactItem& /*aItem*/,
+												TBool& /*aLowDiskErrorOccurred*/)
+	{
+	}
+
+// Create table to an empty database, so there is no need to re-generate QWERTY
+// tables.
+void CPredictiveSearchSettingsTable::CreateTableL()
+	{
+	PRINT(_L("CPredictiveSearchSettingsTable::CreateTableL"));
+
+	User::LeaveIfError(iDatabase.Exec(KCreatePredSearchSettingsTable));
+	enum QLocale::Language language = GetCurrentLanguageL();
+	HBufC* insert = HBufC::NewLC(KInsertFormat().Length() +
+								 KSqlContactPredSearchSettingsTable().Length() +
+							 	 KPredSearchSettingsLanguage().Length() +
+							 	 KSizeOfLanguageValue);
+	insert->Des().AppendFormat(KInsertFormat,
+							   &KSqlContactPredSearchSettingsTable,
+							   &KPredSearchSettingsLanguage,
+							   language);
+	User::LeaveIfError(iDatabase.Exec(*insert));
+	CleanupStack::PopAndDestroy(insert);
+
+	PRINT(_L("CPredictiveSearchSettingsTable::CreateTableL ends"));
+	}
+
+QList<QChar> CPredictiveSearchSettingsTable::FillAllTables() const
+	{
+	QList<QChar> tables;
+	tables.append('1'); // Add one character (does not matter what the character is)
+	return tables;
+	}
+
+HBufC* CPredictiveSearchSettingsTable::TableNameL(const QChar /*aCh*/) const
+	{
+	return KSqlContactPredSearchSettingsTable().AllocL();
+	}
+
+TBool CPredictiveSearchSettingsTable::IsLanguageValidL() const
+	{
+	PRINT(_L("CPredictiveSearchSettingsTable::IsLanguageValidL"));
+	return ReadStoredLanguageL() == GetCurrentLanguageL();
+	}
+
+void CPredictiveSearchSettingsTable::StoreCurrentLanguageL() const
+	{
+	PRINT(_L("CPredictiveSearchSettingsTable::StoreCurrentLanguageL"));
+
+	enum QLocale::Language language = GetCurrentLanguageL();
+	HBufC* update = HBufC::NewLC(KUpdateFormat().Length() +
+								 KSqlContactPredSearchSettingsTable().Length() +
+							 	 KPredSearchSettingsLanguage().Length() +
+							 	 KSizeOfLanguageValue);
+	update->Des().AppendFormat(KUpdateFormat,
+							   &KSqlContactPredSearchSettingsTable,
+							   &KPredSearchSettingsLanguage,
+							   language);
+	User::LeaveIfError(iDatabase.Exec(*update));
+	CleanupStack::PopAndDestroy(update);
+
+	PRINT(_L("CPredictiveSearchSettingsTable::StoreCurrentLanguageL ends"));
+	}
+
+void CPredictiveSearchSettingsTable::ConstructL()
+	{
+	}
+
+enum QLocale::Language CPredictiveSearchSettingsTable::GetCurrentLanguageL() const
+	{
+    enum QLocale::Language language(QLocale::C);
+	QT_TRYCATCH_LEAVING(language = QLocale::system().language());
+	PRINT1(_L("CPredictiveSearchSettingsTable::GetCurrentLanguageL ret=%d"), language);
+	return language;
+	}
+
+enum QLocale::Language CPredictiveSearchSettingsTable::ReadStoredLanguageL() const
+	{
+	TInt bufSize = KSelectFormat().Length() +
+				   KPredSearchSettingsLanguage().Length() +
+				   KSqlContactPredSearchSettingsTable().Length();
+	HBufC* select = HBufC::NewLC(bufSize);
+	select->Des().AppendFormat(KSelectFormat,
+		&KPredSearchSettingsLanguage,
+		&KSqlContactPredSearchSettingsTable);
+
+	RSqlStatement stmnt;
+	CleanupClosePushL(stmnt);
+	PRINT1(_L("CPredictiveSearchSettingsTable::ReadStoredLanguageL SQL:%S"), select);
+    stmnt.PrepareL(iDatabase, *select);
+
+	const TInt KLanguageIndex = 0;
+	TInt err = stmnt.Next();
+	enum QLocale::Language language(QLocale::C);
+	if (err == KSqlAtRow)
+        {
+		language = static_cast<QLocale::Language>(stmnt.ColumnInt(KLanguageIndex));
+		PRINT1(_L("read language=%d from DB"), language);
+        }
+	CleanupStack::PopAndDestroy(&stmnt);
+	CleanupStack::PopAndDestroy(select);
+
+    if (err != KSqlAtRow)
+        {
+		PRINT1(_L("CPredictiveSearchSettingsTable::ReadStoredLanguageL err=%d"), err);
+        User::Leave(err);
+        }
+	PRINT1(_L("CPredictiveSearchSettingsTable::ReadStoredLanguageL ret=%d"), language);
+	return language;
+	}
+
+/**
+Constructor
+*/
+CPredictiveSearchSettingsTable::CPredictiveSearchSettingsTable(
+	RSqlDatabase& aDatabase) :
+	CPplPredictiveSearchTableBase(aDatabase, 0, 0)
+	{
+	}