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
65 for (TDECmdLineOptions *optionsPtr = allOptions; optionsPtr->name; optionsPtr++) {
66 delete optionsPtr->name;
67 delete optionsPtr->description;
68 delete optionsPtr->def;
74 TDECmdLineOptions *allOptions;
75 TDEInstance* instance;
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.
Database driver management, e.g. finding and loading drivers.
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()
|