20#include "simplecommandlineapp.h"
22#include <tqfileinfo.h>
24#include <tdecmdlineargs.h>
27#include <kexidb/connectiondata.h>
28#include <kexidb/drivermanager.h>
32static TDECmdLineOptions predefinedOptions[] =
35 { "driver <name>", I18N_NOOP( "Database driver name"), 0 },
37 { "user <name>", I18N_NOOP( "Database user name"), 0 },
39 { "password", I18N_NOOP( "Prompt for password"), 0 },
41 { "host <name>", I18N_NOOP( "Host (server) name"), 0 },
42 { "port <number>", I18N_NOOP( "Server's port number"), 0 },
44 { "local-socket <filename>", I18N_NOOP( "Server's local socket filename"), 0 },
51class SimpleCommandLineApp::Private
61 delete (Connection*)conn;
65 for (TDECmdLineOptions *optionsPtr = allOptions; optionsPtr->name; optionsPtr++) {
66 delete optionsPtr->name;
67 delete optionsPtr->description;
68 delete optionsPtr->def;
73 KexiDB::DriverManager manager;
74 TDECmdLineOptions *allOptions;
75 TDEInstance* instance;
76 ConnectionData connData;
77 TQGuardedPtr<Connection> conn;
83 int argc, char** argv, TDECmdLineOptions *options,
84 const char *programName, const char * version,
85 const char *shortDescription, int licenseType,
86 const char *copyrightStatement, const char *text,
87 const char *homePageAddress, const char *bugsEmailAddress)
91 TQFileInfo fi(argv[0]);
92 TQCString appName( fi.baseName().latin1() );
93 TDECmdLineArgs::init(argc, argv,
94 new TDEAboutData( appName, programName,
95 version, shortDescription, licenseType, copyrightStatement, text,
96 homePageAddress, bugsEmailAddress));
98 int predefinedOptionsCount = 0;
99 for (TDECmdLineOptions *optionsPtr = predefinedOptions; optionsPtr->name; optionsPtr++, predefinedOptionsCount++)
101 int userOptionsCount = 0;
102 for (TDECmdLineOptions *optionsPtr = options; optionsPtr->name; optionsPtr++, userOptionsCount++)
105 d->instance = new TDEInstance(appName);
108 d->allOptions = new TDECmdLineOptions[predefinedOptionsCount + userOptionsCount + 1];
109 TDECmdLineOptions *allOptionsPtr = d->allOptions;
110 for (TDECmdLineOptions *optionsPtr = predefinedOptions; optionsPtr->name; optionsPtr++, allOptionsPtr++) {
111 allOptionsPtr->name = tqstrdup(optionsPtr->name);
112 allOptionsPtr->description = tqstrdup(optionsPtr->description);
113 if (optionsPtr == predefinedOptions)
116 allOptionsPtr->def = tqstrdup(optionsPtr->def);
118 for (TDECmdLineOptions *optionsPtr = options; optionsPtr->name; optionsPtr++, allOptionsPtr++) {
119 allOptionsPtr->name = tqstrdup(optionsPtr->name);
120 allOptionsPtr->description = tqstrdup(optionsPtr->description);
121 allOptionsPtr->def = tqstrdup(optionsPtr->def);
123 allOptionsPtr->name = 0;
124 allOptionsPtr->description = 0;
125 allOptionsPtr->def = 0;
126 TDECmdLineArgs::addCmdLineOptions( d->allOptions );
128 TDECmdLineArgs *args = TDECmdLineArgs::parsedArgs();
130 d->connData.driverName = args->getOption( "driver");
131 d->connData.userName = args->getOption( "user");
132 d->connData.hostName = args->getOption( "host");
133 d->connData.localSocketFileName = args->getOption( "local-socket");
134 d->connData.port = args->getOption( "port").toInt();
135 d->connData.useLocalSocketFile = args->isSet( "local-socket");
137 if (args->isSet( "password")) {
138 TQString userAtHost = d->connData.userName;
139 if (!d->connData.userName.isEmpty())
141 userAtHost += (d->connData.hostName.isEmpty() ? "localhost" : d->connData.hostName);
142 TQTextStream cout(stdout,IO_WriteOnly);
143 cout << i18n( "Enter password for %1: ").arg(userAtHost);
145 TQTextStream cin(stdin,IO_ReadOnly);
146 cin >> d->connData.password;
147 KexiDBDbg << d->connData.password << endl;
151SimpleCommandLineApp::~SimpleCommandLineApp()
160 if (d->manager.error()) {
166 KexiDB::Driver *driver = d->manager.driver(d->connData.driverName);
167 if (!driver || d->manager. error()) {
173 d->connData.setFileName( databaseName );
176 if (!d->conn || driver-> error()) {
181 if (d->conn->isConnected()) {
183 if (d->conn->isDatabaseUsed() && d->conn->currentDatabase()==databaseName)
188 if (!d->conn->connect()) {
195 if (!d->conn->useDatabase( databaseName )) {
208 if (!d->conn->disconnect()) {
Database specific connection data, e.g. host, port.
Provides database connection, allowing queries and data modification.
Generic database abstraction.
static TQString defaultFileBasedDriverName()
bool isFileDriver() const
Connection * createConnection(ConnectionData &conn_data, int options=0)
virtual void setError(int code=ERR_OTHER, const TQString &msg=TQString())
TDEInstance * instance() const
bool openDatabase(const TQString &databaseName)
KexiDB::ConnectionData * connectionData() const
KexiDB::Connection * connection() const
SimpleCommandLineApp(int argc, char **argv, TDECmdLineOptions *options, const char *programName, const char *version, const char *shortDescription=0, int licenseType=TDEAboutData::License_Unknown, const char *copyrightStatement=0, const char *text=0, const char *homePageAddress=0, const char *bugsEmailAddress="submit@bugs.kde.org")
High-level database connectivity library with database backend drivers.
KEXI_DB_EXPORT DatabaseVersionInfo version()
|