// This is the SIP interface definition for QSqlDatabase.
//
// Copyright (c) 2007
// 	Riverbank Computing Limited <info@riverbankcomputing.co.uk>
// 
// This file is part of PyQt.
// 
// This copy of PyQt 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.
// 
// PyQt 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
// PyQt; 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>QSqlDatabase (Qt v3+)</Title>
<FuncSynopsis>
        <FuncDef>QSqlQuery <Function>exec</Function></FuncDef>
        <ParamDef>const QString &amp;<Parameter>query</Parameter> = QString::null</ParamDef>
</FuncSynopsis>
<Para>
This has been renamed <Literal>execStatement</Literal> in Python.
</Para>
</Sect2>
%End


%If (Qt_3_0_0 -)

class QSqlDatabase : QObject
{
%TypeHeaderCode
#include <qsqldatabase.h>
%End

public:
%ConvertToSubClassCode
	static struct class_graph {
		char *name;
		sipWrapperType **type;
		int yes, no;
	} graph[] = {
		{sipName_QSqlDriver,	&sipClass_QSqlDriver,	-1, 1},
		{sipName_QEditorFactory,	&sipClass_QEditorFactory,	7, 2},
		{sipName_QSqlDatabase,	&sipClass_QSqlDatabase,	-1, 3},
		{sipName_QSqlForm,	&sipClass_QSqlForm,	-1, 4},
		{sipName_QDataView,	&sipClass_QDataView,	-1, 5},
		{sipName_QDataTable,	&sipClass_QDataTable,	-1, 6},
		{sipName_QDataBrowser,	&sipClass_QDataBrowser,	-1, -1},
		{sipName_QSqlEditorFactory,	&sipClass_QSqlEditorFactory,	-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 QString &,const QString &) /ReleaseGIL/;
	void close();
	bool isOpen() const;
	bool isOpenError() const;
	QStringList tables() const;
%If (Qt_3_2_0 -)
	QStringList tables(QSql::TableType) const;
%End
	QSqlIndex primaryIndex(const QString &) const;
	QSqlRecord record(const QString &) const;
	QSqlRecord record(const QSqlQuery &) const;
	QSqlRecordInfo recordInfo(const QString &) const;
	QSqlRecordInfo recordInfo(const QSqlQuery &) const;
	QSqlQuery exec(const QString & = QString::null) const /PyName=execStatement, ReleaseGIL/;
	QSqlError lastError() const;

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

	virtual void setDatabaseName(const QString &);
	virtual void setUserName(const QString &);
	virtual void setPassword(const QString &);
	virtual void setHostName(const QString &);
	virtual void setPort(int);
%If (Qt_3_2_0 -)
	void setConnectOptions(const QString & = QString::null);
%End
	QString databaseName() const;
	QString userName() const;
	QString password() const;
	QString hostName() const;
	QString driverName() const;
	int port() const;
%If (Qt_3_2_0 -)
	QString connectOptions() const;
%End

	QSqlDriver *driver() const;

	static QSqlDatabase *addDatabase(const QString &,
					 const QString & = QString(QSqlDatabase::defaultConnection));
%If (Qt_3_2_0 -)
	static QSqlDatabase *addDatabase(QSqlDriver *,
					 const QString & = QString(QSqlDatabase::defaultConnection));
%End
	static QSqlDatabase *database(const QString & = QString(QSqlDatabase::defaultConnection),bool = 1);
	static void removeDatabase(const QString &);
%If (Qt_3_2_0 -)
	static void removeDatabase(QSqlDatabase *);
%End
	static bool contains(const QString & = QString(QSqlDatabase::defaultConnection));
	static QStringList drivers();
//	static void registerSqlDriver(const QString &,
//				      const QSqlDriverCreatorBase *);
%If (Qt_3_2_0 -)
	static bool isDriverAvailable(const QString &);
%End

protected:
	QSqlDatabase(const QString &,const QString &,
		     QObject * /TransferThis/ = 0,const char * = 0);
%If (Qt_3_2_0 -)
	QSqlDatabase(QSqlDriver *,QObject * /TransferThis/ = 0,
		     const char * = 0);
%End

private:
%If (Qt_3_1_0 -)
	QSqlDatabase(const QSqlDatabase &);
%End
};

%End
