Adds q2 repos to migrate

This commit is contained in:
torsten committed 2026-07-14 12:07:36 +02:00
1 parent ad1f62c4ee
commit 17f1c61c9e
991 files changed
+178451

No files matched your search

+49
View File
@@ -0,0 +1,49 @@
# CMake script for informix sql driver
CMAKE_MINIMUM_REQUIRED(VERSION 3.5)
SET(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR})
SET(CMAKE_CXX_STANDARD 11)
SET(CMAKE_CXX_STANDARD_REQUIRED 11)
SET(CMAKE_CXX_VISIBILITY_PRESET hidden)
SET(CMAKE_INCLUDE_CURRENT_DIR ON)
SET(CMAKE_VISIBILITY_INLINES_HIDDEN ON)
SET(CMAKE_POSITION_INDEPENDENT_CODE ON)
SET(CMAKE_AUTOMOC TRUE)
SET(QT_USE_IMPORTED_TARGETS TRUE)
FIND_PACKAGE(Qt5 5.9.0 COMPONENTS Core Sql Test REQUIRED)
FIND_PACKAGE(IClientSDK REQUIRED)
ADD_DEFINITIONS(-DQT_NO_CAST_FROM_ASCII)
ADD_DEFINITIONS(-DIT_DO_NOT_SIMULATE_BOOL)
INCLUDE_DIRECTORIES(${ICLIENT_SDK_INCLUDE_DIR})
SET(ifx_SRCS
qsql_informix.cpp
qsql_informix.h
qsql_informix_plugin.cpp
qsql_informix_utils.cpp
qsql_informix_utils.h
)
ADD_LIBRARY(qsql_informix SHARED ${ifx_SRCS})
TARGET_LINK_LIBRARIES(qsql_informix
Qt5::Core
Qt5::Sql
${ICLIENT_SDK_LIBRARIES}
${ICLIENT_SDK_LIBRARIES_CPP}
${ICLIENT_SDK_ESQL_OBJECT_FILE}
)
TARGET_COMPILE_DEFINITIONS(qsql_informix PRIVATE MAKE_QSQL_INFORMIX_LIB)
INSTALL(TARGETS qsql_informix DESTINATION lib/sqldrivers)
SET(test_SRCS
qsql_informix_test.cpp
)
ADD_EXECUTABLE(qsql_informix_test ${test_SRCS})
TARGET_LINK_LIBRARIES(qsql_informix_test
qsql_informix
Qt5::Test
dl
)
ADD_TEST(NAME qsql_informix_test COMMAND $<TARGET_FILE:qsql_informix_test>)
+38
View File
@@ -0,0 +1,38 @@
IF(CRYPT_INCLUDE_DIR AND CRYPT_LIBRARY)
SET(CRYPT_FOUND TRUE)
ELSE(CRYPT_INCLUDE_DIR AND CRYPT_LIBRARY)
FIND_PATH(CRYPT_INCLUDE_DIR crypt.h)
FIND_LIBRARY(CRYPT_LIBRARY crypt)
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(Crypt DEFAULT_MSG CRYPT_LIBRARY CRYPT_INCLUDE_DIR)
MARK_AS_ADVANCED(CRYPT_INCLUDE_DIR CRYPT_LIBRARY)
ENDIF(CRYPT_INCLUDE_DIR AND CRYPT_LIBRARY)
+209
View File
@@ -0,0 +1,209 @@
IF(NOT WIN32)
IF(IClientSDK_FIND_REQUIRED)
FIND_PACKAGE(Crypt REQUIRED)
ELSE()
FIND_PACKAGE(Crypt)
ENDIF()
ENDIF()
INCLUDE(FindPackageHandleStandardArgs)
IF(NOT ICLIENT_SDK_DIR)
FIND_PROGRAM(ICLIENT_ESQL_EXECUTABLE bin/esql PATHS "$ENV{INFORMIXDIR}" "$ENV{INFORMIXDIR}/csdk")
IF(IClientSDK_FIND_REQUIRED)
IF(NOT ICLIENT_ESQL_EXECUTABLE)
MESSAGE(FATAL_ERROR "Could not find Informix Client SDK - $INFORMIXDIR not set?")
ENDIF()
ENDIF()
IF(ICLIENT_ESQL_EXECUTABLE)
GET_FILENAME_COMPONENT(ICLIENT_SDK_DIR_tmp ${ICLIENT_ESQL_EXECUTABLE} PATH)
GET_FILENAME_COMPONENT(ICLIENT_SDK_DIR ${ICLIENT_SDK_DIR_tmp} PATH CACHE)
ENDIF()
MESSAGE(STATUS "Using Informix Client SDK directory ${ICLIENT_SDK_DIR}")
ENDIF()
FIND_PATH(ICLIENT_SDK_INCLUDE_DIR_INTERNAL NAMES c++/it.h cpp/it.h HINTS ${ICLIENT_SDK_DIR}/incl)
IF(ICLIENT_SDK_INCLUDE_DIR_INTERNAL)
SET(ICLIENT_SDK_INCLUDE_DIR
${CRYPT_INCLUDE_DIR}
${ICLIENT_SDK_INCLUDE_DIR_INTERNAL}
${ICLIENT_SDK_INCLUDE_DIR_INTERNAL}/c++
${ICLIENT_SDK_INCLUDE_DIR_INTERNAL}/cpp
${ICLIENT_SDK_INCLUDE_DIR_INTERNAL}/cli
${ICLIENT_SDK_INCLUDE_DIR_INTERNAL}/dmi
${ICLIENT_SDK_INCLUDE_DIR_INTERNAL}/esql
CACHE INTERNAL "All IClient SDK include dirs needed"
)
SET(ICLIENT_SDK_LIBRARY_DIRS
${ICLIENT_SDK_DIR}/lib/
${ICLIENT_SDK_DIR}/lib/c++
${ICLIENT_SDK_DIR}/lib/cpp
${ICLIENT_SDK_DIR}/lib/cli
${ICLIENT_SDK_DIR}/lib/client
${ICLIENT_SDK_DIR}/lib/dmi
${ICLIENT_SDK_DIR}/lib/esql
CACHE INTERNAL "All IClient SDK library dirs"
)
ENDIF()
MACRO(ICLIENT_FIND_LIBRARY lib varname)
SET(LIBNAME ICLIENT_SDK_${lib}_LIBRARY)
FIND_LIBRARY(${LIBNAME} ${lib} ${f}
PATHS ${ICLIENT_SDK_DIR}/lib/
${ICLIENT_SDK_DIR}/lib/c++
${ICLIENT_SDK_DIR}/lib/cpp
${ICLIENT_SDK_DIR}/lib/cli
${ICLIENT_SDK_DIR}/lib/client
${ICLIENT_SDK_DIR}/lib/dmi
${ICLIENT_SDK_DIR}/lib/esql
)
LIST(APPEND ${varname} ${${LIBNAME}})
MARK_AS_ADVANCED(${LIBNAME})
IF(IClientSDK_FIND_REQUIRED)
SET(ICLIENT_SDK_${LIBNAME}_FIND_REQUIRED TRUE)
SET(ICLIENT_SDK_${LIBNAME}_FIND_QUIETLY TRUE)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(ICLIENT_SDK_${LIBNAME} DEFAULT_MSG ${LIBNAME})
ENDIF()
ENDMACRO()
IF(WIN32)
ICLIENT_FIND_LIBRARY( libthdmi ICLIENT_SDK_LIBRARIES )
ICLIENT_FIND_LIBRARY( libthc++ ICLIENT_SDK_LIBRARIES )
ICLIENT_FIND_LIBRARY( isqlt09a ICLIENT_SDK_LIBRARIES )
ICLIENT_FIND_LIBRARY( isqlt09s ICLIENT_SDK_LIBRARIES )
ELSE()
ICLIENT_FIND_LIBRARY("ifc++" ICLIENT_SDK_LIBRARIES_CPP)
SET(iclient_libs
asf
gen
gls
os
sql
)
SET(iclient_libs_if_only
dmi
glx
)
SET(iclient_prefix
if
ix
)
SET(ICLIENT_SDK_LIBRARIES CACHE INTERNAL "All IClient SDK libraries needed")
IF(CRYPT_FOUND)
SET(ICLIENT_SDK_LIBRARIES ${CRYPT_LIBRARY})
ENDIF()
MARK_AS_ADVANCED(ICLIENT_SDK_LIBRARIES)
FOREACH(pre ${iclient_prefix})
FOREACH(f ${iclient_libs})
ICLIENT_FIND_LIBRARY( "${pre}${f}" ICLIENT_SDK_LIBRARIES)
ENDFOREACH()
ENDFOREACH()
FOREACH(f ${iclient_libs_if_only})
ICLIENT_FIND_LIBRARY( "if${f}" ICLIENT_SDK_LIBRARIES)
ENDFOREACH()
LIST(APPEND ICLIENT_SDK_LIBRARIES "dl")
FIND_PATH(ICLIENT_SDK_ESQL_OBJECT_FILE_PATH checkapi.o PATHS ${ICLIENT_SDK_DIR}/lib/esql)
SET(ICLIENT_SDK_ESQL_OBJECT_FILE ${ICLIENT_SDK_ESQL_OBJECT_FILE_PATH}/checkapi.o CACHE INTERNAL "")
ENDIF()
FIND_PACKAGE_HANDLE_STANDARD_ARGS(IClientSDK DEFAULT_MSG ICLIENT_SDK_LIBRARIES ICLIENT_SDK_INCLUDE_DIR_INTERNAL)
IF(ICLIENTSDK_FOUND)
SET(ICLIENT_SDK_DIR ${ICLIENT_SDK_DIR} CACHE INTERNAL "Informix Client SDK directory")
ENDIF()
MACRO(MacroInstallIClientSDK)
IF(NOT ICLIENT_SDK_DIR)
MESSAGE(FATAL_ERROR "ICLIENT_SDK_DIR nicht gesetzt - Installation von IClient SDK nicht moeglich!")
ENDIF()
SET(iclient_bin_dir "${ICLIENT_SDK_DIR}/bin/")
SET(iclient_lib_dir "${ICLIENT_SDK_DIR}/lib/")
SET(INSTALL_BIN ON)
SET(INSTALL_LIB ON)
SET(doing_prefix OFF)
SET(iclient_prefix "")
FOREACH(args ${ARGN})
IF(doing_prefix)
SET(doing_prefix OFF)
SET(iclient_prefix "${args}/")
ENDIF()
IF("${args}" STREQUAL "no-bin")
SET(INSTALL_BIN OFF)
ENDIF()
IF("${args}" STREQUAL "no-lib")
SET(INSTALL_LIB OFF)
ENDIF()
IF("${args}" STREQUAL "prefix")
SET(doing_prefix ON)
ENDIF("${args}" STREQUAL "prefix")
ENDFOREACH()
IF(INSTALL_BIN)
INSTALL(DIRECTORY ${iclient_bin_dir} DESTINATION ${iclient_prefix}bin PATTERN .svn EXCLUDE)
ENDIF()
IF(INSTALL_LIB)
INSTALL(DIRECTORY ${iclient_lib_dir} DESTINATION ${iclient_prefix}lib PATTERN .svn EXCLUDE)
ENDIF()
ENDMACRO()
MACRO(ICLIENT_ESQL_PREPROCESS outlist)
FIND_PROGRAM(ESQLC_EXECUTABLE esqlc PATHS ${ICLIENT_SDK_DIR}/lib ${ICLIENT_SDK_DIR}/lib/esql/)
IF(ESQLC_EXECUTABLE)
FOREACH(infile ${ARGN})
GET_FILENAME_COMPONENT(ext ${infile} EXT)
GET_FILENAME_COMPONENT(output ${infile} NAME_WE)
GET_FILENAME_COMPONENT(input ${infile} ABSOLUTE)
SET(extension "c")
IF("${ext}" STREQUAL ".ecpp")
SET(extension "C")
ENDIF("${ext}" STREQUAL ".ecpp")
ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${output}.${extension}
COMMAND ${ESQLC_EXECUTABLE}
ARGS -local ${input}
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
DEPENDS ${input}
)
LIST(APPEND ${outlist} ${CMAKE_CURRENT_BINARY_DIR}/${output}.${extension})
ENDFOREACH(infile)
ELSE()
MESSAGE(FATAL_ERROR "Could not find esql executable!")
ENDIF()
ENDMACRO()
+1333
View File
File diff suppressed because it is too large. Load diff
+88
View File
@@ -0,0 +1,88 @@
#pragma once
#include <QtSql/qsqlresult.h>
#include <QtSql/qsqldriver.h>
#ifndef Q_EXPORT_SQLDRIVER_INFORMIX
# ifdef MAKE_QSQL_INFORMIX_LIB
# define Q_EXPORT_SQLDRIVER_INFORMIX Q_DECL_EXPORT
# else
# define Q_EXPORT_SQLDRIVER_INFORMIX Q_DECL_IMPORT
# endif
#endif
class QInformixResultPrivate;
class QInformixDriverPrivate;
class QInformixDriver;
class QInformixResult final : public QSqlResult
{
friend class QInformixResultPrivate;
public:
QInformixResult(const QInformixDriver *db, QInformixDriverPrivate *p);
~QInformixResult();
QVariant handle() const;
protected:
void cleanup();
bool fetch(int i);
bool fetchFirst();
bool fetchLast();
QVariant data(int i);
bool isNull(int field);
bool reset(const QString &query);
int size();
int numRowsAffected();
QSqlRecord record() const;
QVariant lastInsertId() const;
bool prepare(const QString &query);
bool exec();
private:
QInformixResultPrivate *d;
};
class Q_EXPORT_SQLDRIVER_INFORMIX QInformixDriver final : public QSqlDriver
{
Q_OBJECT
public:
explicit QInformixDriver(QObject *parent = nullptr);
~QInformixDriver();
bool hasFeature(DriverFeature f) const;
bool open(const QString &db,
const QString &user,
const QString &password,
const QString &host,
int port,
const QString &connOpts);
bool isOpen() const;
void close();
QSqlResult *createResult() const;
QStringList tables(QSql::TableType) const;
QSqlIndex primaryIndex(const QString &tablename) const;
QSqlRecord record(const QString &tablename) const;
QVariant handle() const;
QString escapeIdentifier(const QString &identifier, IdentifierType type) const;
QString formatValue(const QSqlField &field, bool trimStrings) const;
protected:
bool beginTransaction();
bool commitTransaction();
bool rollbackTransaction();
private:
void init();
bool openDatabaseInternal();
QInformixDriverPrivate *d;
friend class QInformixDriverPrivate;
private Q_SLOTS:
void timeout();
};
+3
View File
@@ -0,0 +1,3 @@
{
"Keys": [ "QInformix" ]
}
+28
View File
@@ -0,0 +1,28 @@
#include <QSqlDriverPlugin>
#include "qsql_informix.h"
class QInformixDriverPlugin final : public QSqlDriverPlugin
{
Q_OBJECT
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QSqlDriverFactoryInterface" FILE "qsql_informix.json")
public:
QInformixDriverPlugin() = default;
QSqlDriver *create(const QString &);
};
QSqlDriver *QInformixDriverPlugin::create(const QString &name)
{
if (name == QLatin1String("QInformix"))
{
QInformixDriver *driver = new QInformixDriver();
return driver;
}
return nullptr;
}
#include "qsql_informix_plugin.moc"
+277
View File
@@ -0,0 +1,277 @@
#include <QCoreApplication>
#include <QtTest/QtTest>
#include <QDebug>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QLocale>
#include "qsql_informix.h"
#include "qsql_informix_utils.h"
class qsql_informix_test : public QObject
{
Q_OBJECT
private Q_SLOTS:
void connectDatabase();
void createTestTable();
void test_insert();
void test_select();
void test_prepare();
void test_insert_blob();
void test_select_blob();
void test_transactions();
void deleteTestTable();
void createDB();
void existsDB();
void dropDB();
};
static QString informixServer()
{
QByteArray srv = qgetenv("INFORMIXSERVER");
if (srv.isEmpty())
srv = "guezdbs1_tcp";
return QString::fromLocal8Bit(srv);
}
void qsql_informix_test::connectDatabase()
{
QInformixDriver *drv = new QInformixDriver();
QSqlDatabase db = QSqlDatabase::addDatabase(drv);
db.setHostName(informixServer());
QByteArray sys_db = qgetenv("INFORMIXSYSDB");
if (sys_db.isEmpty())
sys_db = "int_sys_db";
db.setDatabaseName(QString::fromLocal8Bit(sys_db));
db.setUserName(QLatin1String("informix"));
db.setPassword(QLatin1String("informix"));
QByteArray sqlhosts = qgetenv("INFORMIXSQLHOSTS");
QByteArray informixdir = qgetenv("INFORMIXDIR");
qDebug() << "Conneting to" << informixServer()
<< "database" << sys_db
<< "with sqlhosts" << sqlhosts
<< "and INFORMIXDIR" << informixdir;
bool bConnect = db.open();
if (!bConnect)
qDebug() << "Error connecting:" << db.lastError();
QVERIFY(bConnect);
}
void qsql_informix_test::createTestTable()
{
QSqlQuery q1(QLatin1String("drop table qsql_informix_test"));
q1.exec();
QSqlQuery q2;
QString stmt(QLatin1String("create table qsql_informix_test (id int primary key, "
"text nchar(10), vartext varchar(10), text1 char(10), vartext1 varchar(10), blob byte, blobtext text)"));
QVERIFY(q2.exec(stmt));
}
void qsql_informix_test::test_insert()
{
QSqlQuery q1;
QString stmt(QLatin1String("insert into qsql_informix_test (id, text, vartext, text1, vartext1) values "
"( 1, 'text1', 'vartext1', 'text1', 'vartext1' )"));
QCOMPARE(q1.size(), -1);
QVERIFY(q1.exec(stmt));
QSqlQuery q2;
QVERIFY(q2.prepare(QLatin1String("insert into qsql_informix_test (id, text, vartext, text1, vartext1) values "
"( :id, :text, :vartext, :text, :vartext )")));
q2.bindValue(QLatin1String(":id"), 2);
q2.bindValue(QLatin1String(":text"), QLatin1String("text2"));
q2.bindValue(QLatin1String(":vartext"), QLatin1String("vartext2"));
QVERIFY(q2.exec());
QCOMPARE(q2.numRowsAffected(), 1);
QVERIFY(q2.prepare(QLatin1String("insert into qsql_informix_test (id, text, vartext, text1, vartext1) values "
"( 3, 'text3', 'vartext3', 'text3', 'vartext3' )")));
QVERIFY(q2.exec());
QSqlQuery q3(QLatin1String("insert into qsql_informix_test (id, text, vartext, text1, vartext1) values "
"( 4, 'text4', 'vartext4', 'text4', 'vartext4' )"));
QCOMPARE(q3.exec(), false);
}
void qsql_informix_test::test_select()
{
QSqlQuery q1(QLatin1String("select text from qsql_informix_test where id = 1"));
QCOMPARE(q1.size(), 1);
QVERIFY(q1.next());
QCOMPARE(q1.value(0).toString(), QLatin1String("text1"));
QSqlQuery q2(QLatin1String("select vartext from qsql_informix_test where id = 1"));
QVERIFY(q2.next());
QCOMPARE(q2.value(0).toString(), QLatin1String("vartext1"));
QSqlQuery q3(QLatin1String("select vartext from qsql_informix_test"));
QVERIFY(q3.next());
QCOMPARE(q3.size(), 4);
QVERIFY(q3.prepare(QLatin1String("select vartext, text from qsql_informix_test")));
QVERIFY(q3.exec());
QVERIFY(q3.next());
QCOMPARE(q3.value(0).toString(), QLatin1String("vartext1"));
QCOMPARE(q3.size(), -1);
QSqlQuery q4(QLatin1String("select text1 from qsql_informix_test where id = 1"));
QVERIFY(q4.next());
QCOMPARE(q4.value(0).toString(), QLatin1String("text1"));
QSqlQuery q5(QLatin1String("select vartext1 from qsql_informix_test where id = 1"));
QVERIFY(q5.next());
QCOMPARE(q5.value(0).toString(), QLatin1String("vartext1"));
}
void qsql_informix_test::test_prepare()
{
#if 0
QSqlQuery q1;
QVERIFY(q1.prepare(QLatin1String("select * from qsql_informix_test")));
QVERIFY(q1.exec());
QCOMPARE(q1.size(), 3);
#endif
}
void qsql_informix_test::test_insert_blob()
{
QSqlQuery q;
QVERIFY(q.prepare(QLatin1String("insert into qsql_informix_test (id, blob) values (:id, :blob)")));
q.bindValue(QLatin1String(":id"), 14);
q.bindValue(QLatin1String(":blob"), QByteArray(200, 'a'));
QVERIFY(q.exec());
QVERIFY(q.prepare(QLatin1String("insert into qsql_informix_test (id, blobtext) values (:id, :blob)")));
q.bindValue(QLatin1String(":id"), 15);
q.bindValue(QLatin1String(":blob"), QByteArray(200, 'A'));
QVERIFY(q.exec());
QVERIFY(q.prepare(QLatin1String("insert into qsql_informix_test (id, blobtext) values (:id, :blob)")));
q.bindValue(QLatin1String(":id"), 16);
q.bindValue(QLatin1String(":blob"), QByteArray(2, 'B'));
QVERIFY(q.exec());
QVERIFY(q.prepare(QLatin1String("update qsql_informix_test set blobtext = :blob where id = :id")));
q.bindValue(QLatin1String(":id"), 16);
q.bindValue(QLatin1String(":blob"), QByteArray(200, 'B'));
QVERIFY(q.exec());
QVERIFY(q.prepare(QLatin1String("insert into qsql_informix_test (id, blobtext) values (:id, :blob)")));
q.bindValue(QLatin1String(":id"), 17);
QString str = QString::fromUtf8("öäü");
q.bindValue(QLatin1String(":blob"), str);
QVERIFY(q.exec());
QVERIFY(q.prepare(QLatin1String("insert into qsql_informix_test (id, blobtext) values (:id, :blob)")));
q.bindValue(QLatin1String(":id"), 18);
str = QLatin1String("abcdefghjklimnopqrstuvwxyz");
q.bindValue(QLatin1String(":blob"), str);
QVERIFY(q.exec());
}
void qsql_informix_test::test_select_blob()
{
QSqlQuery q1(QLatin1String("select blob from qsql_informix_test where id = 14"));
QCOMPARE(q1.size(), 1);
QVERIFY(q1.next());
QCOMPARE(q1.value(0).toByteArray(), QByteArray(200, 'a'));
QSqlQuery q2(QLatin1String("select blobtext from qsql_informix_test where id = 15"));
QCOMPARE(q2.size(), 1);
QVERIFY(q2.next());
QCOMPARE(q2.value(0).toByteArray(), QByteArray(200, 'A'));
QSqlQuery q3(QLatin1String("select blobtext from qsql_informix_test where id = 16"));
QCOMPARE(q3.size(), 1);
QVERIFY(q3.next());
QCOMPARE(q3.value(0).toByteArray(), QByteArray(200, 'B'));
QSqlQuery q4(QLatin1String("select blobtext from qsql_informix_test where id = 17"));
QCOMPARE(q4.size(), 1);
QVERIFY(q4.next());
QString str = QString::fromUtf8("öäü");
QCOMPARE(q4.value(0).toString(), str);
QSqlQuery q5(QLatin1String("select blobtext from qsql_informix_test where id = 18"));
QCOMPARE(q5.size(), 1);
QVERIFY(q5.next());
str = QLatin1String("abcdefghjklimnopqrstuvwxyz");
QCOMPARE(q5.value(0).toString(), str);
}
void qsql_informix_test::test_transactions()
{
QSqlDatabase db = QSqlDatabase::database();
QVERIFY(db.transaction());
QString stmt(QLatin1String("insert into qsql_informix_test (id, text, vartext) values "
"( 100, 'text1', 'vartext1' )"));
QSqlQuery q;
QVERIFY(q.exec(stmt));
QVERIFY(db.commit());
QVERIFY(db.transaction());
stmt = QLatin1String("insert into qsql_informix_test (id, text, vartext) values "
"( 101, 'text1', 'vartext1' )");
QVERIFY(q.exec(stmt));
QVERIFY(db.rollback());
stmt = QLatin1String("select * from qsql_informix_test where id = 101");
QVERIFY(q.exec(stmt));
QCOMPARE(q.size(), 0);
}
void qsql_informix_test::deleteTestTable()
{
QSqlQuery q;
QString stmt(QLatin1String("drop table qsql_informix_test"));
QVERIFY(q.exec(stmt));
}
void qsql_informix_test::createDB()
{
QInformixUtils u;
QVERIFY(u.createDatabase(informixServer(),
QLatin1String("newdatabase"),
QLatin1String("informix"),
QLatin1String("informix"),
QLatin1String("uebungsdaten_dbs")));
}
void qsql_informix_test::existsDB()
{
QInformixUtils u;
QVERIFY(u.existsDbName(informixServer(),
QLatin1String("newdatabase"),
QLatin1String("informix"),
QLatin1String("informix")));
}
void qsql_informix_test::dropDB()
{
QInformixUtils u;
QVERIFY(u.dropDatabase(informixServer(),
QLatin1String("newdatabase"),
QLatin1String("informix"),
QLatin1String("informix")));
}
QTEST_MAIN(qsql_informix_test)
#include "qsql_informix_test.moc"
+98
View File
@@ -0,0 +1,98 @@
#include "qsql_informix_utils.h"
#include <it.h>
#include <itcppop.h>
#include <sqltypes.h>
#include <sqlca.h>
bool QInformixUtils::createDatabase(const QString &host, const QString &newDb,
const QString &user, const QString &passwd, const QString &dbspace)
{
ITDBInfo info;
info.SetSystem(ITString(host.toUtf8().constData()));
info.SetDatabase(ITString(newDb.toUtf8().constData()));
info.SetUser(ITString(user.toUtf8().constData()));
info.SetPassword(ITString(passwd.toUtf8().constData()));
bool bOk = info.CreateDatabase(ITDBInfo::Log, ITString(dbspace.toUtf8().constData()));
m_errortext = QString::fromLocal8Bit(info.ErrorText());
m_sqlstate = QString::fromLocal8Bit(info.SqlState());
return bOk;
}
bool QInformixUtils::dropDatabase(const QString &host, const QString &newDb,
const QString &user, const QString &passwd)
{
ITDBInfo info;
info.SetSystem(ITString(host.toUtf8().constData()));
info.SetDatabase(ITString(newDb.toUtf8().constData()));
info.SetUser(ITString(user.toUtf8().constData()));
info.SetPassword(ITString(passwd.toUtf8().constData()));
bool bOk = info.DropDatabase();
m_errortext = QString::fromLocal8Bit(info.ErrorText());
m_sqlstate = QString::fromLocal8Bit(info.SqlState());
return bOk;
}
QStringList QInformixUtils::dbListName(const QString &host, const QString &db,
const QString &user, const QString &passwd)
{
QStringList sl;
ITDBInfo info;
info.SetSystem(ITString(host.toUtf8().constData()));
info.SetDatabase(ITString(db.toUtf8().constData()));
info.SetUser(ITString(user.toUtf8().constData()));
info.SetPassword(ITString(passwd.toUtf8().constData()));
ITConnection connection;
bool bOk = connection.Open(info);
if (!bOk) return sl;
ITDBNameList nl;
bOk = nl.Create();
if (!bOk)
return sl;
ITString dbName = nl.NextDBName();
while (!dbName.IsNull())
{
sl.append(QString::fromUtf8(dbName.Data()));
dbName = nl.NextDBName();
}
return sl;
}
bool QInformixUtils::existsDbName(const QString &host, const QString &db,
const QString &user, const QString &passwd)
{
ITDBInfo info;
info.SetSystem(ITString(host.toUtf8().constData()));
info.SetDatabase("sysmaster");
info.SetUser(ITString(user.toUtf8().constData()));
info.SetPassword(ITString(passwd.toUtf8().constData()));
ITConnection connection;
bool bOk = connection.Open(info);
if (!bOk) return false;
ITDBNameList nl;
if (!nl.Create())
return false;
if (nl.IsDBName(ITString(db.toUtf8().constData())))
return true;
return false;
}
+41
View File
@@ -0,0 +1,41 @@
#pragma once
#include <QString>
#include <QStringList>
#ifndef Q_EXPORT_SQLDRIVER_INFORMIX
# ifdef MAKE_QSQL_INFORMIX_LIB
# define Q_EXPORT_SQLDRIVER_INFORMIX Q_DECL_EXPORT
# else
# define Q_EXPORT_SQLDRIVER_INFORMIX Q_DECL_IMPORT
# endif
#endif
class Q_EXPORT_SQLDRIVER_INFORMIX QInformixUtils
{
public:
QInformixUtils() {}
~QInformixUtils() {}
bool createDatabase(const QString &host, const QString &newDb,
const QString &user, const QString &passwd, const QString &dbspace);
bool dropDatabase(const QString &host, const QString &newDb,
const QString &user, const QString &passwd);
bool existsDbName(const QString &host, const QString &db,
const QString &user, const QString &passwd);
QStringList dbListName(const QString &host, const QString &db,
const QString &user, const QString &passwd);
QString errorText() const { return m_errortext; }
QString sqlState() const { return m_sqlstate; }
private:
QString m_errortext;
QString m_sqlstate;
};