// This is the SIP interface definition for TQSqlDatabase.
//
// Copyright (c) 2007
// 	Riverbank Computing Limited <info@riverbankcomputing.co.uk>
// 
// This file is part of PyTQt.
// 
// This copy of PyTQt is free software; you can redistribute it and/or modify it
// under the terms of the GNU General Public License as published by the Free
// Software Foundation; either version 2, or (at your option) any later
// version.
// 
// PyTQt is supplied in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
// FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
// details.
// 
// You should have received a copy of the GNU General Public License along with
// PyTQt; see the file LICENSE.  If not, write to the Free Software Foundation,
// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.


%ExportedDoc
<Sect2><Title>TQSqlDatabase (TQt v3+)</Title>
<FuncSynopsis>
        <FuncDef>TQSqlQuery <Function>exec</Function></FuncDef>
        <ParamDef>const TQString &amp;<Parameter>query</Parameter> = TQString::null</ParamDef>
</FuncSynopsis>
<Para>
This has been renamed <Literal>execStatement</Literal> in Python.
</Para>
</Sect2>
%End


class TQSqlDatabase : TQObject
{
%TypeHeaderCode
#include <tqsqldatabase.h>
%End

public:
%ConvertToSubClassCode
	static struct class_graph {
		const char *name;
		sipWrapperType **type;
		int yes, no;
	} graph[] = {
		{sipName_TQSqlDriver,	&sipClass_TQSqlDriver,	-1, 1},
		{sipName_TQEditorFactory,	&sipClass_TQEditorFactory,	7, 2},
		{sipName_TQSqlDatabase,	&sipClass_TQSqlDatabase,	-1, 3},
		{sipName_TQSqlForm,	&sipClass_TQSqlForm,	-1, 4},
		{sipName_TQDataView,	&sipClass_TQDataView,	-1, 5},
		{sipName_TQDataTable,	&sipClass_TQDataTable,	-1, 6},
		{sipName_TQDataBrowser,	&sipClass_TQDataBrowser,	-1, -1},
		{sipName_TQSqlEditorFactory,	&sipClass_TQSqlEditorFactory,	-1, -1},
	};

	int i = 0;

	sipClass = NULL;

	do
	{
		struct class_graph *cg = &graph[i];

		if (cg->name != NULL && sipCpp->inherits(cg->name))
		{
			sipClass = *cg->type;
			i = cg->yes;
		}
		else
			i = cg->no;
	}
	while (i >= 0);
%End

	bool open() /ReleaseGIL/;
	bool open(const TQString &,const TQString &) /ReleaseGIL/;
	void close();
	bool ping();
	bool isOpen() const;
	bool isOpenError() const;
	TQStringList tables() const;
	TQStringList tables(TQSql::TableType) const;
	TQSqlIndex primaryIndex(const TQString &) const;
	TQSqlRecord record(const TQString &) const;
	TQSqlRecord record(const TQSqlQuery &) const;
	TQSqlRecordInfo recordInfo(const TQString &) const;
	TQSqlRecordInfo recordInfo(const TQSqlQuery &) const;
	TQSqlQuery exec(const TQString & = TQString::null) const /PyName=execStatement, ReleaseGIL/;
	TQSqlError lastError() const;

	bool transaction();
	bool commit();
	bool rollback();

	virtual void setDatabaseName(const TQString &);
	virtual void setUserName(const TQString &);
	virtual void setPassword(const TQString &);
	virtual void setHostName(const TQString &);
	virtual void setPort(int);
	void setConnectOptions(const TQString & = TQString::null);
	TQString databaseName() const;
	TQString userName() const;
	TQString password() const;
	TQString hostName() const;
	TQString driverName() const;
	int port() const;
	TQString connectOptions() const;

	TQSqlDriver *driver() const;

	static TQSqlDatabase *addDatabase(const TQString &,
					 const TQString & = TQString(TQSqlDatabase::defaultConnection));
	static TQSqlDatabase *addDatabase(TQSqlDriver *,
					 const TQString & = TQString(TQSqlDatabase::defaultConnection));
	static TQSqlDatabase *database(const TQString & = TQString(TQSqlDatabase::defaultConnection),bool = 1);
	static void removeDatabase(const TQString &);
	static void removeDatabase(TQSqlDatabase *);
	static bool contains(const TQString & = TQString(TQSqlDatabase::defaultConnection));
	static TQStringList drivers();
//	static void registerSqlDriver(const TQString &,
//				      const TQSqlDriverCreatorBase *);
	static bool isDriverAvailable(const TQString &);

protected:
	TQSqlDatabase(const TQString &,const TQString &,
		     TQObject * /TransferThis/ = 0,const char * = 0);
	TQSqlDatabase(TQSqlDriver *,TQObject * /TransferThis/ = 0,
		     const char * = 0);

private:
	TQSqlDatabase(const TQSqlDatabase &);
};
