commands/sql/sqlcmd_open.cpp
changeset 0 7f656887cf89
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/commands/sql/sqlcmd_open.cpp	Wed Jun 23 15:52:26 2010 +0100
@@ -0,0 +1,562 @@
+// sqlcmd_open.cpp
+// 
+// Copyright (c) 2009 - 2010 Accenture. All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the "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:
+// Accenture - Initial contribution
+//
+
+#include "sqlcmd_open.h"
+#include "sqlsrv.h"
+
+/////////////////////////////////////////////////////////////////////////////////////////
+_LIT(KCommandName, "open");
+
+CServerCommandBase* CSqlCmdOpen::NewLC()
+	{
+	CSqlCmdOpen* self = new(ELeave) CSqlCmdOpen();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CSqlCmdOpen::~CSqlCmdOpen()
+	{
+	delete iFileName;	
+	}
+
+const TDesC& CSqlCmdOpen::NameS()
+	{
+	return KCommandName;
+	}
+
+void CSqlCmdOpen::ConstructL()
+	{
+	BaseConstructL();
+	}
+
+const TDesC& CSqlCmdOpen::Name() const
+	{
+	return KCommandName;
+	}
+
+const TDesC& CSqlCmdOpen::Description() const
+	{
+	_LIT(KDescription, "open an existing SQL database file");
+	return KDescription;
+	}
+
+//virtual 
+void CSqlCmdOpen::ArgumentsL(RCommandArgumentList& aArguments)
+{
+	_LIT(KName, "filename");
+	_LIT(KDescription, "filename of the SQL database file. Should contain path.");
+	aArguments.AppendStringL(iFileName, KName, KDescription, KValueTypeFlagOptional);
+}
+
+void CSqlCmdOpen::DoRunL()
+	{
+	if (iFileName==NULL || iFileName->Length()==0 )
+		{
+		LeaveIfErr(KErrArgument, _L("Database filename unspecified."));
+		}
+	
+	CCmdSqlSrv* pSrv = CCmdSqlSrv::GetServer(); 
+	pSrv->SqlOpenL(*iFileName, this);
+	}
+
+/////////////////////////////////////////////////////////////////////////////////////
+_LIT(KCommandExit, "exit");
+
+CServerCommandBase* CSqlCmdExit::NewLC()
+	{
+	CSqlCmdExit* self = new(ELeave) CSqlCmdExit();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CSqlCmdExit::~CSqlCmdExit()
+	{
+	}
+
+const TDesC& CSqlCmdExit::NameS()
+	{
+	return KCommandExit;
+	}
+
+void CSqlCmdExit::ConstructL()
+	{
+	BaseConstructL();
+	}
+
+const TDesC& CSqlCmdExit::Name() const
+	{
+	return KCommandExit;
+	}
+
+const TDesC& CSqlCmdExit::Description() const
+	{
+	_LIT(KDescription, "Shut down amsrv.");
+	return KDescription;
+	}
+
+void CSqlCmdExit::DoRunL()
+	{
+	CCmdSqlSrv* pSrv = CCmdSqlSrv::GetServer(); 
+	pSrv->Exit(KErrNone);
+
+	}
+
+/////////////////////////////////////////////////////////////////////////////////////
+_LIT(KCommandClose, "close");
+
+CServerCommandBase* CSqlCmdClose::NewLC()
+	{
+	CSqlCmdClose* self = new(ELeave) CSqlCmdClose();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CSqlCmdClose::~CSqlCmdClose()
+	{
+	}
+
+const TDesC& CSqlCmdClose::NameS()
+	{
+	return KCommandClose;
+	}
+
+void CSqlCmdClose::ConstructL()
+	{
+	BaseConstructL();
+	}
+
+const TDesC& CSqlCmdClose::Name() const
+	{
+	return KCommandClose;
+	}
+
+const TDesC& CSqlCmdClose::Description() const
+	{
+	_LIT(KDescription, "close a SQL database file");
+	return KDescription;
+	}
+
+void CSqlCmdClose::DoRunL()
+	{
+	CCmdSqlSrv* pSrv = CCmdSqlSrv::GetServer(); 
+	pSrv->SqlClose(this);
+
+	}
+
+/////////////////////////////////////////////////////////////////////////////////////
+_LIT(KCommandCreate, "create");
+
+CServerCommandBase* CSqlCmdCreate::NewLC()
+	{
+	CSqlCmdCreate* self = new(ELeave) CSqlCmdCreate();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CSqlCmdCreate::~CSqlCmdCreate()
+	{
+	delete iFileName;
+	}
+
+const TDesC& CSqlCmdCreate::NameS()
+	{
+	return KCommandCreate;
+	}
+
+void CSqlCmdCreate::ConstructL()
+	{
+	BaseConstructL();
+	}
+
+const TDesC& CSqlCmdCreate::Name() const
+	{
+	return KCommandCreate;
+	}
+
+const TDesC& CSqlCmdCreate::Description() const
+	{
+	_LIT(KDescription, "Create a SQL database");
+	return KDescription;
+	}
+
+//virtual 
+void CSqlCmdCreate::ArgumentsL(RCommandArgumentList& aArguments)
+	{
+	_LIT(KName, "filename");
+	_LIT(KDescription, "filename of the SQL database file. Should contain path.");
+	aArguments.AppendStringL(iFileName, KName, KDescription, KValueTypeFlagOptional);
+	}
+
+void CSqlCmdCreate::DoRunL()
+	{
+	if (iFileName==NULL || iFileName->Length()==0 )
+		{
+		LeaveIfErr(KErrArgument, _L("Database filename unspecified."));
+		}
+	
+	CCmdSqlSrv* pSrv = CCmdSqlSrv::GetServer(); 
+	pSrv->SqlCreateL(*iFileName, this);
+	}
+
+///////////////////////////////////////////////////////////////////////////////
+
+_LIT(KCommandExec, "exec");
+
+CServerCommandBase* CSqlCmdExec::NewLC()
+	{
+	CSqlCmdExec* self = new(ELeave) CSqlCmdExec();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CSqlCmdExec::~CSqlCmdExec()
+	{
+	delete iExec;
+	}
+
+const TDesC& CSqlCmdExec::NameS()
+	{
+	return KCommandExec;
+	}
+
+void CSqlCmdExec::ConstructL()
+	{
+	BaseConstructL();
+	}
+
+const TDesC& CSqlCmdExec::Name() const
+	{
+	return KCommandExec;
+	}
+
+const TDesC& CSqlCmdExec::Description() const
+	{
+	_LIT(KDescription, "Execute a SQL statement without parameter and response.");
+	return KDescription;
+	}
+
+void CSqlCmdExec::ArgumentsL(RCommandArgumentList& aArguments)
+	{
+	_LIT(KName, "statement");
+	_LIT(KDescription, "The SQL statement to execute");
+	aArguments.AppendStringL(iExec, KName, KDescription, KValueTypeFlagOptional|KValueTypeFlagLast);
+	}
+
+void CSqlCmdExec::DoRunL()
+	{
+	if (iExec==NULL || iExec->Length()==0 )
+		{
+		LeaveIfErr(KErrArgument, _L("SQL statement unspecified."));
+		}
+	CCmdSqlSrv::StripWrapDoubleQuote(*iExec);
+	
+	CCmdSqlSrv* pSrv = CCmdSqlSrv::GetServer(); 
+	pSrv->SqlExecL(*iExec, this);
+	}
+/////////////////////////////////////////////////////////////////////////////////////////////
+
+_LIT(KCommandState, "state");
+
+CServerCommandBase* CSqlCmdState::NewLC()
+	{
+	CSqlCmdState* self = new(ELeave) CSqlCmdState();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CSqlCmdState::~CSqlCmdState()
+	{
+	delete iExec;
+	
+	delete iOptFileName;
+	
+	//delete optional multiple parameter file
+		{
+		TInt optParamCnt = iOptParamFile.Count();
+		if (optParamCnt)
+			{
+			for (TInt i=0; i<optParamCnt; i++)
+				{
+				HBufC* pEle = iOptParamFile[i];
+				delete pEle;			
+				}		
+			}
+		iOptParamFile.Close();
+		}
+		
+/*	
+	//release resource for command-specific arguments 
+	TInt cmdArguCnt = iCmdArgu.Count();
+	if (cmdArguCnt)
+		{
+		for (TInt i=0; i<cmdArguCnt; i++)
+			{
+			HBufC* pEle = iCmdArgu[i];
+			delete pEle;			
+			}		
+		}
+	iCmdArgu.Close();
+*/			
+	}
+
+const TDesC& CSqlCmdState::NameS()
+	{
+	return KCommandState;
+	}
+
+void CSqlCmdState::ConstructL()
+	{
+	BaseConstructL();
+	}
+
+const TDesC& CSqlCmdState::Name() const
+	{
+	return KCommandState;
+	}
+
+const TDesC& CSqlCmdState::Description() const
+	{
+	_LIT(KDescription, "Execute a SQL statement that may come with parameter and response.");
+	return KDescription;
+	}
+
+void CSqlCmdState::ArgumentsL(RCommandArgumentList& aArguments)
+	{
+	_LIT(KName, "statement");
+	_LIT(KDescription, "The SQL statement to execute");
+	aArguments.AppendStringL(iExec, KName, KDescription, KValueTypeFlagOptional|KValueTypeFlagLast);	
+	}
+
+void CSqlCmdState::OptionsL(RCommandOptionList& aOptions)
+	{
+	_LIT(KOptFile, "temp");
+	_LIT(KOptFileDescription, "Specify TEMP file template(used to dump large binary content to file)");
+	aOptions.AppendStringL(iOptFileName, TChar('t'), KOptFile, KOptFileDescription);
+	
+	_LIT(KOptParam, "param");
+	_LIT(KOptParamDescription, "Specify file names, of which the content will be used to fill parameters in SQL statement");
+	aOptions.AppendStringL(iOptParamFile, TChar('p'), KOptParam, KOptParamDescription);
+	}
+
+
+void CSqlCmdState::DoRunL()
+	{
+	//this command requires at least one argument
+	//first argument is a SQL statement, 
+	//and remaining arguments are optional parameters
+	
+	TInt paramCnt = iOptParamFile.Count();
+	if (iExec==0 || iExec->Length()==0 )
+		{
+		LeaveIfErr(KErrArgument, _L("SQL statement unspecified."));
+		}
+	
+	CCmdSqlSrv::StripWrapDoubleQuote(*iExec);
+	
+	CCmdSqlSrv* pSrv = CCmdSqlSrv::GetServer(); 
+	pSrv->SqlStateL(*iExec, iOptParamFile, this, iOptFileName);
+	}
+
+///////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////////////
+_LIT(KCommandAttach, "attach");
+
+CServerCommandBase* CSqlCmdAttach::NewLC()
+	{
+	CSqlCmdAttach* self = new(ELeave) CSqlCmdAttach();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CSqlCmdAttach::~CSqlCmdAttach()
+	{
+	delete iOptFileName;
+	delete iOptDBName;
+	}
+
+const TDesC& CSqlCmdAttach::NameS()
+	{
+	return KCommandAttach;
+	}
+
+void CSqlCmdAttach::ConstructL()
+	{
+	BaseConstructL();
+	}
+
+const TDesC& CSqlCmdAttach::Name() const
+	{
+	return KCommandAttach;
+	}
+
+const TDesC& CSqlCmdAttach::Description() const
+	{
+	_LIT(KDescription, "Attach additional database onto main database file");
+	return KDescription;
+	}
+
+//virtual 
+void CSqlCmdAttach::ArgumentsL(RCommandArgumentList& /*aArguments*/)
+	{
+	}
+
+void CSqlCmdAttach::OptionsL(RCommandOptionList& aOptions)
+	{
+	_LIT(KOptFile, "file");
+	_LIT(KOptFileDescription, "Specify additional database file.");
+	aOptions.AppendStringL(iOptFileName, TChar('f'), KOptFile, KOptFileDescription);
+
+	_LIT(KOptDB, "name");
+	_LIT(KOptDBDescription, "Specify additional database name.");
+	aOptions.AppendStringL(iOptDBName, TChar('n'), KOptDB, KOptDBDescription);
+	}
+
+void CSqlCmdAttach::DoRunL()
+	{
+	if (iOptFileName==NULL || iOptFileName->Length()==0 )
+		{
+		LeaveIfErr(KErrArgument, _L("Database filename unspecified."));
+		}
+	if (iOptDBName==NULL || iOptDBName->Length()==0 )
+		{
+		LeaveIfErr(KErrArgument, _L("Database name unspecified."));
+		}
+	
+	CCmdSqlSrv* pSrv = CCmdSqlSrv::GetServer(); 
+	pSrv->SqlAttachL(*iOptFileName, *iOptDBName, this);
+	}
+
+//////////////////////////////////////////////////////////////////////////////////////
+
+_LIT(KCommandDetach, "detach");
+
+CServerCommandBase* CSqlCmdDetach::NewLC()
+	{
+	CSqlCmdDetach* self = new(ELeave) CSqlCmdDetach();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CSqlCmdDetach::~CSqlCmdDetach()
+	{
+	delete iOptDBName;
+	}
+
+const TDesC& CSqlCmdDetach::NameS()
+	{
+	return KCommandDetach;
+	}
+
+void CSqlCmdDetach::ConstructL()
+	{
+	BaseConstructL();
+	}
+
+const TDesC& CSqlCmdDetach::Name() const
+	{
+	return KCommandDetach;
+	}
+
+const TDesC& CSqlCmdDetach::Description() const
+	{
+	_LIT(KDescription, "Detach additional database which is previously attached onto main database file.");
+	return KDescription;
+	}
+
+void CSqlCmdDetach::ArgumentsL(RCommandArgumentList& /*aArguments*/)
+	{
+	}
+
+void CSqlCmdDetach::OptionsL(RCommandOptionList& aOptions)
+	{
+	_LIT(KOptDB, "name");
+	_LIT(KOptDBDescription, "Specify additional database name.");
+	aOptions.AppendStringL(iOptDBName, TChar('n'), KOptDB, KOptDBDescription);
+	}
+
+void CSqlCmdDetach::DoRunL()
+	{
+	if (iOptDBName==NULL || iOptDBName->Length()==0 )
+		{
+		LeaveIfErr(KErrArgument, _L("Database name unspecified."));
+		}
+	
+	CCmdSqlSrv* pSrv = CCmdSqlSrv::GetServer(); 
+	pSrv->SqlDetachL(*iOptDBName, this);
+	}
+
+///////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////////////
+#ifdef SQL_COMPACT
+
+_LIT(KCommandCompact, "compact");
+
+CServerCommandBase* CSqlCmdCompact::NewLC()
+	{
+	CSqlCmdCompact* self = new(ELeave) CSqlCmdCompact();
+	CleanupStack::PushL(self);
+	self->ConstructL();
+	return self;
+	}
+
+CSqlCmdCompact::~CSqlCmdCompact()
+	{
+	delete iOptDBName;
+	}
+
+const TDesC& CSqlCmdCompact::NameS()
+	{
+	return KCommandCompact;
+	}
+
+void CSqlCmdCompact::ConstructL()
+	{
+	BaseConstructL();
+	}
+
+const TDesC& CSqlCmdCompact::Name() const
+	{
+	return KCommandCompact;
+	}
+
+const TDesC& CSqlCmdCompact::Description() const
+	{
+	_LIT(KDescription, "Compacts the database.(RSqlDatabase::Compact)");
+	return KDescription;
+	}
+
+//virtual 
+void CSqlCmdCompact::ArgumentsL(RCommandArgumentList& aArguments)
+{
+}
+
+void CSqlCmdCompact::OptionsL(RCommandOptionList& aOptions)
+	{
+	_LIT(KOptDB, "name");
+	_LIT(KOptDBDescription, "Specify database name, if unspecified, then main database will be compacted");
+	aOptions.AppendStringL(iOptDBName, TChar('n'), KOptDB, KOptDBDescription);
+	}
+
+void CSqlCmdCompact::DoRunL()
+	{
+	CCmdSqlSrv* pSrv = CCmdSqlSrv::GetServer(); 
+	pSrv->SqlCompactL(iOptDBName, this);
+	}
+#endif