Adds q2 repos to migrate
This commit is contained in:
1 parent
ad1f62c4ee
commit
17f1c61c9e
991 files changed
+178451
No files matched your search
Executable
+49
@@ -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>)
|
||||
Executable
+38
@@ -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)
|
||||
Executable
+209
@@ -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()
|
||||
Executable
+1333
File diff suppressed because it is too large.
Load diff
Executable
+88
@@ -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();
|
||||
};
|
||||
Executable
+3
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"Keys": [ "QInformix" ]
|
||||
}
|
||||
Executable
+28
@@ -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"
|
||||
|
||||
Executable
+277
@@ -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"
|
||||
Executable
+98
@@ -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;
|
||||
}
|
||||
Executable
+41
@@ -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;
|
||||
};
|
||||
Reference in new issue
Block a user