From 30472a3df97fdefdaff97cda98d600616c1a996d Mon Sep 17 00:00:00 2001 From: Feng Yin Date: Tue, 28 Nov 2023 22:04:38 +1100 Subject: [PATCH 1/4] Update main framework. --- Main/Main.pro | 12 +- Main/helper.h | 11 + Main/main.cpp | 74 +++--- Main/mainwindow.cpp | 378 +++++++++++++---------------- Main/mainwindow.h | 16 +- Main/plugin_interface.h | 6 +- Main/productmanagement_interface.h | 22 +- Main/qtlocalpeer.cpp | 204 ---------------- Main/qtlocalpeer.h | 77 ------ Main/qtlockedfile.cpp | 193 --------------- Main/qtlockedfile.h | 97 -------- Main/qtlockedfile_unix.cpp | 115 --------- Main/qtlockedfile_win.cpp | 211 ---------------- Main/qtsingleapplication.cpp | 347 -------------------------- Main/qtsingleapplication.h | 105 -------- Main/usermanagement_interface.h | 15 +- 16 files changed, 239 insertions(+), 1644 deletions(-) create mode 100644 Main/helper.h delete mode 100644 Main/qtlocalpeer.cpp delete mode 100644 Main/qtlocalpeer.h delete mode 100644 Main/qtlockedfile.cpp delete mode 100644 Main/qtlockedfile.h delete mode 100644 Main/qtlockedfile_unix.cpp delete mode 100644 Main/qtlockedfile_win.cpp delete mode 100644 Main/qtsingleapplication.cpp delete mode 100644 Main/qtsingleapplication.h diff --git a/Main/Main.pro b/Main/Main.pro index 0956e70..b6996ff 100644 --- a/Main/Main.pro +++ b/Main/Main.pro @@ -2,23 +2,19 @@ QT += network sql widgets core TARGET = Invoicing TRANSLATIONS = ./Translations/Invoicing_zh_CN.ts +include(../singleapplication/singleapplication.pri) +DEFINES += QAPPLICATION_CLASS=QApplication + SOURCES += \ main.cpp \ mainwindow.cpp \ - qtlocalpeer.cpp \ - qtsingleapplication.cpp \ - qtlockedfile.cpp \ - qtlockedfile_unix.cpp \ - qtlockedfile_win.cpp HEADERS += \ + helper.h \ mainwindow.h \ plugin_interface.h \ usermanagement_interface.h \ productmanagement_interface.h \ - qtsingleapplication.h \ - qtlocalpeer.h \ - qtlockedfile.h OTHER_FILES += \ ideas.txt \ diff --git a/Main/helper.h b/Main/helper.h new file mode 100644 index 0000000..c2bf262 --- /dev/null +++ b/Main/helper.h @@ -0,0 +1,11 @@ +#pragma once + +#define INSTALL_TRANSLATION \ +do { \ + foreach (QString fileName, QDir(":/Translations").entryList(QDir::Files)) { \ + QTranslator *qtTranslator = new QTranslator(); \ + if(qtTranslator->load(QFileInfo(fileName).baseName(), ":/Translations")){ \ + QApplication::instance()->installTranslator(qtTranslator); \ + } \ + } \ +} while(0) diff --git a/Main/main.cpp b/Main/main.cpp index e63e0c5..086dd6c 100644 --- a/Main/main.cpp +++ b/Main/main.cpp @@ -1,51 +1,57 @@ -#if QT_VERSION < 0x050000 -#include -#else #include -#endif +#include + +#include "helper.h" #include "mainwindow.h" -#include "qtsingleapplication.h" -int main(int argv, char *args[]) -{ - //QApplication app(argv, args); - QtSingleApplication app(argv, args); - QTextCodec *codec = QTextCodec::codecForName("UTF-8"); - QTextCodec::setCodecForLocale(codec); -#if QT_VERSION < 0x050000 - QTextCodec::setCodecForCStrings(codec); - QTextCodec::setCodecForTr(codec); +void raiseWidget(QWidget *widget) { +#ifdef Q_OS_WINDOWS + HWND hwnd = (HWND)widget->winId(); + // check if widget is minimized to Windows task bar + if (::IsIconic(hwnd)) { + ::ShowWindow(hwnd, SW_RESTORE); + } + ::SetForegroundWindow(hwnd); +#else + widget->show(); + widget->raise(); + widget->activateWindow(); #endif +} - QDir qmdir(":/Translations"); - foreach (QString fileName, qmdir.entryList(QDir::Files)) { - //qDebug()<load(QFileInfo(fileName).baseName(), ":/Translations"); - QApplication::instance()->installTranslator(qtTranslator); +int main(int argv, char *args[]) { +#ifdef Q_OS_WINDOWS + SingleApplication app(argv, args, true); + if (app.isSecondary()) { + AllowSetForegroundWindow(DWORD(app.primaryPid())); + app.sendMessage("RAISE_WIDGET"); + return 0; } +#else + SingleApplication app(argv, args); +#endif - //QMessageBox::information(0, QObject::tr("Error"), getHDLogicalID()); - //QMessageBox::information(0, QObject::tr("Error"), calActiveCode(getHDLogicalID())); - - if(!MainWindow::isRegistration()) { - QMessageBox::information(0, QObject::tr("Error"), QObject::tr("This software has not been registered!")); - //return 0; - } + INSTALL_TRANSLATION; - if(app.isRunning()) { - QMessageBox::information(0, QObject::tr("Error"), QObject::tr("Application is alreay running!")); - return 0; + if (!MainWindow::isRegistered()) { + QMessageBox::information( + 0, QObject::tr("Error"), + QObject::tr("This software has not been registered!")); } + MainWindow *mainWindow = MainWindow::getInstance(); - MainWindow* mainWindow = MainWindow::getInstance(); +#ifdef Q_OS_WINDOWS + QObject::connect(&app, &SingleApplication::receivedMessage, mainWindow, + [mainWindow]() { raiseWidget(mainWindow); }); +#else + QObject::connect(&app, &SingleApplication::instanceStarted, mainWindow, + [mainWindow]() { raiseWidget(mainWindow); }); +#endif - //mainWindow->setGeometry(100, 100, 800, 500); + // mainWindow->setGeometry(100, 100, 800, 500); mainWindow->showMaximized(); mainWindow->show(); int ret = app.exec(); MainWindow::release(); return ret; } - - diff --git a/Main/mainwindow.cpp b/Main/mainwindow.cpp index e695b5e..7ceb008 100644 --- a/Main/mainwindow.cpp +++ b/Main/mainwindow.cpp @@ -1,52 +1,32 @@ -#include -#include -#include #include "mainwindow.h" +#include "helper.h" #include "plugin_interface.h" #include "usermanagement_interface.h" +#include +#include -MainWindow* MainWindow::instance = NULL; +MainWindow *MainWindow::instance = NULL; const char *indexProperty = "widgetIndex"; const char *pluginProperty = "plugin"; -MainWindow::MainWindow(QWidget *parent) : - QMainWindow(parent), - fileMenu(NULL), - aboutMenu(NULL), - exitAction(NULL), - aboutAction(NULL), - pluginAction(NULL), - updateAction(NULL), - registerAction(NULL), - toolBox(NULL), - stackedWidget(NULL), - currentPlugin(NULL), - pluginTable(NULL), - containerDialog(NULL), - registerDialog(NULL), - machineCodeLabel(NULL), - machineCodeLineEdit(NULL), - registerCodeLabel(NULL), - registerCodeLineEdit(NULL), - splash(NULL), +MainWindow::MainWindow(QWidget *parent) + : QMainWindow(parent), fileMenu(NULL), aboutMenu(NULL), exitAction(NULL), + aboutAction(NULL), pluginAction(NULL), updateAction(NULL), + registerAction(NULL), toolBox(NULL), stackedWidget(NULL), + currentPlugin(NULL), pluginTable(NULL), containerDialog(NULL), + registerDialog(NULL), machineCodeLabel(NULL), machineCodeLineEdit(NULL), + registerCodeLabel(NULL), registerCodeLineEdit(NULL), splash(NULL), eventTimer(NULL) { - QDir qmdir(":/Translations"); - foreach (QString fileName, qmdir.entryList(QDir::Files)) { - //qDebug()<load(QFileInfo(fileName).baseName(), ":/Translations"); - QApplication::instance()->installTranslator(qtTranslator); - } + INSTALL_TRANSLATION; eventTimer = new QTimer(this); connect(eventTimer, SIGNAL(timeout()), this, SLOT(eventUpdate())); eventTimer->setInterval(1000); eventTimer->start(); - if(!splash) - { + if (!splash) { QPixmap pixmap(":/Icon/invoicing_icon.png"); splash = new QSplashScreen(pixmap, Qt::WindowStaysOnTopHint); } @@ -57,8 +37,7 @@ MainWindow::MainWindow(QWidget *parent) : splash->showMessage(tr("createMenus...")); createMenus(); - if(isRegistration()) - { + if (isRegistered()) { splash->showMessage(tr("createToolBox...")); createToolBox(); @@ -87,38 +66,31 @@ MainWindow::MainWindow(QWidget *parent) : loadPlugins(); splash->showMessage(tr("finalize initialization...")); currentPlugin = getPlugin("UserManagement_Invoicing"); - //Set current user + // Set current user updateCurrentUserInfo(); - //end of Set current user + // end of Set current user unsetCursor(); - -// QTimer *timer = new QTimer(this); -// connect(timer, SIGNAL(timeout()), this, SLOT(update())); -// timer->setInterval(1000*60); -// timer->start(); } splash->finish(this); } -MainWindow::~MainWindow() -{ - while(!pluginVector.empty()) { +MainWindow::~MainWindow() { + while (!pluginVector.empty()) { pluginVector.last()->deInit(); pluginVector.pop_back(); } } -void MainWindow::createToolBox() -{ +void MainWindow::createToolBox() { toolBox = new QToolBox; - toolBox->setSizePolicy(QSizePolicy(QSizePolicy::Maximum, QSizePolicy::Ignored)); + toolBox->setSizePolicy( + QSizePolicy(QSizePolicy::Maximum, QSizePolicy::Ignored)); } -void MainWindow::createActions() -{ +void MainWindow::createActions() { exitAction = new QAction(tr("&Exit"), this); - //exitAction->setShortcuts(QKeySequence::Quit); + // exitAction->setShortcuts(QKeySequence::Quit); exitAction->setShortcut(QString("Ctrl+E")); exitAction->setStatusTip(tr("Quit")); exitAction->setIcon(QIcon(":/Icon/quit_icon.png")); @@ -143,18 +115,14 @@ void MainWindow::createActions() registerAction->setShortcut(QString("Ctrl+G")); registerAction->setIcon(QIcon(":/Icon/register_icon.png")); connect(registerAction, SIGNAL(triggered()), this, SLOT(registerSoftware())); - if(isRegistration()) - { + if (isRegistered()) { registerAction->setEnabled(false); - } - else - { + } else { updateAction->setEnabled(false); } } -void MainWindow::createMenus() -{ +void MainWindow::createMenus() { fileMenu = menuBar()->addMenu(tr("&File")); fileMenu->addAction(exitAction); @@ -171,17 +139,16 @@ void MainWindow::createMenus() addToolBar(toolbar); } -void MainWindow::createPluginToolBars() -{ - foreach(PluginInterface *plugin, pluginMap) { - if(plugin->getToolBar()) { +void MainWindow::createPluginToolBars() { + foreach (PluginInterface *plugin, pluginMap) { + if (plugin->getToolBar()) { addToolBar(plugin->getToolBar()); } } } -void MainWindow::createPluginToolBox(QWidget *toolbox, PluginInterface *plugin) -{ +void MainWindow::createPluginToolBox(QWidget *toolbox, + PluginInterface *plugin) { static int row = 0; static int column = 0; QGridLayout *layout = qobject_cast(toolbox->layout()); @@ -193,14 +160,15 @@ void MainWindow::createPluginToolBox(QWidget *toolbox, PluginInterface *plugin) QGridLayout *toolButtonLayout = new QGridLayout; toolButtonLayout->addWidget(toolButton, 0, 0, Qt::AlignHCenter); - toolButtonLayout->addWidget(new QLabel(plugin->getMainWidget()->windowIconText()), - 1, 0, Qt::AlignHCenter); + toolButtonLayout->addWidget( + new QLabel(plugin->getMainWidget()->windowIconText()), 1, 0, + Qt::AlignHCenter); toolButtonLayout->setSizeConstraint(QLayout::SetFixedSize); QWidget *toolButtonWidget = new QWidget; toolButtonWidget->setLayout(toolButtonLayout); layout->addWidget(toolButtonWidget, row, column++, Qt::AlignHCenter); - if(column>1) { + if (column > 1) { column = 0; row++; } @@ -209,34 +177,32 @@ void MainWindow::createPluginToolBox(QWidget *toolbox, PluginInterface *plugin) int index = stackedWidget->addWidget(plugin->getMainWidget()); toolButton->setProperty(indexProperty, QVariant(index)); toolButton->setProperty(pluginProperty, QVariant::fromValue(plugin)); - if(index==0) { + if (index == 0) { toolButton->setChecked(true); } connect(toolButton, SIGNAL(clicked()), this, SLOT(widgetChange())); } -void MainWindow::about() -{ +void MainWindow::about() { QMessageBox::about(this, tr("About Invoicing"), tr("Invoicing use the plugin framework" "

Contact Author: feng.yin@live.cn")); } -void MainWindow::widgetChange() -{ +void MainWindow::widgetChange() { QObject *sender = QObject::sender(); - if(sender) { + if (sender) { QToolButton *toolButton = qobject_cast(sender); int index = toolButton->property(indexProperty).toInt(); - currentPlugin = toolButton->property(pluginProperty).value(); - QList toolButtonList = sender->parent()->parent() - ->findChildren(); - foreach(QToolButton *tb, toolButtonList) { - if(sender!=tb) { + currentPlugin = + toolButton->property(pluginProperty).value(); + QList toolButtonList = + sender->parent()->parent()->findChildren(); + foreach (QToolButton *tb, toolButtonList) { + if (sender != tb) { tb->setChecked(false); - } - else { + } else { tb->setChecked(true); } } @@ -246,62 +212,62 @@ void MainWindow::widgetChange() } } -void MainWindow::loadPlugins() -{ +void MainWindow::loadPlugins() { QDir pluginsDir = QDir(qApp->applicationDirPath()); pluginsDir.cd("plugins"); foreach (QString fileName, pluginsDir.entryList(QDir::Files)) { - //qDebug()<setLayout(layout); toolBox->addItem(toolbox, dirName); pluginsDir.cd(dirName); foreach (QString fileName, pluginsDir.entryList(QDir::Files)) { - //qDebug()<getMainWidget()) { - qDebug()<<"createPluginToolBox "<getMainWidget()) { + qDebug() << "createPluginToolBox " << toolbox; createPluginToolBox(toolbox, plugin); } } count = deferLoadingFile.count(); - while(deferLoadingFile.count()) { - foreach(QString fileName, deferLoadingFile) { + while (deferLoadingFile.count()) { + foreach (QString fileName, deferLoadingFile) { PluginInterface *plugin = loadPlugin(fileName); - if(plugin) { + if (plugin) { deferLoadingFile.remove(fileName); } - if(plugin&&plugin->getMainWidget()) { + if (plugin && plugin->getMainWidget()) { createPluginToolBox(toolbox, plugin); } } - if(count==deferLoadingFile.count()) { - //qDebug()<setMinimumWidth(toolbox->sizeHint().width()); pluginsDir.cd(".."); @@ -310,77 +276,77 @@ void MainWindow::loadPlugins() createPluginToolBars(); } -PluginInterface* MainWindow::loadPlugin(QString filename) -{ +PluginInterface *MainWindow::loadPlugin(QString filename) { QPluginLoader loader(filename); PluginInterface *plugin = qobject_cast(loader.instance()); if (plugin) { QSet dependency(plugin->getDependencySet()); - QSet loaded(pluginMap.keys().toSet()); - if(loaded.contains(dependency)) { - qDebug()<<"load "<raise(); - splash->showMessage(tr("loading ")+QFileInfo(filename).baseName()+" ..."); + const auto &keys = pluginMap.keys(); + QSet loaded(keys.begin(), keys.end()); + if (loaded.contains(dependency)) { + qDebug() << "load " << filename; + // splash->raise(); + splash->showMessage(tr("loading ") + QFileInfo(filename).baseName() + + " ..."); qApp->processEvents(); pluginMap.insert(QFileInfo(filename).baseName(), plugin); pluginVector.push_back(plugin); - splash->showMessage(tr("initialize ")+QFileInfo(filename).baseName()+" ..."); + splash->showMessage(tr("initialize ") + QFileInfo(filename).baseName() + + " ..."); qApp->processEvents(); - //splash->lower(); - if(!plugin->init(this)) { + // splash->lower(); + if (!plugin->init(this)) { QMessageBox::critical(this, tr("Init Error"), tr("plugin ") + filename + tr(" init error!")); exit(1); } return plugin; - } - else { - qDebug()<<"defer load "<setHorizontalHeaderItem(0, new QTableWidgetItem(tr("Plugin Name"))); - pluginTable->setHorizontalHeaderItem(1, new QTableWidgetItem(tr("Plugin Description"))); + pluginTable->setHorizontalHeaderItem( + 0, new QTableWidgetItem(tr("Plugin Name"))); + pluginTable->setHorizontalHeaderItem( + 1, new QTableWidgetItem(tr("Plugin Description"))); - QMapIterator iplugin(pluginMap); + QMapIterator iplugin(pluginMap); int row = 0; while (iplugin.hasNext()) { iplugin.next(); - QTableWidgetItem *name = new QTableWidgetItem(iplugin.value()->moduleName()); - QTableWidgetItem *description = new QTableWidgetItem(iplugin.value()->moduleDescription()); + QTableWidgetItem *name = + new QTableWidgetItem(iplugin.value()->moduleName()); + QTableWidgetItem *description = + new QTableWidgetItem(iplugin.value()->moduleDescription()); pluginTable->insertRow(pluginTable->rowCount()); pluginTable->setItem(row, 0, name); pluginTable->setItem(row++, 1, description); @@ -388,55 +354,44 @@ void MainWindow::pluginDialog() pluginTable->resizeColumnsToContents(); pluginTable->setEditTriggers(QAbstractItemView::NoEditTriggers); } - if(!containerDialog) { + if (!containerDialog) { containerDialog = new QDialog(this); containerDialog->setWindowTitle(tr("Plugins List")); containerDialog->setWindowIcon(QIcon(":/Icon/plugin_icon.png")); QHBoxLayout *containerLayout = new QHBoxLayout(); containerLayout->addWidget(pluginTable); containerDialog->setLayout(containerLayout); - containerDialog->setFixedSize(QSize((pluginTable->columnWidth(0)+pluginTable->columnWidth(1) - +50), - pluginTable->rowHeight(1)*(pluginTable->rowCount()+2))); + containerDialog->setFixedSize( + QSize((pluginTable->columnWidth(0) + pluginTable->columnWidth(1) + 50), + pluginTable->rowHeight(1) * (pluginTable->rowCount() + 2))); } containerDialog->exec(); } -void MainWindow::update() -{ +void MainWindow::update() { PluginInterface *plugin = getPlugin("UserManagementIF"); - UserManagementInterface * userManagementInterface = dynamic_cast(plugin); - updateCurrentUserInfo(); - userManagementInterface->getDatabase(); - if(currentPlugin) { - setCursor(Qt::BusyCursor); - qApp->processEvents(); - currentPlugin->update(); - unsetCursor(); - qApp->processEvents(); + if (plugin) { + UserManagementInterface *userManagementInterface = + dynamic_cast(plugin); + updateCurrentUserInfo(); + userManagementInterface->getDatabase(); + if (currentPlugin) { + setCursor(Qt::BusyCursor); + qApp->processEvents(); + currentPlugin->update(); + unsetCursor(); + qApp->processEvents(); + } } } -void MainWindow::eventUpdate() -{ - qApp->processEvents(); -} +void MainWindow::eventUpdate() { qApp->processEvents(); } -void MainWindow::updateAll() -{ -// setCursor(Qt::BusyCursor); -// foreach(PluginInterface* plugin, pluginVector) { -// plugin->update(); -// } -// unsetCursor(); - update(); -} +void MainWindow::updateAll() { update(); } -void MainWindow::registerSoftware() -{ - if(!registerDialog) - { +void MainWindow::registerSoftware() { + if (!registerDialog) { registerDialog = new QDialog(this); registerDialog->setWindowTitle(tr("Register Softeware")); registerDialog->setWindowIcon(QIcon(":/Icon/register_icon.png")); @@ -449,13 +404,12 @@ void MainWindow::registerSoftware() registerCodeLabel = new QLabel(tr("Register Code: ")); registerCodeLineEdit = new QLineEdit(); - QDialogButtonBox *buttons = new QDialogButtonBox((QDialogButtonBox::Ok | QDialogButtonBox::Cancel), - Qt::Horizontal, - registerDialog); + QDialogButtonBox *buttons = + new QDialogButtonBox((QDialogButtonBox::Ok | QDialogButtonBox::Cancel), + Qt::Horizontal, registerDialog); connect(buttons, SIGNAL(accepted()), registerDialog, SLOT(accept())); connect(buttons, SIGNAL(rejected()), registerDialog, SLOT(reject())); - QHBoxLayout *machineCodeLayout = new QHBoxLayout(); machineCodeLayout->addWidget(machineCodeLabel); machineCodeLayout->addWidget(machineCodeLineEdit); @@ -471,61 +425,62 @@ void MainWindow::registerSoftware() containerLayout->addWidget(buttons); registerDialog->setLayout(containerLayout); - registerDialog->resize(registerDialog->sizeHint().width()*2, registerDialog->sizeHint().height()); + registerDialog->resize(registerDialog->sizeHint().width() * 2, + registerDialog->sizeHint().height()); } - if(registerDialog->exec()==QDialog::Accepted) - { - if(registerCodeLineEdit->text() == calActiveCode(machineCodeLineEdit->text())) - { + if (registerDialog->exec() == QDialog::Accepted) { + if (registerCodeLineEdit->text() == + calActiveCode(machineCodeLineEdit->text())) { QSettings setting("BenYin", "Registration"); setting.setValue(QString("Registration"), registerCodeLineEdit->text()); - QMessageBox::information(0, tr("Register Softeware"), tr("Register Successful. Please restart the program")); + QMessageBox::information( + 0, tr("Register Softeware"), + tr("Register Successful. Please restart the program")); exit(0); - } - else - { - QMessageBox::critical(0, tr("Register Softeware"), tr("Invalid Register Code !")); + } else { + QMessageBox::critical(0, tr("Register Softeware"), + tr("Invalid Register Code !")); } } } -void MainWindow::updateCurrentUserInfo() -{ +void MainWindow::updateCurrentUserInfo() { PluginInterface *plugin = getPlugin("UserManagementIF"); - UserManagementInterface * userManagementInterface = dynamic_cast(plugin); - QSet roleset = userManagementInterface->getRoleIDSetByUserID( - userManagementInterface->getUserIDByUserName(userManagementInterface->getCurrentUserName())); - QString roles; - foreach(int i, roleset) { -// qDebug()<getRoleNameByRoleID(i)<getRoleNameByRoleID(i); - roles += " "; + if (plugin) { + UserManagementInterface *userManagementInterface = + dynamic_cast(plugin); + QSet roleset = userManagementInterface->getRoleIDSetByUserID( + userManagementInterface->getUserIDByUserName( + userManagementInterface->getCurrentUserName())); + QString roles; + foreach (int i, roleset) { + // qDebug()<getRoleNameByRoleID(i)<getRoleNameByRoleID(i); + roles += " "; + } + setWindowTitle( + tr("Invocing System. Current User: %1 <--> Roles: %2") + .arg(userManagementInterface->getCurrentUserName(), roles)); } - setWindowTitle(tr("Invocing System. Current User: %1 <--> Roles: %2") - .arg(userManagementInterface->getCurrentUserName()).arg(roles)); } -bool MainWindow::isRegistration() -{ +bool MainWindow::isRegistered() { + return true; QSettings setting("BenYin", "Registration"); - bool ret = setting.value(QString("Registration")).toString()=="13980575406"; - if(!ret) - { - return setting.value(QString("Registration")).toString()==calActiveCode(getHDLogicalID()); - } - return ret; + return setting.value(QString("Registration")).toString() == + calActiveCode(getHDLogicalID()); } -QString MainWindow::getHDLogicalID() -{ +QString MainWindow::getHDLogicalID() { DWORD VolumeSerialNumber; - GetVolumeInformation(L"C:\\",NULL,0,&VolumeSerialNumber,NULL,NULL,NULL,0); - return calActiveCode(QString("%1").arg(QString::number(VolumeSerialNumber,16).toUpper())); + GetVolumeInformation(L"C:\\", NULL, 0, &VolumeSerialNumber, NULL, NULL, NULL, + 0); + return calActiveCode( + QString("%1").arg(QString::number(VolumeSerialNumber, 16).toUpper())); } -QString MainWindow::calActiveCode(QString machineCode) -{ +QString MainWindow::calActiveCode(QString machineCode) { const QString parm1("!@#"); const QString parm2("$%^"); const QString parm3("&*("); @@ -535,17 +490,10 @@ QString MainWindow::calActiveCode(QString machineCode) QCryptographicHash sha1(QCryptographicHash::Sha1); -#if QT_VERSION < 0x050000 - QByteArray datagram(seed.toAscii()); -#else QByteArray datagram(seed.toLatin1()); -#endif - const char* tempConstChar = datagram.data(); + const char *tempConstChar = datagram.data(); sha1.addData(tempConstChar); - QString activeCode=sha1.result().toHex(); - - //QClipboard *board = QApplication::clipboard(); - //board->setText(activeCode); + QString activeCode = sha1.result().toHex(); return activeCode; } diff --git a/Main/mainwindow.h b/Main/mainwindow.h index 2cfecec..7b961b4 100644 --- a/Main/mainwindow.h +++ b/Main/mainwindow.h @@ -1,11 +1,6 @@ -#ifndef MAINWINDOW_H -#define MAINWINDOW_H +#pragma once -#if QT_VERSION < 0x050000 -#include -#else #include -#endif #include #include #include @@ -34,20 +29,17 @@ class MainWindow : public QMainWindow static void release(); static QString calActiveCode(QString machineCode); static QString getHDLogicalID(); - static bool isRegistration(); + static bool isRegistered(); void updateUserNameTitle(QString userName); virtual PluginInterface* getPlugin(QString pluginName); virtual void updateCurrentUserInfo(); - - private: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); - signals: - + public slots: private slots: @@ -100,5 +92,3 @@ private slots: QTimer *eventTimer; }; - -#endif // MAINWINDOW_H diff --git a/Main/plugin_interface.h b/Main/plugin_interface.h index 83dfadf..c21b8fa 100644 --- a/Main/plugin_interface.h +++ b/Main/plugin_interface.h @@ -1,5 +1,4 @@ -#ifndef PLUGIN_INTERFACE_H -#define PLUGIN_INTERFACE_H +#pragma once #include #include @@ -35,10 +34,9 @@ class PluginInterface QString timeStamp; }; + Q_DECLARE_METATYPE(PluginInterface*) QT_BEGIN_NAMESPACE Q_DECLARE_INTERFACE(PluginInterface, "com.emma.PluginInterface/1.0") QT_END_NAMESPACE - -#endif // PLUGIN_INTERFACE_H diff --git a/Main/productmanagement_interface.h b/Main/productmanagement_interface.h index 7796e1c..3b515ac 100644 --- a/Main/productmanagement_interface.h +++ b/Main/productmanagement_interface.h @@ -1,5 +1,4 @@ -#ifndef PRODUCTMANAGEMENT_INTERFACE_H -#define PRODUCTMANAGEMENT_INTERFACE_H +#pragma once #include #include @@ -112,16 +111,16 @@ class ProductManagementInterface QString barInfo, int productStatusID, int replacementStatusID, QString time, QString comments) const = 0; virtual bool updateProductDetailByProductID(int id, QString serialNumber, int productTypeID, int brandNameID, - int productModelID, int schemaNameID, int quantity, QString unit, - QString oldPurchasePrice, QString purchasePrice, QString sellingPrice, - int operatorUserID, int responserUserID, int productStatusID, - QString comments) const = 0; + int productModelID, int schemaNameID, int quantity, QString unit, + QString oldPurchasePrice, QString purchasePrice, QString sellingPrice, + int operatorUserID, int responserUserID, int productStatusID, + QString comments) const = 0; virtual bool updateProductDetailByProductID(int id, QString serialNumber, int productTypeID, int brandNameID, - int productModelID, int colorID, int vendorID, int schemaNameID, - int quantity, QString unit, QString oldPurchasePrice, QString purchasePrice, - QString sellingPrice, int operatorUserID, int responserUserID, int sellerID, - QString barInfo, int productStatusID, int replacementStatusID, QString time, - QString comments) const = 0; + int productModelID, int colorID, int vendorID, int schemaNameID, + int quantity, QString unit, QString oldPurchasePrice, QString purchasePrice, + QString sellingPrice, int operatorUserID, int responserUserID, int sellerID, + QString barInfo, int productStatusID, int replacementStatusID, QString time, + QString comments) const = 0; virtual int getResponserUserIDByProductID(int id) const = 0; virtual bool updateStatusIDByProductID(int productID, int statusID) const = 0; virtual int getProductCountByQuery(QString queryString) const = 0; @@ -146,4 +145,3 @@ class ProductManagementInterface QT_BEGIN_NAMESPACE Q_DECLARE_INTERFACE(ProductManagementInterface, "com.emma.ProductManagementInterface/1.0") QT_END_NAMESPACE -#endif // PRODUCTMANAGEMENT_INTERFACE_H diff --git a/Main/qtlocalpeer.cpp b/Main/qtlocalpeer.cpp deleted file mode 100644 index e8eb58a..0000000 --- a/Main/qtlocalpeer.cpp +++ /dev/null @@ -1,204 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal -** -** This file is part of the Qt Solutions component. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names -** of its contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - - -#include "qtlocalpeer.h" -#include -#include -#include - -#if defined(Q_OS_WIN) -#include -#include -typedef BOOL(WINAPI*PProcessIdToSessionId)(DWORD,DWORD*); -static PProcessIdToSessionId pProcessIdToSessionId = 0; -#endif -#if defined(Q_OS_UNIX) -#include -#include -#include -#endif - -namespace QtLP_Private { -#include "qtlockedfile.cpp" -#if defined(Q_OS_WIN) -#include "qtlockedfile_win.cpp" -#else -#include "qtlockedfile_unix.cpp" -#endif -} - -const char* QtLocalPeer::ack = "ack"; - -QtLocalPeer::QtLocalPeer(QObject* parent, const QString &appId) - : QObject(parent), id(appId) -{ - QString prefix = id; - if (id.isEmpty()) { - id = QCoreApplication::applicationFilePath(); -#if defined(Q_OS_WIN) - id = id.toLower(); -#endif - prefix = id.section(QLatin1Char('/'), -1); - } - prefix.remove(QRegExp("[^a-zA-Z]")); - prefix.truncate(6); - - QByteArray idc = id.toUtf8(); - quint16 idNum = qChecksum(idc.constData(), idc.size()); - socketName = QLatin1String("qtsingleapp-") + prefix - + QLatin1Char('-') + QString::number(idNum, 16); - -#if defined(Q_OS_WIN) - if (!pProcessIdToSessionId) { - QLibrary lib("kernel32"); - pProcessIdToSessionId = (PProcessIdToSessionId)lib.resolve("ProcessIdToSessionId"); - } - if (pProcessIdToSessionId) { - DWORD sessionId = 0; - pProcessIdToSessionId(GetCurrentProcessId(), &sessionId); - socketName += QLatin1Char('-') + QString::number(sessionId, 16); - } -#else - socketName += QLatin1Char('-') + QString::number(::getuid(), 16); -#endif - - server = new QLocalServer(this); - QString lockName = QDir(QDir::tempPath()).absolutePath() - + QLatin1Char('/') + socketName - + QLatin1String("-lockfile"); - lockFile.setFileName(lockName); - lockFile.open(QIODevice::ReadWrite); -} - - - -bool QtLocalPeer::isClient() -{ - if (lockFile.isLocked()) - return false; - - if (!lockFile.lock(QtLP_Private::QtLockedFile::WriteLock, false)) - return true; - - bool res = server->listen(socketName); -#if defined(Q_OS_UNIX) && (QT_VERSION >= QT_VERSION_CHECK(4,5,0)) - // ### Workaround - if (!res && server->serverError() == QAbstractSocket::AddressInUseError) { - QFile::remove(QDir::cleanPath(QDir::tempPath())+QLatin1Char('/')+socketName); - res = server->listen(socketName); - } -#endif - if (!res) - qWarning("QtSingleCoreApplication: listen on local socket failed, %s", qPrintable(server->errorString())); - QObject::connect(server, SIGNAL(newConnection()), SLOT(receiveConnection())); - return false; -} - - -bool QtLocalPeer::sendMessage(const QString &message, int timeout) -{ - if (!isClient()) - return false; - - QLocalSocket socket; - bool connOk = false; - for(int i = 0; i < 2; i++) { - // Try twice, in case the other instance is just starting up - socket.connectToServer(socketName); - connOk = socket.waitForConnected(timeout/2); - if (connOk || i) - break; - int ms = 250; -#if defined(Q_OS_WIN) - Sleep(DWORD(ms)); -#else - struct timespec ts = { ms / 1000, (ms % 1000) * 1000 * 1000 }; - nanosleep(&ts, NULL); -#endif - } - if (!connOk) - return false; - - QByteArray uMsg(message.toUtf8()); - QDataStream ds(&socket); - ds.writeBytes(uMsg.constData(), uMsg.size()); - bool res = socket.waitForBytesWritten(timeout); - if (res) { - res &= socket.waitForReadyRead(timeout); // wait for ack - if (res) - res &= (socket.read(qstrlen(ack)) == ack); - } - return res; -} - - -void QtLocalPeer::receiveConnection() -{ - QLocalSocket* socket = server->nextPendingConnection(); - if (!socket) - return; - - while (socket->bytesAvailable() < (int)sizeof(quint32)) - socket->waitForReadyRead(); - QDataStream ds(socket); - QByteArray uMsg; - quint32 remaining; - ds >> remaining; - uMsg.resize(remaining); - int got = 0; - char* uMsgBuf = uMsg.data(); - do { - got = ds.readRawData(uMsgBuf, remaining); - remaining -= got; - uMsgBuf += got; - } while (remaining && got >= 0 && socket->waitForReadyRead(2000)); - if (got < 0) { - qWarning("QtLocalPeer: Message reception failed %s", socket->errorString().toLatin1().constData()); - delete socket; - return; - } - QString message(QString::fromUtf8(uMsg)); - socket->write(ack, qstrlen(ack)); - socket->waitForBytesWritten(1000); - socket->waitForDisconnected(1000); // make sure client reads ack - delete socket; - emit messageReceived(message); //### (might take a long time to return) -} diff --git a/Main/qtlocalpeer.h b/Main/qtlocalpeer.h deleted file mode 100644 index 8dff162..0000000 --- a/Main/qtlocalpeer.h +++ /dev/null @@ -1,77 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal -** -** This file is part of the Qt Solutions component. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names -** of its contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QTLOCALPEER_H -#define QTLOCALPEER_H - -#include -#include -#include - -#include "qtlockedfile.h" - -class QtLocalPeer : public QObject -{ - Q_OBJECT - -public: - QtLocalPeer(QObject *parent = 0, const QString &appId = QString()); - bool isClient(); - bool sendMessage(const QString &message, int timeout); - QString applicationId() const - { return id; } - -Q_SIGNALS: - void messageReceived(const QString &message); - -protected Q_SLOTS: - void receiveConnection(); - -protected: - QString id; - QString socketName; - QLocalServer* server; - QtLP_Private::QtLockedFile lockFile; - -private: - static const char* ack; -}; - -#endif // QTLOCALPEER_H diff --git a/Main/qtlockedfile.cpp b/Main/qtlockedfile.cpp deleted file mode 100644 index d43a520..0000000 --- a/Main/qtlockedfile.cpp +++ /dev/null @@ -1,193 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal -** -** This file is part of the Qt Solutions component. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names -** of its contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qtlockedfile.h" - -/*! - \class QtLockedFile - - \brief The QtLockedFile class extends QFile with advisory locking - functions. - - A file may be locked in read or write mode. Multiple instances of - \e QtLockedFile, created in multiple processes running on the same - machine, may have a file locked in read mode. Exactly one instance - may have it locked in write mode. A read and a write lock cannot - exist simultaneously on the same file. - - The file locks are advisory. This means that nothing prevents - another process from manipulating a locked file using QFile or - file system functions offered by the OS. Serialization is only - guaranteed if all processes that access the file use - QLockedFile. Also, while holding a lock on a file, a process - must not open the same file again (through any API), or locks - can be unexpectedly lost. - - The lock provided by an instance of \e QtLockedFile is released - whenever the program terminates. This is true even when the - program crashes and no destructors are called. -*/ - -/*! \enum QtLockedFile::LockMode - - This enum describes the available lock modes. - - \value ReadLock A read lock. - \value WriteLock A write lock. - \value NoLock Neither a read lock nor a write lock. -*/ - -/*! - Constructs an unlocked \e QtLockedFile object. This constructor - behaves in the same way as \e QFile::QFile(). - - \sa QFile::QFile() -*/ -QtLockedFile::QtLockedFile() - : QFile() -{ -#ifdef Q_OS_WIN - wmutex = 0; - rmutex = 0; -#endif - m_lock_mode = NoLock; -} - -/*! - Constructs an unlocked QtLockedFile object with file \a name. This - constructor behaves in the same way as \e QFile::QFile(const - QString&). - - \sa QFile::QFile() -*/ -QtLockedFile::QtLockedFile(const QString &name) - : QFile(name) -{ -#ifdef Q_OS_WIN - wmutex = 0; - rmutex = 0; -#endif - m_lock_mode = NoLock; -} - -/*! - Opens the file in OpenMode \a mode. - - This is identical to QFile::open(), with the one exception that the - Truncate mode flag is disallowed. Truncation would conflict with the - advisory file locking, since the file would be modified before the - write lock is obtained. If truncation is required, use resize(0) - after obtaining the write lock. - - Returns true if successful; otherwise false. - - \sa QFile::open(), QFile::resize() -*/ -bool QtLockedFile::open(OpenMode mode) -{ - if (mode & QIODevice::Truncate) { - qWarning("QtLockedFile::open(): Truncate mode not allowed."); - return false; - } - return QFile::open(mode); -} - -/*! - Returns \e true if this object has a in read or write lock; - otherwise returns \e false. - - \sa lockMode() -*/ -bool QtLockedFile::isLocked() const -{ - return m_lock_mode != NoLock; -} - -/*! - Returns the type of lock currently held by this object, or \e - QtLockedFile::NoLock. - - \sa isLocked() -*/ -QtLockedFile::LockMode QtLockedFile::lockMode() const -{ - return m_lock_mode; -} - -/*! - \fn bool QtLockedFile::lock(LockMode mode, bool block = true) - - Obtains a lock of type \a mode. The file must be opened before it - can be locked. - - If \a block is true, this function will block until the lock is - aquired. If \a block is false, this function returns \e false - immediately if the lock cannot be aquired. - - If this object already has a lock of type \a mode, this function - returns \e true immediately. If this object has a lock of a - different type than \a mode, the lock is first released and then a - new lock is obtained. - - This function returns \e true if, after it executes, the file is - locked by this object, and \e false otherwise. - - \sa unlock(), isLocked(), lockMode() -*/ - -/*! - \fn bool QtLockedFile::unlock() - - Releases a lock. - - If the object has no lock, this function returns immediately. - - This function returns \e true if, after it executes, the file is - not locked by this object, and \e false otherwise. - - \sa lock(), isLocked(), lockMode() -*/ - -/*! - \fn QtLockedFile::~QtLockedFile() - - Destroys the \e QtLockedFile object. If any locks were held, they - are released. -*/ diff --git a/Main/qtlockedfile.h b/Main/qtlockedfile.h deleted file mode 100644 index c697b03..0000000 --- a/Main/qtlockedfile.h +++ /dev/null @@ -1,97 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal -** -** This file is part of the Qt Solutions component. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names -** of its contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QTLOCKEDFILE_H -#define QTLOCKEDFILE_H - -#include -#ifdef Q_OS_WIN -#include -#endif - -#if defined(Q_OS_WIN) -# if !defined(QT_QTLOCKEDFILE_EXPORT) && !defined(QT_QTLOCKEDFILE_IMPORT) -# define QT_QTLOCKEDFILE_EXPORT -# elif defined(QT_QTLOCKEDFILE_IMPORT) -# if defined(QT_QTLOCKEDFILE_EXPORT) -# undef QT_QTLOCKEDFILE_EXPORT -# endif -# define QT_QTLOCKEDFILE_EXPORT __declspec(dllimport) -# elif defined(QT_QTLOCKEDFILE_EXPORT) -# undef QT_QTLOCKEDFILE_EXPORT -# define QT_QTLOCKEDFILE_EXPORT __declspec(dllexport) -# endif -#else -# define QT_QTLOCKEDFILE_EXPORT -#endif - -namespace QtLP_Private { - -class QT_QTLOCKEDFILE_EXPORT QtLockedFile : public QFile -{ -public: - enum LockMode { NoLock = 0, ReadLock, WriteLock }; - - QtLockedFile(); - QtLockedFile(const QString &name); - ~QtLockedFile(); - - bool open(OpenMode mode); - - bool lock(LockMode mode, bool block = true); - bool unlock(); - bool isLocked() const; - LockMode lockMode() const; - -private: -#ifdef Q_OS_WIN - Qt::HANDLE wmutex; - Qt::HANDLE rmutex; - QVector rmutexes; - QString mutexname; - - Qt::HANDLE getMutexHandle(int idx, bool doCreate); - bool waitMutex(Qt::HANDLE mutex, bool doBlock); - -#endif - LockMode m_lock_mode; -}; -} -#endif diff --git a/Main/qtlockedfile_unix.cpp b/Main/qtlockedfile_unix.cpp deleted file mode 100644 index acc78f6..0000000 --- a/Main/qtlockedfile_unix.cpp +++ /dev/null @@ -1,115 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal -** -** This file is part of the Qt Solutions component. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names -** of its contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include -#include -#include -#include - -#include "qtlockedfile.h" - -bool QtLockedFile::lock(LockMode mode, bool block) -{ - if (!isOpen()) { - qWarning("QtLockedFile::lock(): file is not opened"); - return false; - } - - if (mode == NoLock) - return unlock(); - - if (mode == m_lock_mode) - return true; - - if (m_lock_mode != NoLock) - unlock(); - - struct flock fl; - fl.l_whence = SEEK_SET; - fl.l_start = 0; - fl.l_len = 0; - fl.l_type = (mode == ReadLock) ? F_RDLCK : F_WRLCK; - int cmd = block ? F_SETLKW : F_SETLK; - int ret = fcntl(handle(), cmd, &fl); - - if (ret == -1) { - if (errno != EINTR && errno != EAGAIN) - qWarning("QtLockedFile::lock(): fcntl: %s", strerror(errno)); - return false; - } - - - m_lock_mode = mode; - return true; -} - - -bool QtLockedFile::unlock() -{ - if (!isOpen()) { - qWarning("QtLockedFile::unlock(): file is not opened"); - return false; - } - - if (!isLocked()) - return true; - - struct flock fl; - fl.l_whence = SEEK_SET; - fl.l_start = 0; - fl.l_len = 0; - fl.l_type = F_UNLCK; - int ret = fcntl(handle(), F_SETLKW, &fl); - - if (ret == -1) { - qWarning("QtLockedFile::lock(): fcntl: %s", strerror(errno)); - return false; - } - - m_lock_mode = NoLock; - return true; -} - -QtLockedFile::~QtLockedFile() -{ - if (isOpen()) - unlock(); -} - diff --git a/Main/qtlockedfile_win.cpp b/Main/qtlockedfile_win.cpp deleted file mode 100644 index fc7ad7a..0000000 --- a/Main/qtlockedfile_win.cpp +++ /dev/null @@ -1,211 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal -** -** This file is part of the Qt Solutions component. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names -** of its contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qtlockedfile.h" -#include -#include - -#define MUTEX_PREFIX "QtLockedFile mutex " -// Maximum number of concurrent read locks. Must not be greater than MAXIMUM_WAIT_OBJECTS -#define MAX_READERS MAXIMUM_WAIT_OBJECTS - -#if QT_VERSION >= 0x050000 -#define QT_WA(unicode, ansi) unicode -#endif - -Qt::HANDLE QtLockedFile::getMutexHandle(int idx, bool doCreate) -{ - if (mutexname.isEmpty()) { - QFileInfo fi(*this); - mutexname = QString::fromLatin1(MUTEX_PREFIX) - + fi.absoluteFilePath().toLower(); - } - QString mname(mutexname); - if (idx >= 0) - mname += QString::number(idx); - - Qt::HANDLE mutex; - if (doCreate) { - QT_WA( { mutex = CreateMutexW(NULL, FALSE, (TCHAR*)mname.utf16()); }, - { mutex = CreateMutexA(NULL, FALSE, mname.toLocal8Bit().constData()); } ); - if (!mutex) { - qErrnoWarning("QtLockedFile::lock(): CreateMutex failed"); - return 0; - } - } - else { - QT_WA( { mutex = OpenMutexW(SYNCHRONIZE | MUTEX_MODIFY_STATE, FALSE, (TCHAR*)mname.utf16()); }, - { mutex = OpenMutexA(SYNCHRONIZE | MUTEX_MODIFY_STATE, FALSE, mname.toLocal8Bit().constData()); } ); - if (!mutex) { - if (GetLastError() != ERROR_FILE_NOT_FOUND) - qErrnoWarning("QtLockedFile::lock(): OpenMutex failed"); - return 0; - } - } - return mutex; -} - -bool QtLockedFile::waitMutex(Qt::HANDLE mutex, bool doBlock) -{ - Q_ASSERT(mutex); - DWORD res = WaitForSingleObject(mutex, doBlock ? INFINITE : 0); - switch (res) { - case WAIT_OBJECT_0: - case WAIT_ABANDONED: - return true; - break; - case WAIT_TIMEOUT: - break; - default: - qErrnoWarning("QtLockedFile::lock(): WaitForSingleObject failed"); - } - return false; -} - - - -bool QtLockedFile::lock(LockMode mode, bool block) -{ - if (!isOpen()) { - qWarning("QtLockedFile::lock(): file is not opened"); - return false; - } - - if (mode == NoLock) - return unlock(); - - if (mode == m_lock_mode) - return true; - - if (m_lock_mode != NoLock) - unlock(); - - if (!wmutex && !(wmutex = getMutexHandle(-1, true))) - return false; - - if (!waitMutex(wmutex, block)) - return false; - - if (mode == ReadLock) { - int idx = 0; - for (; idx < MAX_READERS; idx++) { - rmutex = getMutexHandle(idx, false); - if (!rmutex || waitMutex(rmutex, false)) - break; - CloseHandle(rmutex); - } - bool ok = true; - if (idx >= MAX_READERS) { - qWarning("QtLockedFile::lock(): too many readers"); - rmutex = 0; - ok = false; - } - else if (!rmutex) { - rmutex = getMutexHandle(idx, true); - if (!rmutex || !waitMutex(rmutex, false)) - ok = false; - } - if (!ok && rmutex) { - CloseHandle(rmutex); - rmutex = 0; - } - ReleaseMutex(wmutex); - if (!ok) - return false; - } - else { - Q_ASSERT(rmutexes.isEmpty()); - for (int i = 0; i < MAX_READERS; i++) { - Qt::HANDLE mutex = getMutexHandle(i, false); - if (mutex) - rmutexes.append(mutex); - } - if (rmutexes.size()) { - DWORD res = WaitForMultipleObjects(rmutexes.size(), rmutexes.constData(), - TRUE, block ? INFINITE : 0); - if (res != WAIT_OBJECT_0 && res != WAIT_ABANDONED) { - if (res != WAIT_TIMEOUT) - qErrnoWarning("QtLockedFile::lock(): WaitForMultipleObjects failed"); - m_lock_mode = WriteLock; // trick unlock() to clean up - semiyucky - unlock(); - return false; - } - } - } - - m_lock_mode = mode; - return true; -} - -bool QtLockedFile::unlock() -{ - if (!isOpen()) { - qWarning("QtLockedFile::unlock(): file is not opened"); - return false; - } - - if (!isLocked()) - return true; - - if (m_lock_mode == ReadLock) { - ReleaseMutex(rmutex); - CloseHandle(rmutex); - rmutex = 0; - } - else { - foreach(Qt::HANDLE mutex, rmutexes) { - ReleaseMutex(mutex); - CloseHandle(mutex); - } - rmutexes.clear(); - ReleaseMutex(wmutex); - } - - m_lock_mode = QtLockedFile::NoLock; - return true; -} - -QtLockedFile::~QtLockedFile() -{ - if (isOpen()) - unlock(); - if (wmutex) - CloseHandle(wmutex); -} diff --git a/Main/qtsingleapplication.cpp b/Main/qtsingleapplication.cpp deleted file mode 100644 index fc999e9..0000000 --- a/Main/qtsingleapplication.cpp +++ /dev/null @@ -1,347 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal -** -** This file is part of the Qt Solutions component. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names -** of its contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - - -#include "qtsingleapplication.h" -#include "qtlocalpeer.h" -#include - - -/*! - \class QtSingleApplication qtsingleapplication.h - \brief The QtSingleApplication class provides an API to detect and - communicate with running instances of an application. - - This class allows you to create applications where only one - instance should be running at a time. I.e., if the user tries to - launch another instance, the already running instance will be - activated instead. Another usecase is a client-server system, - where the first started instance will assume the role of server, - and the later instances will act as clients of that server. - - By default, the full path of the executable file is used to - determine whether two processes are instances of the same - application. You can also provide an explicit identifier string - that will be compared instead. - - The application should create the QtSingleApplication object early - in the startup phase, and call isRunning() to find out if another - instance of this application is already running. If isRunning() - returns false, it means that no other instance is running, and - this instance has assumed the role as the running instance. In - this case, the application should continue with the initialization - of the application user interface before entering the event loop - with exec(), as normal. - - The messageReceived() signal will be emitted when the running - application receives messages from another instance of the same - application. When a message is received it might be helpful to the - user to raise the application so that it becomes visible. To - facilitate this, QtSingleApplication provides the - setActivationWindow() function and the activateWindow() slot. - - If isRunning() returns true, another instance is already - running. It may be alerted to the fact that another instance has - started by using the sendMessage() function. Also data such as - startup parameters (e.g. the name of the file the user wanted this - new instance to open) can be passed to the running instance with - this function. Then, the application should terminate (or enter - client mode). - - If isRunning() returns true, but sendMessage() fails, that is an - indication that the running instance is frozen. - - Here's an example that shows how to convert an existing - application to use QtSingleApplication. It is very simple and does - not make use of all QtSingleApplication's functionality (see the - examples for that). - - \code - // Original - int main(int argc, char **argv) - { - QApplication app(argc, argv); - - MyMainWidget mmw; - mmw.show(); - return app.exec(); - } - - // Single instance - int main(int argc, char **argv) - { - QtSingleApplication app(argc, argv); - - if (app.isRunning()) - return !app.sendMessage(someDataString); - - MyMainWidget mmw; - app.setActivationWindow(&mmw); - mmw.show(); - return app.exec(); - } - \endcode - - Once this QtSingleApplication instance is destroyed (normally when - the process exits or crashes), when the user next attempts to run the - application this instance will not, of course, be encountered. The - next instance to call isRunning() or sendMessage() will assume the - role as the new running instance. - - For console (non-GUI) applications, QtSingleCoreApplication may be - used instead of this class, to avoid the dependency on the QtGui - library. - - \sa QtSingleCoreApplication -*/ - - -void QtSingleApplication::sysInit(const QString &appId) -{ - actWin = 0; - peer = new QtLocalPeer(this, appId); - connect(peer, SIGNAL(messageReceived(const QString&)), SIGNAL(messageReceived(const QString&))); -} - - -/*! - Creates a QtSingleApplication object. The application identifier - will be QCoreApplication::applicationFilePath(). \a argc, \a - argv, and \a GUIenabled are passed on to the QAppliation constructor. - - If you are creating a console application (i.e. setting \a - GUIenabled to false), you may consider using - QtSingleCoreApplication instead. -*/ - -QtSingleApplication::QtSingleApplication(int &argc, char **argv, bool GUIenabled) - : QApplication(argc, argv, GUIenabled) -{ - sysInit(); -} - - -/*! - Creates a QtSingleApplication object with the application - identifier \a appId. \a argc and \a argv are passed on to the - QAppliation constructor. -*/ - -QtSingleApplication::QtSingleApplication(const QString &appId, int &argc, char **argv) - : QApplication(argc, argv) -{ - sysInit(appId); -} - -#if QT_VERSION < 0x050000 - -/*! - Creates a QtSingleApplication object. The application identifier - will be QCoreApplication::applicationFilePath(). \a argc, \a - argv, and \a type are passed on to the QAppliation constructor. -*/ -QtSingleApplication::QtSingleApplication(int &argc, char **argv, Type type) - : QApplication(argc, argv, type) -{ - sysInit(); -} - - -# if defined(Q_WS_X11) -/*! - Special constructor for X11, ref. the documentation of - QApplication's corresponding constructor. The application identifier - will be QCoreApplication::applicationFilePath(). \a dpy, \a visual, - and \a cmap are passed on to the QApplication constructor. -*/ -QtSingleApplication::QtSingleApplication(Display* dpy, Qt::HANDLE visual, Qt::HANDLE cmap) - : QApplication(dpy, visual, cmap) -{ - sysInit(); -} - -/*! - Special constructor for X11, ref. the documentation of - QApplication's corresponding constructor. The application identifier - will be QCoreApplication::applicationFilePath(). \a dpy, \a argc, \a - argv, \a visual, and \a cmap are passed on to the QApplication - constructor. -*/ -QtSingleApplication::QtSingleApplication(Display *dpy, int &argc, char **argv, Qt::HANDLE visual, Qt::HANDLE cmap) - : QApplication(dpy, argc, argv, visual, cmap) -{ - sysInit(); -} - -/*! - Special constructor for X11, ref. the documentation of - QApplication's corresponding constructor. The application identifier - will be \a appId. \a dpy, \a argc, \a - argv, \a visual, and \a cmap are passed on to the QApplication - constructor. -*/ -QtSingleApplication::QtSingleApplication(Display* dpy, const QString &appId, int argc, char **argv, Qt::HANDLE visual, Qt::HANDLE cmap) - : QApplication(dpy, argc, argv, visual, cmap) -{ - sysInit(appId); -} -# endif // Q_WS_X11 -#endif // QT_VERSION < 0x050000 - - -/*! - Returns true if another instance of this application is running; - otherwise false. - - This function does not find instances of this application that are - being run by a different user (on Windows: that are running in - another session). - - \sa sendMessage() -*/ - -bool QtSingleApplication::isRunning() -{ - return peer->isClient(); -} - - -/*! - Tries to send the text \a message to the currently running - instance. The QtSingleApplication object in the running instance - will emit the messageReceived() signal when it receives the - message. - - This function returns true if the message has been sent to, and - processed by, the current instance. If there is no instance - currently running, or if the running instance fails to process the - message within \a timeout milliseconds, this function return false. - - \sa isRunning(), messageReceived() -*/ -bool QtSingleApplication::sendMessage(const QString &message, int timeout) -{ - return peer->sendMessage(message, timeout); -} - - -/*! - Returns the application identifier. Two processes with the same - identifier will be regarded as instances of the same application. -*/ -QString QtSingleApplication::id() const -{ - return peer->applicationId(); -} - - -/*! - Sets the activation window of this application to \a aw. The - activation window is the widget that will be activated by - activateWindow(). This is typically the application's main window. - - If \a activateOnMessage is true (the default), the window will be - activated automatically every time a message is received, just prior - to the messageReceived() signal being emitted. - - \sa activateWindow(), messageReceived() -*/ - -void QtSingleApplication::setActivationWindow(QWidget* aw, bool activateOnMessage) -{ - actWin = aw; - if (activateOnMessage) - connect(peer, SIGNAL(messageReceived(const QString&)), this, SLOT(activateWindow())); - else - disconnect(peer, SIGNAL(messageReceived(const QString&)), this, SLOT(activateWindow())); -} - - -/*! - Returns the applications activation window if one has been set by - calling setActivationWindow(), otherwise returns 0. - - \sa setActivationWindow() -*/ -QWidget* QtSingleApplication::activationWindow() const -{ - return actWin; -} - - -/*! - De-minimizes, raises, and activates this application's activation window. - This function does nothing if no activation window has been set. - - This is a convenience function to show the user that this - application instance has been activated when he has tried to start - another instance. - - This function should typically be called in response to the - messageReceived() signal. By default, that will happen - automatically, if an activation window has been set. - - \sa setActivationWindow(), messageReceived(), initialize() -*/ -void QtSingleApplication::activateWindow() -{ - if (actWin) { - actWin->setWindowState(actWin->windowState() & ~Qt::WindowMinimized); - actWin->raise(); - actWin->activateWindow(); - } -} - - -/*! - \fn void QtSingleApplication::messageReceived(const QString& message) - - This signal is emitted when the current instance receives a \a - message from another instance of this application. - - \sa sendMessage(), setActivationWindow(), activateWindow() -*/ - - -/*! - \fn void QtSingleApplication::initialize(bool dummy = true) - - \obsolete -*/ diff --git a/Main/qtsingleapplication.h b/Main/qtsingleapplication.h deleted file mode 100644 index 1ddd01e..0000000 --- a/Main/qtsingleapplication.h +++ /dev/null @@ -1,105 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal -** -** This file is part of the Qt Solutions component. -** -** $QT_BEGIN_LICENSE:BSD$ -** You may use this file under the terms of the BSD license as follows: -** -** "Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions are -** met: -** * Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** * Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in -** the documentation and/or other materials provided with the -** distribution. -** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names -** of its contributors may be used to endorse or promote products derived -** from this software without specific prior written permission. -** -** -** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QTSINGLEAPPLICATION_H -#define QTSINGLEAPPLICATION_H - -#include - -class QtLocalPeer; - -#if defined(Q_OS_WIN) -# if !defined(QT_QTSINGLEAPPLICATION_EXPORT) && !defined(QT_QTSINGLEAPPLICATION_IMPORT) -# define QT_QTSINGLEAPPLICATION_EXPORT -# elif defined(QT_QTSINGLEAPPLICATION_IMPORT) -# if defined(QT_QTSINGLEAPPLICATION_EXPORT) -# undef QT_QTSINGLEAPPLICATION_EXPORT -# endif -# define QT_QTSINGLEAPPLICATION_EXPORT __declspec(dllimport) -# elif defined(QT_QTSINGLEAPPLICATION_EXPORT) -# undef QT_QTSINGLEAPPLICATION_EXPORT -# define QT_QTSINGLEAPPLICATION_EXPORT __declspec(dllexport) -# endif -#else -# define QT_QTSINGLEAPPLICATION_EXPORT -#endif - -class QT_QTSINGLEAPPLICATION_EXPORT QtSingleApplication : public QApplication -{ - Q_OBJECT - -public: - QtSingleApplication(int &argc, char **argv, bool GUIenabled = true); - QtSingleApplication(const QString &id, int &argc, char **argv); -#if QT_VERSION < 0x050000 - QtSingleApplication(int &argc, char **argv, Type type); -# if defined(Q_WS_X11) - QtSingleApplication(Display* dpy, Qt::HANDLE visual = 0, Qt::HANDLE colormap = 0); - QtSingleApplication(Display *dpy, int &argc, char **argv, Qt::HANDLE visual = 0, Qt::HANDLE cmap= 0); - QtSingleApplication(Display* dpy, const QString &appId, int argc, char **argv, Qt::HANDLE visual = 0, Qt::HANDLE colormap = 0); -# endif // Q_WS_X11 -#endif // QT_VERSION < 0x050000 - - bool isRunning(); - QString id() const; - - void setActivationWindow(QWidget* aw, bool activateOnMessage = true); - QWidget* activationWindow() const; - - // Obsolete: - void initialize(bool dummy = true) - { isRunning(); Q_UNUSED(dummy) } - -public Q_SLOTS: - bool sendMessage(const QString &message, int timeout = 5000); - void activateWindow(); - - -Q_SIGNALS: - void messageReceived(const QString &message); - - -private: - void sysInit(const QString &appId = QString()); - QtLocalPeer *peer; - QWidget *actWin; -}; - -#endif // QTSINGLEAPPLICATION_H diff --git a/Main/usermanagement_interface.h b/Main/usermanagement_interface.h index f356e87..18f5974 100644 --- a/Main/usermanagement_interface.h +++ b/Main/usermanagement_interface.h @@ -1,5 +1,4 @@ -#ifndef USERMANAGEMENT_INTERFACE_H -#define USERMANAGEMENT_INTERFACE_H +#pragma once #include #include @@ -59,13 +58,13 @@ class UserManagementInterface //for db usage virtual QString getCurrentUserName() const = 0; virtual void setCurrentUserName(QString username) = 0; -// virtual QString getCurrentSchemaName() const = 0; -// virtual void setCurrentSchemaName(QString schemaname) = 0; + // virtual QString getCurrentSchemaName() const = 0; + // virtual void setCurrentSchemaName(QString schemaname) = 0; virtual QString getCurrentIPAdress() const = 0; virtual void setCurrentIPAdress(QString ipaddress) = 0; virtual QSqlQuery getSqlQuery() const = 0; virtual QSqlDatabase getDatabase() const = 0; - virtual bool openDatabase(QString username, QString password, QString ipaddress) = 0; + virtual bool openDatabase(QString username, QString password, QString ipaddress, int port=3306) = 0; virtual void changePassword(QString username, QString password) const = 0; //for user change notify virtual void registeObserver(UserChangeNotifyInterface *obsever) = 0; @@ -74,7 +73,7 @@ class UserManagementInterface //for access checking virtual bool checkAccess(QSet accessRoleNameSet) const = 0; virtual bool isAdmin(QString username) const = 0; - virtual bool isStatistic(QString username) const = 0; + virtual bool isAuditor(QString username) const = 0; //for table schemaname virtual QSet getAllSchemaName() const = 0; virtual QSet getAllSchemaID() const = 0; @@ -115,7 +114,7 @@ class UserManagementInterface return true; } - //help function + //help function to convert a chinese name to a unique id static QString getDBLoginUserName(QString username) { QChar NUL(0); @@ -146,5 +145,3 @@ QT_BEGIN_NAMESPACE Q_DECLARE_INTERFACE(UserManagementInterface, "com.emma.UserManagementInterface/1.0") Q_DECLARE_INTERFACE(UserChangeNotifyInterface, "com.emma.UserChangeNotifyInterface/1.0") QT_END_NAMESPACE - -#endif // USERMANAGEMENT_INTERFACE_H From 234a66500acbdf59c51503ea476be0f43330bce5 Mon Sep 17 00:00:00 2001 From: Feng Yin Date: Thu, 30 Nov 2023 23:09:43 +1100 Subject: [PATCH 2/4] Clean up user management code. --- Main/usermanagement_interface.h | 9 +- .../UserManagementIF_global.h | 5 +- Plugins/UserManagementIF/usermanagementif.cpp | 216 +++++-------- Plugins/UserManagementIF/usermanagementif.h | 20 +- .../UserManagement_Invoicing_global.h | 5 +- .../UserManagement_Invoicing/logindialog.cpp | 295 ++++-------------- .../UserManagement_Invoicing/logindialog.h | 20 +- .../usermanagement_invoicing.cpp | 19 +- .../usermanagement_invoicing.h | 7 +- .../usermanagementdialog.cpp | 10 +- .../usermanagementdialog.h | 5 +- 11 files changed, 176 insertions(+), 435 deletions(-) diff --git a/Main/usermanagement_interface.h b/Main/usermanagement_interface.h index 18f5974..e824ac6 100644 --- a/Main/usermanagement_interface.h +++ b/Main/usermanagement_interface.h @@ -57,14 +57,11 @@ class UserManagementInterface virtual ~UserManagementInterface() {} //for db usage virtual QString getCurrentUserName() const = 0; - virtual void setCurrentUserName(QString username) = 0; - // virtual QString getCurrentSchemaName() const = 0; - // virtual void setCurrentSchemaName(QString schemaname) = 0; virtual QString getCurrentIPAdress() const = 0; - virtual void setCurrentIPAdress(QString ipaddress) = 0; + virtual int getCurrentPort() const = 0; virtual QSqlQuery getSqlQuery() const = 0; - virtual QSqlDatabase getDatabase() const = 0; - virtual bool openDatabase(QString username, QString password, QString ipaddress, int port=3306) = 0; + virtual QSqlDatabase getDatabase(QString username = "") const = 0; + virtual bool openDatabase(QString username, QString password, QString ipaddress, int port) = 0; virtual void changePassword(QString username, QString password) const = 0; //for user change notify virtual void registeObserver(UserChangeNotifyInterface *obsever) = 0; diff --git a/Plugins/UserManagementIF/UserManagementIF_global.h b/Plugins/UserManagementIF/UserManagementIF_global.h index 53e4ffe..106884c 100644 --- a/Plugins/UserManagementIF/UserManagementIF_global.h +++ b/Plugins/UserManagementIF/UserManagementIF_global.h @@ -1,5 +1,4 @@ -#ifndef USERMANAGEMENTIF_GLOBAL_H -#define USERMANAGEMENTIF_GLOBAL_H +#pragma once #include @@ -8,5 +7,3 @@ #else # define USERMANAGEMENTIFSHARED_EXPORT Q_DECL_IMPORT #endif - -#endif // USERMANAGEMENTIF_GLOBAL_H diff --git a/Plugins/UserManagementIF/usermanagementif.cpp b/Plugins/UserManagementIF/usermanagementif.cpp index 3d739ff..9041420 100644 --- a/Plugins/UserManagementIF/usermanagementif.cpp +++ b/Plugins/UserManagementIF/usermanagementif.cpp @@ -1,30 +1,24 @@ -#include -#if QT_VERSION < 0x050000 -#include -#else -#include -#endif -#include #include "usermanagementif.h" +#include +#include +#include +#include "helper.h" const QStringList UserManagementInterface::defaultSchema = QStringList(); const QStringList UserManagementInterface::defaultRole = QStringList() <<"管理员"<<"采购"<<"库管"<<"销售"<<"收银员"<<"审计"; -const QStringList UserManagementInterface::defaultUser = QStringList() <<"root"; - -UserManagementIF::UserManagementIF() : - currentUser(""), - currentDBSchema(""), - currentIP(""), - currentPassword(""), - observerSet(QSet()) -{ - QDir qmdir(":/Translations"); - foreach (QString fileName, qmdir.entryList(QDir::Files)) { - //qDebug()<load(QFileInfo(fileName).baseName(), ":/Translations"); - QApplication::instance()->installTranslator(qtTranslator); - } +const QStringList UserManagementInterface::defaultUser = QStringList() << "admin"; + +const char *defaultDBSchemaName = "information_schema"; +const char *dbSchemaName = "invoicing_schema"; + +UserManagementIF::UserManagementIF() + : currentUser("") + , currentDBSchema("") + , currentIP("") + , currentPassword("") + , observerSet(QSet()) +{ + INSTALL_TRANSLATION; } UserManagementIF::~UserManagementIF() @@ -51,14 +45,13 @@ QToolBar* UserManagementIF::getToolBar() const return NULL; } -bool UserManagementIF::init(MainWindow *parent) +bool UserManagementIF::init(MainWindow * /*parent*/) { return true; } bool UserManagementIF::deInit() { - removeDatabase("default"); return true; } @@ -87,29 +80,14 @@ QString UserManagementIF::getCurrentUserName() const return currentUser; } -void UserManagementIF::setCurrentUserName(QString username) -{ - currentUser = username; -} - -//QString UserManagementIF::getCurrentSchemaName() const -//{ -// return currentDBSchema; -//} - -//void UserManagementIF::setCurrentSchemaName(QString schemaname) -//{ -// currentDBSchema = schemaname; -//} - QString UserManagementIF::getCurrentIPAdress() const { return currentIP; } -void UserManagementIF::setCurrentIPAdress(QString ipaddress) +int UserManagementIF::getCurrentPort() const { - currentIP = ipaddress; + return currentPort; } QSqlQuery UserManagementIF::getSqlQuery() const @@ -117,14 +95,10 @@ QSqlQuery UserManagementIF::getSqlQuery() const return QSqlQuery(getDatabase()); } -QSqlDatabase UserManagementIF::getDatabase() const +QSqlDatabase UserManagementIF::getDatabase(QString name) const { - QSqlDatabase db = QSqlDatabase::database(getDBLoginUserName("default")); - QSqlQuery query(db); - if(db.isOpen() && !query.exec("SHOW DATABASES")) { - QMessageBox::critical(0, tr("Error"), tr("DB connection lost! Restart the program to try again")); - exit(0); - } + QString dbName = getDBLoginUserName(name.isEmpty() ? currentUser : name); + QSqlDatabase db = QSqlDatabase::database(dbName); return db; } @@ -137,85 +111,56 @@ void UserManagementIF::setDataBaseName(QString dbName) const } } -bool UserManagementIF::reopenDatabase() const +bool UserManagementIF::openDatabase(QString username, QString password, QString ipaddress, int port) { - removeDatabase(currentUser); - { - QSqlDatabase db(addDatabase(currentUser)); - db.setHostName(currentIP); - db.setUserName(getDBLoginUserName(currentUser)); - db.setPassword(currentPassword); - if(db.open()) { - //qDebug()<<"QSqlDriver::Transactions "<hasFeature(QSqlDriver::Transactions); - //create default db - if(!getDatabase().isValid()) { - QSqlDatabase defaultDB(addDatabase("default")); - defaultDB.setHostName(currentIP); - defaultDB.setUserName(getDBLoginUserName(currentUser)); - defaultDB.setPassword(currentPassword); - defaultDB.open(); - } - } + if (getDatabase(username).isValid()) { + currentUser = username; + currentIP = ipaddress; + currentPassword = password; + currentPort = port; + return true; } - removeDatabase(currentUser); - return false; -} -bool UserManagementIF::openDatabase(QString username, QString password, QString ipaddress) -{ - removeDatabase(username); { + // this is for when open db at very first time, there is no invoice db, so use default db for + // open connection and then create the invoice db QSqlDatabase db(addDatabase(username)); + db.setDatabaseName(defaultDBSchemaName); db.setHostName(ipaddress); - db.setUserName(getDBLoginUserName(username)); - db.setPassword(password); - if(db.open()) { - currentUser = username; - currentIP = ipaddress; - currentPassword = password; - //qDebug()<<"QSqlDriver::Transactions "<hasFeature(QSqlDriver::Transactions); - //create default db - if(!getDatabase().isValid()) { - QSqlDatabase defaultDB(addDatabase("default")); - defaultDB.setHostName(ipaddress); - defaultDB.setUserName(getDBLoginUserName(username)); - defaultDB.setPassword(password); - defaultDB.open(); - } - if(createUserManagementTables()) { - return true; - } + db.setPort(port); + if (!db.open(getDBLoginUserName(username), password)) { + return false; } + currentUser = username; + currentIP = ipaddress; + currentPassword = password; + currentPort = port; + if (!createUserManagementTables()) { + return false; + } + } + QSqlDatabase db(addDatabase(username)); + db.setDatabaseName(dbSchemaName); + db.setHostName(ipaddress); + db.setPort(port); + if (!db.open(getDBLoginUserName(username), password)) { + return false; } - removeDatabase(username); - return false; + return true; } QSqlDatabase UserManagementIF::addDatabase(QString username) const { - removeDatabase(username); return QSqlDatabase::addDatabase("QMYSQL", getDBLoginUserName(username)); } -void UserManagementIF::removeDatabase(QString username) const -{ - if(username.isEmpty()) { - QString loginUserName = getDBLoginUserName(currentUser); - QSqlDatabase::database(loginUserName).close(); - QSqlDatabase::removeDatabase(loginUserName); - } - else { - QString loginUserName = getDBLoginUserName(username); - QSqlDatabase::database(loginUserName).close(); - QSqlDatabase::removeDatabase(loginUserName); - } -} - void UserManagementIF::changePassword(QString username, QString password) const { QSqlQuery query(getSqlQuery()); - query.exec(QString("SET PASSWORD FOR '%1'@'localhost' = PASSWORD('%2')").arg(getDBLoginUserName(username)).arg(password)); - query.exec(QString("SET PASSWORD FOR '%1'@'%' = PASSWORD('%2')").arg(getDBLoginUserName(username)).arg(password)); + query.exec(QString("SET PASSWORD FOR '%1'@'localhost' = PASSWORD('%2')") + .arg(getDBLoginUserName(username), password)); + query.exec(QString("SET PASSWORD FOR '%1'@'%' = PASSWORD('%2')") + .arg(getDBLoginUserName(username), password)); } void UserManagementIF::registeObserver(UserChangeNotifyInterface *observer) @@ -257,13 +202,11 @@ bool UserManagementIF::checkAccess(QSet accessRoleNameSet) const bool UserManagementIF::isAdmin(QString username) const { int adminRoleID = getRoleIDByRoleName("管理员"); -// QMessageBox::information(0, tr("Setup"), QString("%1").arg(adminRoleID)); -// QMessageBox::information(0, tr("Setup"), QString("%1").arg("管理员")); QSet roleIDSet = getRoleIDSetByUserID(getUserIDByUserName(username)); return roleIDSet.contains(adminRoleID); } -bool UserManagementIF::isStatistic(QString username) const +bool UserManagementIF::isAuditor(QString username) const { int adminRoleID = getRoleIDByRoleName("审计"); QSet roleIDSet = getRoleIDSetByUserID(getUserIDByUserName(username)); @@ -384,10 +327,22 @@ void UserManagementIF::addUser(QString username, QString password) const { QSqlQuery query(getSqlQuery()); QString loginName = getDBLoginUserName(username); - query.exec(QString("CREATE USER '%1'@'%' IDENTIFIED BY '%2'").arg(loginName).arg(password)); - query.exec(QString("GRANT ALL PRIVILEGES ON *.* TO '%1'@'%' WITH GRANT OPTION").arg(loginName)); - query.exec(QString("CREATE USER '%1'@'localhost' IDENTIFIED BY '%2'").arg(loginName).arg(password)); - query.exec(QString("GRANT ALL PRIVILEGES ON *.* TO '%1'@'localhost' WITH GRANT OPTION").arg(loginName)); + query.exec(QString("CREATE USER '%1'@'%' IDENTIFIED BY '%2'").arg(loginName, password)); + query.exec( + QString( + "GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, " + "INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, " + "REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER " + "ROUTINE, CREATE USER, EVENT, TRIGGER ON *.* TO `%1`@`%` WITH GRANT OPTION") + .arg(loginName)); + query.exec(QString("CREATE USER '%1'@'localhost' IDENTIFIED BY '%2'").arg(loginName, password)); + query.exec( + QString( + "GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, " + "INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, " + "REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER " + "ROUTINE, CREATE USER, EVENT, TRIGGER ON *.* TO `%1`@`localhost` WITH GRANT OPTION") + .arg(loginName)); query.exec(QString("INSERT INTO user (`name`) VALUES ('%1')").arg(username)); } @@ -471,7 +426,8 @@ bool UserManagementIF::addUserSchemaByUserIDSchemaID(int userID, int schemaID) c { QSqlQuery query(getSqlQuery()); return query.exec(QString("INSERT INTO `userschema` (`userID`, `schemaID`) VALUES (%1, %2)") - .arg(userID).arg(schemaID)); + .arg(userID) + .arg(schemaID)); } QStringList UserManagementIF::getDefaultSchema() const @@ -493,18 +449,20 @@ QStringList UserManagementIF::getDefaultUser() const bool UserManagementIF::createUserManagementTables() const { QSqlQuery query(getSqlQuery()); - if(!query.exec("use invoicingschema")) { - if(!query.exec("CREATE SCHEMA `invoicingschema` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci")) { + if (!query.exec(QString("use %1").arg(dbSchemaName))) { + if (!query.exec( + QString("CREATE SCHEMA `%1` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci") + .arg(dbSchemaName))) { return false; } } - setDataBaseName("invoicingschema"); + setDataBaseName(dbSchemaName); if(!query.exec("desc schemaname")) { if(!query.exec("CREATE TABLE `schemaname` \ (`id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,\ `name` VARCHAR(45) NOT NULL ,\ PRIMARY KEY (`id`) )")) { - query.exec("drop schema `invoicingschema`"); + query.exec(QString("drop schema `%1`").arg(dbSchemaName)); return false; } //insert default schema Name @@ -519,7 +477,7 @@ bool UserManagementIF::createUserManagementTables() const (`id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,\ `name` VARCHAR(45) NOT NULL ,\ PRIMARY KEY (`id`) )")) { - query.exec("drop schema `invoicingschema`"); + query.exec(QString("drop schema `%1`").arg(dbSchemaName)); return false; } //insert default role Name @@ -534,7 +492,7 @@ bool UserManagementIF::createUserManagementTables() const (`id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,\ `name` VARCHAR(45) NOT NULL ,\ PRIMARY KEY (`id`) )")) { - query.exec("drop schema `invoicingschema`"); + query.exec(QString("drop schema `%1`").arg(dbSchemaName)); return false; } } @@ -546,7 +504,7 @@ bool UserManagementIF::createUserManagementTables() const `schemaID` INT UNSIGNED NOT NULL ,\ FOREIGN KEY (`schemaID`) REFERENCES schemaname(`id`) ,\ PRIMARY KEY (`id`) )")) { - query.exec("drop schema `invoicingschema`"); + query.exec(QString("drop schema `%1`").arg(dbSchemaName)); return false; } } @@ -558,7 +516,7 @@ bool UserManagementIF::createUserManagementTables() const `roleID` INT UNSIGNED NOT NULL ,\ FOREIGN KEY (`roleID`) REFERENCES role(`id`) ,\ PRIMARY KEY (`id`) )")) { - query.exec("drop schema `invoicingschema`"); + query.exec(QString("drop schema `%1`").arg(dbSchemaName)); return false; } //insert default user & userrole @@ -574,9 +532,3 @@ bool UserManagementIF::createUserManagementTables() const return true; } - -QT_BEGIN_NAMESPACE -#if QT_VERSION < 0x050000 -Q_EXPORT_PLUGIN2(UserManagementIF, UserManagementIF) -#endif -QT_END_NAMESPACE diff --git a/Plugins/UserManagementIF/usermanagementif.h b/Plugins/UserManagementIF/usermanagementif.h index bfe66c6..ca070e0 100644 --- a/Plugins/UserManagementIF/usermanagementif.h +++ b/Plugins/UserManagementIF/usermanagementif.h @@ -1,5 +1,4 @@ -#ifndef USERMANAGEMENTIF_H -#define USERMANAGEMENTIF_H +#pragma once #include #include @@ -13,7 +12,6 @@ class QToolBar; class QAction; class QSqlQuery; class QSqlDatabase; -class QStringList; QT_END_NAMESPACE class USERMANAGEMENTIFSHARED_EXPORT UserManagementIF : @@ -44,14 +42,11 @@ class USERMANAGEMENTIFSHARED_EXPORT UserManagementIF : //UserManagementInterface //for db usage virtual QString getCurrentUserName() const; - virtual void setCurrentUserName(QString username); -// virtual QString getCurrentSchemaName() const; -// virtual void setCurrentSchemaName(QString schemaname); virtual QString getCurrentIPAdress() const; - virtual void setCurrentIPAdress(QString ipaddress); + virtual int getCurrentPort() const; virtual QSqlQuery getSqlQuery() const; - virtual QSqlDatabase getDatabase() const; - virtual bool openDatabase(QString username, QString password, QString ipaddress); + virtual QSqlDatabase getDatabase(QString name = "") const; + virtual bool openDatabase(QString username, QString password, QString ipaddress, int port); virtual void changePassword(QString username, QString password) const; //for user change notify virtual void registeObserver(UserChangeNotifyInterface *observer); @@ -60,7 +55,7 @@ class USERMANAGEMENTIFSHARED_EXPORT UserManagementIF : //for access checking virtual bool checkAccess(QSet accessRoleNameSet) const; virtual bool isAdmin(QString username) const; - virtual bool isStatistic(QString username) const; + virtual bool isAuditor(QString username) const; //for table schemaname virtual QSet getAllSchemaName() const; virtual QSet getAllSchemaID() const; @@ -93,8 +88,6 @@ class USERMANAGEMENTIFSHARED_EXPORT UserManagementIF : bool createUserManagementTables() const; void setDataBaseName(QString dbName) const; QSqlDatabase addDatabase(QString username) const; - void removeDatabase(QString username="") const; - bool reopenDatabase() const; private: @@ -102,7 +95,6 @@ class USERMANAGEMENTIFSHARED_EXPORT UserManagementIF : QString currentDBSchema; QString currentIP; QString currentPassword; + int currentPort; QSet observerSet; }; - -#endif // USERMANAGEMENTIF_H diff --git a/Plugins/UserManagement_Invoicing/UserManagement_Invoicing_global.h b/Plugins/UserManagement_Invoicing/UserManagement_Invoicing_global.h index 7d64b0a..16ed4df 100644 --- a/Plugins/UserManagement_Invoicing/UserManagement_Invoicing_global.h +++ b/Plugins/UserManagement_Invoicing/UserManagement_Invoicing_global.h @@ -1,5 +1,4 @@ -#ifndef USERMANAGEMENT_INVOICING_GLOBAL_H -#define USERMANAGEMENT_INVOICING_GLOBAL_H +#pragma once #include @@ -8,5 +7,3 @@ #else # define USERMANAGEMENT_INVOICINGSHARED_EXPORT Q_DECL_IMPORT #endif - -#endif // USERMANAGEMENT_INVOICING_GLOBAL_H diff --git a/Plugins/UserManagement_Invoicing/logindialog.cpp b/Plugins/UserManagement_Invoicing/logindialog.cpp index 868d382..f7d5706 100644 --- a/Plugins/UserManagement_Invoicing/logindialog.cpp +++ b/Plugins/UserManagement_Invoicing/logindialog.cpp @@ -1,4 +1,4 @@ -#include +#include #if QT_VERSION >= 0x050000 #include #include @@ -19,24 +19,20 @@ #include "logindialog.h" #include "usermanagement_interface.h" -LoginDialog::LoginDialog(UserManagementInterface *userManagementInterface, QDialog *parent) : - QDialog(parent, Qt::WindowStaysOnTopHint), - userNameComboBox(NULL), - rememberUsername(NULL), - passwordLineEdit(NULL), - rememberPassword(NULL), - ipAddressLineEdit(NULL), - rememberIPAddress(NULL), - domainNameLineEdit(NULL), - rememberDomainName(NULL), - authenticateButton(NULL), - dbSchemaLabel(NULL), - dbSchemaComboBox(NULL), - loginButton(NULL), - cancelButton(NULL), - loginButtonBox(NULL), - reAuthenticate(false), - userManagementInterface(userManagementInterface) +LoginDialog::LoginDialog(UserManagementInterface *userManagementInterface, QDialog *parent) + : QDialog(parent, Qt::WindowStaysOnTopHint) + , userNameComboBox(NULL) + , rememberUsername(NULL) + , passwordLineEdit(NULL) + , rememberPassword(NULL) + , domainNameLineEdit(NULL) + , rememberDomainName(NULL) + , portSpinBox(NULL) + , rememberPort(NULL) + , loginButton(NULL) + , cancelButton(NULL) + , loginButtonBox(NULL) + , userManagementInterface(userManagementInterface) { init(); } @@ -50,8 +46,7 @@ void LoginDialog::init() userNameComboBox->setEditable(true); userNameComboBox->clear(); userNameComboBox->addItems(initRegSetting()); - connect(userNameComboBox, SIGNAL(editTextChanged(const QString &)) - , this, SLOT(populateRegSetting())); + connect(userNameComboBox, SIGNAL(editTextChanged(QString)), this, SLOT(populateRegSetting())); rememberUsername = new QCheckBox(this); rememberUsername->setToolTip(tr("Remember Username")); mainLayout->addWidget(userNameLabel, 0, 0, Qt::AlignRight); @@ -59,9 +54,9 @@ void LoginDialog::init() mainLayout->addWidget(rememberUsername, 0, 2); QLabel *passwordLabel = new QLabel(tr("Pass Word: "),this); - QRegExp pwRegExp("([a-zA-Z0-9]*)"); + QRegularExpression pwRegExp("([a-zA-Z0-9]*)"); passwordLineEdit = new QLineEdit(this); - QValidator *pwValidator = new QRegExpValidator(pwRegExp, passwordLineEdit); + QValidator *pwValidator = new QRegularExpressionValidator(pwRegExp, passwordLineEdit); passwordLineEdit->setValidator(pwValidator); passwordLineEdit->setEchoMode(QLineEdit::Password); passwordLineEdit->setToolTip(tr("alphabet & number only")); @@ -71,22 +66,6 @@ void LoginDialog::init() mainLayout->addWidget(passwordLineEdit, 1, 1); mainLayout->addWidget(rememberPassword, 1, 2); - QLabel *ipAddressLabel = new QLabel(tr("DB IP Address: "),this); - QRegExp ipRegExp("(0*(2(5[0-5]|[0-4]\\d)|1?\\d{1,2})(\\.0*(2(5[0-5]|[0-4]\\d)|1?\\d{1,2})){3})"); - ipAddressLineEdit = new QLineEdit(this); - QValidator *ipValidator = new QRegExpValidator(ipRegExp, ipAddressLineEdit); - ipAddressLineEdit->setValidator(ipValidator); - ipAddressLineEdit->setInputMask("000.000.000.000;_"); - rememberIPAddress = new QCheckBox(this); - rememberIPAddress->setToolTip(tr("Remember IP Address")); - mainLayout->addWidget(ipAddressLabel, 2,0, Qt::AlignRight); - mainLayout->addWidget(ipAddressLineEdit, 2, 1); - mainLayout->addWidget(rememberIPAddress, 2, 2); - //hide the ipaddress, use domain name - ipAddressLabel->hide(); - ipAddressLineEdit->hide(); - rememberIPAddress->hide(); - QLabel *domainNameLabel = new QLabel(tr("DB Domain Name: "),this); domainNameLineEdit = new QLineEdit(this); rememberDomainName = new QCheckBox(this); @@ -94,149 +73,35 @@ void LoginDialog::init() mainLayout->addWidget(domainNameLabel, 3,0, Qt::AlignRight); mainLayout->addWidget(domainNameLineEdit, 3, 1); mainLayout->addWidget(rememberDomainName, 3, 2); - //connect(domainNameLineEdit, SIGNAL(textChanged(const QString)), this, SLOT(updateIPAddress())); - - populateRegSetting(); - -// authenticateButton = new QPushButton(tr("Authenticate"), this); -// connect(authenticateButton, SIGNAL(clicked()), this, SLOT(onAuthenticate())); -// mainLayout->addWidget(authenticateButton, 3, 1, 1, 2, Qt::AlignRight); -// authenticateButton->setAutoDefault(false); -// authenticateButton->setDefault(true); -// dbSchemaLabel = new QLabel(tr("DB Schema: "),this); -// dbSchemaLabel->setEnabled(false); -// dbSchemaComboBox = new QComboBox(this); -// dbSchemaComboBox->setEnabled(false); -// mainLayout->addWidget(dbSchemaLabel, 4,0, Qt::AlignRight); -// mainLayout->addWidget(dbSchemaComboBox, 4, 1, 1, 2); + QLabel *portLabel = new QLabel(tr("DB port: "), this); + portSpinBox = new QSpinBox(this); + portSpinBox->setRange(0, 65535); + portSpinBox->setValue(3306); + rememberPort = new QCheckBox(this); + rememberPort->setToolTip(tr("Remember DB Port")); + mainLayout->addWidget(portLabel, 4, 0, Qt::AlignRight); + mainLayout->addWidget(portSpinBox, 4, 1); + mainLayout->addWidget(rememberPort, 4, 2); + populateRegSetting(); loginButton = new QPushButton(tr("Login"), this); connect(loginButton, SIGNAL(clicked()), this, SLOT(onLogin())); - //connect(loginButton, SIGNAL(clicked()), this, SLOT(accept())); cancelButton = new QPushButton(tr("Cancel"), this); connect(cancelButton, SIGNAL(clicked()), this, SLOT(reject())); loginButtonBox = new QDialogButtonBox(Qt::Horizontal, this); loginButtonBox->addButton(loginButton, QDialogButtonBox::ActionRole); loginButtonBox->addButton(cancelButton, QDialogButtonBox::ActionRole); - //loginButtonBox->setEnabled(false); mainLayout->addWidget(loginButtonBox, 5, 1, 1, 2, Qt::AlignRight); mainLayout->setColumnStretch(1, 10); - //loginButton->setAutoDefault(false); - //loginButton->setDefault(false); mainLayout->setSizeConstraint(QLayout::SetFixedSize); setWindowTitle(tr("Login")); - //QPixmap image(":/images/floodfill.png"); setWindowIcon(QIcon(":/Icon/login_icon.png")); } -void LoginDialog::updateIPAddress() -{ - QString domainname = domainNameLineEdit->text(); - QString ipaddressFromDomainname; - QHostInfo host = QHostInfo::fromName(domainname); - if (!host.addresses().isEmpty()) { - QHostAddress address = host.addresses().first(); - ipaddressFromDomainname = address.toString(); - // use the first IP address - } - ipAddressLineEdit->setText(ipaddressFromDomainname); -} - -void LoginDialog::enableLogin(QSet dbSchemas) -{ - enableAuthenticate(false); - - saveRegSetting(); - - dbSchemaComboBox->clear(); - dbSchemaComboBox->insertItems(0, dbSchemas.toList()); - dbSchemaLabel->setEnabled(true); - dbSchemaComboBox->setEnabled(true); - loginButtonBox->setEnabled(true); -} - -void LoginDialog::disableLogin() -{ - dbSchemaComboBox->clear(); - dbSchemaLabel->setEnabled(false); - dbSchemaComboBox->setEnabled(false); - loginButtonBox->setEnabled(false); -} - -void LoginDialog::enableAuthenticate(bool toggle) -{ - userNameComboBox->setEnabled(toggle); - rememberUsername->setEnabled(toggle); - passwordLineEdit->setEnabled(toggle); - rememberPassword->setEnabled(toggle); - ipAddressLineEdit->setEnabled(toggle); - rememberIPAddress->setEnabled(toggle); - if(toggle) { - authenticateButton->setText(tr("Authenticate")); - authenticateButton->setDefault(true); - loginButton->setDefault(false); - } - else { - authenticateButton->setText(tr("Re-Authenticate")); - authenticateButton->setDefault(false); - loginButton->setDefault(true); - } - reAuthenticate = !toggle; - - disableLogin(); -} - -void LoginDialog::onAuthenticate() -{ - QString username = userNameComboBox->currentText(); - QString password = passwordLineEdit->text(); - QString ipaddress = ipAddressLineEdit->text(); - int ad0 = ipaddress.split(".").at(0).toInt(); - int ad1 = ipaddress.split(".").at(1).toInt(); - int ad2 = ipaddress.split(".").at(2).toInt(); - int ad3 = ipaddress.split(".").at(3).toInt(); - ipaddress = QString("%1.%2.%3.%4").arg(ad0).arg(ad1).arg(ad2).arg(ad3); - qDebug()<openDatabase(username, password, ipaddress)) { - QMessageBox::critical(this, tr("Database Authenticate Error"), - tr("Check your Username, Password & DB IP")); - } - else { - int userID = userManagementInterface->getUserIDByUserName(username); - QSet schemaIDSet = userManagementInterface->getSchemaIDSetByUserID(userID); - if(schemaIDSet.count()==0) { - if(userManagementInterface->isAdmin(username)) { - QMessageBox::information(this, tr("Setup"), - tr("Haven't create DB Schema. Pls create the DB Schema first!")); - if(createInvoicingSchema()) { - enableLogin(userManagementInterface->getAllSchemaName()); - } - } - else { - QMessageBox::information(this, tr("Setup"), - tr("Haven't DB Schema access. Pls contact admin!")); - } - } - else { - QSet schemaNameSet; - foreach(int schemaID, schemaIDSet) { - schemaNameSet<getSchemaNameBySchemaID(schemaID); - } - enableLogin(schemaNameSet); - } - } - } - else { - //re-Authenticate - enableAuthenticate(true); - } -} - bool LoginDialog::createInvoicingSchema() { bool ret = false; @@ -244,7 +109,6 @@ bool LoginDialog::createInvoicingSchema() userManagementInterface->addUser("未指定", "test"); QString dbSchema = QInputDialog::getText(this, tr("Create DB Schema"), tr("DB Schema Name: "), QLineEdit::Normal, "", &ret); - dbSchema.simplified(); if(ret && !dbSchema.isEmpty()) { userManagementInterface->addSchema(dbSchema); ret = true; @@ -264,10 +128,10 @@ QStringList LoginDialog::initRegSetting() setting.setValue("root/rememberUsername", Qt::Checked); setting.setValue("root/passWord", ""); setting.setValue("root/rememberPassword", Qt::Unchecked); - setting.setValue("root/ipAddress", "127.0.0.1"); - setting.setValue("root/rememberIPAddress", Qt::Unchecked); setting.setValue("root/domainName", ""); setting.setValue("root/rememberDomainName", Qt::Unchecked); + setting.setValue("root/port", ""); + setting.setValue("root/rememberPort", Qt::Unchecked); } return setting.childGroups();; } @@ -290,11 +154,7 @@ void LoginDialog::saveRegSetting() } if(rememberPassword->isChecked()) { -#if QT_VERSION < 0x050000 - setting.setValue("passWord", passwordLineEdit->text().toAscii().toBase64()); -#else setting.setValue("passWord", passwordLineEdit->text().toLatin1().toBase64()); -#endif setting.setValue("rememberPassword", Qt::Checked); } else { @@ -302,15 +162,6 @@ void LoginDialog::saveRegSetting() setting.setValue("rememberPassword", Qt::Unchecked); } - if(rememberIPAddress->isChecked()) { - setting.setValue("ipAddress", ipAddressLineEdit->text()); - setting.setValue("rememberIPAddress", Qt::Checked); - } - else { - setting.setValue("ipAddress", ""); - setting.setValue("rememberIPAddress", Qt::Unchecked); - } - if(rememberDomainName->isChecked()) { setting.setValue("domainName", domainNameLineEdit->text()); setting.setValue("rememberDomainName", Qt::Checked); @@ -319,6 +170,14 @@ void LoginDialog::saveRegSetting() setting.setValue("domainName", ""); setting.setValue("rememberDomainName", Qt::Unchecked); } + + if (rememberPort->isChecked()) { + setting.setValue("port", portSpinBox->value()); + setting.setValue("rememberPort", Qt::Checked); + } else { + setting.setValue("port", ""); + setting.setValue("rememberPort", Qt::Unchecked); + } setting.endGroup(); } @@ -328,30 +187,28 @@ void LoginDialog::populateRegSetting() if(setting.childGroups().contains(userNameComboBox->currentText())) { rememberUsername->setCheckState((Qt::CheckState)setting .value(QString("%1/rememberUsername").arg(userNameComboBox->currentText())).toInt()); -#if QT_VERSION < 0x050000 - passwordLineEdit->setText(QByteArray::fromBase64(setting.value(QString("%1/passWord") - .arg(userNameComboBox->currentText())).toString().toAscii())); -#else passwordLineEdit->setText(QByteArray::fromBase64(setting.value(QString("%1/passWord") .arg(userNameComboBox->currentText())).toString().toLatin1())); -#endif rememberPassword->setCheckState((Qt::CheckState)setting .value(QString("%1/rememberPassword").arg(userNameComboBox->currentText())).toInt()); - ipAddressLineEdit->setText(setting.value(QString("%1/ipAddress").arg(userNameComboBox->currentText())).toString()); - rememberIPAddress->setCheckState((Qt::CheckState)setting - .value(QString("%1/rememberIPAddress").arg(userNameComboBox->currentText())).toInt()); domainNameLineEdit->setText(setting.value(QString("%1/domainName").arg(userNameComboBox->currentText())).toString()); rememberDomainName->setCheckState((Qt::CheckState)setting .value(QString("%1/rememberDomainName").arg(userNameComboBox->currentText())).toInt()); + portSpinBox->setValue( + setting.value(QString("%1/port").arg(userNameComboBox->currentText())).toInt()); + rememberPort->setCheckState( + (Qt::CheckState) setting + .value(QString("%1/rememberPort").arg(userNameComboBox->currentText())) + .toInt()); } else { rememberUsername->setCheckState(Qt::Checked); passwordLineEdit->setText(""); rememberPassword->setCheckState(Qt::Unchecked); - ipAddressLineEdit->setText("127.0.0.1"); - rememberIPAddress->setCheckState(Qt::Checked); domainNameLineEdit->setText(""); rememberDomainName->setCheckState(Qt::Checked); + portSpinBox->setValue(3306); + rememberPort->setCheckState(Qt::Checked); } } @@ -359,55 +216,29 @@ void LoginDialog::onLogin() { QString username = userNameComboBox->currentText(); QString password = passwordLineEdit->text(); - QString ipaddress = ipAddressLineEdit->text(); QString domainname = domainNameLineEdit->text(); - QString ipaddressFromDomainname = ""; - QHostInfo host = QHostInfo::fromName(domainname); - foreach(QHostAddress address, host.addresses()) - { - if(address.toIPv4Address()!=0) - { - ipaddressFromDomainname = address.toString(); - break; - } - } - - //QMessageBox::information(this, tr("Login"), ipaddressFromDomainname); - if(ipaddressFromDomainname=="") - { - QMessageBox::critical(this, tr("Database Authenticate Error"), + int port = portSpinBox->value(); + if (!userManagementInterface->openDatabase(username, password, domainname, port)) { + QMessageBox::critical(this, + tr("Database Authenticate Error"), tr("Check your Username, Password & DB IP")); return; } - int ad0 = ipaddressFromDomainname.split(".").at(0).toInt(); - int ad1 = ipaddressFromDomainname.split(".").at(1).toInt(); - int ad2 = ipaddressFromDomainname.split(".").at(2).toInt(); - int ad3 = ipaddressFromDomainname.split(".").at(3).toInt(); - ipaddress = QString("%1.%2.%3.%4").arg(ad0).arg(ad1).arg(ad2).arg(ad3); - if (!userManagementInterface->openDatabase(username, password, ipaddressFromDomainname)) { - QMessageBox::critical(this, tr("Database Authenticate Error"), - tr("Check your Username, Password & DB IP")); - return; -// if (!userManagementInterface->openDatabase(username, password, ipaddressFromDomainname)) { -// } - } - else { - int userID = userManagementInterface->getUserIDByUserName(username); - QSet schemaIDSet = userManagementInterface->getSchemaIDSetByUserID(userID); - if(schemaIDSet.count()==0) { - if(userManagementInterface->isAdmin(username)) { - QMessageBox::information(this, tr("Setup"), - tr("Haven't create DB Schema. Pls create the DB Schema first!")); - createInvoicingSchema(); - } - else if(!userManagementInterface->isStatistic(username)){ - QMessageBox::information(this, tr("Setup"), - tr("Haven't DB Schema access. Pls contact admin!")); - return; - } + saveRegSetting(); + int userID = userManagementInterface->getUserIDByUserName(username); + QSet schemaIDSet = userManagementInterface->getSchemaIDSetByUserID(userID); + if (schemaIDSet.count() == 0) { + if (userManagementInterface->isAdmin(username)) { + QMessageBox::information( + this, tr("Setup"), tr("Haven't create DB Schema. Pls create the DB Schema first!")); + createInvoicingSchema(); + } else if (!userManagementInterface->isAuditor(username)) { + QMessageBox::information(this, + tr("Setup"), + tr("Haven't DB Schema access. Pls contact admin!")); + return; } } - saveRegSetting(); userManagementInterface->notifyAllObserver(); accept(); } diff --git a/Plugins/UserManagement_Invoicing/logindialog.h b/Plugins/UserManagement_Invoicing/logindialog.h index 90cb696..9355623 100644 --- a/Plugins/UserManagement_Invoicing/logindialog.h +++ b/Plugins/UserManagement_Invoicing/logindialog.h @@ -1,8 +1,8 @@ -#ifndef LOGINDIALOG_H -#define LOGINDIALOG_H +#pragma once #include #include +#include "qspinbox.h" QT_BEGIN_NAMESPACE class QLineEdit; @@ -11,7 +11,6 @@ class QComboBox; class QPushButton; class QLabel; class QDialogButtonBox; -class QStringList; class QString; class QChar; QT_END_NAMESPACE @@ -30,17 +29,12 @@ class LoginDialog : public QDialog public slots: private slots: - void onAuthenticate(); bool createInvoicingSchema(); void onLogin(); void init(); - void disableLogin(); - void enableAuthenticate(bool toggle); QStringList initRegSetting(); void saveRegSetting(); void populateRegSetting(); - void enableLogin(QSet dbSchemas); - void updateIPAddress(); private: @@ -50,18 +44,12 @@ private slots: QCheckBox *rememberUsername; QLineEdit *passwordLineEdit; QCheckBox *rememberPassword; - QLineEdit *ipAddressLineEdit; - QCheckBox *rememberIPAddress; QLineEdit *domainNameLineEdit; QCheckBox *rememberDomainName; - QPushButton *authenticateButton; - QLabel *dbSchemaLabel; - QComboBox *dbSchemaComboBox; + QSpinBox *portSpinBox; + QCheckBox *rememberPort; QPushButton *loginButton; QPushButton *cancelButton; QDialogButtonBox *loginButtonBox; - bool reAuthenticate; UserManagementInterface *userManagementInterface; }; - -#endif // LOGINDIALOG_H diff --git a/Plugins/UserManagement_Invoicing/usermanagement_invoicing.cpp b/Plugins/UserManagement_Invoicing/usermanagement_invoicing.cpp index ab6c1e1..442d01f 100644 --- a/Plugins/UserManagement_Invoicing/usermanagement_invoicing.cpp +++ b/Plugins/UserManagement_Invoicing/usermanagement_invoicing.cpp @@ -1,8 +1,9 @@ -#include -#include -#include "mainwindow.h" #include "usermanagement_invoicing.h" +#include +#include +#include "helper.h" #include "logindialog.h" +#include "mainwindow.h" #include "usermanagementdialog.h" UserManagement_Invoicing::UserManagement_Invoicing() : @@ -16,9 +17,7 @@ UserManagement_Invoicing::UserManagement_Invoicing() : userManagementInterface(NULL), parent(NULL) { - QTranslator *qtTranslator = new QTranslator(this); - qtTranslator->load("UserManagement_Invoicing_zh_CN", ":/Translations"); - QApplication::instance()->installTranslator(qtTranslator); + INSTALL_TRANSLATION; } UserManagement_Invoicing::~UserManagement_Invoicing() @@ -209,7 +208,8 @@ void UserManagement_Invoicing::changeCurrentUserPassword() } QString ipaddress = userManagementInterface->getCurrentIPAdress(); - okDBOpen = userManagementInterface->openDatabase(username, oldPassword, ipaddress); + int port = userManagementInterface->getCurrentPort(); + okDBOpen = userManagementInterface->openDatabase(username, oldPassword, ipaddress, port); if (!okDBOpen) { QMessageBox::critical(0, tr("Change Password"), tr("Old Password is wrong, try it again")); } @@ -264,8 +264,9 @@ void UserManagement_Invoicing::changePassword(QString username) void UserManagement_Invoicing::switchUser() { - showLoginWindow(); - update(); + if (showLoginWindow()) { + update(); + } } void UserManagement_Invoicing::update() diff --git a/Plugins/UserManagement_Invoicing/usermanagement_invoicing.h b/Plugins/UserManagement_Invoicing/usermanagement_invoicing.h index 154a540..71a8575 100644 --- a/Plugins/UserManagement_Invoicing/usermanagement_invoicing.h +++ b/Plugins/UserManagement_Invoicing/usermanagement_invoicing.h @@ -1,5 +1,4 @@ -#ifndef USERMANAGEMENT_INVOICING_H -#define USERMANAGEMENT_INVOICING_H +#pragma once #include #include @@ -17,7 +16,6 @@ class QToolBar; class QAction; class QSqlQuery; class QSqlDatabase; -class QStringList; class QLayout; QT_END_NAMESPACE @@ -72,6 +70,3 @@ private slots: UserManagementInterface *userManagementInterface; MainWindow *parent; }; - - -#endif // USERMANAGEMENT_INVOICING_H diff --git a/Plugins/UserManagement_Invoicing/usermanagementdialog.cpp b/Plugins/UserManagement_Invoicing/usermanagementdialog.cpp index d9575b7..5ebb320 100644 --- a/Plugins/UserManagement_Invoicing/usermanagementdialog.cpp +++ b/Plugins/UserManagement_Invoicing/usermanagementdialog.cpp @@ -1,5 +1,4 @@ -#include -#if QT_VERSION >= 0x050000 +#include #include #include #include @@ -11,12 +10,9 @@ #include #include #include -#endif #include -#include #include "usermanagementdialog.h" #include "usermanagement_invoicing.h" -#include "usermanagement_interface.h" UserManagementDialog::UserManagementDialog(UserManagementInterface *userManagementInterface, QWidget *parent) : QWidget(parent), @@ -402,7 +398,6 @@ void UserManagementDialog::addUser() //QMessageBox::critical(this, tr("Create User Error"), tr("Input UserName error !")); return; } - username.simplified(); }while(!checkUserName(username)); bool okPassword1 = false; @@ -501,7 +496,6 @@ void UserManagementDialog::addSchema() bool ok = false; QString dbSchema = QInputDialog::getText(0, tr("Create DB Schema"), tr("DB Schema Name: "), QLineEdit::Normal, "", &ok); - dbSchema.simplified(); if(ok && !dbSchema.isEmpty()) { userManagementInterface->addSchema(dbSchema); schemaModel->select(); @@ -631,7 +625,7 @@ void UserManagementDialog::cleanLoginInfo() return; } QString username = userModel->record(index.row()).value("name").toString(); - qDebug()<<"cleanLoginInfo "< #include @@ -107,5 +106,3 @@ private slots: UserManagementInterface *userManagementInterface; }; - -#endif // USERMANAGEMENTDIALOG_H From 550644c7533efdbbcc94e95bfd2e363320979b77 Mon Sep 17 00:00:00 2001 From: Feng Yin Date: Thu, 7 Dec 2023 22:06:50 +1100 Subject: [PATCH 3/4] Fixed the excel port issue. General Qt6 cleanup. --- MySQLDriver/SYSZUXmysql/SYSZUXmysql.pro | 69 - MySQLDriver/SYSZUXmysql/mysql/libmysql.dll | Bin 2492416 -> 0 bytes MySQLDriver/SYSZUXmysql/mysql/libmysql.lib | Bin 25590 -> 0 bytes .../src/SYSZUXmysql/atomic/gcc_builtins.h | 38 - .../src/SYSZUXmysql/atomic/generic-msvc.h | 115 -- .../src/SYSZUXmysql/atomic/nolock.h | 48 - .../src/SYSZUXmysql/atomic/rwlock.h | 57 - .../src/SYSZUXmysql/atomic/x86-gcc.h | 69 - .../SYSZUXmysql/src/SYSZUXmysql/base64.h | 49 - .../SYSZUXmysql/src/SYSZUXmysql/config-win.h | 392 ---- .../SYSZUXmysql/src/SYSZUXmysql/decimal.h | 107 -- .../SYSZUXmysql/src/SYSZUXmysql/errmsg.h | 103 -- .../SYSZUXmysql/src/SYSZUXmysql/hash.h | 84 - .../SYSZUXmysql/src/SYSZUXmysql/keycache.h | 153 -- MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/lf.h | 260 --- .../SYSZUXmysql/src/SYSZUXmysql/m_ctype.h | 654 ------- .../SYSZUXmysql/src/SYSZUXmysql/m_string.h | 393 ---- .../SYSZUXmysql/src/SYSZUXmysql/my_aes.h | 65 - .../SYSZUXmysql/src/SYSZUXmysql/my_alarm.h | 58 - .../SYSZUXmysql/src/SYSZUXmysql/my_alloc.h | 51 - .../SYSZUXmysql/src/SYSZUXmysql/my_atomic.h | 254 --- .../src/SYSZUXmysql/my_attribute.h | 63 - .../SYSZUXmysql/src/SYSZUXmysql/my_base.h | 626 ------- .../SYSZUXmysql/src/SYSZUXmysql/my_bit.h | 109 -- .../SYSZUXmysql/src/SYSZUXmysql/my_bitmap.h | 182 -- .../SYSZUXmysql/src/SYSZUXmysql/my_charsets.h | 57 - .../SYSZUXmysql/src/SYSZUXmysql/my_config.h | 295 --- .../src/SYSZUXmysql/my_config.h.in | 295 --- .../SYSZUXmysql/src/SYSZUXmysql/my_dbug.h | 140 -- .../SYSZUXmysql/src/SYSZUXmysql/my_dir.h | 109 -- .../SYSZUXmysql/src/SYSZUXmysql/my_getopt.h | 86 - .../SYSZUXmysql/src/SYSZUXmysql/my_global.h | 1616 ----------------- .../SYSZUXmysql/src/SYSZUXmysql/my_libwrap.h | 27 - .../SYSZUXmysql/src/SYSZUXmysql/my_list.h | 45 - .../SYSZUXmysql/src/SYSZUXmysql/my_md5.h | 54 - .../SYSZUXmysql/src/SYSZUXmysql/my_net.h | 114 -- .../src/SYSZUXmysql/my_no_pthread.h | 50 - .../SYSZUXmysql/src/SYSZUXmysql/my_nosys.h | 52 - .../SYSZUXmysql/src/SYSZUXmysql/my_pthread.h | 734 -------- .../src/SYSZUXmysql/my_stacktrace.h | 66 - .../SYSZUXmysql/src/SYSZUXmysql/my_sys.h | 1082 ----------- .../SYSZUXmysql/src/SYSZUXmysql/my_time.h | 172 -- .../SYSZUXmysql/src/SYSZUXmysql/my_tree.h | 96 - .../SYSZUXmysql/src/SYSZUXmysql/my_trie.h | 141 -- .../SYSZUXmysql/src/SYSZUXmysql/my_uctype.h | 1479 --------------- .../SYSZUXmysql/src/SYSZUXmysql/my_vle.h | 38 - .../SYSZUXmysql/src/SYSZUXmysql/my_xml.h | 89 - .../SYSZUXmysql/src/SYSZUXmysql/myisampack.h | 238 --- .../SYSZUXmysql/src/SYSZUXmysql/mysql.h | 755 -------- .../SYSZUXmysql/src/SYSZUXmysql/mysql.h.pp | 617 ------- .../SYSZUXmysql/src/SYSZUXmysql/mysql_com.h | 543 ------ .../SYSZUXmysql/src/SYSZUXmysql/mysql_time.h | 55 - .../src/SYSZUXmysql/mysql_version.h | 26 - .../src/SYSZUXmysql/mysql_version.h.in | 26 - .../src/SYSZUXmysql/mysqld_error.h | 730 -------- .../src/SYSZUXmysql/mysys/rijndael.h | 41 - .../SYSZUXmysql/src/SYSZUXmysql/mysys_err.h | 90 - .../SYSZUXmysql/src/SYSZUXmysql/queues.h | 72 - .../src/SYSZUXmysql/service_versions.h | 24 - .../SYSZUXmysql/src/SYSZUXmysql/sha1.h | 66 - .../SYSZUXmysql/src/SYSZUXmysql/sha2.h | 72 - .../SYSZUXmysql/src/SYSZUXmysql/sql_common.h | 50 - .../SYSZUXmysql/src/SYSZUXmysql/sslopt-case.h | 28 - .../src/SYSZUXmysql/sslopt-longopts.h | 45 - .../SYSZUXmysql/src/SYSZUXmysql/sslopt-vars.h | 31 - .../SYSZUXmysql/src/SYSZUXmysql/t_ctype.h | 254 --- .../SYSZUXmysql/src/SYSZUXmysql/thr_alarm.h | 110 -- .../SYSZUXmysql/src/SYSZUXmysql/thr_lock.h | 181 -- .../SYSZUXmysql/src/SYSZUXmysql/typelib.h | 39 - .../SYSZUXmysql/src/SYSZUXmysql/violite.h | 222 --- .../src/SYSZUXmysql/waiting_threads.h | 130 -- .../SYSZUXmysql/src/SYSZUXmysql/wqueue.h | 27 - MySQLDriver/SYSZUXmysql/src/main.cpp | 83 - MySQLDriver/SYSZUXmysql/src/qsql_mysql.cpp | 1545 ---------------- MySQLDriver/SYSZUXmysql/src/qsql_mysql.h | 149 -- PluginFramework.pro | 17 - .../Cash_Invoicing/Cash_Invoicing_global.h | 5 +- Plugins/Cash_Invoicing/cash_invoicing.cpp | 22 +- Plugins/Cash_Invoicing/cash_invoicing.h | 8 +- .../cashupdateproductdialog.cpp | 7 +- .../Cash_Invoicing/cashupdateproductdialog.h | 5 +- .../ProductManagementIF_global.h | 5 +- .../productmanagementif.cpp | 30 +- .../ProductManagementIF/productmanagementif.h | 7 +- .../Purchase_Invoicing_global.h | 5 +- Plugins/Purchase_Invoicing/addproductdialog.h | 5 +- .../Purchase_Invoicing/purchase_invoicing.cpp | 24 +- .../Purchase_Invoicing/purchase_invoicing.h | 8 +- .../Sell_Invoicing/Sell_Invoicing_global.h | 5 +- Plugins/Sell_Invoicing/sell_invoicing.cpp | 23 +- Plugins/Sell_Invoicing/sell_invoicing.h | 7 +- .../sellupdateproductdialog.cpp | 7 +- .../Sell_Invoicing/sellupdateproductdialog.h | 5 +- .../Statistic_Invoicing.pro | 10 +- .../Statistic_Invoicing_global.h | 5 +- Plugins/Statistic_Invoicing/barchart.cpp | 29 +- Plugins/Statistic_Invoicing/barchart.h | 21 +- .../Statistic_Invoicing/exportexcelobject.cpp | 97 +- .../Statistic_Invoicing/exportexcelobject.h | 32 +- .../statistic_invoicing.cpp | 32 +- .../Statistic_Invoicing/statistic_invoicing.h | 7 +- .../statisticupdateproductdialog.cpp | 7 +- .../statisticupdateproductdialog.h | 5 +- .../Storage_Invoicing_global.h | 5 +- .../Storage_Invoicing/storage_invoicing.cpp | 22 +- Plugins/Storage_Invoicing/storage_invoicing.h | 7 +- .../storageupdateproductdialog.cpp | 7 +- .../storageupdateproductdialog.h | 5 +- .../updateproductdialog.cpp | 128 +- .../UpdateProductDialog/updateproductdialog.h | 10 +- .../updateproductdialog_global.h | 5 +- Plugins/UserManagementIF/usermanagementif.h | 2 - .../UserManagement_Invoicing/logindialog.cpp | 3 +- .../UserManagement_Invoicing/logindialog.h | 1 + .../usermanagement_invoicing.cpp | 6 - .../usermanagement_invoicing.h | 4 +- RegisterTool/mainwindow.cpp | 10 +- 117 files changed, 207 insertions(+), 17533 deletions(-) delete mode 100644 MySQLDriver/SYSZUXmysql/SYSZUXmysql.pro delete mode 100644 MySQLDriver/SYSZUXmysql/mysql/libmysql.dll delete mode 100644 MySQLDriver/SYSZUXmysql/mysql/libmysql.lib delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/atomic/gcc_builtins.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/atomic/generic-msvc.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/atomic/nolock.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/atomic/rwlock.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/atomic/x86-gcc.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/base64.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/config-win.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/decimal.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/errmsg.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/hash.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/keycache.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/lf.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/m_ctype.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/m_string.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_aes.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_alarm.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_alloc.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_atomic.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_attribute.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_base.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_bit.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_bitmap.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_charsets.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_config.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_config.h.in delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_dbug.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_dir.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_getopt.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_global.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_libwrap.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_list.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_md5.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_net.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_no_pthread.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_nosys.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_pthread.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_stacktrace.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_sys.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_time.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_tree.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_trie.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_uctype.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_vle.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_xml.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/myisampack.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/mysql.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/mysql.h.pp delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/mysql_com.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/mysql_time.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/mysql_version.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/mysql_version.h.in delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/mysqld_error.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/mysys/rijndael.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/mysys_err.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/queues.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/service_versions.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/sha1.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/sha2.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/sql_common.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/sslopt-case.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/sslopt-longopts.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/sslopt-vars.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/t_ctype.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/thr_alarm.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/thr_lock.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/typelib.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/violite.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/waiting_threads.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/wqueue.h delete mode 100644 MySQLDriver/SYSZUXmysql/src/main.cpp delete mode 100644 MySQLDriver/SYSZUXmysql/src/qsql_mysql.cpp delete mode 100644 MySQLDriver/SYSZUXmysql/src/qsql_mysql.h diff --git a/MySQLDriver/SYSZUXmysql/SYSZUXmysql.pro b/MySQLDriver/SYSZUXmysql/SYSZUXmysql.pro deleted file mode 100644 index e407156..0000000 --- a/MySQLDriver/SYSZUXmysql/SYSZUXmysql.pro +++ /dev/null @@ -1,69 +0,0 @@ -SYSZUX = qsqlmysql -TEMPLATE = lib -CONFIG += qt plugin build_all -QT = core sql -DEFINES += QT_NO_CAST_TO_ASCII QT_NO_CAST_FROM_ASCII - -HEADERS += src/qsql_mysql.h -SOURCES += src/qsql_mysql.cpp \ - src/main.cpp - -unix { - isEmpty(QT_LFLAGS_MYSQL) { - !contains(LIBS, .*mysqlclient.*):!contains(LIBS, .*mysqld.*) { - use_libmysqlclient_r:LIBS += -lmysqlclient_r - else:LIBS += -lmysqlclient - } - } else { - LIBS *= $$QT_LFLAGS_MYSQL - QMAKE_CXXFLAGS *= $$QT_CFLAGS_MYSQL - } -} else { - !contains(LIBS, .*mysql.*):!contains(LIBS, .*mysqld.*):LIBS += -L $$PWD/mysql -llibmysql -} - -win32 { - COPY = copy /y - SYSZUX_SRC = $$PWD\\mysql\\libmysql.dll - SYSZUX_DEST = $$[QT_INSTALL_BINS] - SYSZUX_SRC=$$replace(SYSZUX_SRC,/,\\) - SYSZUX_DEST=$$replace(SYSZUX_DEST,/,\\) - system($$COPY $$SYSZUX_SRC $$SYSZUX_DEST) - message("hello,gemfield@civilnet.cn") -} - -win32|mac:!wince*:!win32-msvc:!macx-xcode:CONFIG += debug_and_release - -wince*:LIBS += $$QMAKE_LIBS_GUI - -symbian: { - TARGET.EPOCALLOWDLLDATA=1 - TARGET.CAPABILITY = All -Tcb - TARGET = $${TARGET}$${QT_LIBINFIX} - load(armcc_warnings) -} - -isEmpty(QT_MAJOR_VERSION) { - VERSION=4.7.3 -} else { - VERSION=$${QT_MAJOR_VERSION}.$${QT_MINOR_VERSION}.$${QT_PATCH_VERSION} -} - -contains(QT_CONFIG, reduce_exports):CONFIG += hide_symbols -CONFIG(release, debug|release) { - TARGET = $$qtLibraryTarget($$SYSZUX) - #DESTDIR=$$[QT_INSTALL_PLUGINS]/sqldrivers -DLLDESTDIR = ../../Main/release/sqldrivers/ -} -CONFIG(debug, debug|release) { - TARGET = $$qtLibraryTarget($$SYSZUX) - #DESTDIR=$$[QT_INSTALL_PLUGINS]/sqldrivers -DLLDESTDIR = ../../Main/debug/sqldrivers/ -} - -QMAKE_TARGET_COMPANY = SYSZUX -QMAKE_TARGET_PRODUCT = SYSZUXmysql -QMAKE_TARGET_DESCRIPTION = http://civilnet.cn/syszux -QMAKE_TARGET_COPYRIGHT = Copyright (C) 2011 gemfield. - - diff --git a/MySQLDriver/SYSZUXmysql/mysql/libmysql.dll b/MySQLDriver/SYSZUXmysql/mysql/libmysql.dll deleted file mode 100644 index 7dae6e8000174a7920e011ce9f30b0663e601ba4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2492416 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
A(#+|q=m&4CPl<>c_9{`bcn#fwf?F5i6 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⪙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 %SBuqj7${fxP1<;7Gn`Vn-^MaDb=G$tJv{Xr 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

_GP5}>cgDI;L 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

de>gW*mvr0SD+EwCWK;G;qehPU59 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

s#Q?`Zp=H>Cm2NS2U;kZ6W3XC&$Gb>g%d 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

1#9!Kk+KoDlT94X@I)>VU3ZTxTFQPA@ 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 z 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≠4rHa&-) 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ⅅ8d@6K8#)_I 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 z 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 z

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£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�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 H(G~a)Q?dXU diff --git a/MySQLDriver/SYSZUXmysql/mysql/libmysql.lib b/MySQLDriver/SYSZUXmysql/mysql/libmysql.lib deleted file mode 100644 index 41d18fd9ecfe3454e8dedb3bf9bd9342a89f233e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25590 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 1500) -#include -#else -C_MODE_START -/*Visual Studio 2003 and earlier do not have prototypes for atomic intrinsics*/ -LONG _InterlockedExchange (LONG volatile *Target,LONG Value); -LONG _InterlockedCompareExchange (LONG volatile *Target, LONG Value, LONG Comp); -LONG _InterlockedExchangeAdd (LONG volatile *Addend, LONG Value); -C_MODE_END - -#pragma intrinsic(_InterlockedExchangeAdd) -#pragma intrinsic(_InterlockedCompareExchange) -#pragma intrinsic(_InterlockedExchange) -#endif - -#define InterlockedExchange _InterlockedExchange -#define InterlockedExchangeAdd _InterlockedExchangeAdd -#define InterlockedCompareExchange _InterlockedCompareExchange -/* - No need to do something special for InterlockedCompareExchangePointer - as it is a #define to InterlockedCompareExchange. The same applies to - InterlockedExchangePointer. -*/ -#endif /*_M_IX86*/ - -#define MY_ATOMIC_MODE "msvc-intrinsics" -#define IL_EXCHG_ADD32(X,Y) InterlockedExchangeAdd((volatile LONG *)(X),(Y)) -#define IL_COMP_EXCHG32(X,Y,Z) InterlockedCompareExchange((volatile LONG *)(X),(Y),(Z)) -#define IL_COMP_EXCHGptr InterlockedCompareExchangePointer -#define IL_EXCHG32(X,Y) InterlockedExchange((volatile LONG *)(X),(Y)) -#define IL_EXCHGptr InterlockedExchangePointer -#define make_atomic_add_body(S) \ - v= IL_EXCHG_ADD ## S (a, v) -#define make_atomic_cas_body(S) \ - int ## S initial_cmp= *cmp; \ - int ## S initial_a= IL_COMP_EXCHG ## S (a, set, initial_cmp); \ - if (!(ret= (initial_a == initial_cmp))) *cmp= initial_a; -#define make_atomic_swap_body(S) \ - v= IL_EXCHG ## S (a, v) -#define make_atomic_load_body(S) \ - ret= 0; /* avoid compiler warning */ \ - ret= IL_COMP_EXCHG ## S (a, ret, ret); - -/* - my_yield_processor (equivalent of x86 PAUSE instruction) should be used - to improve performance on hyperthreaded CPUs. Intel recommends to use it in - spin loops also on non-HT machines to reduce power consumption (see e.g - http://softwarecommunity.intel.com/articles/eng/2004.htm) - - Running benchmarks for spinlocks implemented with InterlockedCompareExchange - and YieldProcessor shows that much better performance is achieved by calling - YieldProcessor in a loop - that is, yielding longer. On Intel boxes setting - loop count in the range 200-300 brought best results. - */ -#ifndef YIELD_LOOPS -#define YIELD_LOOPS 200 -#endif - -static __inline int my_yield_processor() -{ - int i; - for(i=0; irw) -#define my_atomic_rwlock_init(name) pthread_mutex_init(& (name)->rw, 0) -#define my_atomic_rwlock_rdlock(name) pthread_mutex_lock(& (name)->rw) -#define my_atomic_rwlock_wrlock(name) pthread_mutex_lock(& (name)->rw) -#define my_atomic_rwlock_rdunlock(name) pthread_mutex_unlock(& (name)->rw) -#define my_atomic_rwlock_wrunlock(name) pthread_mutex_unlock(& (name)->rw) -#define MY_ATOMIC_MODE "mutex" -#ifndef MY_ATOMIC_MODE_RWLOCKS -#define MY_ATOMIC_MODE_RWLOCKS 1 -#endif -#endif - -#define make_atomic_add_body(S) int ## S sav; sav= *a; *a+= v; v=sav; -#define make_atomic_fas_body(S) int ## S sav; sav= *a; *a= v; v=sav; -#define make_atomic_cas_body(S) if ((ret= (*a == *cmp))) *a= set; else *cmp=*a; -#define make_atomic_load_body(S) ret= *a; -#define make_atomic_store_body(S) *a= v; - diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/atomic/x86-gcc.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/atomic/x86-gcc.h deleted file mode 100644 index 5a34bc2..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/atomic/x86-gcc.h +++ /dev/null @@ -1,69 +0,0 @@ -/* Copyright (C) 2006 MySQL AB - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - XXX 64-bit atomic operations can be implemented using - cmpxchg8b, if necessary. Though I've heard that not all 64-bit - architectures support double-word (128-bit) cas. -*/ - -#ifdef __x86_64__ -# ifdef MY_ATOMIC_NO_XADD -# define MY_ATOMIC_MODE "gcc-amd64" LOCK_prefix "-no-xadd" -# else -# define MY_ATOMIC_MODE "gcc-amd64" LOCK_prefix -# endif -#else -# ifdef MY_ATOMIC_NO_XADD -# define MY_ATOMIC_MODE "gcc-x86" LOCK_prefix "-no-xadd" -# else -# define MY_ATOMIC_MODE "gcc-x86" LOCK_prefix -# endif -#endif - -/* fix -ansi errors while maintaining readability */ -#ifndef asm -#define asm __asm__ -#endif - -#ifndef MY_ATOMIC_NO_XADD -#define make_atomic_add_body(S) \ - asm volatile (LOCK_prefix "; xadd %0, %1;" : "+r" (v) , "+m" (*a)) -#endif -#define make_atomic_fas_body(S) \ - asm volatile ("xchg %0, %1;" : "+r" (v) , "+m" (*a)) -#define make_atomic_cas_body(S) \ - asm volatile (LOCK_prefix "; cmpxchg %3, %0; setz %2;" \ - : "+m" (*a), "+a" (*cmp), "=q" (ret): "r" (set)) - -#ifdef MY_ATOMIC_MODE_DUMMY -#define make_atomic_load_body(S) ret=*a -#define make_atomic_store_body(S) *a=v -#else -/* - Actually 32-bit reads/writes are always atomic on x86 - But we add LOCK_prefix here anyway to force memory barriers -*/ -#define make_atomic_load_body(S) \ - ret=0; \ - asm volatile (LOCK_prefix "; cmpxchg %2, %0" \ - : "+m" (*a), "+a" (ret): "r" (ret)) -#define make_atomic_store_body(S) \ - asm volatile ("; xchg %0, %1;" : "+m" (*a), "+r" (v)) -#endif - -/* TODO test on intel whether the below helps. on AMD it makes no difference */ -//#define LF_BACKOFF ({asm volatile ("rep; nop"); 1; }) - diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/base64.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/base64.h deleted file mode 100644 index 155d669..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/base64.h +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef __BASE64_H_INCLUDED__ -#define __BASE64_H_INCLUDED__ - -#ifdef __cplusplus -extern "C" { -#endif - -/* - Calculate how much memory needed for dst of base64_encode() -*/ -int my_base64_needed_encoded_length(int length_of_data); - -/* - Calculate how much memory needed for dst of base64_decode() -*/ -int my_base64_needed_decoded_length(int length_of_encoded_data); - - -/* - Encode data as a base64 string -*/ -int my_base64_encode(const void *src, size_t src_len, char *dst); - -/* - Decode a base64 string into data -*/ -int my_base64_decode(const char *src, size_t src_len, - void *dst, const char **end_ptr); - - -#ifdef __cplusplus -} -#endif -#endif /* !__BASE64_H_INCLUDED__ */ diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/config-win.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/config-win.h deleted file mode 100644 index 9457721..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/config-win.h +++ /dev/null @@ -1,392 +0,0 @@ -/* Copyright 2000-2008 MySQL AB, 2008 Sun Microsystems, Inc. - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* Defines for Win32 to make it compatible for MySQL */ - -#define BIG_TABLES - -/* - Minimal version of Windows we should be able to run on. - Currently Windows 2000 -*/ -#define _WIN32_WINNT 0x0500 - - -#if defined(_MSC_VER) && _MSC_VER >= 1400 -/* Avoid endless warnings about sprintf() etc. being unsafe. */ -#define _CRT_SECURE_NO_DEPRECATE 1 -#endif - -#include -#include /* chmod() constants*/ -#include -#include -#include -#include -#include -#include -#include /* getpid()*/ - -#define HAVE_SMEM 1 - -#if defined(_WIN64) || defined(WIN64) -#define SYSTEM_TYPE "Win64" -#elif defined(_WIN32) || defined(WIN32) -#define SYSTEM_TYPE "Win32" -#else -#define SYSTEM_TYPE "Windows" -#endif - -#if defined(_M_IA64) -#define MACHINE_TYPE "ia64" -#elif defined(_M_IX86) -#define MACHINE_TYPE "ia32" -#elif defined(_M_ALPHA) -#define MACHINE_TYPE "axp" -#else -#define MACHINE_TYPE "unknown" /* Define to machine type name */ -#endif - -#if !(defined(_WIN64) || defined(WIN64)) -#ifndef _WIN32 -#define _WIN32 /* Compatible with old source */ -#endif -#ifndef __WIN32__ -#define __WIN32__ -#endif -#endif /* _WIN64 */ -#ifndef __WIN__ -#define __WIN__ /* To make it easier in VC++ */ -#endif - -#ifndef MAX_INDEXES -#define MAX_INDEXES 64 -#endif - -/* File and lock constants */ -#ifdef __BORLANDC__ -#define F_RDLCK LK_NBLCK /* read lock */ -#define F_WRLCK LK_NBRLCK /* write lock */ -#define F_UNLCK LK_UNLCK /* remove lock(s) */ -#else -#define F_RDLCK _LK_NBLCK /* read lock */ -#define F_WRLCK _LK_NBRLCK /* write lock */ -#define F_UNLCK _LK_UNLCK /* remove lock(s) */ -#endif - -#define F_EXCLUSIVE 1 /* We have only exclusive locking */ -#define F_TO_EOF (INT_MAX32/2) /* size for lock of all file */ -#define F_OK 0 /* parameter to access() */ -#define W_OK 2 - -#define S_IROTH S_IREAD /* for my_lib */ - -/* for MY_S_ISFIFO() macro from my_lib */ -#if defined (_S_IFIFO) && !defined (S_IFIFO) -#define S_IFIFO _S_IFIFO -#endif - -/* Winsock2 constant (Vista SDK and later)*/ -#define IPPROTO_IPV6 41 -#ifndef IPV6_V6ONLY -#define IPV6_V6ONLY 27 -#endif - -/* - Constants used by chmod. Note, that group/others is ignored - - because unsupported by Windows due to different access control model. -*/ -#define S_IRWXU S_IREAD|S_IWRITE -#define S_IRWXG 0 -#define S_IRWXO 0 -typedef int mode_t; - -#ifdef __BORLANDC__ -#define FILE_BINARY O_BINARY /* my_fopen in binary mode */ -#define O_TEMPORARY 0 -#define O_SHORT_LIVED 0 -#define SH_DENYNO _SH_DENYNO -#else -#define O_BINARY _O_BINARY /* compability with older style names */ -#define FILE_BINARY _O_BINARY /* my_fopen in binary mode */ -#define O_TEMPORARY _O_TEMPORARY -#define O_SHORT_LIVED _O_SHORT_LIVED -#define SH_DENYNO _SH_DENYNO -#endif -#define NO_OPEN_3 /* For my_create() */ - -#define SIGQUIT SIGTERM /* No SIGQUIT */ - -#undef _REENTRANT /* Crashes something for win32 */ -#undef SAFE_MUTEX /* Can't be used on windows */ - -#define LONGLONG_MIN 0x8000000000000000LL -#define LONGLONG_MAX 0x7FFFFFFFFFFFFFFFLL -#define ULONGLONG_MAX 0xFFFFFFFFFFFFFFFFULL - -/* Type information */ - -#if !defined(HAVE_UINT) -#undef HAVE_UINT -#define HAVE_UINT -typedef unsigned short ushort; -typedef unsigned int uint; -#endif /* !defined(HAVE_UINT) */ - -typedef unsigned __int64 ulonglong; /* Microsofts 64 bit types */ -typedef __int64 longlong; -#ifndef HAVE_SIGSET_T -typedef int sigset_t; -#endif -#define longlong_defined -/* - off_t should not be __int64 because of conflicts in header files; - Use my_off_t or os_off_t instead -*/ -#ifndef HAVE_OFF_T -typedef long off_t; -#endif -typedef __int64 os_off_t; -#ifdef _WIN64 -typedef UINT_PTR rf_SetTimer; -#else -typedef uint rf_SetTimer; -#endif - -#ifndef HAVE_SIZE_T -#ifndef _SIZE_T_DEFINED -typedef SIZE_T size_t; -#define _SIZE_T_DEFINED -#endif -#endif - -#ifndef HAVE_SSIZE_T -#ifndef _SSIZE_T_DEFINED -typedef SSIZE_T ssize_t; -#define _SSIZE_T_DEFINED -#endif -#endif - -#define Socket_defined -#define my_socket SOCKET -#define SIGPIPE SIGINT -#define RETQSORTTYPE void -#define QSORT_TYPE_IS_VOID -#define SOCKET_SIZE_TYPE int -#define my_socket_defined -#define byte_defined -#define HUGE_PTR -#define STDCALL __stdcall /* Used by libmysql.dll */ -#define isnan(X) _isnan(X) -#define finite(X) _finite(X) - -#ifndef UNDEF_THREAD_HACK -#define THREAD -#endif -#define VOID_SIGHANDLER -#define SIZEOF_CHAR 1 -#define SIZEOF_INT 4 -#define SIZEOF_LONG 4 -#define SIZEOF_LONG_LONG 8 -#define SIZEOF_OFF_T 8 -#ifdef _WIN64 -#define SIZEOF_CHARP 8 -#else -#define SIZEOF_CHARP 4 -#endif -#define HAVE_BROKEN_NETINET_INCLUDES -#ifdef _WIN32 -#define HAVE_NAMED_PIPE /* We can only create pipes on NT */ -#endif - -/* ERROR is defined in wingdi.h */ -#undef ERROR - -/* We need to close files to break connections on shutdown */ -#ifndef SIGNAL_WITH_VIO_CLOSE -#define SIGNAL_WITH_VIO_CLOSE -#endif - -/* All windows servers should support .sym files */ -#undef USE_SYMDIR -#define USE_SYMDIR - -/* If LOAD DATA LOCAL INFILE should be enabled by default */ -#define ENABLED_LOCAL_INFILE 1 - -/* If query profiling should be enabled by default */ -#define ENABLED_PROFILING 1 - -/* Convert some simple functions to Posix */ - -#define my_sigset(A,B) signal((A),(B)) -#define finite(A) _finite(A) -#define sleep(A) Sleep((A)*1000) -#define popen(A,B) _popen((A),(B)) -#define pclose(A) _pclose(A) - -#ifndef __BORLANDC__ -#define access(A,B) _access(A,B) -#endif - -#if !defined(__cplusplus) -#define inline __inline -#endif /* __cplusplus */ - -#ifdef _WIN64 -#define ulonglong2double(A) ((double) (ulonglong) (A)) -#define my_off_t2double(A) ((double) (my_off_t) (A)) - -#else -inline double ulonglong2double(ulonglong value) -{ - longlong nr=(longlong) value; - if (nr >= 0) - return (double) nr; - return (18446744073709551616.0 + (double) nr); -} -#define my_off_t2double(A) ulonglong2double(A) -#endif /* _WIN64 */ - -inline ulonglong double2ulonglong(double d) -{ - double t= d - (double) 0x8000000000000000ULL; - - if (t >= 0) - return ((ulonglong) t) + 0x8000000000000000ULL; - return (ulonglong) d; -} - -#if SIZEOF_OFF_T > 4 -#define lseek(A,B,C) _lseeki64((A),(longlong) (B),(C)) -#define tell(A) _telli64(A) -#endif - -#define STACK_DIRECTION -1 - -/* Difference between GetSystemTimeAsFileTime() and now() */ -#define OFFSET_TO_EPOCH 116444736000000000ULL - -#define HAVE_PERROR -#define HAVE_VFPRINT -#define HAVE_RENAME /* Have rename() as function */ -#define HAVE_BINARY_STREAMS /* Have "b" flag in streams */ -#define HAVE_LONG_JMP /* Have long jump function */ -#define HAVE_LOCKING /* have locking() call */ -#define HAVE_ERRNO_AS_DEFINE /* errno is a define */ -#define HAVE_STDLIB /* everything is include in this file */ -#define HAVE_MEMCPY -#define HAVE_MEMMOVE -#define HAVE_GETCWD -#define HAVE_TELL -#define HAVE_TZNAME -#define HAVE_PUTENV -#define HAVE_SELECT -#define HAVE_SETLOCALE -#define HAVE_SOCKET /* Giangi */ -#define HAVE_FLOAT_H -#define HAVE_LIMITS_H -#define HAVE_STDDEF_H -#define NO_FCNTL_NONBLOCK /* No FCNTL */ -#define HAVE_ALLOCA -#define HAVE_STRPBRK -#define HAVE_STRSTR -#define HAVE_COMPRESS -#define HAVE_CREATESEMAPHORE -#define HAVE_ISNAN -#define HAVE_FINITE -#define HAVE_QUERY_CACHE -#define SPRINTF_RETURNS_INT -#define HAVE_SETFILEPOINTER -#define HAVE_VIO_READ_BUFF -#if defined(_MSC_VER) && _MSC_VER >= 1400 -/* strnlen() appeared in Studio 2005 */ -#define HAVE_STRNLEN -#endif -#define HAVE_WINSOCK2 - -#define strcasecmp stricmp -#define strncasecmp strnicmp - -#ifndef _WIN32 -#undef FILE_SHARE_DELETE -#define FILE_SHARE_DELETE 0 /* Not implemented on Win 98/ME */ -#endif - -#ifdef NOT_USED -#define HAVE_SNPRINTF /* Gave link error */ -#define _snprintf snprintf -#endif - -#ifdef _MSC_VER -#define HAVE_LDIV /* The optimizer breaks in zortech for ldiv */ -#define HAVE_ANSI_INCLUDE -#define HAVE_SYS_UTIME_H -#define HAVE_STRTOUL -#endif -#define my_reinterpret_cast(A) reinterpret_cast -#define my_const_cast(A) const_cast - - -/* MYSQL OPTIONS */ - -#ifdef _CUSTOMCONFIG_ -#include -#else -#define DEFAULT_MYSQL_HOME "c:\\mysql" -#define DATADIR "c:\\mysql\\data" -#define PACKAGE "mysql" -#define DEFAULT_BASEDIR "C:\\" -#define SHAREDIR "share" -#define DEFAULT_CHARSET_HOME "C:/mysql/" -#endif -#ifndef DEFAULT_HOME_ENV -#define DEFAULT_HOME_ENV MYSQL_HOME -#endif -#ifndef DEFAULT_GROUP_SUFFIX_ENV -#define DEFAULT_GROUP_SUFFIX_ENV MYSQL_GROUP_SUFFIX -#endif - -/* File name handling */ - -#define FN_LIBCHAR '\\' -#define FN_ROOTDIR "\\" -#define FN_DEVCHAR ':' -#define FN_NETWORK_DRIVES /* Uses \\ to indicate network drives */ -#define FN_NO_CASE_SENCE /* Files are not case-sensitive */ -#define OS_FILE_LIMIT UINT_MAX /* No limit*/ - -#define DO_NOT_REMOVE_THREAD_WRAPPERS -#define thread_safe_increment(V,L) InterlockedIncrement((long*) &(V)) -#define thread_safe_decrement(V,L) InterlockedDecrement((long*) &(V)) -/* The following is only used for statistics, so it should be good enough */ -#ifdef _WIN32 /* This should also work on Win98 but .. */ -#define thread_safe_add(V,C,L) InterlockedExchangeAdd((long*) &(V),(C)) -#define thread_safe_sub(V,C,L) InterlockedExchangeAdd((long*) &(V),-(long) (C)) -#endif - -#define shared_memory_buffer_length 16000 -#define default_shared_memory_base_name "MYSQL" - -#define HAVE_SPATIAL 1 -#define HAVE_RTREE_KEYS 1 - -#define HAVE_OPENSSL 1 -#define HAVE_YASSL 1 - -#define COMMUNITY_SERVER 1 -#define ENABLED_PROFILING 1 - -#define HAVE_BOOL 1 diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/decimal.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/decimal.h deleted file mode 100644 index 530ed9e..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/decimal.h +++ /dev/null @@ -1,107 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef _decimal_h -#define _decimal_h - -typedef enum -{TRUNCATE=0, HALF_EVEN, HALF_UP, CEILING, FLOOR} - decimal_round_mode; -typedef int32 decimal_digit_t; - -typedef struct st_decimal_t { - int intg, frac, len; - my_bool sign; - decimal_digit_t *buf; -} decimal_t; - -int internal_str2dec(const char *from, decimal_t *to, char **end, - my_bool fixed); -int decimal2string(decimal_t *from, char *to, int *to_len, - int fixed_precision, int fixed_decimals, - char filler); -int decimal2ulonglong(decimal_t *from, ulonglong *to); -int ulonglong2decimal(ulonglong from, decimal_t *to); -int decimal2longlong(decimal_t *from, longlong *to); -int longlong2decimal(longlong from, decimal_t *to); -int decimal2double(decimal_t *from, double *to); -int double2decimal(double from, decimal_t *to); -int decimal_actual_fraction(decimal_t *from); -int decimal2bin(decimal_t *from, uchar *to, int precision, int scale); -int bin2decimal(const uchar *from, decimal_t *to, int precision, int scale); - -int decimal_size(int precision, int scale); -int decimal_bin_size(int precision, int scale); -int decimal_result_size(decimal_t *from1, decimal_t *from2, char op, - int param); - -int decimal_intg(decimal_t *from); -int decimal_add(decimal_t *from1, decimal_t *from2, decimal_t *to); -int decimal_sub(decimal_t *from1, decimal_t *from2, decimal_t *to); -int decimal_cmp(decimal_t *from1, decimal_t *from2); -int decimal_mul(decimal_t *from1, decimal_t *from2, decimal_t *to); -int decimal_div(decimal_t *from1, decimal_t *from2, decimal_t *to, - int scale_incr); -int decimal_mod(decimal_t *from1, decimal_t *from2, decimal_t *to); -int decimal_round(decimal_t *from, decimal_t *to, int new_scale, - decimal_round_mode mode); -int decimal_is_zero(decimal_t *from); -void max_decimal(int precision, int frac, decimal_t *to); - -#define string2decimal(A,B,C) internal_str2dec((A), (B), (C), 0) -#define string2decimal_fixed(A,B,C) internal_str2dec((A), (B), (C), 1) - -/* set a decimal_t to zero */ - -#define decimal_make_zero(dec) do { \ - (dec)->buf[0]=0; \ - (dec)->intg=1; \ - (dec)->frac=0; \ - (dec)->sign=0; \ - } while(0) - -/* - returns the length of the buffer to hold string representation - of the decimal (including decimal dot, possible sign and \0) -*/ - -#define decimal_string_size(dec) (((dec)->intg ? (dec)->intg : 1) + \ - (dec)->frac + ((dec)->frac > 0) + 2) - -/* negate a decimal */ -#define decimal_neg(dec) do { (dec)->sign^=1; } while(0) - -/* - conventions: - - decimal_smth() == 0 -- everything's ok - decimal_smth() <= 1 -- result is usable, but precision loss is possible - decimal_smth() <= 2 -- result can be unusable, most significant digits - could've been lost - decimal_smth() > 2 -- no result was generated -*/ - -#define E_DEC_OK 0 -#define E_DEC_TRUNCATED 1 -#define E_DEC_OVERFLOW 2 -#define E_DEC_DIV_ZERO 4 -#define E_DEC_BAD_NUM 8 -#define E_DEC_OOM 16 - -#define E_DEC_ERROR 31 -#define E_DEC_FATAL_ERROR 30 - -#endif - diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/errmsg.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/errmsg.h deleted file mode 100644 index 92d70ab..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/errmsg.h +++ /dev/null @@ -1,103 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* Error messages for MySQL clients */ -/* (Error messages for the daemon are in sql/share/errmsg.txt) */ - -#ifdef __cplusplus -extern "C" { -#endif -void init_client_errs(void); -void finish_client_errs(void); -extern const char *client_errors[]; /* Error messages */ -#ifdef __cplusplus -} -#endif - -#define CR_MIN_ERROR 2000 /* For easier client code */ -#define CR_MAX_ERROR 2999 -#if !defined(ER) -#define ER(X) client_errors[(X)-CR_MIN_ERROR] -#endif -#define CLIENT_ERRMAP 2 /* Errormap used by my_error() */ - -/* Do not add error numbers before CR_ERROR_FIRST. */ -/* If necessary to add lower numbers, change CR_ERROR_FIRST accordingly. */ -#define CR_ERROR_FIRST 2000 /*Copy first error nr.*/ -#define CR_UNKNOWN_ERROR 2000 -#define CR_SOCKET_CREATE_ERROR 2001 -#define CR_CONNECTION_ERROR 2002 -#define CR_CONN_HOST_ERROR 2003 -#define CR_IPSOCK_ERROR 2004 -#define CR_UNKNOWN_HOST 2005 -#define CR_SERVER_GONE_ERROR 2006 -#define CR_VERSION_ERROR 2007 -#define CR_OUT_OF_MEMORY 2008 -#define CR_WRONG_HOST_INFO 2009 -#define CR_LOCALHOST_CONNECTION 2010 -#define CR_TCP_CONNECTION 2011 -#define CR_SERVER_HANDSHAKE_ERR 2012 -#define CR_SERVER_LOST 2013 -#define CR_COMMANDS_OUT_OF_SYNC 2014 -#define CR_NAMEDPIPE_CONNECTION 2015 -#define CR_NAMEDPIPEWAIT_ERROR 2016 -#define CR_NAMEDPIPEOPEN_ERROR 2017 -#define CR_NAMEDPIPESETSTATE_ERROR 2018 -#define CR_CANT_READ_CHARSET 2019 -#define CR_NET_PACKET_TOO_LARGE 2020 -#define CR_EMBEDDED_CONNECTION 2021 -#define CR_PROBE_SLAVE_STATUS 2022 -#define CR_PROBE_SLAVE_HOSTS 2023 -#define CR_PROBE_SLAVE_CONNECT 2024 -#define CR_PROBE_MASTER_CONNECT 2025 -#define CR_SSL_CONNECTION_ERROR 2026 -#define CR_MALFORMED_PACKET 2027 -#define CR_WRONG_LICENSE 2028 - -/* new 4.1 error codes */ -#define CR_NULL_POINTER 2029 -#define CR_NO_PREPARE_STMT 2030 -#define CR_PARAMS_NOT_BOUND 2031 -#define CR_DATA_TRUNCATED 2032 -#define CR_NO_PARAMETERS_EXISTS 2033 -#define CR_INVALID_PARAMETER_NO 2034 -#define CR_INVALID_BUFFER_USE 2035 -#define CR_UNSUPPORTED_PARAM_TYPE 2036 - -#define CR_SHARED_MEMORY_CONNECTION 2037 -#define CR_SHARED_MEMORY_CONNECT_REQUEST_ERROR 2038 -#define CR_SHARED_MEMORY_CONNECT_ANSWER_ERROR 2039 -#define CR_SHARED_MEMORY_CONNECT_FILE_MAP_ERROR 2040 -#define CR_SHARED_MEMORY_CONNECT_MAP_ERROR 2041 -#define CR_SHARED_MEMORY_FILE_MAP_ERROR 2042 -#define CR_SHARED_MEMORY_MAP_ERROR 2043 -#define CR_SHARED_MEMORY_EVENT_ERROR 2044 -#define CR_SHARED_MEMORY_CONNECT_ABANDONED_ERROR 2045 -#define CR_SHARED_MEMORY_CONNECT_SET_ERROR 2046 -#define CR_CONN_UNKNOW_PROTOCOL 2047 -#define CR_INVALID_CONN_HANDLE 2048 -#define CR_SECURE_AUTH 2049 -#define CR_FETCH_CANCELED 2050 -#define CR_NO_DATA 2051 -#define CR_NO_STMT_METADATA 2052 -#define CR_NO_RESULT_SET 2053 -#define CR_NOT_IMPLEMENTED 2054 -#define CR_SERVER_LOST_EXTENDED 2055 -#define CR_STMT_CLOSED 2056 -#define CR_NEW_STMT_METADATA 2057 -#define CR_ALREADY_CONNECTED 2058 -#define CR_ERROR_LAST /*Copy last error nr:*/ 2058 -/* Add error numbers before CR_ERROR_LAST and change it accordingly. */ - diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/hash.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/hash.h deleted file mode 100644 index c1797c8..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/hash.h +++ /dev/null @@ -1,84 +0,0 @@ -/* Copyright 2000-2008 MySQL AB, 2008 Sun Microsystems, Inc. - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* Dynamic hashing of record with different key-length */ - -#ifndef _hash_h -#define _hash_h -#ifdef __cplusplus -extern "C" { -#endif - -/* - Overhead to store an element in hash - Can be used to approximate memory consumption for a hash - */ -#define HASH_OVERHEAD (sizeof(char*)*2) - -/* flags for hash_init */ -#define HASH_UNIQUE 1 /* hash_insert fails on duplicate key */ - -typedef uchar *(*my_hash_get_key)(const uchar *,size_t*,my_bool); -typedef void (*my_hash_free_key)(void *); -typedef my_bool (*my_hash_walk_action)(void *,void *); - -typedef struct st_hash { - size_t key_offset,key_length; /* Length of key if const length */ - size_t blength; - ulong records; - uint flags; - DYNAMIC_ARRAY array; /* Place for hash_keys */ - my_hash_get_key get_key; - void (*free)(void *); - CHARSET_INFO *charset; -} HASH; - -/* A search iterator state */ -typedef uint HASH_SEARCH_STATE; - -#define my_hash_init(A,B,C,D,E,F,G,H) \ - _my_hash_init(A,0,B,C,D,E,F,G,H CALLER_INFO) -#define my_hash_init2(A,B,C,D,E,F,G,H,I) \ - _my_hash_init(A,B,C,D,E,F,G,H,I CALLER_INFO) -my_bool _my_hash_init(HASH *hash, uint growth_size, CHARSET_INFO *charset, - ulong default_array_elements, size_t key_offset, - size_t key_length, my_hash_get_key get_key, - void (*free_element)(void*), - uint flags CALLER_INFO_PROTO); -void my_hash_free(HASH *tree); -void my_hash_reset(HASH *hash); -uchar *my_hash_element(HASH *hash, ulong idx); -uchar *my_hash_search(const HASH *info, const uchar *key, size_t length); -uchar *my_hash_first(const HASH *info, const uchar *key, size_t length, - HASH_SEARCH_STATE *state); -uchar *my_hash_next(const HASH *info, const uchar *key, size_t length, - HASH_SEARCH_STATE *state); -my_bool my_hash_insert(HASH *info, const uchar *data); -my_bool my_hash_delete(HASH *hash, uchar *record); -my_bool my_hash_update(HASH *hash, uchar *record, uchar *old_key, - size_t old_key_length); -void my_hash_replace(HASH *hash, HASH_SEARCH_STATE *state, uchar *new_row); -my_bool my_hash_check(HASH *hash); /* Only in debug library */ -my_bool my_hash_iterate(HASH *hash, my_hash_walk_action action, void *argument); - -#define my_hash_clear(H) bzero((char*) (H), sizeof(*(H))) -#define my_hash_inited(H) ((H)->array.buffer != 0) -#define my_hash_init_opt(A,B,C,D,E,F,G,H) \ - (!my_hash_inited(A) && _my_hash_init(A,0,B,C,D,E,F,G, H CALLER_INFO)) - -#ifdef __cplusplus -} -#endif -#endif diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/keycache.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/keycache.h deleted file mode 100644 index 0375d10..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/keycache.h +++ /dev/null @@ -1,153 +0,0 @@ -/* Copyright (C) 2003 MySQL AB - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/** - @file - Key cache API -*/ - -#ifndef _keycache_h -#define _keycache_h -C_MODE_START - -/* declare structures that is used by st_key_cache */ - -struct st_block_link; -typedef struct st_block_link BLOCK_LINK; -struct st_keycache_page; -typedef struct st_keycache_page KEYCACHE_PAGE; -struct st_hash_link; -typedef struct st_hash_link HASH_LINK; - -/* info about requests in a waiting queue */ -typedef struct st_keycache_wqueue -{ - struct st_my_thread_var *last_thread; /* circular list of waiting threads */ -} KEYCACHE_WQUEUE; - -/** Callback called when any block is flushed */ -typedef int (*KEYCACHE_POST_WRITE_CALLBACK)(void *arg, const uchar *buffert, - uint length, my_off_t filepos); - -#define CHANGED_BLOCKS_HASH 128 /* must be power of 2 */ - -/* - The key cache structure - It also contains read-only statistics parameters. -*/ - -typedef struct st_key_cache -{ - my_bool key_cache_inited; - my_bool in_resize; /* true during resize operation */ - my_bool resize_in_flush; /* true during flush of resize operation */ - my_bool can_be_used; /* usage of cache for read/write is allowed */ - size_t key_cache_mem_size; /* specified size of the cache memory */ - uint key_cache_block_size; /* size of the page buffer of a cache block */ - ulong min_warm_blocks; /* min number of warm blocks; */ - ulong age_threshold; /* age threshold for hot blocks */ - ulonglong keycache_time; /* total number of block link operations */ - uint hash_entries; /* max number of entries in the hash table */ - int hash_links; /* max number of hash links */ - int hash_links_used; /* number of hash links currently used */ - int disk_blocks; /* max number of blocks in the cache */ - ulong blocks_used; /* maximum number of concurrently used blocks */ - ulong blocks_unused; /* number of currently unused blocks */ - ulong blocks_changed; /* number of currently dirty blocks */ - ulong warm_blocks; /* number of blocks in warm sub-chain */ - ulong cnt_for_resize_op; /* counter to block resize operation */ - long blocks_available; /* number of blocks available in the LRU chain */ - HASH_LINK **hash_root; /* arr. of entries into hash table buckets */ - HASH_LINK *hash_link_root; /* memory for hash table links */ - HASH_LINK *free_hash_list; /* list of free hash links */ - BLOCK_LINK *free_block_list; /* list of free blocks */ - BLOCK_LINK *block_root; /* memory for block links */ - uchar HUGE_PTR *block_mem; /* memory for block buffers */ - BLOCK_LINK *used_last; /* ptr to the last block of the LRU chain */ - BLOCK_LINK *used_ins; /* ptr to the insertion block in LRU chain */ - pthread_mutex_t cache_lock; /* to lock access to the cache structure */ - KEYCACHE_WQUEUE resize_queue; /* threads waiting during resize operation */ - /* - Waiting for a zero resize count. Using a queue for symmetry though - only one thread can wait here. - */ - KEYCACHE_WQUEUE waiting_for_resize_cnt; - KEYCACHE_WQUEUE waiting_for_hash_link; /* waiting for a free hash link */ - KEYCACHE_WQUEUE waiting_for_block; /* requests waiting for a free block */ - BLOCK_LINK *changed_blocks[CHANGED_BLOCKS_HASH]; /* hash for dirty file bl.*/ - BLOCK_LINK *file_blocks[CHANGED_BLOCKS_HASH]; /* hash for other file bl.*/ - KEYCACHE_POST_WRITE_CALLBACK post_write;/**< Called when flushing any block*/ - - /* - The following variables are and variables used to hold parameters for - initializing the key cache. - */ - - ulonglong param_buff_size; /* size the memory allocated for the cache */ - ulong param_block_size; /* size of the blocks in the key cache */ - ulong param_division_limit; /* min. percentage of warm blocks */ - ulong param_age_threshold; /* determines when hot block is downgraded */ - - /* Statistics variables. These are reset in reset_key_cache_counters(). */ - ulong global_blocks_changed; /* number of currently dirty blocks */ - ulonglong global_cache_w_requests;/* number of write requests (write hits) */ - ulonglong global_cache_write; /* number of writes from cache to files */ - ulonglong global_cache_r_requests;/* number of read requests (read hits) */ - ulonglong global_cache_read; /* number of reads from files to cache */ - - int blocks; /* max number of blocks in the cache */ - my_bool in_init; /* Set to 1 in MySQL during init/resize */ -} KEY_CACHE; - -/* The default key cache */ -extern KEY_CACHE dflt_key_cache_var, *dflt_key_cache; - -extern int init_key_cache(KEY_CACHE *keycache, uint key_cache_block_size, - size_t use_mem, uint division_limit, - uint age_threshold); -extern int resize_key_cache(KEY_CACHE *keycache, uint key_cache_block_size, - size_t use_mem, uint division_limit, - uint age_threshold); -extern void change_key_cache_param(KEY_CACHE *keycache, uint division_limit, - uint age_threshold); -extern uchar *key_cache_read(KEY_CACHE *keycache, - File file, my_off_t filepos, int level, - uchar *buff, uint length, - uint block_length,int return_buffer); -extern int key_cache_insert(KEY_CACHE *keycache, - File file, my_off_t filepos, int level, - uchar *buff, uint length); -extern int key_cache_write(KEY_CACHE *keycache, - File file, my_off_t filepos, int level, - uchar *buff, uint length, - uint block_length, int force_write, - void *post_write_arg); -extern int flush_key_blocks(KEY_CACHE *keycache, - int file, enum flush_type type); -extern void end_key_cache(KEY_CACHE *keycache, my_bool cleanup); - -/* Functions to handle multiple key caches */ -extern my_bool multi_keycache_init(void); -extern void multi_keycache_free(void); -extern KEY_CACHE *multi_key_cache_search(uchar *key, uint length, - KEY_CACHE *def); -extern my_bool multi_key_cache_set(const uchar *key, uint length, - KEY_CACHE *key_cache); -extern void multi_key_cache_change(KEY_CACHE *old_data, - KEY_CACHE *new_data); -extern int reset_key_cache_counters(const char *name, - KEY_CACHE *key_cache); -C_MODE_END -#endif /* _keycache_h */ diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/lf.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/lf.h deleted file mode 100644 index 83358aa..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/lf.h +++ /dev/null @@ -1,260 +0,0 @@ -/* Copyright (C) 2007-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc. - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef _lf_h -#define _lf_h - -#include - -/* - Helpers to define both func() and _func(), where - func() is a _func() protected by my_atomic_rwlock_wrlock() -*/ - -#define lock_wrap(f, t, proto_args, args, lock) \ -t _ ## f proto_args; \ -static inline t f proto_args \ -{ \ - t ret; \ - my_atomic_rwlock_wrlock(lock); \ - ret= _ ## f args; \ - my_atomic_rwlock_wrunlock(lock); \ - return ret; \ -} - -#define lock_wrap_void(f, proto_args, args, lock) \ -void _ ## f proto_args; \ -static inline void f proto_args \ -{ \ - my_atomic_rwlock_wrlock(lock); \ - _ ## f args; \ - my_atomic_rwlock_wrunlock(lock); \ -} - -#define nolock_wrap(f, t, proto_args, args) \ -t _ ## f proto_args; \ -static inline t f proto_args \ -{ \ - return _ ## f args; \ -} - -#define nolock_wrap_void(f, proto_args, args) \ -void _ ## f proto_args; \ -static inline void f proto_args \ -{ \ - _ ## f args; \ -} - -/* - wait-free dynamic array, see lf_dynarray.c - - 4 levels of 256 elements each mean 4311810304 elements in an array - it - should be enough for a while -*/ -#define LF_DYNARRAY_LEVEL_LENGTH 256 -#define LF_DYNARRAY_LEVELS 4 - -typedef struct { - void * volatile level[LF_DYNARRAY_LEVELS]; - uint size_of_element; - my_atomic_rwlock_t lock; -} LF_DYNARRAY; - -typedef int (*lf_dynarray_func)(void *, void *); - -void lf_dynarray_init(LF_DYNARRAY *array, uint element_size); -void lf_dynarray_destroy(LF_DYNARRAY *array); - -nolock_wrap(lf_dynarray_value, void *, - (LF_DYNARRAY *array, uint idx), - (array, idx)) -lock_wrap(lf_dynarray_lvalue, void *, - (LF_DYNARRAY *array, uint idx), - (array, idx), - &array->lock) -nolock_wrap(lf_dynarray_iterate, int, - (LF_DYNARRAY *array, lf_dynarray_func func, void *arg), - (array, func, arg)) - -/* - pin manager for memory allocator, lf_alloc-pin.c -*/ - -#define LF_PINBOX_PINS 4 -#define LF_PURGATORY_SIZE 10 - -typedef void lf_pinbox_free_func(void *, void *, void*); - -typedef struct { - LF_DYNARRAY pinarray; - lf_pinbox_free_func *free_func; - void *free_func_arg; - uint free_ptr_offset; - uint32 volatile pinstack_top_ver; /* this is a versioned pointer */ - uint32 volatile pins_in_array; /* number of elements in array */ -} LF_PINBOX; - -typedef struct { - void * volatile pin[LF_PINBOX_PINS]; - LF_PINBOX *pinbox; - void **stack_ends_here; - void *purgatory; - uint32 purgatory_count; - uint32 volatile link; -/* we want sizeof(LF_PINS) to be 64 to avoid false sharing */ -#if SIZEOF_INT*2+SIZEOF_CHARP*(LF_PINBOX_PINS+3) != 64 - char pad[64-sizeof(uint32)*2-sizeof(void*)*(LF_PINBOX_PINS+3)]; -#endif -} LF_PINS; - -/* - shortcut macros to do an atomic_wrlock on a structure that uses pins - (e.g. lf_hash). -*/ -#define lf_rwlock_by_pins(PINS) \ - my_atomic_rwlock_wrlock(&(PINS)->pinbox->pinarray.lock) -#define lf_rwunlock_by_pins(PINS) \ - my_atomic_rwlock_wrunlock(&(PINS)->pinbox->pinarray.lock) - -/* - compile-time assert, to require "no less than N" pins - it's enough if it'll fail on at least one compiler, so - we'll enable it on GCC only, which supports zero-length arrays. -*/ -#if defined(__GNUC__) && defined(MY_LF_EXTRA_DEBUG) -#define LF_REQUIRE_PINS(N) \ - static const char require_pins[LF_PINBOX_PINS-N] \ - __attribute__ ((unused)); \ - static const int LF_NUM_PINS_IN_THIS_FILE= N; -#define _lf_pin(PINS, PIN, ADDR) \ - ( \ - assert(PIN < LF_NUM_PINS_IN_THIS_FILE), \ - my_atomic_storeptr(&(PINS)->pin[PIN], (ADDR)) \ - ) -#else -#define LF_REQUIRE_PINS(N) -#define _lf_pin(PINS, PIN, ADDR) my_atomic_storeptr(&(PINS)->pin[PIN], (ADDR)) -#endif - -#define _lf_unpin(PINS, PIN) _lf_pin(PINS, PIN, NULL) -#define lf_pin(PINS, PIN, ADDR) \ - do { \ - lf_rwlock_by_pins(PINS); \ - _lf_pin(PINS, PIN, ADDR); \ - lf_rwunlock_by_pins(PINS); \ - } while (0) -#define lf_unpin(PINS, PIN) lf_pin(PINS, PIN, NULL) -#define _lf_assert_pin(PINS, PIN) assert((PINS)->pin[PIN] != 0) -#define _lf_assert_unpin(PINS, PIN) assert((PINS)->pin[PIN] == 0) - -void lf_pinbox_init(LF_PINBOX *pinbox, uint free_ptr_offset, - lf_pinbox_free_func *free_func, void * free_func_arg); -void lf_pinbox_destroy(LF_PINBOX *pinbox); - -lock_wrap(lf_pinbox_get_pins, LF_PINS *, - (LF_PINBOX *pinbox), - (pinbox), - &pinbox->pinarray.lock) -lock_wrap_void(lf_pinbox_put_pins, - (LF_PINS *pins), - (pins), - &pins->pinbox->pinarray.lock) -lock_wrap_void(lf_pinbox_free, - (LF_PINS *pins, void *addr), - (pins, addr), - &pins->pinbox->pinarray.lock) - -/* - memory allocator, lf_alloc-pin.c -*/ - -typedef struct st_lf_allocator { - LF_PINBOX pinbox; - uchar * volatile top; - uint element_size; - uint32 volatile mallocs; - void (*constructor)(uchar *); /* called, when an object is malloc()'ed */ - void (*destructor)(uchar *); /* called, when an object is free()'d */ -} LF_ALLOCATOR; - -void lf_alloc_init(LF_ALLOCATOR *allocator, uint size, uint free_ptr_offset); -void lf_alloc_destroy(LF_ALLOCATOR *allocator); -uint lf_alloc_pool_count(LF_ALLOCATOR *allocator); -/* - shortcut macros to access underlying pinbox functions from an LF_ALLOCATOR - see _lf_pinbox_get_pins() and _lf_pinbox_put_pins() -*/ -#define _lf_alloc_free(PINS, PTR) _lf_pinbox_free((PINS), (PTR)) -#define lf_alloc_free(PINS, PTR) lf_pinbox_free((PINS), (PTR)) -#define _lf_alloc_get_pins(A) _lf_pinbox_get_pins(&(A)->pinbox) -#define lf_alloc_get_pins(A) lf_pinbox_get_pins(&(A)->pinbox) -#define _lf_alloc_put_pins(PINS) _lf_pinbox_put_pins(PINS) -#define lf_alloc_put_pins(PINS) lf_pinbox_put_pins(PINS) -#define lf_alloc_direct_free(ALLOC, ADDR) my_free((uchar*)(ADDR), MYF(0)) - -lock_wrap(lf_alloc_new, void *, - (LF_PINS *pins), - (pins), - &pins->pinbox->pinarray.lock) - -/* - extendible hash, lf_hash.c -*/ -#include - -#define LF_HASH_UNIQUE 1 - -/* lf_hash overhead per element (that is, sizeof(LF_SLIST) */ -extern const int LF_HASH_OVERHEAD; - -typedef struct { - LF_DYNARRAY array; /* hash itself */ - LF_ALLOCATOR alloc; /* allocator for elements */ - my_hash_get_key get_key; /* see HASH */ - CHARSET_INFO *charset; /* see HASH */ - uint key_offset, key_length; /* see HASH */ - uint element_size; /* size of memcpy'ed area on insert */ - uint flags; /* LF_HASH_UNIQUE, etc */ - int32 volatile size; /* size of array */ - int32 volatile count; /* number of elements in the hash */ -} LF_HASH; - -void lf_hash_init(LF_HASH *hash, uint element_size, uint flags, - uint key_offset, uint key_length, my_hash_get_key get_key, - CHARSET_INFO *charset); -void lf_hash_destroy(LF_HASH *hash); -int lf_hash_insert(LF_HASH *hash, LF_PINS *pins, const void *data); -void *lf_hash_search(LF_HASH *hash, LF_PINS *pins, const void *key, uint keylen); -int lf_hash_delete(LF_HASH *hash, LF_PINS *pins, const void *key, uint keylen); -/* - shortcut macros to access underlying pinbox functions from an LF_HASH - see _lf_pinbox_get_pins() and _lf_pinbox_put_pins() -*/ -#define _lf_hash_get_pins(HASH) _lf_alloc_get_pins(&(HASH)->alloc) -#define lf_hash_get_pins(HASH) lf_alloc_get_pins(&(HASH)->alloc) -#define _lf_hash_put_pins(PINS) _lf_pinbox_put_pins(PINS) -#define lf_hash_put_pins(PINS) lf_pinbox_put_pins(PINS) -#define lf_hash_search_unpin(PINS) lf_unpin((PINS), 2) -/* - cleanup -*/ - -#undef lock_wrap_void -#undef lock_wrap -#undef nolock_wrap_void -#undef nolock_wrap - -#endif - diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/m_ctype.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/m_ctype.h deleted file mode 100644 index 33229a3..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/m_ctype.h +++ /dev/null @@ -1,654 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - A better inplementation of the UNIX ctype(3) library. - Notes: my_global.h should be included before ctype.h -*/ - -#ifndef _m_ctype_h -#define _m_ctype_h - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#define MY_CS_NAME_SIZE 32 -#define MY_CS_CTYPE_TABLE_SIZE 257 -#define MY_CS_TO_LOWER_TABLE_SIZE 256 -#define MY_CS_TO_UPPER_TABLE_SIZE 256 -#define MY_CS_SORT_ORDER_TABLE_SIZE 256 -#define MY_CS_TO_UNI_TABLE_SIZE 256 - -#define CHARSET_DIR "charsets/" - -#define my_wc_t ulong - -typedef struct unicase_info_st -{ - uint16 toupper; - uint16 tolower; - uint16 sort; -} MY_UNICASE_INFO; - - -extern MY_UNICASE_INFO *my_unicase_default[256]; -extern MY_UNICASE_INFO *my_unicase_turkish[256]; - -typedef struct uni_ctype_st -{ - uchar pctype; - uchar *ctype; -} MY_UNI_CTYPE; - -extern MY_UNI_CTYPE my_uni_ctype[256]; - -/* wm_wc and wc_mb return codes */ -#define MY_CS_ILSEQ 0 /* Wrong by sequence: wb_wc */ -#define MY_CS_ILUNI 0 /* Cannot encode Unicode to charset: wc_mb */ -#define MY_CS_TOOSMALL -101 /* Need at least one byte: wc_mb and mb_wc */ -#define MY_CS_TOOSMALL2 -102 /* Need at least two bytes: wc_mb and mb_wc */ -#define MY_CS_TOOSMALL3 -103 /* Need at least three bytes: wc_mb and mb_wc */ -/* These following three are currently not really used */ -#define MY_CS_TOOSMALL4 -104 /* Need at least 4 bytes: wc_mb and mb_wc */ -#define MY_CS_TOOSMALL5 -105 /* Need at least 5 bytes: wc_mb and mb_wc */ -#define MY_CS_TOOSMALL6 -106 /* Need at least 6 bytes: wc_mb and mb_wc */ -/* A helper macros for "need at least n bytes" */ -#define MY_CS_TOOSMALLN(n) (-100-(n)) - -#define MY_SEQ_INTTAIL 1 -#define MY_SEQ_SPACES 2 - - /* My charsets_list flags */ -#define MY_CS_COMPILED 1 /* compiled-in sets */ -#define MY_CS_CONFIG 2 /* sets that have a *.conf file */ -#define MY_CS_INDEX 4 /* sets listed in the Index file */ -#define MY_CS_LOADED 8 /* sets that are currently loaded */ -#define MY_CS_BINSORT 16 /* if binary sort order */ -#define MY_CS_PRIMARY 32 /* if primary collation */ -#define MY_CS_STRNXFRM 64 /* if strnxfrm is used for sort */ -#define MY_CS_UNICODE 128 /* is a charset is full unicode */ -#define MY_CS_READY 256 /* if a charset is initialized */ -#define MY_CS_AVAILABLE 512 /* If either compiled-in or loaded*/ -#define MY_CS_CSSORT 1024 /* if case sensitive sort order */ -#define MY_CS_HIDDEN 2048 /* don't display in SHOW */ -#define MY_CS_PUREASCII 4096 /* if a charset is pure ascii */ -#define MY_CS_NONASCII 8192 /* if not ASCII-compatible */ -#define MY_CHARSET_UNDEFINED 0 - -/* Character repertoire flags */ -#define MY_REPERTOIRE_ASCII 1 /* Pure ASCII U+0000..U+007F */ -#define MY_REPERTOIRE_EXTENDED 2 /* Extended characters: U+0080..U+FFFF */ -#define MY_REPERTOIRE_UNICODE30 3 /* ASCII | EXTENDED: U+0000..U+FFFF */ - -/* Flags for strxfrm */ -#define MY_STRXFRM_LEVEL1 0x00000001 /* for primary weights */ -#define MY_STRXFRM_LEVEL2 0x00000002 /* for secondary weights */ -#define MY_STRXFRM_LEVEL3 0x00000004 /* for tertiary weights */ -#define MY_STRXFRM_LEVEL4 0x00000008 /* fourth level weights */ -#define MY_STRXFRM_LEVEL5 0x00000010 /* fifth level weights */ -#define MY_STRXFRM_LEVEL6 0x00000020 /* sixth level weights */ -#define MY_STRXFRM_LEVEL_ALL 0x0000003F /* Bit OR for the above six */ -#define MY_STRXFRM_NLEVELS 6 /* Number of possible levels*/ - -#define MY_STRXFRM_PAD_WITH_SPACE 0x00000040 /* if pad result with spaces */ -#define MY_STRXFRM_PAD_TO_MAXLEN 0x00000080 /* if pad tail(for filesort) */ - -#define MY_STRXFRM_DESC_LEVEL1 0x00000100 /* if desc order for level1 */ -#define MY_STRXFRM_DESC_LEVEL2 0x00000200 /* if desc order for level2 */ -#define MY_STRXFRM_DESC_LEVEL3 0x00000300 /* if desc order for level3 */ -#define MY_STRXFRM_DESC_LEVEL4 0x00000800 /* if desc order for level4 */ -#define MY_STRXFRM_DESC_LEVEL5 0x00001000 /* if desc order for level5 */ -#define MY_STRXFRM_DESC_LEVEL6 0x00002000 /* if desc order for level6 */ -#define MY_STRXFRM_DESC_SHIFT 8 - -#define MY_STRXFRM_UNUSED_00004000 0x00004000 /* for future extensions */ -#define MY_STRXFRM_UNUSED_00008000 0x00008000 /* for future extensions */ - -#define MY_STRXFRM_REVERSE_LEVEL1 0x00010000 /* if reverse order for level1 */ -#define MY_STRXFRM_REVERSE_LEVEL2 0x00020000 /* if reverse order for level2 */ -#define MY_STRXFRM_REVERSE_LEVEL3 0x00040000 /* if reverse order for level3 */ -#define MY_STRXFRM_REVERSE_LEVEL4 0x00080000 /* if reverse order for level4 */ -#define MY_STRXFRM_REVERSE_LEVEL5 0x00100000 /* if reverse order for level5 */ -#define MY_STRXFRM_REVERSE_LEVEL6 0x00200000 /* if reverse order for level6 */ -#define MY_STRXFRM_REVERSE_SHIFT 16 - - -typedef struct my_uni_idx_st -{ - uint16 from; - uint16 to; - uchar *tab; -} MY_UNI_IDX; - -typedef struct -{ - uint beg; - uint end; - uint mb_len; -} my_match_t; - -enum my_lex_states -{ - MY_LEX_START, MY_LEX_CHAR, MY_LEX_IDENT, - MY_LEX_IDENT_SEP, MY_LEX_IDENT_START, - MY_LEX_REAL, MY_LEX_HEX_NUMBER, MY_LEX_BIN_NUMBER, - MY_LEX_CMP_OP, MY_LEX_LONG_CMP_OP, MY_LEX_STRING, MY_LEX_COMMENT, MY_LEX_END, - MY_LEX_OPERATOR_OR_IDENT, MY_LEX_NUMBER_IDENT, MY_LEX_INT_OR_REAL, - MY_LEX_REAL_OR_POINT, MY_LEX_BOOL, MY_LEX_EOL, MY_LEX_ESCAPE, - MY_LEX_LONG_COMMENT, MY_LEX_END_LONG_COMMENT, MY_LEX_SEMICOLON, - MY_LEX_SET_VAR, MY_LEX_USER_END, MY_LEX_HOSTNAME, MY_LEX_SKIP, - MY_LEX_USER_VARIABLE_DELIMITER, MY_LEX_SYSTEM_VAR, - MY_LEX_IDENT_OR_KEYWORD, - MY_LEX_IDENT_OR_HEX, MY_LEX_IDENT_OR_BIN, MY_LEX_IDENT_OR_NCHAR, - MY_LEX_STRING_OR_DELIMITER -}; - -struct charset_info_st; - - -/* See strings/CHARSET_INFO.txt for information about this structure */ -typedef struct my_collation_handler_st -{ - my_bool (*init)(struct charset_info_st *, void *(*alloc)(size_t)); - /* Collation routines */ - int (*strnncoll)(struct charset_info_st *, - const uchar *, size_t, const uchar *, size_t, my_bool); - int (*strnncollsp)(struct charset_info_st *, - const uchar *, size_t, const uchar *, size_t, - my_bool diff_if_only_endspace_difference); - size_t (*strnxfrm)(struct charset_info_st *, - uchar *dst, size_t dstlen, uint nweights, - const uchar *src, size_t srclen, uint flags); - size_t (*strnxfrmlen)(struct charset_info_st *, size_t); - my_bool (*like_range)(struct charset_info_st *, - const char *s, size_t s_length, - pchar w_prefix, pchar w_one, pchar w_many, - size_t res_length, - char *min_str, char *max_str, - size_t *min_len, size_t *max_len); - int (*wildcmp)(struct charset_info_st *, - const char *str,const char *str_end, - const char *wildstr,const char *wildend, - int escape,int w_one, int w_many); - - int (*strcasecmp)(struct charset_info_st *, const char *, const char *); - - uint (*instr)(struct charset_info_st *, - const char *b, size_t b_length, - const char *s, size_t s_length, - my_match_t *match, uint nmatch); - - /* Hash calculation */ - void (*hash_sort)(struct charset_info_st *cs, const uchar *key, size_t len, - ulong *nr1, ulong *nr2); - my_bool (*propagate)(struct charset_info_st *cs, const uchar *str, size_t len); -} MY_COLLATION_HANDLER; - -extern MY_COLLATION_HANDLER my_collation_mb_bin_handler; -extern MY_COLLATION_HANDLER my_collation_8bit_bin_handler; -extern MY_COLLATION_HANDLER my_collation_8bit_simple_ci_handler; -extern MY_COLLATION_HANDLER my_collation_ucs2_uca_handler; - -/* Some typedef to make it easy for C++ to make function pointers */ -typedef int (*my_charset_conv_mb_wc)(struct charset_info_st *, my_wc_t *, - const uchar *, const uchar *); -typedef int (*my_charset_conv_wc_mb)(struct charset_info_st *, my_wc_t, - uchar *, uchar *); -typedef size_t (*my_charset_conv_case)(struct charset_info_st *, - char *, size_t, char *, size_t); - - -/* See strings/CHARSET_INFO.txt about information on this structure */ -typedef struct my_charset_handler_st -{ - my_bool (*init)(struct charset_info_st *, void *(*alloc)(size_t)); - /* Multibyte routines */ - uint (*ismbchar)(struct charset_info_st *, const char *, const char *); - uint (*mbcharlen)(struct charset_info_st *, uint c); - size_t (*numchars)(struct charset_info_st *, const char *b, const char *e); - size_t (*charpos)(struct charset_info_st *, const char *b, const char *e, - size_t pos); - size_t (*well_formed_len)(struct charset_info_st *, - const char *b,const char *e, - size_t nchars, int *error); - size_t (*lengthsp)(struct charset_info_st *, const char *ptr, size_t length); - size_t (*numcells)(struct charset_info_st *, const char *b, const char *e); - - /* Unicode conversion */ - my_charset_conv_mb_wc mb_wc; - my_charset_conv_wc_mb wc_mb; - - /* CTYPE scanner */ - int (*ctype)(struct charset_info_st *cs, int *ctype, - const uchar *s, const uchar *e); - - /* Functions for case and sort conversion */ - size_t (*caseup_str)(struct charset_info_st *, char *); - size_t (*casedn_str)(struct charset_info_st *, char *); - - my_charset_conv_case caseup; - my_charset_conv_case casedn; - - /* Charset dependant snprintf() */ - size_t (*snprintf)(struct charset_info_st *, char *to, size_t n, - const char *fmt, - ...) ATTRIBUTE_FORMAT_FPTR(printf, 4, 5); - size_t (*long10_to_str)(struct charset_info_st *, char *to, size_t n, - int radix, long int val); - size_t (*longlong10_to_str)(struct charset_info_st *, char *to, size_t n, - int radix, longlong val); - - void (*fill)(struct charset_info_st *, char *to, size_t len, int fill); - - /* String-to-number conversion routines */ - long (*strntol)(struct charset_info_st *, const char *s, size_t l, - int base, char **e, int *err); - ulong (*strntoul)(struct charset_info_st *, const char *s, size_t l, - int base, char **e, int *err); - longlong (*strntoll)(struct charset_info_st *, const char *s, size_t l, - int base, char **e, int *err); - ulonglong (*strntoull)(struct charset_info_st *, const char *s, size_t l, - int base, char **e, int *err); - double (*strntod)(struct charset_info_st *, char *s, size_t l, char **e, - int *err); - longlong (*strtoll10)(struct charset_info_st *cs, - const char *nptr, char **endptr, int *error); - ulonglong (*strntoull10rnd)(struct charset_info_st *cs, - const char *str, size_t length, - int unsigned_fl, - char **endptr, int *error); - size_t (*scan)(struct charset_info_st *, const char *b, const char *e, - int sq); -} MY_CHARSET_HANDLER; - -extern MY_CHARSET_HANDLER my_charset_8bit_handler; -extern MY_CHARSET_HANDLER my_charset_ucs2_handler; - - -/* See strings/CHARSET_INFO.txt about information on this structure */ -typedef struct charset_info_st -{ - uint number; - uint primary_number; - uint binary_number; - uint state; - const char *csname; - const char *name; - const char *comment; - const char *tailoring; - uchar *ctype; - uchar *to_lower; - uchar *to_upper; - uchar *sort_order; - uint16 *contractions; - uint16 **sort_order_big; - uint16 *tab_to_uni; - MY_UNI_IDX *tab_from_uni; - MY_UNICASE_INFO **caseinfo; - uchar *state_map; - uchar *ident_map; - uint strxfrm_multiply; - uchar caseup_multiply; - uchar casedn_multiply; - uint mbminlen; - uint mbmaxlen; - uint16 min_sort_char; - uint16 max_sort_char; /* For LIKE optimization */ - uchar pad_char; - my_bool escape_with_backslash_is_dangerous; - uchar levels_for_compare; - uchar levels_for_order; - - MY_CHARSET_HANDLER *cset; - MY_COLLATION_HANDLER *coll; - -} CHARSET_INFO; -#define ILLEGAL_CHARSET_INFO_NUMBER (~0U) - - -extern MYSQL_PLUGIN_IMPORT CHARSET_INFO my_charset_bin; -extern CHARSET_INFO my_charset_big5_chinese_ci; -extern CHARSET_INFO my_charset_big5_bin; -extern CHARSET_INFO my_charset_cp932_japanese_ci; -extern CHARSET_INFO my_charset_cp932_bin; -extern CHARSET_INFO my_charset_cp1250_czech_ci; -extern CHARSET_INFO my_charset_eucjpms_japanese_ci; -extern CHARSET_INFO my_charset_eucjpms_bin; -extern CHARSET_INFO my_charset_euckr_korean_ci; -extern CHARSET_INFO my_charset_euckr_bin; -extern MYSQL_PLUGIN_IMPORT CHARSET_INFO my_charset_filename; -extern CHARSET_INFO my_charset_gb2312_chinese_ci; -extern CHARSET_INFO my_charset_gb2312_bin; -extern CHARSET_INFO my_charset_gbk_chinese_ci; -extern CHARSET_INFO my_charset_gbk_bin; -extern MYSQL_PLUGIN_IMPORT CHARSET_INFO my_charset_latin1; -extern CHARSET_INFO my_charset_latin1_german2_ci; -extern CHARSET_INFO my_charset_latin1_bin; -extern CHARSET_INFO my_charset_latin2_czech_ci; -extern CHARSET_INFO my_charset_sjis_japanese_ci; -extern CHARSET_INFO my_charset_sjis_bin; -extern CHARSET_INFO my_charset_tis620_thai_ci; -extern CHARSET_INFO my_charset_tis620_bin; -extern CHARSET_INFO my_charset_ucs2_general_ci; -extern CHARSET_INFO my_charset_ucs2_bin; -extern CHARSET_INFO my_charset_ucs2_unicode_ci; -extern CHARSET_INFO my_charset_ujis_japanese_ci; -extern CHARSET_INFO my_charset_ujis_bin; -extern CHARSET_INFO my_charset_utf16_bin; -extern CHARSET_INFO my_charset_utf16_general_ci; -extern CHARSET_INFO my_charset_utf16_unicode_ci; -extern CHARSET_INFO my_charset_utf32_bin; -extern CHARSET_INFO my_charset_utf32_general_ci; -extern CHARSET_INFO my_charset_utf32_unicode_ci; -extern CHARSET_INFO my_charset_utf8mb3_bin; -extern CHARSET_INFO my_charset_utf8mb3_general_ci; -extern CHARSET_INFO my_charset_utf8mb3_unicode_ci; -extern CHARSET_INFO my_charset_utf8mb4_bin; -extern MYSQL_PLUGIN_IMPORT CHARSET_INFO my_charset_utf8mb4_general_ci; -extern CHARSET_INFO my_charset_utf8mb4_unicode_ci; - -#define MY_UTF8MB3 "utf8mb3" -#define MY_UTF8MB4 "utf8" -#define my_charset_utf8_general_ci my_charset_utf8mb4_general_ci -#define my_charset_utf8_bin my_charset_utf8mb4_bin - - -/* declarations for simple charsets */ -extern size_t my_strnxfrm_simple(CHARSET_INFO *, - uchar *dst, size_t dstlen, uint nweights, - const uchar *src, size_t srclen, uint flags); -size_t my_strnxfrmlen_simple(CHARSET_INFO *, size_t); -extern int my_strnncoll_simple(CHARSET_INFO *, const uchar *, size_t, - const uchar *, size_t, my_bool); - -extern int my_strnncollsp_simple(CHARSET_INFO *, const uchar *, size_t, - const uchar *, size_t, - my_bool diff_if_only_endspace_difference); - -extern void my_hash_sort_simple(CHARSET_INFO *cs, - const uchar *key, size_t len, - ulong *nr1, ulong *nr2); - -extern size_t my_lengthsp_8bit(CHARSET_INFO *cs, const char *ptr, size_t length); - -extern uint my_instr_simple(struct charset_info_st *, - const char *b, size_t b_length, - const char *s, size_t s_length, - my_match_t *match, uint nmatch); - - -/* Functions for 8bit */ -extern size_t my_caseup_str_8bit(CHARSET_INFO *, char *); -extern size_t my_casedn_str_8bit(CHARSET_INFO *, char *); -extern size_t my_caseup_8bit(CHARSET_INFO *, char *src, size_t srclen, - char *dst, size_t dstlen); -extern size_t my_casedn_8bit(CHARSET_INFO *, char *src, size_t srclen, - char *dst, size_t dstlen); - -extern int my_strcasecmp_8bit(CHARSET_INFO * cs, const char *, const char *); - -int my_mb_wc_8bit(CHARSET_INFO *cs,my_wc_t *wc, const uchar *s,const uchar *e); -int my_wc_mb_8bit(CHARSET_INFO *cs,my_wc_t wc, uchar *s, uchar *e); - -int my_mb_ctype_8bit(CHARSET_INFO *,int *, const uchar *,const uchar *); -int my_mb_ctype_mb(CHARSET_INFO *,int *, const uchar *,const uchar *); - -size_t my_scan_8bit(CHARSET_INFO *cs, const char *b, const char *e, int sq); - -size_t my_snprintf_8bit(struct charset_info_st *, char *to, size_t n, - const char *fmt, ...) - ATTRIBUTE_FORMAT(printf, 4, 5); - -long my_strntol_8bit(CHARSET_INFO *, const char *s, size_t l, int base, - char **e, int *err); -ulong my_strntoul_8bit(CHARSET_INFO *, const char *s, size_t l, int base, - char **e, int *err); -longlong my_strntoll_8bit(CHARSET_INFO *, const char *s, size_t l, int base, - char **e, int *err); -ulonglong my_strntoull_8bit(CHARSET_INFO *, const char *s, size_t l, int base, - char **e, int *err); -double my_strntod_8bit(CHARSET_INFO *, char *s, size_t l,char **e, - int *err); -size_t my_long10_to_str_8bit(CHARSET_INFO *, char *to, size_t l, int radix, - long int val); -size_t my_longlong10_to_str_8bit(CHARSET_INFO *, char *to, size_t l, int radix, - longlong val); - -longlong my_strtoll10_8bit(CHARSET_INFO *cs, - const char *nptr, char **endptr, int *error); -longlong my_strtoll10_ucs2(CHARSET_INFO *cs, - const char *nptr, char **endptr, int *error); - -ulonglong my_strntoull10rnd_8bit(CHARSET_INFO *cs, - const char *str, size_t length, int - unsigned_fl, char **endptr, int *error); -ulonglong my_strntoull10rnd_ucs2(CHARSET_INFO *cs, - const char *str, size_t length, - int unsigned_fl, char **endptr, int *error); - -void my_fill_8bit(CHARSET_INFO *cs, char* to, size_t l, int fill); - -my_bool my_like_range_simple(CHARSET_INFO *cs, - const char *ptr, size_t ptr_length, - pbool escape, pbool w_one, pbool w_many, - size_t res_length, - char *min_str, char *max_str, - size_t *min_length, size_t *max_length); - -my_bool my_like_range_mb(CHARSET_INFO *cs, - const char *ptr, size_t ptr_length, - pbool escape, pbool w_one, pbool w_many, - size_t res_length, - char *min_str, char *max_str, - size_t *min_length, size_t *max_length); - -my_bool my_like_range_ucs2(CHARSET_INFO *cs, - const char *ptr, size_t ptr_length, - pbool escape, pbool w_one, pbool w_many, - size_t res_length, - char *min_str, char *max_str, - size_t *min_length, size_t *max_length); - -my_bool my_like_range_utf16(CHARSET_INFO *cs, - const char *ptr, size_t ptr_length, - pbool escape, pbool w_one, pbool w_many, - size_t res_length, - char *min_str, char *max_str, - size_t *min_length, size_t *max_length); - -my_bool my_like_range_utf32(CHARSET_INFO *cs, - const char *ptr, size_t ptr_length, - pbool escape, pbool w_one, pbool w_many, - size_t res_length, - char *min_str, char *max_str, - size_t *min_length, size_t *max_length); - - -int my_wildcmp_8bit(CHARSET_INFO *, - const char *str,const char *str_end, - const char *wildstr,const char *wildend, - int escape, int w_one, int w_many); - -int my_wildcmp_bin(CHARSET_INFO *, - const char *str,const char *str_end, - const char *wildstr,const char *wildend, - int escape, int w_one, int w_many); - -size_t my_numchars_8bit(CHARSET_INFO *, const char *b, const char *e); -size_t my_numcells_8bit(CHARSET_INFO *, const char *b, const char *e); -size_t my_charpos_8bit(CHARSET_INFO *, const char *b, const char *e, size_t pos); -size_t my_well_formed_len_8bit(CHARSET_INFO *, const char *b, const char *e, - size_t pos, int *error); -uint my_mbcharlen_8bit(CHARSET_INFO *, uint c); - - -/* Functions for multibyte charsets */ -extern size_t my_caseup_str_mb(CHARSET_INFO *, char *); -extern size_t my_casedn_str_mb(CHARSET_INFO *, char *); -extern size_t my_caseup_mb(CHARSET_INFO *, char *src, size_t srclen, - char *dst, size_t dstlen); -extern size_t my_casedn_mb(CHARSET_INFO *, char *src, size_t srclen, - char *dst, size_t dstlen); -extern int my_strcasecmp_mb(CHARSET_INFO * cs,const char *, const char *); - -int my_wildcmp_mb(CHARSET_INFO *, - const char *str,const char *str_end, - const char *wildstr,const char *wildend, - int escape, int w_one, int w_many); -size_t my_numchars_mb(CHARSET_INFO *, const char *b, const char *e); -size_t my_numcells_mb(CHARSET_INFO *, const char *b, const char *e); -size_t my_charpos_mb(CHARSET_INFO *, const char *b, const char *e, size_t pos); -size_t my_well_formed_len_mb(CHARSET_INFO *, const char *b, const char *e, - size_t pos, int *error); -uint my_instr_mb(struct charset_info_st *, - const char *b, size_t b_length, - const char *s, size_t s_length, - my_match_t *match, uint nmatch); - -int my_strnncoll_mb_bin(CHARSET_INFO * cs, - const uchar *s, size_t slen, - const uchar *t, size_t tlen, - my_bool t_is_prefix); - -int my_strnncollsp_mb_bin(CHARSET_INFO *cs, - const uchar *a, size_t a_length, - const uchar *b, size_t b_length, - my_bool diff_if_only_endspace_difference); - -int my_wildcmp_mb_bin(CHARSET_INFO *cs, - const char *str,const char *str_end, - const char *wildstr,const char *wildend, - int escape, int w_one, int w_many); - -int my_strcasecmp_mb_bin(CHARSET_INFO * cs __attribute__((unused)), - const char *s, const char *t); - -void my_hash_sort_mb_bin(CHARSET_INFO *cs __attribute__((unused)), - const uchar *key, size_t len,ulong *nr1, ulong *nr2); - -size_t my_strnxfrm_mb(CHARSET_INFO *, - uchar *dst, size_t dstlen, uint nweights, - const uchar *src, size_t srclen, uint flags); - -size_t my_strnxfrm_unicode(CHARSET_INFO *, - uchar *dst, size_t dstlen, uint nweights, - const uchar *src, size_t srclen, uint flags); - -int my_wildcmp_unicode(CHARSET_INFO *cs, - const char *str, const char *str_end, - const char *wildstr, const char *wildend, - int escape, int w_one, int w_many, - MY_UNICASE_INFO **weights); - -extern my_bool my_parse_charset_xml(const char *bug, size_t len, - int (*add)(CHARSET_INFO *cs)); -extern char *my_strchr(CHARSET_INFO *cs, const char *str, const char *end, - pchar c); - -my_bool my_propagate_simple(CHARSET_INFO *cs, const uchar *str, size_t len); -my_bool my_propagate_complex(CHARSET_INFO *cs, const uchar *str, size_t len); - - -uint my_string_repertoire(CHARSET_INFO *cs, const char *str, ulong len); -my_bool my_charset_is_ascii_based(CHARSET_INFO *cs); -my_bool my_charset_is_8bit_pure_ascii(CHARSET_INFO *cs); -uint my_charset_repertoire(CHARSET_INFO *cs); - - -uint my_strxfrm_flag_normalize(uint flags, uint nlevels); -void my_strxfrm_desc_and_reverse(uchar *str, uchar *strend, - uint flags, uint level); -size_t my_strxfrm_pad_desc_and_reverse(CHARSET_INFO *cs, - uchar *str, uchar *frmend, uchar *strend, - uint nweights, uint flags, uint level); - -my_bool my_charset_is_ascii_compatible(CHARSET_INFO *cs); - -#define _MY_U 01 /* Upper case */ -#define _MY_L 02 /* Lower case */ -#define _MY_NMR 04 /* Numeral (digit) */ -#define _MY_SPC 010 /* Spacing character */ -#define _MY_PNT 020 /* Punctuation */ -#define _MY_CTR 040 /* Control character */ -#define _MY_B 0100 /* Blank */ -#define _MY_X 0200 /* heXadecimal digit */ - - -#define my_isascii(c) (!((c) & ~0177)) -#define my_toascii(c) ((c) & 0177) -#define my_tocntrl(c) ((c) & 31) -#define my_toprint(c) ((c) | 64) -#define my_toupper(s,c) (char) ((s)->to_upper[(uchar) (c)]) -#define my_tolower(s,c) (char) ((s)->to_lower[(uchar) (c)]) -#define my_isalpha(s, c) (((s)->ctype+1)[(uchar) (c)] & (_MY_U | _MY_L)) -#define my_isupper(s, c) (((s)->ctype+1)[(uchar) (c)] & _MY_U) -#define my_islower(s, c) (((s)->ctype+1)[(uchar) (c)] & _MY_L) -#define my_isdigit(s, c) (((s)->ctype+1)[(uchar) (c)] & _MY_NMR) -#define my_isxdigit(s, c) (((s)->ctype+1)[(uchar) (c)] & _MY_X) -#define my_isalnum(s, c) (((s)->ctype+1)[(uchar) (c)] & (_MY_U | _MY_L | _MY_NMR)) -#define my_isspace(s, c) (((s)->ctype+1)[(uchar) (c)] & _MY_SPC) -#define my_ispunct(s, c) (((s)->ctype+1)[(uchar) (c)] & _MY_PNT) -#define my_isprint(s, c) (((s)->ctype+1)[(uchar) (c)] & (_MY_PNT | _MY_U | _MY_L | _MY_NMR | _MY_B)) -#define my_isgraph(s, c) (((s)->ctype+1)[(uchar) (c)] & (_MY_PNT | _MY_U | _MY_L | _MY_NMR)) -#define my_iscntrl(s, c) (((s)->ctype+1)[(uchar) (c)] & _MY_CTR) - -/* Some macros that should be cleaned up a little */ -#define my_isvar(s,c) (my_isalnum(s,c) || (c) == '_') -#define my_isvar_start(s,c) (my_isalpha(s,c) || (c) == '_') - -#define my_binary_compare(s) ((s)->state & MY_CS_BINSORT) -#define use_strnxfrm(s) ((s)->state & MY_CS_STRNXFRM) -#define my_strnxfrm(cs, d, dl, s, sl) \ - ((cs)->coll->strnxfrm((cs), (d), (dl), (dl), (s), (sl), MY_STRXFRM_PAD_WITH_SPACE)) -#define my_strnncoll(s, a, b, c, d) ((s)->coll->strnncoll((s), (a), (b), (c), (d), 0)) -#define my_like_range(s, a, b, c, d, e, f, g, h, i, j) \ - ((s)->coll->like_range((s), (a), (b), (c), (d), (e), (f), (g), (h), (i), (j))) -#define my_wildcmp(cs,s,se,w,we,e,o,m) ((cs)->coll->wildcmp((cs),(s),(se),(w),(we),(e),(o),(m))) -#define my_strcasecmp(s, a, b) ((s)->coll->strcasecmp((s), (a), (b))) -#define my_charpos(cs, b, e, num) (cs)->cset->charpos((cs), (const char*) (b), (const char *)(e), (num)) - - -#define use_mb(s) ((s)->cset->ismbchar != NULL) -#define my_ismbchar(s, a, b) ((s)->cset->ismbchar((s), (a), (b))) -#ifdef USE_MB -#define my_mbcharlen(s, a) ((s)->cset->mbcharlen((s),(a))) -#else -#define my_mbcharlen(s, a) 1 -#endif - -#define my_caseup_str(s, a) ((s)->cset->caseup_str((s), (a))) -#define my_casedn_str(s, a) ((s)->cset->casedn_str((s), (a))) -#define my_strntol(s, a, b, c, d, e) ((s)->cset->strntol((s),(a),(b),(c),(d),(e))) -#define my_strntoul(s, a, b, c, d, e) ((s)->cset->strntoul((s),(a),(b),(c),(d),(e))) -#define my_strntoll(s, a, b, c, d, e) ((s)->cset->strntoll((s),(a),(b),(c),(d),(e))) -#define my_strntoull(s, a, b, c,d, e) ((s)->cset->strntoull((s),(a),(b),(c),(d),(e))) -#define my_strntod(s, a, b, c, d) ((s)->cset->strntod((s),(a),(b),(c),(d))) - - -/* XXX: still need to take care of this one */ -#ifdef MY_CHARSET_TIS620 -#error The TIS620 charset is broken at the moment. Tell tim to fix it. -#define USE_TIS620 -#include "t_ctype.h" -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* _m_ctype_h */ diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/m_string.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/m_string.h deleted file mode 100644 index bb8bad4..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/m_string.h +++ /dev/null @@ -1,393 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* There may be prolems include all of theese. Try to test in - configure with ones are needed? */ - -/* This is needed for the definitions of strchr... on solaris */ - -#ifndef _m_string_h -#define _m_string_h -#ifndef __USE_GNU -#define __USE_GNU /* We want to use stpcpy */ -#endif -#if defined(HAVE_STRINGS_H) -#include -#endif -#if defined(HAVE_STRING_H) -#include -#endif - -/* need by my_vsnprintf */ -#include - -#ifdef _AIX -#undef HAVE_BCMP -#endif - -/* This is needed for the definitions of bzero... on solaris */ -#if defined(HAVE_STRINGS_H) -#include -#endif - -/* This is needed for the definitions of memcpy... on solaris */ -#if defined(HAVE_MEMORY_H) && !defined(__cplusplus) -#include -#endif - -#if !defined(HAVE_MEMCPY) && !defined(HAVE_MEMMOVE) -# define memcpy(d, s, n) bcopy ((s), (d), (n)) -# define memset(A,C,B) bfill((A),(B),(C)) -# define memmove(d, s, n) bmove ((d), (s), (n)) -#elif defined(HAVE_MEMMOVE) -# define bmove(d, s, n) memmove((d), (s), (n)) -#else -# define memmove(d, s, n) bmove((d), (s), (n)) /* our bmove */ -#endif - -/* Unixware 7 */ -#if !defined(HAVE_BFILL) -# define bfill(A,B,C) memset((A),(C),(B)) -# define bmove_align(A,B,C) memcpy((A),(B),(C)) -#endif - -#if !defined(HAVE_BCMP) -# define bcopy(s, d, n) memcpy((d), (s), (n)) -# define bcmp(A,B,C) memcmp((A),(B),(C)) -# define bzero(A,B) memset((A),0,(B)) -# define bmove_align(A,B,C) memcpy((A),(B),(C)) -#endif - -#if defined(__cplusplus) -extern "C" { -#endif - -/* - my_str_malloc() and my_str_free() are assigned to implementations in - strings/alloc.c, but can be overridden in the calling program. - */ -extern void *(*my_str_malloc)(size_t); -extern void (*my_str_free)(void *); - -#if defined(HAVE_STPCPY) -#define strmov(A,B) stpcpy((A),(B)) -#ifndef stpcpy -extern char *stpcpy(char *, const char *); /* For AIX with gcc 2.95.3 */ -#endif -#endif - -/* Declared in int2str() */ -extern char NEAR _dig_vec_upper[]; -extern char NEAR _dig_vec_lower[]; - -#ifdef BAD_STRING_COMPILER -#define strmov(A,B) (memccpy(A,B,0,INT_MAX)-1) -#else -#define strmov_overlapp(A,B) strmov(A,B) -#define strmake_overlapp(A,B,C) strmake(A,B,C) -#endif - -#ifdef BAD_MEMCPY /* Problem with gcc on Alpha */ -#define memcpy_fixed(A,B,C) bmove((A),(B),(C)) -#else -#define memcpy_fixed(A,B,C) memcpy((A),(B),(C)) -#endif - -#if (!defined(USE_BMOVE512) || defined(HAVE_purify)) && !defined(bmove512) -#define bmove512(A,B,C) memcpy(A,B,C) -#endif - - /* Prototypes for string functions */ - -#if !defined(bfill) && !defined(HAVE_BFILL) -extern void bfill(uchar *dst,size_t len,pchar fill); -#endif - -#if !defined(bzero) && !defined(HAVE_BZERO) -extern void bzero(uchar * dst,size_t len); -#endif - -#if !defined(bcmp) && !defined(HAVE_BCMP) -extern size_t bcmp(const uchar *s1,const uchar *s2,size_t len); -#endif -#ifdef HAVE_purify -extern size_t my_bcmp(const uchar *s1,const uchar *s2,size_t len); -#undef bcmp -#define bcmp(A,B,C) my_bcmp((A),(B),(C)) -#define bzero_if_purify(A,B) bzero(A,B) -#else -#define bzero_if_purify(A,B) -#endif /* HAVE_purify */ - -#if defined(_lint) || defined(FORCE_INIT_OF_VARS) -#define LINT_INIT_STRUCT(var) bzero(&var, sizeof(var)) /* No uninitialize-warning */ -#else -#define LINT_INIT_STRUCT(var) -#endif - -#ifndef bmove512 -extern void bmove512(uchar *dst,const uchar *src,size_t len); -#endif - -#if !defined(HAVE_BMOVE) && !defined(bmove) -extern void bmove(uuchar *dst, const uchar *src,size_t len); -#endif - -extern void bmove_upp(uchar *dst,const uchar *src,size_t len); -extern void bchange(uchar *dst,size_t old_len,const uchar *src, - size_t new_len,size_t tot_len); -extern void strappend(char *s,size_t len,pchar fill); -extern char *strend(const char *s); -extern char *strcend(const char *, pchar); -extern char *strfield(char *src,int fields,int chars,int blanks, - int tabch); -extern char *strfill(char * s,size_t len,pchar fill); -extern size_t strinstr(const char *str,const char *search); -extern size_t r_strinstr(const char *str, size_t from, const char *search); -extern char *strkey(char *dst,char *head,char *tail,char *flags); -extern char *strmake(char *dst,const char *src,size_t length); -#ifndef strmake_overlapp -extern char *strmake_overlapp(char *dst,const char *src, size_t length); -#endif - -#ifndef strmov -extern char *strmov(char *dst,const char *src); -#endif -extern char *strnmov(char *dst,const char *src,size_t n); -extern char *strsuff(const char *src,const char *suffix); -extern char *strcont(const char *src,const char *set); -extern char *strxcat _VARARGS((char *dst,const char *src, ...)); -extern char *strxmov _VARARGS((char *dst,const char *src, ...)); -extern char *strxcpy _VARARGS((char *dst,const char *src, ...)); -extern char *strxncat _VARARGS((char *dst,size_t len, const char *src, ...)); -extern char *strxnmov _VARARGS((char *dst,size_t len, const char *src, ...)); -extern char *strxncpy _VARARGS((char *dst,size_t len, const char *src, ...)); - -/* Prototypes of normal stringfunctions (with may ours) */ - -#ifdef WANT_STRING_PROTOTYPES -extern char *strcat(char *, const char *); -extern char *strchr(const char *, pchar); -extern char *strrchr(const char *, pchar); -extern char *strcpy(char *, const char *); -extern int strcmp(const char *, const char *); -#ifndef __GNUC__ -extern size_t strlen(const char *); -#endif -#endif -#ifndef HAVE_STRNLEN -extern size_t strnlen(const char *s, size_t n); -#endif - -#if !defined(__cplusplus) -#ifndef HAVE_STRPBRK -extern char *strpbrk(const char *, const char *); -#endif -#ifndef HAVE_STRSTR -extern char *strstr(const char *, const char *); -#endif -#endif -extern int is_prefix(const char *, const char *); - -/* Conversion routines */ -typedef enum { - MY_GCVT_ARG_FLOAT, - MY_GCVT_ARG_DOUBLE -} my_gcvt_arg_type; - -double my_strtod(const char *str, char **end, int *error); -double my_atof(const char *nptr); -size_t my_fcvt(double x, int precision, char *to, my_bool *error); -size_t my_gcvt(double x, my_gcvt_arg_type type, int width, char *to, - my_bool *error); - -#define NOT_FIXED_DEC 31 - -/* - The longest string my_fcvt can return is 311 + "precision" bytes. - Here we assume that we never cal my_fcvt() with precision >= NOT_FIXED_DEC - (+ 1 byte for the terminating '\0'). -*/ -#define FLOATING_POINT_BUFFER (311 + NOT_FIXED_DEC) - -/* - We want to use the 'e' format in some cases even if we have enough space - for the 'f' one just to mimic sprintf("%.15g") behavior for large integers, - and to improve it for numbers < 10^(-4). - That is, for |x| < 1 we require |x| >= 10^(-15), and for |x| > 1 we require - it to be integer and be <= 10^DBL_DIG for the 'f' format to be used. - We don't lose precision, but make cases like "1e200" or "0.00001" look nicer. -*/ -#define MAX_DECPT_FOR_F_FORMAT DBL_DIG - -/* - The maximum possible field width for my_gcvt() conversion. - (DBL_DIG + 2) significant digits + sign + "." + ("e-NNN" or - MAX_DECPT_FOR_F_FORMAT zeros for cases when |x|<1 and the 'f' format is used). -*/ -#define MY_GCVT_MAX_FIELD_WIDTH (DBL_DIG + 4 + max(5, MAX_DECPT_FOR_F_FORMAT)) - - -extern char *llstr(longlong value,char *buff); -extern char *ullstr(longlong value,char *buff); -#ifndef HAVE_STRTOUL -extern long strtol(const char *str, char **ptr, int base); -extern ulong strtoul(const char *str, char **ptr, int base); -#endif - -extern char *int2str(long val, char *dst, int radix, int upcase); -extern char *int10_to_str(long val,char *dst,int radix); -extern char *str2int(const char *src,int radix,long lower,long upper, - long *val); -longlong my_strtoll10(const char *nptr, char **endptr, int *error); -#if SIZEOF_LONG == SIZEOF_LONG_LONG -#define ll2str(A,B,C,D) int2str((A),(B),(C),(D)) -#define longlong2str(A,B,C) int2str((A),(B),(C),1) -#define longlong10_to_str(A,B,C) int10_to_str((A),(B),(C)) -#undef strtoll -#define strtoll(A,B,C) strtol((A),(B),(C)) -#define strtoull(A,B,C) strtoul((A),(B),(C)) -#ifndef HAVE_STRTOULL -#define HAVE_STRTOULL -#endif -#ifndef HAVE_STRTOLL -#define HAVE_STRTOLL -#endif -#else -#ifdef HAVE_LONG_LONG -extern char *ll2str(longlong val,char *dst,int radix, int upcase); -#define longlong2str(A,B,C) ll2str((A),(B),(C),1) -extern char *longlong10_to_str(longlong val,char *dst,int radix); -#if (!defined(HAVE_STRTOULL) || defined(NO_STRTOLL_PROTO)) -extern longlong strtoll(const char *str, char **ptr, int base); -extern ulonglong strtoull(const char *str, char **ptr, int base); -#endif -#endif -#endif - -/* my_vsnprintf.c */ - -extern size_t my_vsnprintf(char *str, size_t n, - const char *format, va_list ap); -extern size_t my_snprintf(char *to, size_t n, const char *fmt, ...) - ATTRIBUTE_FORMAT(printf, 3, 4); - -#if defined(__cplusplus) -} -#endif - -/* - LEX_STRING -- a pair of a C-string and its length. - (it's part of the plugin API as a MYSQL_LEX_STRING) -*/ - -typedef struct st_mysql_lex_string LEX_STRING; - -#define STRING_WITH_LEN(X) (X), ((size_t) (sizeof(X) - 1)) -#define USTRING_WITH_LEN(X) ((uchar*) X), ((size_t) (sizeof(X) - 1)) -#define C_STRING_WITH_LEN(X) ((char *) (X)), ((size_t) (sizeof(X) - 1)) - -/* A variant with const */ -struct st_mysql_const_lex_string -{ - const char *str; - size_t length; -}; -typedef struct st_mysql_const_lex_string LEX_CSTRING; - -/* A variant with const and unsigned */ -struct st_mysql_const_unsigned_lex_string -{ - const uchar *str; - size_t length; -}; -typedef struct st_mysql_const_unsigned_lex_string LEX_CUSTRING; - -/* SPACE_INT is a word that contains only spaces */ -#if SIZEOF_INT == 4 -#define SPACE_INT 0x20202020 -#elif SIZEOF_INT == 8 -#define SPACE_INT 0x2020202020202020 -#else -#error define the appropriate constant for a word full of spaces -#endif - -/** - Skip trailing space. - - On most systems reading memory in larger chunks (ideally equal to the size of - the chinks that the machine physically reads from memory) causes fewer memory - access loops and hence increased performance. - This is why the 'int' type is used : it's closest to that (according to how - it's defined in C). - So when we determine the amount of whitespace at the end of a string we do - the following : - 1. We divide the string into 3 zones : - a) from the start of the string (__start) to the first multiple - of sizeof(int) (__start_words) - b) from the end of the string (__end) to the last multiple of sizeof(int) - (__end_words) - c) a zone that is aligned to sizeof(int) and can be safely accessed - through an int * - 2. We start comparing backwards from (c) char-by-char. If all we find is - space then we continue - 3. If there are elements in zone (b) we compare them as unsigned ints to a - int mask (SPACE_INT) consisting of all spaces - 4. Finally we compare the remaining part (a) of the string char by char. - This covers for the last non-space unsigned int from 3. (if any) - - This algorithm works well for relatively larger strings, but it will slow - the things down for smaller strings (because of the additional calculations - and checks compared to the naive method). Thus the barrier of length 20 - is added. - - @param ptr pointer to the input string - @param len the length of the string - @return the last non-space character -*/ - -static inline const uchar *skip_trailing_space(const uchar *ptr,size_t len) -{ - const uchar *end= ptr + len; - - if (len > 20) - { - const uchar *end_words= (const uchar *)(intptr) - (((ulonglong)(intptr)end) / SIZEOF_INT * SIZEOF_INT); - const uchar *start_words= (const uchar *)(intptr) - ((((ulonglong)(intptr)ptr) + SIZEOF_INT - 1) / SIZEOF_INT * SIZEOF_INT); - - DBUG_ASSERT(((ulonglong)(intptr)ptr) >= SIZEOF_INT); - if (end_words > ptr) - { - while (end > end_words && end[-1] == 0x20) - end--; - if (end[-1] == 0x20 && start_words < end_words) - while (end > start_words && ((unsigned *)end)[-1] == SPACE_INT) - end -= SIZEOF_INT; - } - } - while (end > ptr && end[-1] == 0x20) - end--; - return (end); -} - -#ifdef SAFEMALLOC -#define TRASH(A,B) bfill(A, B, 0x8F) -#else -#define TRASH(A,B) /* nothing */ -#endif /* SAFEMALLOC */ - -#endif /* _m_string_h */ diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_aes.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_aes.h deleted file mode 100644 index 8ea128c..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_aes.h +++ /dev/null @@ -1,65 +0,0 @@ -/* Copyright (C) 2002 MySQL AB - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - - -/* Header file for my_aes.c */ -/* Wrapper to give simple interface for MySQL to AES standard encryption */ - -#include "mysys/rijndael.h" - -C_MODE_START - -#define AES_KEY_LENGTH 128 /* Must be 128 192 or 256 */ - -/* - my_aes_encrypt - Crypt buffer with AES encryption algorithm. - source - Pointer to data for encryption - source_length - size of encryption data - dest - buffer to place encrypted data (must be large enough) - key - Key to be used for encryption - kel_length - Length of the key. Will handle keys of any length - - returns - size of encrypted data, or negative in case of error. -*/ - -int my_aes_encrypt(const char *source, int source_length, char *dest, - const char *key, int key_length); - -/* - my_aes_decrypt - DeCrypt buffer with AES encryption algorithm. - source - Pointer to data for decryption - source_length - size of encrypted data - dest - buffer to place decrypted data (must be large enough) - key - Key to be used for decryption - kel_length - Length of the key. Will handle keys of any length - - returns - size of original data, or negative in case of error. -*/ - - -int my_aes_decrypt(const char *source, int source_length, char *dest, - const char *key, int key_length); - -/* - my_aes_get_size - get size of buffer which will be large enough for encrypted - data - source_length - length of data to be encrypted - - returns - size of buffer required to store encrypted data -*/ - -int my_aes_get_size(int source_length); - -C_MODE_END diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_alarm.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_alarm.h deleted file mode 100644 index dd2d564..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_alarm.h +++ /dev/null @@ -1,58 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - File to include when we want to use alarm or a loop_counter to display - some information when a program is running -*/ -#ifndef _my_alarm_h -#define _my_alarm_h -#ifdef __cplusplus -extern "C" { -#endif - -extern int volatile my_have_got_alarm; -extern ulong my_time_to_wait_for_lock; - -#if defined(HAVE_ALARM) && !defined(NO_ALARM_LOOP) -#include -#define ALARM_VARIABLES uint alarm_old=0; \ - sig_return alarm_signal=0 -#define ALARM_INIT my_have_got_alarm=0 ; \ - alarm_old=(uint) alarm(MY_HOW_OFTEN_TO_ALARM); \ - alarm_signal=signal(SIGALRM,my_set_alarm_variable); -#define ALARM_END (void) signal(SIGALRM,alarm_signal); \ - (void) alarm(alarm_old); -#define ALARM_TEST my_have_got_alarm -#ifdef DONT_REMEMBER_SIGNAL -#define ALARM_REINIT (void) alarm(MY_HOW_OFTEN_TO_ALARM); \ - (void) signal(SIGALRM,my_set_alarm_variable);\ - my_have_got_alarm=0; -#else -#define ALARM_REINIT (void) alarm((uint) MY_HOW_OFTEN_TO_ALARM); \ - my_have_got_alarm=0; -#endif /* DONT_REMEMBER_SIGNAL */ -#else -#define ALARM_VARIABLES long alarm_pos=0,alarm_end_pos=MY_HOW_OFTEN_TO_WRITE-1 -#define ALARM_INIT -#define ALARM_END -#define ALARM_TEST (alarm_pos++ >= alarm_end_pos) -#define ALARM_REINIT alarm_end_pos+=MY_HOW_OFTEN_TO_WRITE -#endif /* HAVE_ALARM */ - -#ifdef __cplusplus -} -#endif -#endif diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_alloc.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_alloc.h deleted file mode 100644 index 6ade4d0..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_alloc.h +++ /dev/null @@ -1,51 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - Data structures for mysys/my_alloc.c (root memory allocator) -*/ - -#ifndef _my_alloc_h -#define _my_alloc_h - -#define ALLOC_MAX_BLOCK_TO_DROP 4096 -#define ALLOC_MAX_BLOCK_USAGE_BEFORE_DROP 10 - -typedef struct st_used_mem -{ /* struct for once_alloc (block) */ - struct st_used_mem *next; /* Next block in use */ - size_t left; /* memory left in block */ - size_t size; /* size of block */ -} USED_MEM; - - -typedef struct st_mem_root -{ - USED_MEM *free; /* blocks with free memory in it */ - USED_MEM *used; /* blocks almost without free memory */ - USED_MEM *pre_alloc; /* preallocated block */ - /* if block have less memory it will be put in 'used' list */ - size_t min_malloc; - size_t block_size; /* initial block size */ - unsigned int block_num; /* allocated blocks counter */ - /* - first free block in queue test counter (if it exceed - MAX_BLOCK_USAGE_BEFORE_DROP block will be dropped in 'used' list) - */ - unsigned int first_block_usage; - - void (*error_handler)(void); -} MEM_ROOT; -#endif diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_atomic.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_atomic.h deleted file mode 100644 index 40b8895..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_atomic.h +++ /dev/null @@ -1,254 +0,0 @@ -/* Copyright (C) 2006 MySQL AB - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - This header defines five atomic operations: - - my_atomic_add#(&var, what) - add 'what' to *var, and return the old value of *var - - my_atomic_fas#(&var, what) - 'Fetch And Store' - store 'what' in *var, and return the old value of *var - - my_atomic_cas#(&var, &old, new) - 'Compare And Swap' - if *var is equal to *old, then store 'new' in *var, and return TRUE - otherwise store *var in *old, and return FALSE - - my_atomic_load#(&var) - return *var - - my_atomic_store#(&var, what) - store 'what' in *var - - '#' is substituted by a size suffix - 8, 16, 32, or ptr - (e.g. my_atomic_add8, my_atomic_fas32, my_atomic_casptr). - - NOTE This operations are not always atomic, so they always must be - enclosed in my_atomic_rwlock_rdlock(lock)/my_atomic_rwlock_rdunlock(lock) - or my_atomic_rwlock_wrlock(lock)/my_atomic_rwlock_wrunlock(lock). - Hint: if a code block makes intensive use of atomic ops, it make sense - to take/release rwlock once for the whole block, not for every statement. - - On architectures where these operations are really atomic, rwlocks will - be optimized away. - 8- and 16-bit atomics aren't implemented for windows (see generic-msvc.h), - but can be added, if necessary. -*/ - -#ifndef my_atomic_rwlock_init - -#define intptr void * - -#ifndef MY_ATOMIC_MODE_RWLOCKS -#include "atomic/nolock.h" -#endif - -#ifndef make_atomic_cas_body -/* nolock.h was not able to generate even a CAS function, fall back */ -#include "atomic/rwlock.h" -#else -/* define missing functions by using the already generated ones */ -#ifndef make_atomic_add_body -#define make_atomic_add_body(S) \ - int ## S tmp=*a; \ - while (!my_atomic_cas ## S(a, &tmp, tmp+v)); \ - v=tmp; -#endif -#ifndef make_atomic_fas_body -#define make_atomic_fas_body(S) \ - int ## S tmp=*a; \ - while (!my_atomic_cas ## S(a, &tmp, v)); \ - v=tmp; -#endif -#ifndef make_atomic_load_body -#define make_atomic_load_body(S) \ - ret= 0; /* avoid compiler warning */ \ - (void)(my_atomic_cas ## S(a, &ret, ret)); -#endif -#ifndef make_atomic_store_body -#define make_atomic_store_body(S) \ - (void)(my_atomic_fas ## S (a, v)); -#endif -#endif - -/* - transparent_union doesn't work in g++ - Bug ? - - Darwin's gcc doesn't want to put pointers in a transparent_union - when built with -arch ppc64. Complains: - warning: 'transparent_union' attribute ignored -*/ -#if defined(__GNUC__) && !defined(__cplusplus) && \ - ! (defined(__APPLE__) && defined(_ARCH_PPC64)) -/* - we want to be able to use my_atomic_xxx functions with - both signed and unsigned integers. But gcc will issue a warning - "passing arg N of `my_atomic_XXX' as [un]signed due to prototype" - if the signedness of the argument doesn't match the prototype, or - "pointer targets in passing argument N of my_atomic_XXX differ in signedness" - if int* is used where uint* is expected (or vice versa). - Let's shut these warnings up -*/ -#define make_transparent_unions(S) \ - typedef union { \ - int ## S i; \ - uint ## S u; \ - } U_ ## S __attribute__ ((transparent_union)); \ - typedef union { \ - int ## S volatile *i; \ - uint ## S volatile *u; \ - } Uv_ ## S __attribute__ ((transparent_union)); -#define uintptr intptr -make_transparent_unions(8) -make_transparent_unions(16) -make_transparent_unions(32) -make_transparent_unions(ptr) -#undef uintptr -#undef make_transparent_unions -#define a U_a.i -#define cmp U_cmp.i -#define v U_v.i -#define set U_set.i -#else -#define U_32 int32 -#define U_ptr intptr -#define Uv_32 int32 -#define Uv_ptr intptr -#define U_a volatile *a -#define U_cmp *cmp -#define U_v v -#define U_set set -#endif /* __GCC__ transparent_union magic */ - -#ifdef HAVE_INLINE - -#define make_atomic_cas(S) \ -STATIC_INLINE int my_atomic_cas ## S(Uv_ ## S U_a, \ - Uv_ ## S U_cmp, U_ ## S U_set) \ -{ \ - int8 ret; \ - make_atomic_cas_body(S); \ - return ret; \ -} - -#define make_atomic_add(S) \ -STATIC_INLINE int ## S my_atomic_add ## S( \ - Uv_ ## S U_a, U_ ## S U_v) \ -{ \ - make_atomic_add_body(S); \ - return v; \ -} - -#define make_atomic_fas(S) \ -STATIC_INLINE int ## S my_atomic_fas ## S( \ - Uv_ ## S U_a, U_ ## S U_v) \ -{ \ - make_atomic_fas_body(S); \ - return v; \ -} - -#define make_atomic_load(S) \ -STATIC_INLINE int ## S my_atomic_load ## S(Uv_ ## S U_a) \ -{ \ - int ## S ret; \ - make_atomic_load_body(S); \ - return ret; \ -} - -#define make_atomic_store(S) \ -STATIC_INLINE void my_atomic_store ## S( \ - Uv_ ## S U_a, U_ ## S U_v) \ -{ \ - make_atomic_store_body(S); \ -} - -#else /* no inline functions */ - -#define make_atomic_add(S) \ -extern int ## S my_atomic_add ## S(Uv_ ## S U_a, U_ ## S U_v); - -#define make_atomic_fas(S) \ -extern int ## S my_atomic_fas ## S(Uv_ ## S U_a, U_ ## S U_v); - -#define make_atomic_cas(S) \ -extern int my_atomic_cas ## S(Uv_ ## S U_a, Uv_ ## S U_cmp, U_ ## S U_set); - -#define make_atomic_load(S) \ -extern int ## S my_atomic_load ## S(Uv_ ## S U_a); - -#define make_atomic_store(S) \ -extern void my_atomic_store ## S(Uv_ ## S U_a, U_ ## S U_v); - -#endif - -make_atomic_cas(32) -make_atomic_cas(ptr) - -make_atomic_add(32) - -make_atomic_load(32) -make_atomic_load(ptr) - -make_atomic_fas(32) -make_atomic_fas(ptr) - -make_atomic_store(32) -make_atomic_store(ptr) - -#ifdef _atomic_h_cleanup_ -#include _atomic_h_cleanup_ -#undef _atomic_h_cleanup_ -#endif - -#undef U_32 -#undef U_ptr -#undef a -#undef cmp -#undef v -#undef set -#undef U_a -#undef U_cmp -#undef U_v -#undef U_set -#undef make_atomic_add -#undef make_atomic_cas -#undef make_atomic_load -#undef make_atomic_store -#undef make_atomic_fas -#undef make_atomic_add_body -#undef make_atomic_cas_body -#undef make_atomic_load_body -#undef make_atomic_store_body -#undef make_atomic_fas_body -#undef intptr - -/* - the macro below defines (as an expression) the code that - will be run in spin-loops. Intel manuals recummend to have PAUSE there. - It is expected to be defined in include/atomic/ *.h files -*/ -#ifndef LF_BACKOFF -#define LF_BACKOFF (1) -#endif - -#define MY_ATOMIC_OK 0 -#define MY_ATOMIC_NOT_1CPU 1 -extern int my_atomic_initialize(); - -#endif - diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_attribute.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_attribute.h deleted file mode 100644 index 8309d85..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_attribute.h +++ /dev/null @@ -1,63 +0,0 @@ -/* Copyright (C) 2000-2003 MySQL AB - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - Helper macros used for setting different __attributes__ - on functions in a portable fashion -*/ - -#ifndef _my_attribute_h -#define _my_attribute_h - -/* - Disable __attribute__() on gcc < 2.7, g++ < 3.4, and non-gcc compilers. - Some forms of __attribute__ are actually supported in earlier versions of - g++, but we just disable them all because we only use them to generate - compilation warnings. -*/ -#ifndef __attribute__ -# if !defined(__GNUC__) -# define __attribute__(A) -# elif GCC_VERSION < 2008 -# define __attribute__(A) -# elif defined(__cplusplus) && GCC_VERSION < 3004 -# define __attribute__(A) -# endif -#endif - -/* - __attribute__((format(...))) is only supported in gcc >= 2.8 and g++ >= 3.4 - But that's already covered by the __attribute__ tests above, so this is - just a convenience macro. -*/ -#ifndef ATTRIBUTE_FORMAT -# define ATTRIBUTE_FORMAT(style, m, n) __attribute__((format(style, m, n))) -#endif - -/* - - __attribute__((format(...))) on a function pointer is not supported - until gcc 3.1 -*/ -#ifndef ATTRIBUTE_FORMAT_FPTR -# if (GCC_VERSION >= 3001) -# define ATTRIBUTE_FORMAT_FPTR(style, m, n) ATTRIBUTE_FORMAT(style, m, n) -# else -# define ATTRIBUTE_FORMAT_FPTR(style, m, n) -# endif /* GNUC >= 3.1 */ -#endif - - -#endif diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_base.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_base.h deleted file mode 100644 index e228b39..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_base.h +++ /dev/null @@ -1,626 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* This file includes constants used with all databases */ - -#ifndef _my_base_h -#define _my_base_h - -#ifndef stdin /* Included first in handler */ -#define CHSIZE_USED -#include -#include /* This includes types */ -#include -#include -#include - -#ifndef EOVERFLOW -#define EOVERFLOW 84 -#endif - -#if !defined(USE_MY_FUNC) && !defined(THREAD) -#include /* For faster code, after test */ -#endif /* USE_MY_FUNC */ -#endif /* stdin */ -#include - -/* The following is bits in the flag parameter to ha_open() */ - -#define HA_OPEN_ABORT_IF_LOCKED 0 /* default */ -#define HA_OPEN_WAIT_IF_LOCKED 1 -#define HA_OPEN_IGNORE_IF_LOCKED 2 -#define HA_OPEN_TMP_TABLE 4 /* Table is a temp table */ -#define HA_OPEN_DELAY_KEY_WRITE 8 /* Don't update index */ -#define HA_OPEN_ABORT_IF_CRASHED 16 -#define HA_OPEN_FOR_REPAIR 32 /* open even if crashed */ -#define HA_OPEN_FROM_SQL_LAYER 64 -#define HA_OPEN_MMAP 128 /* open memory mapped */ -#define HA_OPEN_COPY 256 /* Open copy (for repair) */ -/* Internal temp table, used for temporary results */ -#define HA_OPEN_INTERNAL_TABLE 512 - -/* The following is parameter to ha_rkey() how to use key */ - -/* - We define a complete-field prefix of a key value as a prefix where - the last included field in the prefix contains the full field, not - just some bytes from the start of the field. A partial-field prefix - is allowed to contain only a few first bytes from the last included - field. - - Below HA_READ_KEY_EXACT, ..., HA_READ_BEFORE_KEY can take a - complete-field prefix of a key value as the search - key. HA_READ_PREFIX and HA_READ_PREFIX_LAST could also take a - partial-field prefix, but currently (4.0.10) they are only used with - complete-field prefixes. MySQL uses a padding trick to implement - LIKE 'abc%' queries. - - NOTE that in InnoDB HA_READ_PREFIX_LAST will NOT work with a - partial-field prefix because InnoDB currently strips spaces from the - end of varchar fields! -*/ - -enum ha_rkey_function { - HA_READ_KEY_EXACT, /* Find first record else error */ - HA_READ_KEY_OR_NEXT, /* Record or next record */ - HA_READ_KEY_OR_PREV, /* Record or previous */ - HA_READ_AFTER_KEY, /* Find next rec. after key-record */ - HA_READ_BEFORE_KEY, /* Find next rec. before key-record */ - HA_READ_PREFIX, /* Key which as same prefix */ - HA_READ_PREFIX_LAST, /* Last key with the same prefix */ - HA_READ_PREFIX_LAST_OR_PREV, /* Last or prev key with the same prefix */ - HA_READ_MBR_CONTAIN, - HA_READ_MBR_INTERSECT, - HA_READ_MBR_WITHIN, - HA_READ_MBR_DISJOINT, - HA_READ_MBR_EQUAL -}; - - /* Key algorithm types */ - -enum ha_key_alg { - HA_KEY_ALG_UNDEF= 0, /* Not specified (old file) */ - HA_KEY_ALG_BTREE= 1, /* B-tree, default one */ - HA_KEY_ALG_RTREE= 2, /* R-tree, for spatial searches */ - HA_KEY_ALG_HASH= 3, /* HASH keys (HEAP tables) */ - HA_KEY_ALG_FULLTEXT= 4 /* FULLTEXT (MyISAM tables) */ -}; - - /* Index and table build methods */ - -enum ha_build_method { - HA_BUILD_DEFAULT, - HA_BUILD_ONLINE, - HA_BUILD_OFFLINE -}; - - /* Storage media types */ - -enum ha_storage_media { - HA_SM_DEFAULT= 0, /* Not specified (engine default) */ - HA_SM_DISK= 1, /* DISK storage */ - HA_SM_MEMORY= 2 /* MAIN MEMORY storage */ -}; - - /* The following is parameter to ha_extra() */ - -enum ha_extra_function { - HA_EXTRA_NORMAL=0, /* Optimize for space (def) */ - HA_EXTRA_QUICK=1, /* Optimize for speed */ - HA_EXTRA_NOT_USED=2, - HA_EXTRA_CACHE=3, /* Cache record in HA_rrnd() */ - HA_EXTRA_NO_CACHE=4, /* End caching of records (def) */ - HA_EXTRA_NO_READCHECK=5, /* No readcheck on update */ - HA_EXTRA_READCHECK=6, /* Use readcheck (def) */ - HA_EXTRA_KEYREAD=7, /* Read only key to database */ - HA_EXTRA_NO_KEYREAD=8, /* Normal read of records (def) */ - HA_EXTRA_NO_USER_CHANGE=9, /* No user is allowed to write */ - HA_EXTRA_KEY_CACHE=10, - HA_EXTRA_NO_KEY_CACHE=11, - HA_EXTRA_WAIT_LOCK=12, /* Wait until file is avalably (def) */ - HA_EXTRA_NO_WAIT_LOCK=13, /* If file is locked, return quickly */ - HA_EXTRA_WRITE_CACHE=14, /* Use write cache in ha_write() */ - HA_EXTRA_FLUSH_CACHE=15, /* flush write_record_cache */ - HA_EXTRA_NO_KEYS=16, /* Remove all update of keys */ - HA_EXTRA_KEYREAD_CHANGE_POS=17, /* Keyread, but change pos */ - /* xxxxchk -r must be used */ - HA_EXTRA_REMEMBER_POS=18, /* Remember pos for next/prev */ - HA_EXTRA_RESTORE_POS=19, - HA_EXTRA_REINIT_CACHE=20, /* init cache from current record */ - HA_EXTRA_FORCE_REOPEN=21, /* Datafile have changed on disk */ - HA_EXTRA_FLUSH, /* Flush tables to disk */ - HA_EXTRA_NO_ROWS, /* Don't write rows */ - HA_EXTRA_RESET_STATE, /* Reset positions */ - HA_EXTRA_IGNORE_DUP_KEY, /* Dup keys don't rollback everything*/ - HA_EXTRA_NO_IGNORE_DUP_KEY, - HA_EXTRA_PREPARE_FOR_DROP, - HA_EXTRA_PREPARE_FOR_UPDATE, /* Remove read cache if problems */ - HA_EXTRA_PRELOAD_BUFFER_SIZE, /* Set buffer size for preloading */ - /* - On-the-fly switching between unique and non-unique key inserting. - */ - HA_EXTRA_CHANGE_KEY_TO_UNIQUE, - HA_EXTRA_CHANGE_KEY_TO_DUP, - /* - When using HA_EXTRA_KEYREAD, overwrite only key member fields and keep - other fields intact. When this is off (by default) InnoDB will use memcpy - to overwrite entire row. - */ - HA_EXTRA_KEYREAD_PRESERVE_FIELDS, - HA_EXTRA_MMAP, - /* - Ignore if the a tuple is not found, continue processing the - transaction and ignore that 'row'. Needed for idempotency - handling on the slave - - Currently only used by NDB storage engine. Partition handler ignores flag. - */ - HA_EXTRA_IGNORE_NO_KEY, - HA_EXTRA_NO_IGNORE_NO_KEY, - /* - Mark the table as a log table. For some handlers (e.g. CSV) this results - in a special locking for the table. - */ - HA_EXTRA_MARK_AS_LOG_TABLE, - /* - Informs handler that write_row() which tries to insert new row into the - table and encounters some already existing row with same primary/unique - key can replace old row with new row instead of reporting error (basically - it informs handler that we do REPLACE instead of simple INSERT). - Off by default. - */ - HA_EXTRA_WRITE_CAN_REPLACE, - HA_EXTRA_WRITE_CANNOT_REPLACE, - /* - Inform handler that delete_row()/update_row() cannot batch deletes/updates - and should perform them immediately. This may be needed when table has - AFTER DELETE/UPDATE triggers which access to subject table. - These flags are reset by the handler::extra(HA_EXTRA_RESET) call. - */ - HA_EXTRA_DELETE_CANNOT_BATCH, - HA_EXTRA_UPDATE_CANNOT_BATCH, - /* - Inform handler that an "INSERT...ON DUPLICATE KEY UPDATE" will be - executed. This condition is unset by HA_EXTRA_NO_IGNORE_DUP_KEY. - */ - HA_EXTRA_INSERT_WITH_UPDATE, - /* Inform handler that we will do a rename */ - HA_EXTRA_PREPARE_FOR_RENAME, - /* - Special actions for MERGE tables. - */ - HA_EXTRA_ADD_CHILDREN_LIST, - HA_EXTRA_ATTACH_CHILDREN, - HA_EXTRA_IS_ATTACHED_CHILDREN, - HA_EXTRA_DETACH_CHILDREN, - HA_EXTRA_ORDERBY_LIMIT, - HA_EXTRA_NO_ORDERBY_LIMIT, - /* Inform handler we will force a close as part of flush */ - HA_EXTRA_PREPARE_FOR_FORCED_CLOSE, - HA_EXTRA_ALLOW_LOG_DELETE -}; - -/* Compatible option, to be deleted in 6.0 */ -#define HA_EXTRA_PREPARE_FOR_DELETE HA_EXTRA_PREPARE_FOR_DROP - - /* The following is parameter to ha_panic() */ - -enum ha_panic_function { - HA_PANIC_CLOSE, /* Close all databases */ - HA_PANIC_WRITE, /* Unlock and write status */ - HA_PANIC_READ /* Lock and read keyinfo */ -}; - - /* The following is parameter to ha_create(); keytypes */ - -enum ha_base_keytype { - HA_KEYTYPE_END=0, - HA_KEYTYPE_TEXT=1, /* Key is sorted as letters */ - HA_KEYTYPE_BINARY=2, /* Key is sorted as unsigned chars */ - HA_KEYTYPE_SHORT_INT=3, - HA_KEYTYPE_LONG_INT=4, - HA_KEYTYPE_FLOAT=5, - HA_KEYTYPE_DOUBLE=6, - HA_KEYTYPE_NUM=7, /* Not packed num with pre-space */ - HA_KEYTYPE_USHORT_INT=8, - HA_KEYTYPE_ULONG_INT=9, - HA_KEYTYPE_LONGLONG=10, - HA_KEYTYPE_ULONGLONG=11, - HA_KEYTYPE_INT24=12, - HA_KEYTYPE_UINT24=13, - HA_KEYTYPE_INT8=14, - /* Varchar (0-255 bytes) with length packed with 1 byte */ - HA_KEYTYPE_VARTEXT1=15, /* Key is sorted as letters */ - HA_KEYTYPE_VARBINARY1=16, /* Key is sorted as unsigned chars */ - /* Varchar (0-65535 bytes) with length packed with 2 bytes */ - HA_KEYTYPE_VARTEXT2=17, /* Key is sorted as letters */ - HA_KEYTYPE_VARBINARY2=18, /* Key is sorted as unsigned chars */ - HA_KEYTYPE_BIT=19 -}; - -#define HA_MAX_KEYTYPE 31 /* Must be log2-1 */ - -/* - These flags kan be OR:ed to key-flag - Note that these can only be up to 16 bits! -*/ - -#define HA_NOSAME 1 /* Set if not dupplicated records */ -#define HA_PACK_KEY 2 /* Pack string key to previous key */ -#define HA_AUTO_KEY 16 -#define HA_BINARY_PACK_KEY 32 /* Packing of all keys to prev key */ -#define HA_FULLTEXT 128 /* For full-text search */ -#define HA_UNIQUE_CHECK 256 /* Check the key for uniqueness */ -#define HA_SPATIAL 1024 /* For spatial search */ -#define HA_NULL_ARE_EQUAL 2048 /* NULL in key are cmp as equal */ -#define HA_GENERATED_KEY 8192 /* Automaticly generated key */ -#define HA_RTREE_INDEX 16384 /* For RTREE search */ - - /* The combination of the above can be used for key type comparison. */ -#define HA_KEYFLAG_MASK (HA_NOSAME | HA_PACK_KEY | HA_AUTO_KEY | \ - HA_BINARY_PACK_KEY | HA_FULLTEXT | HA_UNIQUE_CHECK | \ - HA_SPATIAL | HA_NULL_ARE_EQUAL | HA_GENERATED_KEY | \ - HA_RTREE_INDEX) - -#define HA_KEY_HAS_PART_KEY_SEG 65536 /* Key contains partial segments */ - - /* Automatic bits in key-flag */ - -#define HA_SPACE_PACK_USED 4 /* Test for if SPACE_PACK used */ -#define HA_VAR_LENGTH_KEY 8 -#define HA_NULL_PART_KEY 64 -#define HA_USES_COMMENT 4096 -#define HA_USES_PARSER 16384 /* Fulltext index uses [pre]parser */ -#define HA_USES_BLOCK_SIZE ((uint) 32768) -#define HA_SORT_ALLOWS_SAME 512 /* Intern bit when sorting records */ -#if MYSQL_VERSION_ID < 0x50200 -/* - Key has a part that can have end space. If this is an unique key - we have to handle it differently from other unique keys as we can find - many matching rows for one key (because end space are not compared) -*/ -#define HA_END_SPACE_KEY 0 /* was: 4096 */ -#else -#error HA_END_SPACE_KEY is obsolete, please remove it -#endif - - - /* These flags can be added to key-seg-flag */ - -#define HA_SPACE_PACK 1 /* Pack space in key-seg */ -#define HA_PART_KEY_SEG 4 /* Used by MySQL for part-key-cols */ -#define HA_VAR_LENGTH_PART 8 -#define HA_NULL_PART 16 -#define HA_BLOB_PART 32 -#define HA_SWAP_KEY 64 -#define HA_REVERSE_SORT 128 /* Sort key in reverse order */ -#define HA_NO_SORT 256 /* do not bother sorting on this keyseg */ -/* - End space in unique/varchar are considered equal. (Like 'a' and 'a ') - Only needed for internal temporary tables. -*/ -#define HA_END_SPACE_ARE_EQUAL 512 -#define HA_BIT_PART 1024 - - /* optionbits for database */ -#define HA_OPTION_PACK_RECORD 1 -#define HA_OPTION_PACK_KEYS 2 -#define HA_OPTION_COMPRESS_RECORD 4 -#define HA_OPTION_LONG_BLOB_PTR 8 /* new ISAM format */ -#define HA_OPTION_TMP_TABLE 16 -#define HA_OPTION_CHECKSUM 32 -#define HA_OPTION_DELAY_KEY_WRITE 64 -#define HA_OPTION_NO_PACK_KEYS 128 /* Reserved for MySQL */ -#define HA_OPTION_CREATE_FROM_ENGINE 256 -#define HA_OPTION_RELIES_ON_SQL_LAYER 512 -#define HA_OPTION_NULL_FIELDS 1024 -#define HA_OPTION_PAGE_CHECKSUM 2048 -#define HA_OPTION_TEMP_COMPRESS_RECORD (1L << 15) /* set by isamchk */ -#define HA_OPTION_READ_ONLY_DATA (1L << 16) /* Set by isamchk */ -#define HA_OPTION_NO_CHECKSUM (1L << 17) -#define HA_OPTION_NO_DELAY_KEY_WRITE (1L << 18) - - /* Bits in flag to create() */ - -#define HA_DONT_TOUCH_DATA 1 /* Don't empty datafile (isamchk) */ -#define HA_PACK_RECORD 2 /* Request packed record format */ -#define HA_CREATE_TMP_TABLE 4 -#define HA_CREATE_CHECKSUM 8 -#define HA_CREATE_KEEP_FILES 16 /* don't overwrite .MYD and MYI */ -#define HA_CREATE_PAGE_CHECKSUM 32 -#define HA_CREATE_DELAY_KEY_WRITE 64 -#define HA_CREATE_RELIES_ON_SQL_LAYER 128 - -/* - The following flags (OR-ed) are passed to handler::info() method. - The method copies misc handler information out of the storage engine - to data structures accessible from MySQL - - Same flags are also passed down to mi_status, myrg_status, etc. -*/ - -/* this one is not used */ -#define HA_STATUS_POS 1 -/* - assuming the table keeps shared actual copy of the 'info' and - local, possibly outdated copy, the following flag means that - it should not try to get the actual data (locking the shared structure) - slightly outdated version will suffice -*/ -#define HA_STATUS_NO_LOCK 2 -/* update the time of the last modification (in handler::update_time) */ -#define HA_STATUS_TIME 4 -/* - update the 'constant' part of the info: - handler::max_data_file_length, max_index_file_length, create_time - sortkey, ref_length, block_size, data_file_name, index_file_name. - handler::table->s->keys_in_use, keys_for_keyread, rec_per_key -*/ -#define HA_STATUS_CONST 8 -/* - update the 'variable' part of the info: - handler::records, deleted, data_file_length, index_file_length, - delete_length, check_time, mean_rec_length -*/ -#define HA_STATUS_VARIABLE 16 -/* - get the information about the key that caused last duplicate value error - update handler::errkey and handler::dupp_ref - see handler::get_dup_key() -*/ -#define HA_STATUS_ERRKEY 32 -/* - update handler::auto_increment_value -*/ -#define HA_STATUS_AUTO 64 - -/* - Errorcodes given by handler functions - - opt_sum_query() assumes these codes are > 1 - Do not add error numbers before HA_ERR_FIRST. - If necessary to add lower numbers, change HA_ERR_FIRST accordingly. -*/ -#define HA_ERR_FIRST 120 /* Copy of first error nr.*/ - -#define HA_ERR_KEY_NOT_FOUND 120 /* Didn't find key on read or update */ -#define HA_ERR_FOUND_DUPP_KEY 121 /* Dupplicate key on write */ -#define HA_ERR_INTERNAL_ERROR 122 /* Internal error */ -#define HA_ERR_RECORD_CHANGED 123 /* Uppdate with is recoverable */ -#define HA_ERR_WRONG_INDEX 124 /* Wrong index given to function */ -#define HA_ERR_CRASHED 126 /* Indexfile is crashed */ -#define HA_ERR_WRONG_IN_RECORD 127 /* Record-file is crashed */ -#define HA_ERR_OUT_OF_MEM 128 /* Record-file is crashed */ -#define HA_ERR_NOT_A_TABLE 130 /* not a MYI file - no signature */ -#define HA_ERR_WRONG_COMMAND 131 /* Command not supported */ -#define HA_ERR_OLD_FILE 132 /* old databasfile */ -#define HA_ERR_NO_ACTIVE_RECORD 133 /* No record read in update() */ -#define HA_ERR_RECORD_DELETED 134 /* A record is not there */ -#define HA_ERR_RECORD_FILE_FULL 135 /* No more room in file */ -#define HA_ERR_INDEX_FILE_FULL 136 /* No more room in file */ -#define HA_ERR_END_OF_FILE 137 /* end in next/prev/first/last */ -#define HA_ERR_UNSUPPORTED 138 /* unsupported extension used */ -#define HA_ERR_TO_BIG_ROW 139 /* Too big row */ -#define HA_WRONG_CREATE_OPTION 140 /* Wrong create option */ -#define HA_ERR_FOUND_DUPP_UNIQUE 141 /* Dupplicate unique on write */ -#define HA_ERR_UNKNOWN_CHARSET 142 /* Can't open charset */ -#define HA_ERR_WRONG_MRG_TABLE_DEF 143 /* conflicting tables in MERGE */ -#define HA_ERR_CRASHED_ON_REPAIR 144 /* Last (automatic?) repair failed */ -#define HA_ERR_CRASHED_ON_USAGE 145 /* Table must be repaired */ -#define HA_ERR_LOCK_WAIT_TIMEOUT 146 -#define HA_ERR_LOCK_TABLE_FULL 147 -#define HA_ERR_READ_ONLY_TRANSACTION 148 /* Updates not allowed */ -#define HA_ERR_LOCK_DEADLOCK 149 -#define HA_ERR_CANNOT_ADD_FOREIGN 150 /* Cannot add a foreign key constr. */ -#define HA_ERR_NO_REFERENCED_ROW 151 /* Cannot add a child row */ -#define HA_ERR_ROW_IS_REFERENCED 152 /* Cannot delete a parent row */ -#define HA_ERR_NO_SAVEPOINT 153 /* No savepoint with that name */ -#define HA_ERR_NON_UNIQUE_BLOCK_SIZE 154 /* Non unique key block size */ -#define HA_ERR_NO_SUCH_TABLE 155 /* The table does not exist in engine */ -#define HA_ERR_TABLE_EXIST 156 /* The table existed in storage engine */ -#define HA_ERR_NO_CONNECTION 157 /* Could not connect to storage engine */ -/* NULLs are not supported in spatial index */ -#define HA_ERR_NULL_IN_SPATIAL 158 -#define HA_ERR_TABLE_DEF_CHANGED 159 /* The table changed in storage engine */ -/* There's no partition in table for given value */ -#define HA_ERR_NO_PARTITION_FOUND 160 -#define HA_ERR_RBR_LOGGING_FAILED 161 /* Row-based binlogging of row failed */ -#define HA_ERR_DROP_INDEX_FK 162 /* Index needed in foreign key constr */ -/* - Upholding foreign key constraints would lead to a duplicate key error - in some other table. -*/ -#define HA_ERR_FOREIGN_DUPLICATE_KEY 163 -/* The table changed in storage engine */ -#define HA_ERR_TABLE_NEEDS_UPGRADE 164 -#define HA_ERR_TABLE_READONLY 165 /* The table is not writable */ - -#define HA_ERR_AUTOINC_READ_FAILED 166 /* Failed to get next autoinc value */ -#define HA_ERR_AUTOINC_ERANGE 167 /* Failed to set row autoinc value */ -#define HA_ERR_GENERIC 168 /* Generic error */ -/* row not actually updated: new values same as the old values */ -#define HA_ERR_RECORD_IS_THE_SAME 169 -/* It is not possible to log this statement */ -#define HA_ERR_LOGGING_IMPOSSIBLE 170 -#define HA_ERR_TABLESPACE_EXIST 171 -/* The event was corrupt, leading to illegal data being read */ -#define HA_ERR_CORRUPT_EVENT 172 -#define HA_ERR_NEW_FILE 173 /* New file format */ -/* The event could not be processed no other handler error happened */ -#define HA_ERR_ROWS_EVENT_APPLY 174 -#define HA_ERR_INITIALIZATION 175 /* Error during initialization */ -#define HA_ERR_FILE_TOO_SHORT 176 /* File too short */ -#define HA_ERR_WRONG_CRC 177 /* Wrong CRC on page */ -#define HA_ERR_LOCK_OR_ACTIVE_TRANSACTION 178 -#define HA_ERR_NO_SUCH_TABLESPACE 179 -#define HA_ERR_TABLESPACE_NOT_EMPTY 180 -#define HA_ERR_TABLESPACE_DATAFILE_EXIST 181 -#define HA_ERR_ROW_NOT_VISIBLE 182 -#define HA_ERR_LAST 182 /* Copy of last error nr */ - -/* Number of different errors */ -#define HA_ERR_ERRORS (HA_ERR_LAST - HA_ERR_FIRST + 1) - - /* Other constants */ - -#define HA_NAMELEN 64 /* Max length of saved filename */ -#define NO_SUCH_KEY (~(uint)0) /* used as a key no. */ - -typedef ulong key_part_map; -#define HA_WHOLE_KEY (~(key_part_map)0) - - /* Intern constants in databases */ - - /* bits in _search */ -#define SEARCH_FIND 1 -#define SEARCH_NO_FIND 2 -#define SEARCH_SAME 4 -#define SEARCH_BIGGER 8 -#define SEARCH_SMALLER 16 -#define SEARCH_SAVE_BUFF 32 -#define SEARCH_UPDATE 64 -#define SEARCH_PREFIX 128 -#define SEARCH_LAST 256 -#define MBR_CONTAIN 512 -#define MBR_INTERSECT 1024 -#define MBR_WITHIN 2048 -#define MBR_DISJOINT 4096 -#define MBR_EQUAL 8192 -#define MBR_DATA 16384 -#define SEARCH_NULL_ARE_EQUAL 32768 /* NULL in keys are equal */ -#define SEARCH_NULL_ARE_NOT_EQUAL 65536 /* NULL in keys are not equal */ -/* Use this when inserting a key in position order */ -#define SEARCH_INSERT SEARCH_NULL_ARE_NOT_EQUAL*2 -/* Only part of the key is specified while reading */ -#define SEARCH_PART_KEY SEARCH_INSERT*2 -/* Used when user key (key 2) contains transaction id's */ -#define SEARCH_USER_KEY_HAS_TRANSID SEARCH_PART_KEY*2 -/* Used when page key (key 1) contains transaction id's */ -#define SEARCH_PAGE_KEY_HAS_TRANSID SEARCH_USER_KEY_HAS_TRANSID*2 - - /* bits in opt_flag */ -#define QUICK_USED 1 -#define READ_CACHE_USED 2 -#define READ_CHECK_USED 4 -#define KEY_READ_USED 8 -#define WRITE_CACHE_USED 16 -#define OPT_NO_ROWS 32 - - /* bits in update */ -#define HA_STATE_CHANGED 1 /* Database has changed */ -#define HA_STATE_AKTIV 2 /* Has a current record */ -#define HA_STATE_WRITTEN 4 /* Record is written */ -#define HA_STATE_DELETED 8 -#define HA_STATE_NEXT_FOUND 16 /* Next found record (record before) */ -#define HA_STATE_PREV_FOUND 32 /* Prev found record (record after) */ -#define HA_STATE_NO_KEY 64 /* Last read didn't find record */ -#define HA_STATE_KEY_CHANGED 128 -#define HA_STATE_WRITE_AT_END 256 /* set in _ps_find_writepos */ -#define HA_STATE_BUFF_SAVED 512 /* If current keybuff is info->buff */ -#define HA_STATE_ROW_CHANGED 1024 /* To invalide ROW cache */ -#define HA_STATE_EXTEND_BLOCK 2048 -#define HA_STATE_RNEXT_SAME 4096 /* rnext_same occupied lastkey2 */ - -/* myisampack expects no more than 32 field types. */ -enum en_fieldtype { - FIELD_LAST=-1,FIELD_NORMAL,FIELD_SKIP_ENDSPACE,FIELD_SKIP_PRESPACE, - FIELD_SKIP_ZERO,FIELD_BLOB,FIELD_CONSTANT,FIELD_INTERVALL,FIELD_ZERO, - FIELD_VARCHAR,FIELD_CHECK, - FIELD_enum_val_count -}; - -enum data_file_type { - STATIC_RECORD, DYNAMIC_RECORD, COMPRESSED_RECORD, BLOCK_RECORD -}; - -/* For key ranges */ - -/* from -inf */ -#define NO_MIN_RANGE 1 - -/* to +inf */ -#define NO_MAX_RANGE 2 - -/* X < key, i.e. not including the left endpoint */ -#define NEAR_MIN 4 - -/* X > key, i.e. not including the right endpoint */ -#define NEAR_MAX 8 - -/* - This flag means that index is a unique index, and the interval is - equivalent to "AND(keypart_i = const_i)", where all of const_i are not NULLs. -*/ -#define UNIQUE_RANGE 16 - -/* - This flag means that the interval is equivalent to - "AND(keypart_i = const_i)", where not all key parts may be used but all of - const_i are not NULLs. -*/ -#define EQ_RANGE 32 - -/* - This flag has the same meaning as UNIQUE_RANGE, except that for at least - one keypart the condition is "keypart IS NULL". -*/ -#define NULL_RANGE 64 - -#define GEOM_FLAG 128 - -#define SKIP_RANGE 256 -#define EMPTY_RANGE 512 - -typedef struct st_key_range -{ - const uchar *key; - uint length; - key_part_map keypart_map; - enum ha_rkey_function flag; -} key_range; - -typedef struct st_key_multi_range -{ - key_range start_key; - key_range end_key; - char *ptr; /* Free to use by caller (ptr to row etc) */ - uint range_flag; /* key range flags see above */ -} KEY_MULTI_RANGE; - - -/* For number of records */ -#ifdef BIG_TABLES -#define rows2double(A) ulonglong2double(A) -typedef my_off_t ha_rows; -#else -#define rows2double(A) (double) (A) -typedef ulong ha_rows; -#endif - -#define HA_POS_ERROR (~ (ha_rows) 0) -#define HA_OFFSET_ERROR (~ (my_off_t) 0) - -#if SYSTEM_SIZEOF_OFF_T == 4 -#define MAX_FILE_SIZE INT_MAX32 -#else -#define MAX_FILE_SIZE LONGLONG_MAX -#endif - -#define HA_VARCHAR_PACKLENGTH(field_length) ((field_length) < 256 ? 1 :2) - -/* invalidator function reference for Query Cache */ -typedef void (* invalidator_by_filename)(const char * filename); - -#endif /* _my_base_h */ diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_bit.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_bit.h deleted file mode 100644 index 2e464e8..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_bit.h +++ /dev/null @@ -1,109 +0,0 @@ -/* - Some useful bit functions -*/ - -C_MODE_START -#ifdef HAVE_INLINE - -extern const char _my_bits_nbits[256]; -extern const uchar _my_bits_reverse_table[256]; - -/* - Find smallest X in 2^X >= value - This can be used to divide a number with value by doing a shift instead -*/ - -STATIC_INLINE uint my_bit_log2(ulong value) -{ - uint bit; - for (bit=0 ; value > 1 ; value>>=1, bit++) ; - return bit; -} - -STATIC_INLINE uint my_count_bits(ulonglong v) -{ -#if SIZEOF_LONG_LONG > 4 - /* The following code is a bit faster on 16 bit machines than if we would - only shift v */ - ulong v2=(ulong) (v >> 32); - return (uint) (uchar) (_my_bits_nbits[(uchar) v] + - _my_bits_nbits[(uchar) (v >> 8)] + - _my_bits_nbits[(uchar) (v >> 16)] + - _my_bits_nbits[(uchar) (v >> 24)] + - _my_bits_nbits[(uchar) (v2)] + - _my_bits_nbits[(uchar) (v2 >> 8)] + - _my_bits_nbits[(uchar) (v2 >> 16)] + - _my_bits_nbits[(uchar) (v2 >> 24)]); -#else - return (uint) (uchar) (_my_bits_nbits[(uchar) v] + - _my_bits_nbits[(uchar) (v >> 8)] + - _my_bits_nbits[(uchar) (v >> 16)] + - _my_bits_nbits[(uchar) (v >> 24)]); -#endif -} - -STATIC_INLINE uint my_count_bits_ushort(ushort v) -{ - return _my_bits_nbits[v]; -} - - -/* - Next highest power of two - - SYNOPSIS - my_round_up_to_next_power() - v Value to check - - RETURN - Next or equal power of 2 - Note: 0 will return 0 - - NOTES - Algorithm by Sean Anderson, according to: - http://graphics.stanford.edu/~seander/bithacks.html - (Orignal code public domain) - - Comments shows how this works with 01100000000000000000000000001011 -*/ - -STATIC_INLINE uint32 my_round_up_to_next_power(uint32 v) -{ - v--; /* 01100000000000000000000000001010 */ - v|= v >> 1; /* 01110000000000000000000000001111 */ - v|= v >> 2; /* 01111100000000000000000000001111 */ - v|= v >> 4; /* 01111111110000000000000000001111 */ - v|= v >> 8; /* 01111111111111111100000000001111 */ - v|= v >> 16; /* 01111111111111111111111111111111 */ - return v+1; /* 10000000000000000000000000000000 */ -} - -STATIC_INLINE uint32 my_clear_highest_bit(uint32 v) -{ - uint32 w=v >> 1; - w|= w >> 1; - w|= w >> 2; - w|= w >> 4; - w|= w >> 8; - w|= w >> 16; - return v & w; -} - -STATIC_INLINE uint32 my_reverse_bits(uint32 key) -{ - return - (_my_bits_reverse_table[ key & 255] << 24) | - (_my_bits_reverse_table[(key>> 8) & 255] << 16) | - (_my_bits_reverse_table[(key>>16) & 255] << 8) | - _my_bits_reverse_table[(key>>24) ]; -} - -#else /* HAVE_INLINE */ -extern uint my_bit_log2(ulong value); -extern uint32 my_round_up_to_next_power(uint32 v); -uint32 my_clear_highest_bit(uint32 v); -uint32 my_reverse_bits(uint32 key); -extern uint my_count_bits(ulonglong v); -extern uint my_count_bits_ushort(ushort v); -#endif /* HAVE_INLINE */ -C_MODE_END diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_bitmap.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_bitmap.h deleted file mode 100644 index d8c9a0c..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_bitmap.h +++ /dev/null @@ -1,182 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef _my_bitmap_h_ -#define _my_bitmap_h_ - -#define MY_BIT_NONE (~(uint) 0) - -#include - -typedef uint32 my_bitmap_map; - -typedef struct st_bitmap -{ - my_bitmap_map *bitmap; - uint n_bits; /* number of bits occupied by the above */ - my_bitmap_map last_word_mask; - my_bitmap_map *last_word_ptr; - /* - mutex will be acquired for the duration of each bitmap operation if - thread_safe flag in bitmap_init was set. Otherwise, we optimize by not - acquiring the mutex - */ -#ifdef THREAD - pthread_mutex_t *mutex; -#endif -} MY_BITMAP; - -#ifdef __cplusplus -extern "C" { -#endif -extern void create_last_word_mask(MY_BITMAP *map); -extern my_bool bitmap_init(MY_BITMAP *map, my_bitmap_map *buf, uint n_bits, - my_bool thread_safe); -extern my_bool bitmap_is_clear_all(const MY_BITMAP *map); -extern my_bool bitmap_is_prefix(const MY_BITMAP *map, uint prefix_size); -extern my_bool bitmap_is_set_all(const MY_BITMAP *map); -extern my_bool bitmap_is_subset(const MY_BITMAP *map1, const MY_BITMAP *map2); -extern my_bool bitmap_is_overlapping(const MY_BITMAP *map1, - const MY_BITMAP *map2); -extern my_bool bitmap_test_and_set(MY_BITMAP *map, uint bitmap_bit); -extern my_bool bitmap_test_and_clear(MY_BITMAP *map, uint bitmap_bit); -extern my_bool bitmap_fast_test_and_set(MY_BITMAP *map, uint bitmap_bit); -extern uint bitmap_set_next(MY_BITMAP *map); -extern uint bitmap_get_first(const MY_BITMAP *map); -extern uint bitmap_get_first_set(const MY_BITMAP *map); -extern uint bitmap_bits_set(const MY_BITMAP *map); -extern void bitmap_free(MY_BITMAP *map); -extern void bitmap_set_above(MY_BITMAP *map, uint from_byte, uint use_bit); -extern void bitmap_set_prefix(MY_BITMAP *map, uint prefix_size); -extern void bitmap_intersect(MY_BITMAP *map, const MY_BITMAP *map2); -extern void bitmap_subtract(MY_BITMAP *map, const MY_BITMAP *map2); -extern void bitmap_union(MY_BITMAP *map, const MY_BITMAP *map2); -extern void bitmap_xor(MY_BITMAP *map, const MY_BITMAP *map2); -extern void bitmap_invert(MY_BITMAP *map); -extern void bitmap_copy(MY_BITMAP *map, const MY_BITMAP *map2); - -extern uint bitmap_lock_set_next(MY_BITMAP *map); -extern void bitmap_lock_clear_bit(MY_BITMAP *map, uint bitmap_bit); -#ifdef NOT_USED -extern uint bitmap_lock_bits_set(const MY_BITMAP *map); -extern my_bool bitmap_lock_is_set_all(const MY_BITMAP *map); -extern uint bitmap_lock_get_first(const MY_BITMAP *map); -extern uint bitmap_lock_get_first_set(const MY_BITMAP *map); -extern my_bool bitmap_lock_is_subset(const MY_BITMAP *map1, - const MY_BITMAP *map2); -extern my_bool bitmap_lock_is_prefix(const MY_BITMAP *map, uint prefix_size); -extern my_bool bitmap_lock_is_set(const MY_BITMAP *map, uint bitmap_bit); -extern my_bool bitmap_lock_is_clear_all(const MY_BITMAP *map); -extern my_bool bitmap_lock_cmp(const MY_BITMAP *map1, const MY_BITMAP *map2); -extern void bitmap_lock_set_all(MY_BITMAP *map); -extern void bitmap_lock_clear_all(MY_BITMAP *map); -extern void bitmap_lock_set_bit(MY_BITMAP *map, uint bitmap_bit); -extern void bitmap_lock_flip_bit(MY_BITMAP *map, uint bitmap_bit); -extern void bitmap_lock_set_prefix(MY_BITMAP *map, uint prefix_size); -extern void bitmap_lock_intersect(MY_BITMAP *map, const MY_BITMAP *map2); -extern void bitmap_lock_subtract(MY_BITMAP *map, const MY_BITMAP *map2); -extern void bitmap_lock_union(MY_BITMAP *map, const MY_BITMAP *map2); -extern void bitmap_lock_xor(MY_BITMAP *map, const MY_BITMAP *map2); -extern void bitmap_lock_invert(MY_BITMAP *map); -#endif -/* Fast, not thread safe, bitmap functions */ -#define bitmap_buffer_size(bits) (((bits)+31)/32)*4 -#define no_bytes_in_map(map) (((map)->n_bits + 7)/8) -#define no_words_in_map(map) (((map)->n_bits + 31)/32) -#define bytes_word_aligned(bytes) (4*((bytes + 3)/4)) -#define _bitmap_set_bit(MAP, BIT) (((uchar*)(MAP)->bitmap)[(BIT) / 8] \ - |= (1 << ((BIT) & 7))) -#define _bitmap_flip_bit(MAP, BIT) (((uchar*)(MAP)->bitmap)[(BIT) / 8] \ - ^= (1 << ((BIT) & 7))) -#define _bitmap_clear_bit(MAP, BIT) (((uchar*)(MAP)->bitmap)[(BIT) / 8] \ - &= ~ (1 << ((BIT) & 7))) -#define _bitmap_is_set(MAP, BIT) (uint) (((uchar*)(MAP)->bitmap)[(BIT) / 8] \ - & (1 << ((BIT) & 7))) -/* - WARNING! - - The below symbols are inline functions in DEBUG builds and macros in - non-DEBUG builds. The latter evaluate their 'bit' argument twice. - - NEVER use an increment/decrement operator with the 'bit' argument. - It would work with DEBUG builds, but fails later in production builds! - - FORBIDDEN: bitmap_set_bit($my_bitmap, (field++)->field_index); -*/ -#ifndef DBUG_OFF -static inline void -bitmap_set_bit(MY_BITMAP *map,uint bit) -{ - DBUG_ASSERT(bit < (map)->n_bits); - _bitmap_set_bit(map,bit); -} -static inline void -bitmap_flip_bit(MY_BITMAP *map,uint bit) -{ - DBUG_ASSERT(bit < (map)->n_bits); - _bitmap_flip_bit(map,bit); -} -static inline void -bitmap_clear_bit(MY_BITMAP *map,uint bit) -{ - DBUG_ASSERT(bit < (map)->n_bits); - _bitmap_clear_bit(map,bit); -} -static inline uint -bitmap_is_set(const MY_BITMAP *map,uint bit) -{ - DBUG_ASSERT(bit < (map)->n_bits); - return _bitmap_is_set(map,bit); -} -#else -#define bitmap_set_bit(MAP, BIT) _bitmap_set_bit(MAP, BIT) -#define bitmap_flip_bit(MAP, BIT) _bitmap_flip_bit(MAP, BIT) -#define bitmap_clear_bit(MAP, BIT) _bitmap_clear_bit(MAP, BIT) -#define bitmap_is_set(MAP, BIT) _bitmap_is_set(MAP, BIT) -#endif - -static inline my_bool bitmap_cmp(const MY_BITMAP *map1, const MY_BITMAP *map2) -{ - *(map1)->last_word_ptr|= (map1)->last_word_mask; - *(map2)->last_word_ptr|= (map2)->last_word_mask; - return memcmp((map1)->bitmap, (map2)->bitmap, 4*no_words_in_map((map1)))==0; -} - -#define bitmap_clear_all(MAP) \ - { memset((MAP)->bitmap, 0, 4*no_words_in_map((MAP))); } -#define bitmap_set_all(MAP) \ - (memset((MAP)->bitmap, 0xFF, 4*no_words_in_map((MAP)))) - -/** - check, set and clear a bit of interest of an integer. - - If the bit is out of range @retval -1. Otherwise - bit_is_set @return 0 or 1 reflecting the bit is set or not; - bit_do_set @return 1 (bit is set 1) - bit_do_clear @return 0 (bit is cleared to 0) -*/ - -#define bit_is_set(I,B) (sizeof(I) * CHAR_BIT > (B) ? \ - (((I) & (1ULL << (B))) == 0 ? 0 : 1) : -1) -#define bit_do_set(I,B) (sizeof(I) * CHAR_BIT > (B) ? \ - ((I) |= (1ULL << (B)), 1) : -1) -#define bit_do_clear(I,B) (sizeof(I) * CHAR_BIT > (B) ? \ - ((I) &= ~(1ULL << (B)), 0) : -1) - -#ifdef __cplusplus -} -#endif - -#endif /* _my_bitmap_h_ */ diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_charsets.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_charsets.h deleted file mode 100644 index ecb0de9..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_charsets.h +++ /dev/null @@ -1,57 +0,0 @@ -/* Copyright (C) 2008 Sun Microsystems, Inc. - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* Character set configuration (hard-coded) */ -#define HAVE_CHARSET_armscii8 1 -#define HAVE_CHARSET_ascii 1 -#define HAVE_CHARSET_big5 1 -#define HAVE_CHARSET_cp1250 1 -#define HAVE_CHARSET_cp1251 1 -#define HAVE_CHARSET_cp1256 1 -#define HAVE_CHARSET_cp1257 1 -#define HAVE_CHARSET_cp850 1 -#define HAVE_CHARSET_cp852 1 -#define HAVE_CHARSET_cp866 1 -#define HAVE_CHARSET_cp932 1 -#define HAVE_CHARSET_dec8 1 -#define HAVE_CHARSET_eucjpms 1 -#define HAVE_CHARSET_euckr 1 -#define HAVE_CHARSET_gb2312 1 -#define HAVE_CHARSET_gbk 1 -#define HAVE_CHARSET_greek 1 -#define HAVE_CHARSET_hebrew 1 -#define HAVE_CHARSET_hp8 1 -#define HAVE_CHARSET_keybcs2 1 -#define HAVE_CHARSET_koi8r 1 -#define HAVE_CHARSET_koi8u 1 -#define HAVE_CHARSET_latin1 1 -#define HAVE_CHARSET_latin2 1 -#define HAVE_CHARSET_latin5 1 -#define HAVE_CHARSET_latin7 1 -#define HAVE_CHARSET_macce 1 -#define HAVE_CHARSET_macroman 1 -#define HAVE_CHARSET_sjis 1 -#define HAVE_CHARSET_swe7 1 -#define HAVE_CHARSET_tis620 1 -#define HAVE_CHARSET_ucs2 1 -#define HAVE_CHARSET_ujis 1 -#define HAVE_CHARSET_utf16 1 -#define HAVE_CHARSET_utf32 1 -#define HAVE_CHARSET_utf8mb3 1 -#define HAVE_CHARSET_utf8mb4 1 -#define HAVE_UCA_COLLATIONS 1 -#define MYSQL_DEFAULT_CHARSET_NAME "latin1" -#define MYSQL_DEFAULT_COLLATION_NAME "latin1_swedish_ci" -#define USE_MB 1 diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_config.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_config.h deleted file mode 100644 index e569c55..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_config.h +++ /dev/null @@ -1,295 +0,0 @@ - -/* Headers we may want to use. */ -#define HAVE_ALLOCA_H 1 -#define HAVE_ARPA_INET_H 1 -#define HAVE_CRYPT_H 1 -#define HAVE_DIRENT_H 1 -/* #undef HAVE_EXECINFO_H */ -#define HAVE_FCNTL_H 1 -#define HAVE_FENV_H 1 -#define HAVE_FLOAT_H 1 -/* #undef HAVE_FPU_CONTROL_H */ -#define HAVE_GRP_H 1 -#define HAVE_IEEEFP_H 1 -#define HAVE_LIMITS_H 1 -#define HAVE_MALLOC_H 1 -#define HAVE_MEMORY_H 1 -#define HAVE_NETINET_IN_H 1 -/* #undef HAVE_PATHS_H */ -#define HAVE_PWD_H 1 -#define HAVE_SCHED_H 1 -/* #undef HAVE_SELECT_H */ -#define HAVE_STDDEF_H 1 -#define HAVE_STDLIB_H 1 -#define HAVE_STRINGS_H 1 -#define HAVE_STRING_H 1 -#define HAVE_SYNCH_H 1 -/* #undef HAVE_SYSENT_H */ -/* #undef HAVE_SYS_FPU_H */ -#define HAVE_SYS_IOCTL_H 1 -#define HAVE_SYS_IPC_H 1 -#define HAVE_SYS_MMAN_H 1 -/* #undef HAVE_SYS_PRCTL_H */ -#define HAVE_SYS_SELECT_H 1 -#define HAVE_SYS_SHM_H 1 -#define HAVE_SYS_SOCKET_H 1 -#define HAVE_SYS_STAT_H 1 -#define HAVE_SYS_STREAM_H 1 -#define HAVE_SYS_TIMEB_H 1 -#define HAVE_SYS_TYPES_H 1 -#define HAVE_SYS_UN_H 1 -#define HAVE_TERMIOS_H 1 -#define HAVE_TERMIO_H 1 -#define HAVE_UNISTD_H 1 -#define HAVE_UTIME_H 1 - -/* Functions we may want to use. */ -#define HAVE_ACCESS 1 -/* #undef HAVE_AIOWAIT */ -#define HAVE_ALARM 1 -/* #undef HAVE_ALLOCA */ -#define HAVE_BCMP 1 -/* #undef HAVE_BFILL */ -/* #undef HAVE_BMOVE */ -#define HAVE_BZERO 1 -/* #undef HAVE_CLOCK_GETTIME */ -/* #undef HAVE_COMPRESS */ -#define HAVE_CRYPT 1 -#define HAVE_DLERROR 1 -#define HAVE_DLOPEN 1 -#define HAVE_FCHMOD 1 -#define HAVE_FCNTL 1 -#define HAVE_FCONVERT 1 -/* #undef HAVE_FDATASYNC */ -/* #undef HAVE_FESETROUND */ -#define HAVE_FINITE 1 -/* #undef HAVE_FP_EXCEPT */ -#define HAVE_FSEEKO 1 -#define HAVE_FSYNC 1 -/* #undef HAVE_GETADDRINFO */ -#define HAVE_GETCWD 1 -/* #undef HAVE_GETHOSTBYADDR_R */ -/* #undef HAVE_GETHOSTBYNAME_R */ -#define HAVE_GETHRTIME 1 -/* #undef HAVE_GETNAMEINFO */ -#define HAVE_GETPAGESIZE 1 -#define HAVE_GETPASS 1 -#define HAVE_GETPASSPHRASE 1 -#define HAVE_GETPWNAM 1 -#define HAVE_GETPWUID 1 -#define HAVE_GETRLIMIT 1 -#define HAVE_GETRUSAGE 1 -#define HAVE_GETWD 1 -#define HAVE_GMTIME_R 1 -#define HAVE_INITGROUPS 1 -#define HAVE_ISNAN 1 -#define HAVE_LDIV 1 -#define HAVE_LOCALTIME_R 1 -/* #undef HAVE_LOG2 */ -#define HAVE_LONGJMP 1 -#define HAVE_LSTAT 1 -#define HAVE_MADVISE 1 -#define HAVE_DECL_MADVISE 1 -/* #undef HAVE_MALLINFO */ -#define HAVE_MEMCPY 1 -#define HAVE_MEMCPY 1 -#define HAVE_MEMMOVE 1 -#define HAVE_MEMMOVE 1 -#define HAVE_MKSTEMP 1 -#define HAVE_MLOCK 1 -#define HAVE_MLOCKALL 1 -#define HAVE_MMAP 1 -#define HAVE_MMAP64 1 -#define HAVE_PERROR 1 -#define HAVE_POLL 1 -#define HAVE_PREAD 1 -/* #undef HAVE_PTHREAD_ATTR_CREATE */ -#define HAVE_PTHREAD_ATTR_GETSTACKSIZE 1 -/* #undef HAVE_PTHREAD_ATTR_SETPRIO */ -#define HAVE_PTHREAD_ATTR_SETSCHEDPARAM 1 -#define HAVE_PTHREAD_ATTR_SETSCOPE 1 -#define HAVE_PTHREAD_ATTR_SETSTACKSIZE 1 -/* #undef HAVE_PTHREAD_CONDATTR_CREATE */ -/* #undef HAVE_PTHREAD_INIT */ -#define HAVE_PTHREAD_KEY_DELETE 1 -#define HAVE_PTHREAD_KEY_DELETE 1 -#define HAVE_PTHREAD_KILL 1 -#define HAVE_PTHREAD_RWLOCK_RDLOCK 1 -/* #undef HAVE_PTHREAD_SETPRIO_NP */ -#define HAVE_PTHREAD_SETSCHEDPARAM 1 -#define HAVE_PTHREAD_SIGMASK 1 -/* #undef HAVE_PTHREAD_THREADMASK */ -/* #undef HAVE_PTHREAD_YIELD_NP */ -#define HAVE_READDIR_R 1 -#define HAVE_READLINK 1 -#define HAVE_REALPATH 1 -#define HAVE_RENAME 1 -#define HAVE_RINT 1 -/* #undef HAVE_SCHED_YIELD */ -#define HAVE_SELECT 1 -/* #undef HAVE_SETFD */ -/* #undef HAVE_SETFILEPOINTER */ -#define HAVE_SIGACTION 1 -/* #undef HAVE_SIGTHREADMASK */ -#define HAVE_SIGWAIT 1 -#define HAVE_SLEEP 1 -#define HAVE_SNPRINTF 1 -/* #undef HAVE_STPCPY */ -#define HAVE_STRERROR 1 -#define HAVE_STRLCPY 1 -/* #undef HAVE_STRNLEN */ -#define HAVE_STRPBRK 1 -/* #undef HAVE_STRSEP */ -#define HAVE_STRSTR 1 -#define HAVE_STRTOK_R 1 -#define HAVE_STRTOK_R 1 -#define HAVE_STRTOL 1 -#define HAVE_STRTOLL 1 -#define HAVE_STRTOUL 1 -#define HAVE_STRTOULL 1 -#define HAVE_TELL 1 -#define HAVE_THR_SETCONCURRENCY 1 -#define HAVE_THR_YIELD 1 -/* #undef HAVE_VASPRINTF */ -#define HAVE_VSNPRINTF 1 - -/* Symbols we may use */ -/* #undef HAVE_SYS_ERRLIST */ -/* used by stacktrace functions */ -/* #undef HAVE_BSS_START */ - -/* Does "struct timespec" have a "sec" and "nsec" field? */ -/* #undef HAVE_TIMESPEC_TS_SEC */ - -/* Types we may use */ -#define SIZEOF_CHAR 1 -#if SIZEOF_CHAR -# define HAVE_CHAR 1 -#endif - -#define SIZEOF_CHARP 4 -#if SIZEOF_CHARP -# define HAVE_CHARP 1 -#endif - -#define SIZEOF_SHORT 2 -#if SIZEOF_SHORT -# define HAVE_SHORT 1 -#endif - -#define SIZEOF_INT 4 -#if SIZEOF_INT -# define HAVE_INT 1 -#endif - -#define SIZEOF_LONG 4 -#if SIZEOF_LONG -# define HAVE_LONG 1 -#endif - -#define SIZEOF_LONG_LONG 8 -#if SIZEOF_LONG_LONG -# define HAVE_LONG_LONG 1 -#endif - -#define SIZEOF_OFF_T 4 -#if SIZEOF_OFF_T -# define HAVE_OFF_T 1 -#endif - -#define SIZEOF_SIGSET_T 16 -#if SIZEOF_SIGSET_T -# define HAVE_SIGSET_T 1 -#endif - -#define SIZEOF_SIZE_T 4 -#if SIZEOF_SIZE_T -# define HAVE_SIZE_T 1 -#endif - -/* #undef SIZEOF_UCHAR */ -#if SIZEOF_UCHAR -# define HAVE_UCHAR 1 -#endif - -#define SIZEOF_UINT 4 -#if SIZEOF_UINT -# define HAVE_UINT 1 -#endif - -#define SIZEOF_ULONG 4 -#if SIZEOF_ULONG -# define HAVE_ULONG 1 -#endif - -/* #undef SIZEOF_INT8 */ -#if SIZEOF_INT8 -# define HAVE_INT8 1 -#endif -/* #undef SIZEOF_UINT8 */ -#if SIZEOF_UINT8 -# define HAVE_UINT8 1 -#endif - -/* #undef SIZEOF_INT16 */ -#if SIZEOF_INT16 -# define HAVE_INT16 1 -#endif -/* #undef SIZEOF_UINT16 */ -#if SIZEOF_UINT16 -# define HAVE_UINT16 1 -#endif - -/* #undef SIZEOF_INT32 */ -#if SIZEOF_INT32 -# define HAVE_INT32 1 -#endif -/* #undef SIZEOF_UINT32 */ -#if SIZEOF_UINT32 -# define HAVE_UINT32 1 -#endif -/* #undef SIZEOF_U_INT32_T */ -#if SIZEOF_U_INT32_T -# define HAVE_U_INT32_T 1 -#endif - -/* #undef SIZEOF_INT64 */ -#if SIZEOF_INT64 -# define HAVE_INT64 1 -#endif -/* #undef SIZEOF_UINT64 */ -#if SIZEOF_UINT64 -# define HAVE_UINT64 1 -#endif - -#define SIZEOF_SOCKLEN_T 4 -#if SIZEOF_SOCKLEN_T -# define HAVE_SOCKLEN_T 1 -#endif - -/* XXX mysql_client_test uses this -- rip it out, please! */ -#define MAX_INDEXES 64 - -#define QSORT_TYPE_IS_VOID 1 -#define RETQSORTTYPE void - -#define SIGNAL_RETURN_TYPE_IS_VOID 1 -#define RETSIGTYPE void - -#define WORDS_BIGENDIAN 1 - -/* Define to `__inline__' or `__inline' if that's what the C compiler calls - it, or to nothing if 'inline' is not supported under any name. */ -#ifndef __cplusplus -# define inline inline -#endif - -#define TIME_WITH_SYS_TIME 1 - -#define STACK_DIRECTION -1 - -#define SHAREDIR "/usr/local/share/mysql" -#define THREAD 1 -#define THREAD_SAFE_CLIENT 1 - -#define DEFAULT_CHARSET_HOME "/usr/local" diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_config.h.in b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_config.h.in deleted file mode 100644 index 58282d2..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_config.h.in +++ /dev/null @@ -1,295 +0,0 @@ - -/* Headers we may want to use. */ -#cmakedefine HAVE_ALLOCA_H 1 -#cmakedefine HAVE_ARPA_INET_H 1 -#cmakedefine HAVE_CRYPT_H 1 -#cmakedefine HAVE_DIRENT_H 1 -#cmakedefine HAVE_EXECINFO_H 1 -#cmakedefine HAVE_FCNTL_H 1 -#cmakedefine HAVE_FENV_H 1 -#cmakedefine HAVE_FLOAT_H 1 -#cmakedefine HAVE_FPU_CONTROL_H 1 -#cmakedefine HAVE_GRP_H 1 -#cmakedefine HAVE_IEEEFP_H 1 -#cmakedefine HAVE_LIMITS_H 1 -#cmakedefine HAVE_MALLOC_H 1 -#cmakedefine HAVE_MEMORY_H 1 -#cmakedefine HAVE_NETINET_IN_H 1 -#cmakedefine HAVE_PATHS_H 1 -#cmakedefine HAVE_PWD_H 1 -#cmakedefine HAVE_SCHED_H 1 -#cmakedefine HAVE_SELECT_H 1 -#cmakedefine HAVE_STDDEF_H 1 -#cmakedefine HAVE_STDLIB_H 1 -#cmakedefine HAVE_STRINGS_H 1 -#cmakedefine HAVE_STRING_H 1 -#cmakedefine HAVE_SYNCH_H 1 -#cmakedefine HAVE_SYSENT_H 1 -#cmakedefine HAVE_SYS_FPU_H 1 -#cmakedefine HAVE_SYS_IOCTL_H 1 -#cmakedefine HAVE_SYS_IPC_H 1 -#cmakedefine HAVE_SYS_MMAN_H 1 -#cmakedefine HAVE_SYS_PRCTL_H 1 -#cmakedefine HAVE_SYS_SELECT_H 1 -#cmakedefine HAVE_SYS_SHM_H 1 -#cmakedefine HAVE_SYS_SOCKET_H 1 -#cmakedefine HAVE_SYS_STAT_H 1 -#cmakedefine HAVE_SYS_STREAM_H 1 -#cmakedefine HAVE_SYS_TIMEB_H 1 -#cmakedefine HAVE_SYS_TYPES_H 1 -#cmakedefine HAVE_SYS_UN_H 1 -#cmakedefine HAVE_TERMIOS_H 1 -#cmakedefine HAVE_TERMIO_H 1 -#cmakedefine HAVE_UNISTD_H 1 -#cmakedefine HAVE_UTIME_H 1 - -/* Functions we may want to use. */ -#cmakedefine HAVE_ACCESS 1 -#cmakedefine HAVE_AIOWAIT 1 -#cmakedefine HAVE_ALARM 1 -#cmakedefine HAVE_ALLOCA 1 -#cmakedefine HAVE_BCMP 1 -#cmakedefine HAVE_BFILL 1 -#cmakedefine HAVE_BMOVE 1 -#cmakedefine HAVE_BZERO 1 -#cmakedefine HAVE_CLOCK_GETTIME 1 -#cmakedefine HAVE_COMPRESS 1 -#cmakedefine HAVE_CRYPT 1 -#cmakedefine HAVE_DLERROR 1 -#cmakedefine HAVE_DLOPEN 1 -#cmakedefine HAVE_FCHMOD 1 -#cmakedefine HAVE_FCNTL 1 -#cmakedefine HAVE_FCONVERT 1 -#cmakedefine HAVE_FDATASYNC 1 -#cmakedefine HAVE_FESETROUND 1 -#cmakedefine HAVE_FINITE 1 -#cmakedefine HAVE_FP_EXCEPT 1 -#cmakedefine HAVE_FSEEKO 1 -#cmakedefine HAVE_FSYNC 1 -#cmakedefine HAVE_GETADDRINFO 1 -#cmakedefine HAVE_GETCWD 1 -#cmakedefine HAVE_GETHOSTBYADDR_R 1 -#cmakedefine HAVE_GETHOSTBYNAME_R 1 -#cmakedefine HAVE_GETHRTIME 1 -#cmakedefine HAVE_GETNAMEINFO 1 -#cmakedefine HAVE_GETPAGESIZE 1 -#cmakedefine HAVE_GETPASS 1 -#cmakedefine HAVE_GETPASSPHRASE 1 -#cmakedefine HAVE_GETPWNAM 1 -#cmakedefine HAVE_GETPWUID 1 -#cmakedefine HAVE_GETRLIMIT 1 -#cmakedefine HAVE_GETRUSAGE 1 -#cmakedefine HAVE_GETWD 1 -#cmakedefine HAVE_GMTIME_R 1 -#cmakedefine HAVE_INITGROUPS 1 -#cmakedefine HAVE_ISNAN 1 -#cmakedefine HAVE_LDIV 1 -#cmakedefine HAVE_LOCALTIME_R 1 -#cmakedefine HAVE_LOG2 1 -#cmakedefine HAVE_LONGJMP 1 -#cmakedefine HAVE_LSTAT 1 -#cmakedefine HAVE_MADVISE 1 -#cmakedefine HAVE_DECL_MADVISE 1 -#cmakedefine HAVE_MALLINFO 1 -#cmakedefine HAVE_MEMCPY 1 -#cmakedefine HAVE_MEMCPY 1 -#cmakedefine HAVE_MEMMOVE 1 -#cmakedefine HAVE_MEMMOVE 1 -#cmakedefine HAVE_MKSTEMP 1 -#cmakedefine HAVE_MLOCK 1 -#cmakedefine HAVE_MLOCKALL 1 -#cmakedefine HAVE_MMAP 1 -#cmakedefine HAVE_MMAP64 1 -#cmakedefine HAVE_PERROR 1 -#cmakedefine HAVE_POLL 1 -#cmakedefine HAVE_PREAD 1 -#cmakedefine HAVE_PTHREAD_ATTR_CREATE 1 -#cmakedefine HAVE_PTHREAD_ATTR_GETSTACKSIZE 1 -#cmakedefine HAVE_PTHREAD_ATTR_SETPRIO 1 -#cmakedefine HAVE_PTHREAD_ATTR_SETSCHEDPARAM 1 -#cmakedefine HAVE_PTHREAD_ATTR_SETSCOPE 1 -#cmakedefine HAVE_PTHREAD_ATTR_SETSTACKSIZE 1 -#cmakedefine HAVE_PTHREAD_CONDATTR_CREATE 1 -#cmakedefine HAVE_PTHREAD_INIT 1 -#cmakedefine HAVE_PTHREAD_KEY_DELETE 1 -#cmakedefine HAVE_PTHREAD_KEY_DELETE 1 -#cmakedefine HAVE_PTHREAD_KILL 1 -#cmakedefine HAVE_PTHREAD_RWLOCK_RDLOCK 1 -#cmakedefine HAVE_PTHREAD_SETPRIO_NP 1 -#cmakedefine HAVE_PTHREAD_SETSCHEDPARAM 1 -#cmakedefine HAVE_PTHREAD_SIGMASK 1 -#cmakedefine HAVE_PTHREAD_THREADMASK 1 -#cmakedefine HAVE_PTHREAD_YIELD_NP 1 -#cmakedefine HAVE_READDIR_R 1 -#cmakedefine HAVE_READLINK 1 -#cmakedefine HAVE_REALPATH 1 -#cmakedefine HAVE_RENAME 1 -#cmakedefine HAVE_RINT 1 -#cmakedefine HAVE_SCHED_YIELD 1 -#cmakedefine HAVE_SELECT 1 -#cmakedefine HAVE_SETFD 1 -#cmakedefine HAVE_SETFILEPOINTER 1 -#cmakedefine HAVE_SIGACTION 1 -#cmakedefine HAVE_SIGTHREADMASK 1 -#cmakedefine HAVE_SIGWAIT 1 -#cmakedefine HAVE_SLEEP 1 -#cmakedefine HAVE_SNPRINTF 1 -#cmakedefine HAVE_STPCPY 1 -#cmakedefine HAVE_STRERROR 1 -#cmakedefine HAVE_STRLCPY 1 -#cmakedefine HAVE_STRNLEN 1 -#cmakedefine HAVE_STRPBRK 1 -#cmakedefine HAVE_STRSEP 1 -#cmakedefine HAVE_STRSTR 1 -#cmakedefine HAVE_STRTOK_R 1 -#cmakedefine HAVE_STRTOK_R 1 -#cmakedefine HAVE_STRTOL 1 -#cmakedefine HAVE_STRTOLL 1 -#cmakedefine HAVE_STRTOUL 1 -#cmakedefine HAVE_STRTOULL 1 -#cmakedefine HAVE_TELL 1 -#cmakedefine HAVE_THR_SETCONCURRENCY 1 -#cmakedefine HAVE_THR_YIELD 1 -#cmakedefine HAVE_VASPRINTF 1 -#cmakedefine HAVE_VSNPRINTF 1 - -/* Symbols we may use */ -#cmakedefine HAVE_SYS_ERRLIST 1 -/* used by stacktrace functions */ -#cmakedefine HAVE_BSS_START 1 - -/* Does "struct timespec" have a "sec" and "nsec" field? */ -#cmakedefine HAVE_TIMESPEC_TS_SEC 1 - -/* Types we may use */ -#cmakedefine SIZEOF_CHAR @SIZEOF_CHAR@ -#if SIZEOF_CHAR -# define HAVE_CHAR 1 -#endif - -#cmakedefine SIZEOF_CHARP @SIZEOF_CHARP@ -#if SIZEOF_CHARP -# define HAVE_CHARP 1 -#endif - -#cmakedefine SIZEOF_SHORT @SIZEOF_SHORT@ -#if SIZEOF_SHORT -# define HAVE_SHORT 1 -#endif - -#cmakedefine SIZEOF_INT @SIZEOF_INT@ -#if SIZEOF_INT -# define HAVE_INT 1 -#endif - -#cmakedefine SIZEOF_LONG @SIZEOF_LONG@ -#if SIZEOF_LONG -# define HAVE_LONG 1 -#endif - -#cmakedefine SIZEOF_LONG_LONG @SIZEOF_LONG_LONG@ -#if SIZEOF_LONG_LONG -# define HAVE_LONG_LONG 1 -#endif - -#cmakedefine SIZEOF_OFF_T @SIZEOF_OFF_T@ -#if SIZEOF_OFF_T -# define HAVE_OFF_T 1 -#endif - -#cmakedefine SIZEOF_SIGSET_T @SIZEOF_SIGSET_T@ -#if SIZEOF_SIGSET_T -# define HAVE_SIGSET_T 1 -#endif - -#cmakedefine SIZEOF_SIZE_T @SIZEOF_SIZE_T@ -#if SIZEOF_SIZE_T -# define HAVE_SIZE_T 1 -#endif - -#cmakedefine SIZEOF_UCHAR @SIZEOF_UCHAR@ -#if SIZEOF_UCHAR -# define HAVE_UCHAR 1 -#endif - -#cmakedefine SIZEOF_UINT @SIZEOF_UINT@ -#if SIZEOF_UINT -# define HAVE_UINT 1 -#endif - -#cmakedefine SIZEOF_ULONG @SIZEOF_ULONG@ -#if SIZEOF_ULONG -# define HAVE_ULONG 1 -#endif - -#cmakedefine SIZEOF_INT8 @SIZEOF_INT8@ -#if SIZEOF_INT8 -# define HAVE_INT8 1 -#endif -#cmakedefine SIZEOF_UINT8 @SIZEOF_UINT8@ -#if SIZEOF_UINT8 -# define HAVE_UINT8 1 -#endif - -#cmakedefine SIZEOF_INT16 @SIZEOF_INT16@ -#if SIZEOF_INT16 -# define HAVE_INT16 1 -#endif -#cmakedefine SIZEOF_UINT16 @SIZEOF_UINT16@ -#if SIZEOF_UINT16 -# define HAVE_UINT16 1 -#endif - -#cmakedefine SIZEOF_INT32 @SIZEOF_INT32@ -#if SIZEOF_INT32 -# define HAVE_INT32 1 -#endif -#cmakedefine SIZEOF_UINT32 @SIZEOF_UINT32@ -#if SIZEOF_UINT32 -# define HAVE_UINT32 1 -#endif -#cmakedefine SIZEOF_U_INT32_T @SIZEOF_U_INT32_T@ -#if SIZEOF_U_INT32_T -# define HAVE_U_INT32_T 1 -#endif - -#cmakedefine SIZEOF_INT64 @SIZEOF_INT64@ -#if SIZEOF_INT64 -# define HAVE_INT64 1 -#endif -#cmakedefine SIZEOF_UINT64 @SIZEOF_UINT64@ -#if SIZEOF_UINT64 -# define HAVE_UINT64 1 -#endif - -#cmakedefine SIZEOF_SOCKLEN_T @SIZEOF_SOCKLEN_T@ -#if SIZEOF_SOCKLEN_T -# define HAVE_SOCKLEN_T 1 -#endif - -/* XXX mysql_client_test uses this -- rip it out, please! */ -#define MAX_INDEXES 64 - -#cmakedefine QSORT_TYPE_IS_VOID 1 -#define RETQSORTTYPE @RETQSORTTYPE@ - -#cmakedefine SIGNAL_RETURN_TYPE_IS_VOID 1 -#define RETSIGTYPE @RETSIGTYPE@ - -#cmakedefine WORDS_BIGENDIAN 1 - -/* Define to `__inline__' or `__inline' if that's what the C compiler calls - it, or to nothing if 'inline' is not supported under any name. */ -#ifndef __cplusplus -# define inline @C_INLINE@ -#endif - -#define TIME_WITH_SYS_TIME 1 - -#define STACK_DIRECTION -1 - -#define SHAREDIR "@SHAREDIR@" -#define THREAD 1 -#define THREAD_SAFE_CLIENT 1 - -#define DEFAULT_CHARSET_HOME "@DEFAULT_CHARSET_HOME@" diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_dbug.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_dbug.h deleted file mode 100644 index c4a2f88..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_dbug.h +++ /dev/null @@ -1,140 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef _dbug_h -#define _dbug_h - -#ifdef __cplusplus -extern "C" { -#endif -#if !defined(DBUG_OFF) && !defined(_lint) - -struct _db_stack_frame_ { - const char *func; /* function name of the previous stack frame */ - const char *file; /* filename of the function of previous frame */ - uint level; /* this nesting level, highest bit enables tracing */ - struct _db_stack_frame_ *prev; /* pointer to the previous frame */ -}; - -struct _db_code_state_; -extern my_bool _dbug_on_; -extern my_bool _db_keyword_(struct _db_code_state_ *, const char *, int); -extern int _db_explain_(struct _db_code_state_ *cs, char *buf, size_t len); -extern int _db_explain_init_(char *buf, size_t len); -extern int _db_is_pushed_(void); -extern void _db_setjmp_(void); -extern void _db_longjmp_(void); -extern void _db_process_(const char *name); -extern void _db_push_(const char *control); -extern void _db_pop_(void); -extern void _db_set_(const char *control); -extern void _db_set_init_(const char *control); -extern void _db_enter_(const char *_func_, const char *_file_, uint _line_, - struct _db_stack_frame_ *_stack_frame_); -extern void _db_return_(uint _line_, struct _db_stack_frame_ *_stack_frame_); -extern void _db_pargs_(uint _line_,const char *keyword); -extern void _db_doprnt_ _VARARGS((const char *format,...)) - ATTRIBUTE_FORMAT(printf, 1, 2); -extern void _db_dump_(uint _line_,const char *keyword, - const unsigned char *memory, size_t length); -extern void _db_end_(void); -extern void _db_lock_file_(void); -extern void _db_unlock_file_(void); -extern FILE *_db_fp_(void); -extern void _db_flush_(); - -#define DBUG_ENTER(a) struct _db_stack_frame_ _db_stack_frame_; \ - _db_enter_ (a,__FILE__,__LINE__,&_db_stack_frame_) -#define DBUG_LEAVE _db_return_ (__LINE__, &_db_stack_frame_) -#define DBUG_RETURN(a1) do {DBUG_LEAVE; return(a1);} while(0) -#define DBUG_VOID_RETURN do {DBUG_LEAVE; return;} while(0) -#define DBUG_EXECUTE(keyword,a1) \ - do {if (_db_keyword_(0, (keyword), 0)) { a1 }} while(0) -#define DBUG_EXECUTE_IF(keyword,a1) \ - do {if (_db_keyword_(0, (keyword), 1)) { a1 }} while(0) -#define DBUG_EVALUATE(keyword,a1,a2) \ - (_db_keyword_(0,(keyword), 0) ? (a1) : (a2)) -#define DBUG_EVALUATE_IF(keyword,a1,a2) \ - (_db_keyword_(0,(keyword), 1) ? (a1) : (a2)) -#define DBUG_PRINT(keyword,arglist) \ - do {_db_pargs_(__LINE__,keyword); _db_doprnt_ arglist;} while(0) -#define DBUG_PUSH(a1) _db_push_ (a1) -#define DBUG_POP() _db_pop_ () -#define DBUG_SET(a1) _db_set_ (a1) -#define DBUG_SET_INITIAL(a1) _db_set_init_ (a1) -#define DBUG_PROCESS(a1) _db_process_(a1) -#define DBUG_FILE _db_fp_() -#define DBUG_SETJMP(a1) (_db_setjmp_ (), setjmp (a1)) -#define DBUG_LONGJMP(a1,a2) (_db_longjmp_ (), longjmp (a1, a2)) -#define DBUG_DUMP(keyword,a1,a2) _db_dump_(__LINE__,keyword,a1,a2) -#define DBUG_END() _db_end_ () -#define DBUG_LOCK_FILE _db_lock_file_() -#define DBUG_UNLOCK_FILE _db_unlock_file_() -#define DBUG_ASSERT(A) assert(A) -#define DBUG_EXPLAIN(buf,len) _db_explain_(0, (buf),(len)) -#define DBUG_EXPLAIN_INITIAL(buf,len) _db_explain_init_((buf),(len)) -#define DEBUGGER_OFF do { _dbug_on_= 0; } while(0) -#define DEBUGGER_ON do { _dbug_on_= 1; } while(0) -#define IF_DBUG(A) A -#ifndef __WIN__ -#define DBUG_ABORT() (_db_flush_(), abort()) -#else -/* - Avoid popup with abort/retry/ignore buttons. When BUG#31745 is fixed we can - call abort() instead of _exit(3) (now it would cause a "test signal" popup). -*/ -#include -#define DBUG_ABORT() (_db_flush_(),\ - (void)_CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_FILE),\ - (void)_CrtSetReportFile(_CRT_ERROR, _CRTDBG_FILE_STDERR),\ - _exit(3)) -#endif - -#else /* No debugger */ - -#define DBUG_ENTER(a1) -#define DBUG_LEAVE -#define DBUG_RETURN(a1) do { return(a1); } while(0) -#define DBUG_VOID_RETURN do { return; } while(0) -#define DBUG_EXECUTE(keyword,a1) do { } while(0) -#define DBUG_EXECUTE_IF(keyword,a1) do { } while(0) -#define DBUG_EVALUATE(keyword,a1,a2) (a2) -#define DBUG_EVALUATE_IF(keyword,a1,a2) (a2) -#define DBUG_PRINT(keyword,arglist) do { } while(0) -#define DBUG_PUSH(a1) do { } while(0) -#define DBUG_SET(a1) do { } while(0) -#define DBUG_SET_INITIAL(a1) do { } while(0) -#define DBUG_POP() do { } while(0) -#define DBUG_PROCESS(a1) do { } while(0) -#define DBUG_SETJMP(a1) setjmp(a1) -#define DBUG_LONGJMP(a1) longjmp(a1) -#define DBUG_DUMP(keyword,a1,a2) do { } while(0) -#define DBUG_END() do { } while(0) -#define DBUG_ASSERT(A) do { } while(0) -#define DBUG_LOCK_FILE do { } while(0) -#define DBUG_FILE (stderr) -#define DBUG_UNLOCK_FILE do { } while(0) -#define DBUG_EXPLAIN(buf,len) -#define DBUG_EXPLAIN_INITIAL(buf,len) -#define DEBUGGER_OFF do { } while(0) -#define DEBUGGER_ON do { } while(0) -#define IF_DBUG(A) -#define DBUG_ABORT() abort() - -#endif -#ifdef __cplusplus -} -#endif -#endif diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_dir.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_dir.h deleted file mode 100644 index 90d708a..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_dir.h +++ /dev/null @@ -1,109 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef _my_dir_h -#define _my_dir_h -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef MY_DIR_H -#define MY_DIR_H - -#include - - /* Defines for my_dir and my_stat */ - -#define MY_S_IFMT S_IFMT /* type of file */ -#define MY_S_IFDIR S_IFDIR /* directory */ -#define MY_S_IFCHR S_IFCHR /* character special */ -#define MY_S_IFBLK S_IFBLK /* block special */ -#define MY_S_IFREG S_IFREG /* regular */ -#define MY_S_IFIFO S_IFIFO /* fifo */ -#define MY_S_ISUID S_ISUID /* set user id on execution */ -#define MY_S_ISGID S_ISGID /* set group id on execution */ -#define MY_S_ISVTX S_ISVTX /* save swapped text even after use */ -#define MY_S_IREAD S_IREAD /* read permission, owner */ -#define MY_S_IWRITE S_IWRITE /* write permission, owner */ -#define MY_S_IEXEC S_IEXEC /* execute/search permission, owner */ - -#define MY_S_ISDIR(m) (((m) & MY_S_IFMT) == MY_S_IFDIR) -#define MY_S_ISCHR(m) (((m) & MY_S_IFMT) == MY_S_IFCHR) -#define MY_S_ISBLK(m) (((m) & MY_S_IFMT) == MY_S_IFBLK) -#define MY_S_ISREG(m) (((m) & MY_S_IFMT) == MY_S_IFREG) -#define MY_S_ISFIFO(m) (((m) & MY_S_IFMT) == MY_S_IFIFO) - -#define MY_DONT_SORT 512 /* my_lib; Don't sort files */ -#define MY_WANT_STAT 1024 /* my_lib; stat files */ - - /* typedefs for my_dir & my_stat */ - -#ifdef USE_MY_STAT_STRUCT - -typedef struct my_stat -{ - dev_t st_dev; /* major & minor device numbers */ - ino_t st_ino; /* inode number */ - ushort st_mode; /* file permissons (& suid sgid .. bits) */ - short st_nlink; /* number of links to file */ - ushort st_uid; /* user id */ - ushort st_gid; /* group id */ - dev_t st_rdev; /* more major & minor device numbers (???) */ - off_t st_size; /* size of file */ - time_t st_atime; /* time for last read */ - time_t st_mtime; /* time for last contens modify */ - time_t st_ctime; /* time for last inode or contents modify */ -} MY_STAT; - -#else - -#if(_MSC_VER) -#define MY_STAT struct _stati64 /* 64 bit file size */ -#else -#define MY_STAT struct stat /* Orginal struct have what we need */ -#endif - -#endif /* USE_MY_STAT_STRUCT */ - -/* Struct describing one file returned from my_dir */ -typedef struct fileinfo -{ - char *name; - MY_STAT *mystat; -} FILEINFO; - -typedef struct st_my_dir /* Struct returned from my_dir */ -{ - /* - These members are just copies of parts of DYNAMIC_ARRAY structure, - which is allocated right after the end of MY_DIR structure (MEM_ROOT - for storing names is also resides there). We've left them here because - we don't want to change code that uses my_dir. - */ - struct fileinfo *dir_entry; - uint number_off_files; -} MY_DIR; - -extern MY_DIR *my_dir(const char *path,myf MyFlags); -extern void my_dirend(MY_DIR *buffer); -extern MY_STAT *my_stat(const char *path, MY_STAT *stat_area, myf my_flags); -extern int my_fstat(int filenr, MY_STAT *stat_area, myf MyFlags); - -#endif /* MY_DIR_H */ - -#ifdef __cplusplus -} -#endif -#endif diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_getopt.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_getopt.h deleted file mode 100644 index 7cbad60..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_getopt.h +++ /dev/null @@ -1,86 +0,0 @@ -/* Copyright (C) 2002-2004 MySQL AB - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef _my_getopt_h -#define _my_getopt_h - -C_MODE_START - -#define GET_NO_ARG 1 -#define GET_BOOL 2 -#define GET_INT 3 -#define GET_UINT 4 -#define GET_LONG 5 -#define GET_ULONG 6 -#define GET_LL 7 -#define GET_ULL 8 -#define GET_STR 9 -#define GET_STR_ALLOC 10 -#define GET_DISABLED 11 -#define GET_ENUM 12 -#define GET_SET 13 -#define GET_DOUBLE 14 - -#define GET_ASK_ADDR 128 -#define GET_TYPE_MASK 127 - -enum get_opt_arg_type { NO_ARG, OPT_ARG, REQUIRED_ARG }; - -struct st_typelib; - -struct my_option -{ - const char *name; /* Name of the option */ - int id; /* unique id or short option */ - const char *comment; /* option comment, for autom. --help */ - uchar **value; /* The variable value */ - uchar **u_max_value; /* The user def. max variable value */ - struct st_typelib *typelib; /* Pointer to possible values */ - ulong var_type; - enum get_opt_arg_type arg_type; - longlong def_value; /* Default value */ - longlong min_value; /* Min allowed value */ - longlong max_value; /* Max allowed value */ - longlong sub_size; /* Subtract this from given value */ - long block_size; /* Value should be a mult. of this */ - void *app_type; /* To be used by an application */ -}; - -typedef my_bool (* my_get_one_option) (int, const struct my_option *, char * ); -typedef void (* my_error_reporter) (enum loglevel level, const char *format, ... ); - -extern char *disabled_my_option; -extern my_bool my_getopt_print_errors; -extern my_bool my_getopt_skip_unknown; -extern my_error_reporter my_getopt_error_reporter; - -extern int handle_options (int *argc, char ***argv, - const struct my_option *longopts, my_get_one_option); -extern void my_cleanup_options(const struct my_option *options); -extern void my_print_help(const struct my_option *options); -extern void my_print_variables(const struct my_option *options); -extern void my_getopt_register_get_addr(uchar ** (*func_addr)(const char *, uint, - const struct my_option *, int *)); - -ulonglong getopt_ull_limit_value(ulonglong num, const struct my_option *optp, - my_bool *fix); -longlong getopt_ll_limit_value(longlong, const struct my_option *, - my_bool *fix); -my_bool getopt_compare_strings(const char *s, const char *t, uint length); - -C_MODE_END - -#endif /* _my_getopt_h */ - diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_global.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_global.h deleted file mode 100644 index 131507c..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_global.h +++ /dev/null @@ -1,1616 +0,0 @@ -/* Copyright (C) 2000-2003 MySQL AB - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* This is the include file that should be included 'first' in every C file. */ - -#ifndef _global_h -#define _global_h - -/* - InnoDB depends on some MySQL internals which other plugins should not - need. This is because of InnoDB's foreign key support, "safe" binlog - truncation, and other similar legacy features. - - We define accessors for these internals unconditionally, but do not - expose them in mysql/plugin.h. They are declared in ha_innodb.h for - InnoDB's use. -*/ -#define INNODB_COMPATIBILITY_HOOKS - -#ifdef __CYGWIN__ -/* We use a Unix API, so pretend it's not Windows */ -#undef WIN -#undef WIN32 -#undef _WIN -#undef _WIN32 -#undef _WIN64 -#undef __WIN__ -#undef __WIN32__ -#define HAVE_ERRNO_AS_DEFINE -#endif /* __CYGWIN__ */ - -#if defined(__QNXNTO__) && !defined(FD_SETSIZE) -#define FD_SETSIZE 1024 /* Max number of file descriptor bits in - fd_set, used when calling 'select' - Must be defined before including - "sys/select.h" and "sys/time.h" - */ -#endif - - -/* to make command line shorter we'll define USE_PRAGMA_INTERFACE here */ -#ifdef USE_PRAGMA_IMPLEMENTATION -#define USE_PRAGMA_INTERFACE -#endif - -#if defined(i386) && !defined(__i386__) -#define __i386__ -#endif - -/* Macros to make switching between C and C++ mode easier */ -#ifdef __cplusplus -#define C_MODE_START extern "C" { -#define C_MODE_END } -#define STATIC_CAST(TYPE) static_cast -#else -#define C_MODE_START -#define C_MODE_END -#define STATIC_CAST(TYPE) (TYPE) -#endif - -#if defined(_WIN32) || defined(_WIN64) || defined(__WIN32__) || defined(WIN32) -#include -#else -#include -#if defined(__cplusplus) && defined(inline) -#undef inline /* fix configure problem */ -#endif -#endif /* _WIN32... */ - -#include - -/* Make it easier to add conditional code for windows */ -#ifdef __WIN__ -#define IF_WIN(A,B) (A) -#else -#define IF_WIN(A,B) (B) -#endif - -#ifndef EMBEDDED_LIBRARY -#ifdef WITH_NDB_BINLOG -#define HAVE_NDB_BINLOG 1 -#endif -#endif /* !EMBEDDED_LIBRARY */ - -#ifndef EMBEDDED_LIBRARY -#define HAVE_REPLICATION -#define HAVE_EXTERNAL_CLIENT -#endif - -/* Some defines to avoid ifdefs in the code */ -#ifndef NETWARE_YIELD -#define NETWARE_YIELD -#define NETWARE_SET_SCREEN_MODE(A) -#endif - -/* Workaround for _LARGE_FILES and _LARGE_FILE_API incompatibility on AIX */ -#if defined(_AIX) && defined(_LARGE_FILE_API) -#undef _LARGE_FILE_API -#endif - -/* - The macros below are used to allow build of Universal/fat binaries of - MySQL and MySQL applications under darwin. -*/ -#if defined(__APPLE__) && defined(__MACH__) -# undef SIZEOF_CHARP -# undef SIZEOF_SHORT -# undef SIZEOF_INT -# undef SIZEOF_LONG -# undef SIZEOF_LONG_LONG -# undef SIZEOF_OFF_T -# undef WORDS_BIGENDIAN -# define SIZEOF_SHORT 2 -# define SIZEOF_INT 4 -# define SIZEOF_LONG_LONG 8 -# define SIZEOF_OFF_T 8 -# if defined(__i386__) || defined(__ppc__) -# define SIZEOF_CHARP 4 -# define SIZEOF_LONG 4 -# elif defined(__x86_64__) || defined(__ppc64__) -# define SIZEOF_CHARP 8 -# define SIZEOF_LONG 8 -# else -# error Building FAT binary for an unknown architecture. -# endif -# if defined(__ppc__) || defined(__ppc64__) -# define WORDS_BIGENDIAN -# endif -#endif /* defined(__APPLE__) && defined(__MACH__) */ - - -/* - The macros below are borrowed from include/linux/compiler.h in the - Linux kernel. Use them to indicate the likelyhood of the truthfulness - of a condition. This serves two purposes - newer versions of gcc will be - able to optimize for branch predication, which could yield siginficant - performance gains in frequently executed sections of the code, and the - other reason to use them is for documentation -*/ - -#if !defined(__GNUC__) || (__GNUC__ == 2 && __GNUC_MINOR__ < 96) -#define __builtin_expect(x, expected_value) (x) -#endif - -/** - The semantics of builtin_expect() are that - 1) its two arguments are long - 2) it's likely that they are == - Those of our likely(x) are that x can be bool/int/longlong/pointer. -*/ -#define likely(x) __builtin_expect(((x) != 0),1) -#define unlikely(x) __builtin_expect(((x) != 0),0) - -/* - The macros below are useful in optimising places where it has been - discovered that cache misses stall the process and where a prefetch - of the cache line can improve matters. This is available in GCC 3.1.1 - and later versions. - PREFETCH_READ says that addr is going to be used for reading and that - it is to be kept in caches if possible for a while - PREFETCH_WRITE also says that the item to be cached is likely to be - updated. - The *LOCALITY scripts are also available for experimentation purposes - mostly and should only be used if they are verified to improve matters. - For more input see GCC manual (available in GCC 3.1.1 and later) -*/ - -#if (__GNUC__ > 3) || (__GNUC__ == 3 && __GNUC_MINOR > 10) -#define PREFETCH_READ(addr) __builtin_prefetch(addr, 0, 3) -#define PREFETCH_WRITE(addr) \ - __builtin_prefetch(addr, 1, 3) -#define PREFETCH_READ_LOCALITY(addr, locality) \ - __builtin_prefetch(addr, 0, locality) -#define PREFETCH_WRITE_LOCALITY(addr, locality) \ - __builtin_prefetch(addr, 1, locality) -#else -#define PREFETCH_READ(addr) -#define PREFETCH_READ_LOCALITY(addr, locality) -#define PREFETCH_WRITE(addr) -#define PREFETCH_WRITE_LOCALITY(addr, locality) -#endif - -/* - The following macro is used to ensure that code often used in most - SQL statements and definitely for parts of the SQL processing are - kept in a code segment by itself. This has the advantage that the - risk of common code being overlapping in caches of the CPU is less. - This can be a cause of big performance problems. - Routines should be put in this category with care and when they are - put there one should also strive to make as much of the error handling - as possible (or uncommon code of the routine) to execute in a - separate method to avoid moving to much code to this code segment. - - It is very easy to use, simply add HOT_METHOD at the end of the - function declaration. - For more input see GCC manual (available in GCC 2.95 and later) -*/ - -#if (__GNUC__ > 2) || (__GNUC__ == 2 && __GNUC_MINOR > 94) -#define HOT_METHOD \ - __attribute__ ((section ("hot_code_section"))) -#else -#define HOT_METHOD -#endif - -/* - The following macro is used to ensure that popular global variables - are located next to each other to avoid that they contend for the - same cache lines. - - It is very easy to use, simply add HOT_DATA at the end of the declaration - of the variable, the variable must be initialised because of the way - that linker works so a declaration using HOT_DATA should look like: - uint global_hot_data HOT_DATA = 0; - For more input see GCC manual (available in GCC 2.95 and later) -*/ - -#if (__GNUC__ > 2) || (__GNUC__ == 2 && __GNUC_MINOR > 94) -#define HOT_DATA \ - __attribute__ ((section ("hot_data_section"))) -#else -#define HOT_DATA -#endif - -/* - now let's figure out if inline functions are supported - autoconf defines 'inline' to be empty, if not -*/ -#define inline_test_1(X) X ## 1 -#define inline_test_2(X) inline_test_1(X) -#if inline_test_2(inline) != 1 -#define HAVE_INLINE -#endif -#undef inline_test_2 -#undef inline_test_1 -/* helper macro for "instantiating" inline functions */ -#define STATIC_INLINE static inline - -/* - The following macros are used to control inlining a bit more than - usual. These macros are used to ensure that inlining always or - never occurs (independent of compilation mode). - For more input see GCC manual (available in GCC 3.1.1 and later) -*/ - -#if (__GNUC__ > 3) || (__GNUC__ == 3 && __GNUC_MINOR > 10) -#define ALWAYS_INLINE __attribute__ ((always_inline)) -#define NEVER_INLINE __attribute__ ((noinline)) -#else -#define ALWAYS_INLINE -#define NEVER_INLINE -#endif - - -/* Fix problem with S_ISLNK() on Linux */ -#if defined(TARGET_OS_LINUX) || defined(__GLIBC__) -#undef _GNU_SOURCE -#define _GNU_SOURCE 1 -#endif - -/* - Temporary solution to solve bug#7156. Include "sys/types.h" before - the thread headers, else the function madvise() will not be defined -*/ -#if defined(HAVE_SYS_TYPES_H) && ( defined(sun) || defined(__sun) ) -#include -#endif - -/* The client defines this to avoid all thread code */ -#if defined(UNDEF_THREADS_HACK) -#undef THREAD -#undef HAVE_LINUXTHREADS -#undef HAVE_NPTL -#endif - -#ifdef HAVE_THREADS_WITHOUT_SOCKETS -/* MIT pthreads does not work with unix sockets */ -#undef HAVE_SYS_UN_H -#endif - -#define __EXTENSIONS__ 1 /* We want some extension */ -#ifndef __STDC_EXT__ -#define __STDC_EXT__ 1 /* To get large file support on hpux */ -#endif - -/* - Solaris 9 include file refers to X/Open document - - System Interfaces and Headers, Issue 5 - - saying we should define _XOPEN_SOURCE=500 to get POSIX.1c prototypes, - but apparently other systems (namely FreeBSD) don't agree. - - On a newer Solaris 10, the above file recognizes also _XOPEN_SOURCE=600. - Furthermore, it tests that if a program requires older standard - (_XOPEN_SOURCE<600 or _POSIX_C_SOURCE<200112L) it cannot be - run on a new compiler (that defines _STDC_C99) and issues an #error. - It's also an #error if a program requires new standard (_XOPEN_SOURCE=600 - or _POSIX_C_SOURCE=200112L) and a compiler does not define _STDC_C99. - - To add more to this mess, Sun Studio C compiler defines _STDC_C99 while - C++ compiler does not! - - So, in a desperate attempt to get correct prototypes for both - C and C++ code, we define either _XOPEN_SOURCE=600 or _XOPEN_SOURCE=500 - depending on the compiler's announced C standard support. - - Cleaner solutions are welcome. -*/ -#ifdef __sun -#if __STDC_VERSION__ - 0 >= 199901L -#define _XOPEN_SOURCE 600 -#else -#define _XOPEN_SOURCE 500 -#endif -#endif - -#if defined(THREAD) && !defined(__WIN__) -#ifndef _POSIX_PTHREAD_SEMANTICS -#define _POSIX_PTHREAD_SEMANTICS /* We want posix threads */ -#endif - -#if !defined(SCO) -#define _REENTRANT 1 /* Some thread libraries require this */ -#endif -#if !defined(_THREAD_SAFE) && !defined(_AIX) -#define _THREAD_SAFE /* Required for OSF1 */ -#endif -#if defined(HPUX10) || defined(HPUX11) -C_MODE_START /* HPUX needs this, signal.h bug */ -#include -C_MODE_END -#else -#include /* AIX must have this included first */ -#endif -#if !defined(SCO) && !defined(_REENTRANT) -#define _REENTRANT 1 /* Threads requires reentrant code */ -#endif -#endif /* THREAD */ - -/* Go around some bugs in different OS and compilers */ -#ifdef _AIX /* By soren@t.dk */ -#define _H_STRINGS -#define _SYS_STREAM_H -/* #define _AIX32_CURSES */ /* XXX: this breaks AIX 4.3.3 (others?). */ -#define ulonglong2double(A) my_ulonglong2double(A) -#define my_off_t2double(A) my_ulonglong2double(A) -C_MODE_START -double my_ulonglong2double(unsigned long long A); -C_MODE_END -#endif /* _AIX */ - -#ifdef HAVE_BROKEN_SNPRINTF /* HPUX 10.20 don't have this defined */ -#undef HAVE_SNPRINTF -#endif -#ifdef HAVE_BROKEN_PREAD -/* - pread()/pwrite() are not 64 bit safe on HP-UX 11.0 without - installing the kernel patch PHKL_20349 or greater -*/ -#undef HAVE_PREAD -#undef HAVE_PWRITE -#endif -#if defined(HAVE_BROKEN_INLINE) && !defined(__cplusplus) -#undef inline -#define inline -#endif - -#ifdef UNDEF_HAVE_GETHOSTBYNAME_R /* For OSF4.x */ -#undef HAVE_GETHOSTBYNAME_R -#endif -#ifdef UNDEF_HAVE_INITGROUPS /* For AIX 4.3 */ -#undef HAVE_INITGROUPS -#endif - -/* gcc/egcs issues */ - -#if defined(__GNUC) && defined(__EXCEPTIONS) -#error "Please add -fno-exceptions to CXXFLAGS and reconfigure/recompile" -#endif - - -/* Fix a bug in gcc 2.8.0 on IRIX 6.2 */ -#if SIZEOF_LONG == 4 && defined(__LONG_MAX__) && (__GNUC__ == 2 && __GNUC_MINOR__ == 8) -#undef __LONG_MAX__ /* Is a longlong value in gcc 2.8.0 ??? */ -#define __LONG_MAX__ 2147483647 -#endif - -/* egcs 1.1.2 has a problem with memcpy on Alpha */ -#if defined(__GNUC__) && defined(__alpha__) && ! (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)) -#define BAD_MEMCPY -#endif - -#if defined(_lint) && !defined(lint) -#define lint -#endif -#if SIZEOF_LONG_LONG > 4 && !defined(_LONG_LONG) -#define _LONG_LONG 1 /* For AIX string library */ -#endif - -#ifndef stdin -#include -#endif -#include -#ifdef HAVE_STDLIB_H -#include -#endif -#ifdef HAVE_STDDEF_H -#include -#endif - -#include -#ifdef HAVE_LIMITS_H -#include -#endif -#ifdef HAVE_FLOAT_H -#include -#endif -#ifdef HAVE_FENV_H -#include /* For fesetround() */ -#endif - -#ifdef HAVE_SYS_TYPES_H -#include -#endif -#ifdef HAVE_FCNTL_H -#include -#endif -#ifdef HAVE_SYS_STAT_H -#include -#endif -#ifdef HAVE_SYS_TIMEB_H -#include /* Avoid warnings on SCO */ -#endif -#if TIME_WITH_SYS_TIME -# include -# include -#else -# if HAVE_SYS_TIME_H -# include -# else -# include -# endif -#endif /* TIME_WITH_SYS_TIME */ -#ifdef HAVE_UNISTD_H -#include -#endif -#if defined(__cplusplus) && defined(NO_CPLUSPLUS_ALLOCA) -#undef HAVE_ALLOCA -#undef HAVE_ALLOCA_H -#endif -#ifdef HAVE_ALLOCA_H -#include -#endif - -#include /* Recommended by debian */ -/* We need the following to go around a problem with openssl on solaris */ -#if defined(HAVE_CRYPT_H) -#include -#endif - -/* - A lot of our programs uses asserts, so better to always include it - This also fixes a problem when people uses DBUG_ASSERT without including - assert.h -*/ -#include - -/* an assert that works at compile-time. only for constant expression */ -#ifdef _some_old_compiler_that_does_not_understand_the_construct_below_ -#define compile_time_assert(X) do { } while(0) -#else -#define compile_time_assert(X) \ - do \ - { \ - typedef char compile_time_assert[(X) ? 1 : -1]; \ - } while(0) -#endif - -/* Go around some bugs in different OS and compilers */ -#if defined (HPUX11) && defined(_LARGEFILE_SOURCE) -#define _LARGEFILE64_SOURCE -#endif -#if defined(_HPUX_SOURCE) && defined(HAVE_SYS_STREAM_H) -#include /* HPUX 10.20 defines ulong here. UGLY !!! */ -#define HAVE_ULONG -#endif -#if defined(HPUX10) && defined(_LARGEFILE64_SOURCE) && defined(THREAD) -/* Fix bug in setrlimit */ -#undef setrlimit -#define setrlimit cma_setrlimit64 -#endif -/* Declare madvise where it is not declared for C++, like Solaris */ -#if HAVE_MADVISE && !HAVE_DECL_MADVISE && defined(__cplusplus) -extern "C" int madvise(void *addr, size_t len, int behav); -#endif - -#ifdef __QNXNTO__ -/* This has to be after include limits.h */ -#define HAVE_ERRNO_AS_DEFINE -#define HAVE_FCNTL_LOCK -#undef HAVE_FINITE -#undef LONGLONG_MIN /* These get wrongly defined in QNX 6.2 */ -#undef LONGLONG_MAX /* standard system library 'limits.h' */ -#endif - -/* We can not live without the following defines */ - -#define USE_MYFUNC 1 /* Must use syscall indirection */ -#define MASTER 1 /* Compile without unireg */ -#define ENGLISH 1 /* Messages in English */ -#define POSIX_MISTAKE 1 /* regexp: Fix stupid spec error */ -#define USE_REGEX 1 /* We want the use the regex library */ -/* Do not define for ultra sparcs */ -#define USE_BMOVE512 1 /* Use this unless system bmove is faster */ - -#define QUOTE_ARG(x) #x /* Quote argument (before cpp) */ -#define STRINGIFY_ARG(x) QUOTE_ARG(x) /* Quote argument, after cpp */ - -/* Paranoid settings. Define I_AM_PARANOID if you are paranoid */ -#ifdef I_AM_PARANOID -#define DONT_ALLOW_USER_CHANGE 1 -#define DONT_USE_MYSQL_PWD 1 -#endif - -/* Does the system remember a signal handler after a signal ? */ -#ifndef HAVE_BSD_SIGNALS -#define DONT_REMEMBER_SIGNAL -#endif - -#if defined(_lint) || defined(FORCE_INIT_OF_VARS) -#define LINT_INIT(var) var=0 /* No uninitialize-warning */ -#else -#define LINT_INIT(var) -#endif - -#if defined(_lint) || defined(FORCE_INIT_OF_VARS) || defined(HAVE_purify) -#define PURIFY_OR_LINT_INIT(var) var=0 -#else -#define PURIFY_OR_LINT_INIT(var) -#endif - -#if !defined(HAVE_UINT) -#undef HAVE_UINT -#define HAVE_UINT -typedef unsigned int uint; -typedef unsigned short ushort; -#endif - -#define CMP_NUM(a,b) (((a) < (b)) ? -1 : ((a) == (b)) ? 0 : 1) -#define sgn(a) (((a) < 0) ? -1 : ((a) > 0) ? 1 : 0) -#define swap_variables(t, a, b) { t swap_dummy; swap_dummy= a; a= b; b= swap_dummy; } -#define test(a) ((a) ? 1 : 0) -#define set_if_bigger(a,b) do { if ((a) < (b)) (a)=(b); } while(0) -#define set_if_smaller(a,b) do { if ((a) > (b)) (a)=(b); } while(0) -#define test_all_bits(a,b) (((a) & (b)) == (b)) -#define set_bits(type, bit_count) (sizeof(type)*8 <= (bit_count) ? ~(type) 0 : ((((type) 1) << (bit_count)) - (type) 1)) -#define array_elements(A) ((uint) (sizeof(A)/sizeof(A[0]))) - -/* Define some general constants */ -#ifndef TRUE -#define TRUE (1) /* Logical true */ -#define FALSE (0) /* Logical false */ -#endif - -#if defined(__GNUC__) -#define function_volatile volatile -#define my_reinterpret_cast(A) reinterpret_cast -#define my_const_cast(A) const_cast -# ifndef GCC_VERSION -# define GCC_VERSION (__GNUC__ * 1000 + __GNUC_MINOR__) -# endif -#elif !defined(my_reinterpret_cast) -#define my_reinterpret_cast(A) (A) -#define my_const_cast(A) (A) -#endif - -#include - -/* - Wen using the embedded library, users might run into link problems, - duplicate declaration of __cxa_pure_virtual, solved by declaring it a - weak symbol. -*/ -#if defined(USE_MYSYS_NEW) && ! defined(DONT_DECLARE_CXA_PURE_VIRTUAL) -C_MODE_START -int __cxa_pure_virtual () __attribute__ ((weak)); -C_MODE_END -#endif - -/* From old s-system.h */ - -/* - Support macros for non ansi & other old compilers. Since such - things are no longer supported we do nothing. We keep then since - some of our code may still be needed to upgrade old customers. -*/ -#define _VARARGS(X) X -#define _STATIC_VARARGS(X) X - -/* The DBUG_ON flag always takes precedence over default DBUG_OFF */ -#if defined(DBUG_ON) && defined(DBUG_OFF) -#undef DBUG_OFF -#endif - -/* We might be forced to turn debug off, if not turned off already */ -#if (defined(FORCE_DBUG_OFF) || defined(_lint)) && !defined(DBUG_OFF) -# define DBUG_OFF -# ifdef DBUG_ON -# undef DBUG_ON -# endif -#endif - -typedef char my_bool; /* Small bool */ -#include - -#define MIN_ARRAY_SIZE 0 /* Zero or One. Gcc allows zero*/ -#define ASCII_BITS_USED 8 /* Bit char used */ -#define NEAR_F /* No near function handling */ - -/* Some types that is different between systems */ - -typedef int File; /* File descriptor */ -#ifndef Socket_defined -typedef int my_socket; /* File descriptor for sockets */ -#define INVALID_SOCKET -1 -#endif -/* Type for fuctions that handles signals */ -#define sig_handler void -C_MODE_START -typedef void (*sig_return)();/* Returns type from signal */ -C_MODE_END -#if defined(__GNUC__) && !defined(_lint) -typedef char pchar; /* Mixed prototypes can take char */ -typedef char puchar; /* Mixed prototypes can take char */ -typedef char pbool; /* Mixed prototypes can take char */ -typedef short pshort; /* Mixed prototypes can take short int */ -typedef float pfloat; /* Mixed prototypes can take float */ -#else -typedef int pchar; /* Mixed prototypes can't take char */ -typedef uint puchar; /* Mixed prototypes can't take char */ -typedef int pbool; /* Mixed prototypes can't take char */ -typedef int pshort; /* Mixed prototypes can't take short int */ -typedef double pfloat; /* Mixed prototypes can't take float */ -#endif -C_MODE_START -typedef int (*qsort_cmp)(const void *,const void *); -typedef int (*qsort_cmp2)(void*, const void *,const void *); -C_MODE_END -#define qsort_t RETQSORTTYPE /* Broken GCC cant handle typedef !!!! */ -#ifdef HAVE_SYS_SOCKET_H -#include -#endif - -/* file create flags */ - -#ifndef O_SHARE /* Probably not windows */ -#define O_SHARE 0 /* Flag to my_open for shared files */ -#ifndef O_BINARY -#define O_BINARY 0 /* Flag to my_open for binary files */ -#endif -#ifndef FILE_BINARY -#define FILE_BINARY O_BINARY /* Flag to my_fopen for binary streams */ -#endif -#ifdef HAVE_FCNTL -#define HAVE_FCNTL_LOCK -#define F_TO_EOF 0L /* Param to lockf() to lock rest of file */ -#endif -#endif /* O_SHARE */ - -#ifndef O_TEMPORARY -#define O_TEMPORARY 0 -#endif -#ifndef O_SHORT_LIVED -#define O_SHORT_LIVED 0 -#endif -#ifndef O_NOFOLLOW -#define O_NOFOLLOW 0 -#endif - -/* additional file share flags for win32 */ -#ifdef __WIN__ -#define _SH_DENYRWD 0x110 /* deny read/write mode & delete */ -#define _SH_DENYWRD 0x120 /* deny write mode & delete */ -#define _SH_DENYRDD 0x130 /* deny read mode & delete */ -#define _SH_DENYDEL 0x140 /* deny delete only */ -#endif /* __WIN__ */ - - -/* #define USE_RECORD_LOCK */ - - /* Unsigned types supported by the compiler */ -#define UNSINT8 /* unsigned int8 (char) */ -#define UNSINT16 /* unsigned int16 */ -#define UNSINT32 /* unsigned int32 */ - - /* General constants */ -#define FN_LEN 256 /* Max file name len */ -#define FN_HEADLEN 253 /* Max length of filepart of file name */ -#define FN_EXTLEN 20 /* Max length of extension (part of FN_LEN) */ -#define FN_REFLEN 512 /* Max length of full path-name */ -#define FN_EXTCHAR '.' -#define FN_HOMELIB '~' /* ~/ is used as abbrev for home dir */ -#define FN_CURLIB '.' /* ./ is used as abbrev for current dir */ -#define FN_PARENTDIR ".." /* Parent directory; Must be a string */ - -#ifndef FN_LIBCHAR -#define FN_LIBCHAR '/' -#define FN_ROOTDIR "/" -#endif - -/* - MY_FILE_MIN is Windows speciality and is used to quickly detect - the mismatch of CRT and mysys file IO usage on Windows at runtime. - CRT file descriptors can be in the range 0-2047, whereas descriptors returned - by my_open() will start with 2048. If a file descriptor with value less then - MY_FILE_MIN is passed to mysys IO function, chances are it stemms from - open()/fileno() and not my_open()/my_fileno. - - For Posix, mysys functions are light wrappers around libc, and MY_FILE_MIN - is logically 0. -*/ - -#ifdef _WIN32 -#define MY_FILE_MIN 2048 -#else -#define MY_FILE_MIN 0 -#endif - -/* - MY_NFILE is the default size of my_file_info array. - - It is larger on Windows, because it all file handles are stored in my_file_info - Default size is 16384 and this should be enough for most cases.If it is not - enough, --max-open-files with larger value can be used. - - For Posix , my_file_info array is only used to store filenames for - error reporting and its size is not a limitation for number of open files. -*/ -#ifdef _WIN32 -#define MY_NFILE (16384 + MY_FILE_MIN) -#else -#define MY_NFILE 64 -#endif - -#ifndef OS_FILE_LIMIT -#define OS_FILE_LIMIT 65535 -#endif - -/* #define EXT_IN_LIBNAME */ -/* #define FN_NO_CASE_SENCE */ -/* #define FN_UPPER_CASE TRUE */ - -/* - Io buffer size; Must be a power of 2 and a multiple of 512. May be - smaller what the disk page size. This influences the speed of the - isam btree library. eg to big to slow. -*/ -#define IO_SIZE 4096 -/* - How much overhead does malloc have. The code often allocates - something like 1024-MALLOC_OVERHEAD bytes -*/ -#ifdef SAFEMALLOC -#define MALLOC_OVERHEAD (8+24+4) -#else -#define MALLOC_OVERHEAD 8 -#endif - /* get memory in huncs */ -#define ONCE_ALLOC_INIT (uint) (4096-MALLOC_OVERHEAD) - /* Typical record cash */ -#define RECORD_CACHE_SIZE (uint) (64*1024-MALLOC_OVERHEAD) - /* Typical key cash */ -#define KEY_CACHE_SIZE (uint) (8*1024*1024-MALLOC_OVERHEAD) - /* Default size of a key cache block */ -#define KEY_CACHE_BLOCK_SIZE (uint) 1024 - - - /* Some things that this system doesn't have */ - -#define NO_HASH /* Not needed anymore */ -#ifdef _WIN32 -#define NO_DIR_LIBRARY /* Not standard dir-library */ -#endif - -/* Some defines of functions for portability */ - -#undef remove /* Crashes MySQL on SCO 5.0.0 */ -#ifndef __WIN__ -#define closesocket(A) close(A) -#ifndef ulonglong2double -#define ulonglong2double(A) ((double) (ulonglong) (A)) -#define my_off_t2double(A) ((double) (my_off_t) (A)) -#endif -#ifndef double2ulonglong -#define double2ulonglong(A) ((ulonglong) (double) (A)) -#endif -#endif - -#ifndef offsetof -#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) -#endif -#define ulong_to_double(X) ((double) (ulong) (X)) -#define SET_STACK_SIZE(X) /* Not needed on real machines */ - -#ifndef STACK_DIRECTION -#error "please add -DSTACK_DIRECTION=1 or -1 to your CPPFLAGS" -#endif - -#if !defined(HAVE_STRTOK_R) -inline char *strtok_r(char *str, const char *delim, char **saveptr) -{ - return strtok(str,delim); -} -#endif - -/* This is from the old m-machine.h file */ - -#if SIZEOF_LONG_LONG > 4 -#define HAVE_LONG_LONG 1 -#endif - -/* - Some pre-ANSI-C99 systems like AIX 5.1 and Linux/GCC 2.95 define - ULONGLONG_MAX, LONGLONG_MIN, LONGLONG_MAX; we use them if they're defined. - Also on Windows we define these constants by hand in config-win.h. -*/ - -#if defined(HAVE_LONG_LONG) && !defined(LONGLONG_MIN) -#define LONGLONG_MIN ((long long) 0x8000000000000000LL) -#define LONGLONG_MAX ((long long) 0x7FFFFFFFFFFFFFFFLL) -#endif - -#if defined(HAVE_LONG_LONG) && !defined(ULONGLONG_MAX) -/* First check for ANSI C99 definition: */ -#ifdef ULLONG_MAX -#define ULONGLONG_MAX ULLONG_MAX -#else -#define ULONGLONG_MAX ((unsigned long long)(~0ULL)) -#endif -#endif /* defined (HAVE_LONG_LONG) && !defined(ULONGLONG_MAX)*/ - -#define INT_MIN32 (~0x7FFFFFFFL) -#define INT_MAX32 0x7FFFFFFFL -#define UINT_MAX32 0xFFFFFFFFL -#define INT_MIN24 (~0x007FFFFF) -#define INT_MAX24 0x007FFFFF -#define UINT_MAX24 0x00FFFFFF -#define INT_MIN16 (~0x7FFF) -#define INT_MAX16 0x7FFF -#define UINT_MAX16 0xFFFF -#define INT_MIN8 (~0x7F) -#define INT_MAX8 0x7F -#define UINT_MAX8 0xFF - -/* From limits.h instead */ -#ifndef DBL_MIN -#define DBL_MIN 4.94065645841246544e-324 -#define FLT_MIN ((float)1.40129846432481707e-45) -#endif -#ifndef DBL_MAX -#define DBL_MAX 1.79769313486231470e+308 -#define FLT_MAX ((float)3.40282346638528860e+38) -#endif -#ifndef SIZE_T_MAX -#define SIZE_T_MAX ~((size_t) 0) -#endif - -#ifndef isfinite -#ifdef HAVE_FINITE -#define isfinite(x) finite(x) -#else -#define finite(x) (1.0 / fabs(x) > 0.0) -#endif /* HAVE_FINITE */ -#endif /* isfinite */ - -#ifndef HAVE_ISNAN -#define isnan(x) ((x) != (x)) -#endif - -#ifdef HAVE_ISINF -/* Check if C compiler is affected by GCC bug #39228 */ -#if !defined(__cplusplus) && defined(HAVE_BROKEN_ISINF) -/* Force store/reload of the argument to/from a 64-bit double */ -static inline double my_isinf(double x) -{ - volatile double t= x; - return isinf(t); -} -#else -/* System-provided isinf() is available and safe to use */ -#define my_isinf(X) isinf(X) -#endif -#else /* !HAVE_ISINF */ -#define my_isinf(X) (!finite(X) && !isnan(X)) -#endif - -/* Define missing math constants. */ -#ifndef M_PI -#define M_PI 3.14159265358979323846 -#endif -#ifndef M_E -#define M_E 2.7182818284590452354 -#endif -#ifndef M_LN2 -#define M_LN2 0.69314718055994530942 -#endif - -/* - Max size that must be added to a so that we know Size to make - adressable obj. -*/ -#if SIZEOF_CHARP == 4 -typedef long my_ptrdiff_t; -#else -typedef long long my_ptrdiff_t; -#endif - -#define MY_ALIGN(A,L) (((A) + (L) - 1) & ~((L) - 1)) -#define ALIGN_SIZE(A) MY_ALIGN((A),sizeof(double)) -/* Size to make adressable obj. */ -#define ALIGN_PTR(A, t) ((t*) MY_ALIGN((A),sizeof(t))) - /* Offset of field f in structure t */ -#define OFFSET(t, f) ((size_t)(char *)&((t *)0)->f) -#define ADD_TO_PTR(ptr,size,type) (type) ((uchar*) (ptr)+size) -#define PTR_BYTE_DIFF(A,B) (my_ptrdiff_t) ((uchar*) (A) - (uchar*) (B)) - -#define MY_DIV_UP(A, B) (((A) + (B) - 1) / (B)) -#define MY_ALIGNED_BYTE_ARRAY(N, S, T) T N[MY_DIV_UP(S, sizeof(T))] - -/* - Custom version of standard offsetof() macro which can be used to get - offsets of members in class for non-POD types (according to the current - version of C++ standard offsetof() macro can't be used in such cases and - attempt to do so causes warnings to be emitted, OTOH in many cases it is - still OK to assume that all instances of the class has the same offsets - for the same members). - - This is temporary solution which should be removed once File_parser class - and related routines are refactored. -*/ - -#define my_offsetof(TYPE, MEMBER) \ - ((size_t)((char *)&(((TYPE *)0x10)->MEMBER) - (char*)0x10)) - -#define NullS STATIC_CAST(char *)(0) -/* Nowdays we do not support MessyDos */ -#ifndef NEAR -#define NEAR /* Who needs segments ? */ -#define FAR /* On a good machine */ -#ifndef HUGE_PTR -#define HUGE_PTR -#endif -#endif -#if defined(__IBMC__) || defined(__IBMCPP__) -/* This was _System _Export but caused a lot of warnings on _AIX43 */ -#define STDCALL -#elif !defined( STDCALL) -#define STDCALL -#endif - -/* Typdefs for easyier portability */ - -#ifndef HAVE_UCHAR -typedef unsigned char uchar; /* Short for unsigned char */ -#endif - -#ifndef HAVE_INT8 -typedef signed char int8; /* Signed integer >= 8 bits */ -#endif -#ifndef HAVE_UINT8 -typedef unsigned char uint8; /* Unsigned integer >= 8 bits */ -#endif -#ifndef HAVE_INT16 -typedef short int16; -#endif -#ifndef HAVE_UINT16 -typedef unsigned short uint16; -#endif -#if SIZEOF_INT == 4 -#ifndef HAVE_INT32 -typedef int int32; -#endif -#ifndef HAVE_UINT32 -typedef unsigned int uint32; -#endif -#elif SIZEOF_LONG == 4 -#ifndef HAVE_INT32 -typedef long int32; -#endif -#ifndef HAVE_UINT32 -typedef unsigned long uint32; -#endif -#else -#error Neither int or long is of 4 bytes width -#endif - -#if !defined(HAVE_ULONG) && !defined(__USE_MISC) -typedef unsigned long ulong; /* Short for unsigned long */ -#endif -#ifndef longlong_defined -/* - Using [unsigned] long long is preferable as [u]longlong because we use - [unsigned] long long unconditionally in many places, - for example in constants with [U]LL suffix. -*/ -#if defined(HAVE_LONG_LONG) && SIZEOF_LONG_LONG == 8 -typedef unsigned long long int ulonglong; /* ulong or unsigned long long */ -typedef long long int longlong; -#else -typedef unsigned long ulonglong; /* ulong or unsigned long long */ -typedef long longlong; -#endif -#endif -#ifndef HAVE_INT64 -typedef longlong int64; -#endif -#ifndef HAVE_UINT64 -typedef ulonglong uint64; -#endif - -#if defined(NO_CLIENT_LONG_LONG) -typedef unsigned long my_ulonglong; -#elif defined (__WIN__) -typedef unsigned __int64 my_ulonglong; -#else -typedef unsigned long long my_ulonglong; -#endif - -#if SIZEOF_CHARP == SIZEOF_INT -typedef int intptr; -#elif SIZEOF_CHARP == SIZEOF_LONG -typedef long intptr; -#elif SIZEOF_CHARP == SIZEOF_LONG_LONG -typedef long long intptr; -#else -#error sizeof(void *) is neither sizeof(int) nor sizeof(long) nor sizeof(long long) -#endif - -#define MY_ERRPTR ((void*)(intptr)1) - -#ifdef USE_RAID -/* - The following is done with a if to not get problems with pre-processors - with late define evaluation -*/ -#if SIZEOF_OFF_T == 4 -#define SYSTEM_SIZEOF_OFF_T 4 -#else -#define SYSTEM_SIZEOF_OFF_T 8 -#endif -#undef SIZEOF_OFF_T -#define SIZEOF_OFF_T 8 -#else -#define SYSTEM_SIZEOF_OFF_T SIZEOF_OFF_T -#endif /* USE_RAID */ - -#if SIZEOF_OFF_T > 4 -typedef ulonglong my_off_t; -#else -typedef unsigned long my_off_t; -#endif -#define MY_FILEPOS_ERROR (~STATIC_CAST(my_off_t)(0)) -#if !defined(__WIN__) -typedef off_t os_off_t; -#endif - -#if defined(__WIN__) -#define socket_errno WSAGetLastError() -#define SOCKET_EINTR WSAEINTR -#define SOCKET_EAGAIN WSAEINPROGRESS -#define SOCKET_ETIMEDOUT WSAETIMEDOUT -#define SOCKET_EWOULDBLOCK WSAEWOULDBLOCK -#define SOCKET_EADDRINUSE WSAEADDRINUSE -#define SOCKET_ENFILE ENFILE -#define SOCKET_EMFILE EMFILE -#else /* Unix */ -#define socket_errno errno -#define closesocket(A) close(A) -#define SOCKET_EINTR EINTR -#define SOCKET_EAGAIN EAGAIN -#define SOCKET_ETIMEDOUT SOCKET_EINTR -#define SOCKET_EWOULDBLOCK EWOULDBLOCK -#define SOCKET_EADDRINUSE EADDRINUSE -#define SOCKET_ENFILE ENFILE -#define SOCKET_EMFILE EMFILE -#endif - -typedef uint8 int7; /* Most effective integer 0 <= x <= 127 */ -typedef short int15; /* Most effective integer 0 <= x <= 32767 */ -typedef int myf; /* Type of MyFlags in my_funcs */ - /* Macros for converting *constants* to the right type */ -#define INT8(v) (int8) (v) -#define INT16(v) (int16) (v) -#define INT32(v) (int32) (v) -#define MYF(v) STATIC_CAST(myf)(v) - -/* - Defines to make it possible to prioritize register assignments. No - longer that important with modern compilers. -*/ -#ifndef USING_X -#define reg1 register -#define reg2 register -#define reg3 register -#define reg4 register -#define reg5 register -#define reg6 register -#define reg7 register -#define reg8 register -#define reg9 register -#define reg10 register -#define reg11 register -#define reg12 register -#define reg13 register -#define reg14 register -#define reg15 register -#define reg16 register -#endif - -/* - Sometimes we want to make sure that the variable is not put into - a register in debugging mode so we can see its value in the core -*/ - -#ifndef DBUG_OFF -#define dbug_volatile volatile -#else -#define dbug_volatile -#endif - -/* Some helper macros */ -#define YESNO(X) ((X) ? "yes" : "no") - -/* Defines for time function */ -#define SCALE_SEC 100 -#define SCALE_USEC 10000 -#define MY_HOW_OFTEN_TO_ALARM 2 /* How often we want info on screen */ -#define MY_HOW_OFTEN_TO_WRITE 10000 /* How often we want info on screen */ - -/* - Define-funktions for reading and storing in machine independent format - (low byte first) -*/ - -/* Optimized store functions for Intel x86 */ -#if defined(__i386__) || defined(_WIN32) -#define sint2korr(A) (*((const int16 *) (A))) -#define sint3korr(A) ((int32) ((((uchar) (A)[2]) & 128) ? \ - (((uint32) 255L << 24) | \ - (((uint32) (uchar) (A)[2]) << 16) |\ - (((uint32) (uchar) (A)[1]) << 8) | \ - ((uint32) (uchar) (A)[0])) : \ - (((uint32) (uchar) (A)[2]) << 16) |\ - (((uint32) (uchar) (A)[1]) << 8) | \ - ((uint32) (uchar) (A)[0]))) -#define sint4korr(A) (*((const long *) (A))) -#define uint2korr(A) (*((const uint16 *) (A))) -#if defined(HAVE_purify) && !defined(_WIN32) -#define uint3korr(A) (uint32) (((uint32) ((uchar) (A)[0])) +\ - (((uint32) ((uchar) (A)[1])) << 8) +\ - (((uint32) ((uchar) (A)[2])) << 16)) -#else -/* - ATTENTION ! - - Please, note, uint3korr reads 4 bytes (not 3) ! - It means, that you have to provide enough allocated space ! -*/ -#define uint3korr(A) (long) (*((const unsigned int *) (A)) & 0xFFFFFF) -#endif /* HAVE_purify && !_WIN32 */ -#define uint4korr(A) (*((const uint32 *) (A))) -#define uint5korr(A) ((ulonglong)(((uint32) ((uchar) (A)[0])) +\ - (((uint32) ((uchar) (A)[1])) << 8) +\ - (((uint32) ((uchar) (A)[2])) << 16) +\ - (((uint32) ((uchar) (A)[3])) << 24)) +\ - (((ulonglong) ((uchar) (A)[4])) << 32)) -#define uint6korr(A) ((ulonglong)(((uint32) ((uchar) (A)[0])) + \ - (((uint32) ((uchar) (A)[1])) << 8) + \ - (((uint32) ((uchar) (A)[2])) << 16) + \ - (((uint32) ((uchar) (A)[3])) << 24)) + \ - (((ulonglong) ((uchar) (A)[4])) << 32) + \ - (((ulonglong) ((uchar) (A)[5])) << 40)) -#define uint8korr(A) (*((const ulonglong *) (A))) -#define sint8korr(A) (*((const longlong *) (A))) -#define int2store(T,A) *((uint16*) (T))= (uint16) (A) -#define int3store(T,A) do { *(T)= (uchar) ((A));\ - *(T+1)=(uchar) (((uint) (A) >> 8));\ - *(T+2)=(uchar) (((A) >> 16)); } while (0) -#define int4store(T,A) *((long *) (T))= (long) (A) -#define int5store(T,A) do { *(T)= (uchar)((A));\ - *((T)+1)=(uchar) (((A) >> 8));\ - *((T)+2)=(uchar) (((A) >> 16));\ - *((T)+3)=(uchar) (((A) >> 24)); \ - *((T)+4)=(uchar) (((A) >> 32)); } while(0) -#define int6store(T,A) do { *(T)= (uchar)((A)); \ - *((T)+1)=(uchar) (((A) >> 8)); \ - *((T)+2)=(uchar) (((A) >> 16)); \ - *((T)+3)=(uchar) (((A) >> 24)); \ - *((T)+4)=(uchar) (((A) >> 32)); \ - *((T)+5)=(uchar) (((A) >> 40)); } while(0) -#define int8store(T,A) *((ulonglong *) (T))= (ulonglong) (A) - -typedef union { - double v; - long m[2]; -} doubleget_union; -#define doubleget(V,M) \ -do { doubleget_union _tmp; \ - _tmp.m[0] = *((const long*)(M)); \ - _tmp.m[1] = *(((const long*) (M))+1); \ - (V) = _tmp.v; } while(0) -#define doublestore(T,V) do { *((long *) T) = ((const doubleget_union *)&V)->m[0]; \ - *(((long *) T)+1) = ((const doubleget_union *)&V)->m[1]; \ - } while (0) -#define float4get(V,M) do { *((float *) &(V)) = *((const float*) (M)); } while(0) -#define float8get(V,M) doubleget((V),(M)) -#define float4store(V,M) memcpy((uchar*) V,(const uchar*) (&M),sizeof(float)) -#define floatstore(T,V) memcpy((uchar*)(T), (const uchar*)(&V),sizeof(float)) -#define floatget(V,M) memcpy((uchar*) &V,(const uchar*) (M),sizeof(float)) -#define float8store(V,M) doublestore((V),(M)) -#else - -/* - We're here if it's not a IA-32 architecture (Win32 and UNIX IA-32 defines - were done before) -*/ -#define sint2korr(A) (int16) (((int16) ((uchar) (A)[0])) +\ - ((int16) ((int16) (A)[1]) << 8)) -#define sint3korr(A) ((int32) ((((uchar) (A)[2]) & 128) ? \ - (((uint32) 255L << 24) | \ - (((uint32) (uchar) (A)[2]) << 16) |\ - (((uint32) (uchar) (A)[1]) << 8) | \ - ((uint32) (uchar) (A)[0])) : \ - (((uint32) (uchar) (A)[2]) << 16) |\ - (((uint32) (uchar) (A)[1]) << 8) | \ - ((uint32) (uchar) (A)[0]))) -#define sint4korr(A) (int32) (((int32) ((uchar) (A)[0])) +\ - (((int32) ((uchar) (A)[1]) << 8)) +\ - (((int32) ((uchar) (A)[2]) << 16)) +\ - (((int32) ((int16) (A)[3]) << 24))) -#define sint8korr(A) (longlong) uint8korr(A) -#define uint2korr(A) (uint16) (((uint16) ((uchar) (A)[0])) +\ - ((uint16) ((uchar) (A)[1]) << 8)) -#define uint3korr(A) (uint32) (((uint32) ((uchar) (A)[0])) +\ - (((uint32) ((uchar) (A)[1])) << 8) +\ - (((uint32) ((uchar) (A)[2])) << 16)) -#define uint4korr(A) (uint32) (((uint32) ((uchar) (A)[0])) +\ - (((uint32) ((uchar) (A)[1])) << 8) +\ - (((uint32) ((uchar) (A)[2])) << 16) +\ - (((uint32) ((uchar) (A)[3])) << 24)) -#define uint5korr(A) ((ulonglong)(((uint32) ((uchar) (A)[0])) +\ - (((uint32) ((uchar) (A)[1])) << 8) +\ - (((uint32) ((uchar) (A)[2])) << 16) +\ - (((uint32) ((uchar) (A)[3])) << 24)) +\ - (((ulonglong) ((uchar) (A)[4])) << 32)) -#define uint6korr(A) ((ulonglong)(((uint32) ((uchar) (A)[0])) + \ - (((uint32) ((uchar) (A)[1])) << 8) + \ - (((uint32) ((uchar) (A)[2])) << 16) + \ - (((uint32) ((uchar) (A)[3])) << 24)) + \ - (((ulonglong) ((uchar) (A)[4])) << 32) + \ - (((ulonglong) ((uchar) (A)[5])) << 40)) -#define uint8korr(A) ((ulonglong)(((uint32) ((uchar) (A)[0])) +\ - (((uint32) ((uchar) (A)[1])) << 8) +\ - (((uint32) ((uchar) (A)[2])) << 16) +\ - (((uint32) ((uchar) (A)[3])) << 24)) +\ - (((ulonglong) (((uint32) ((uchar) (A)[4])) +\ - (((uint32) ((uchar) (A)[5])) << 8) +\ - (((uint32) ((uchar) (A)[6])) << 16) +\ - (((uint32) ((uchar) (A)[7])) << 24))) <<\ - 32)) -#define int2store(T,A) do { uint def_temp= (uint) (A) ;\ - *((uchar*) (T))= (uchar)(def_temp); \ - *((uchar*) (T)+1)=(uchar)((def_temp >> 8)); \ - } while(0) -#define int3store(T,A) do { /*lint -save -e734 */\ - *((uchar*)(T))=(uchar) ((A));\ - *((uchar*) (T)+1)=(uchar) (((A) >> 8));\ - *((uchar*)(T)+2)=(uchar) (((A) >> 16)); \ - /*lint -restore */} while(0) -#define int4store(T,A) do { *((char *)(T))=(char) ((A));\ - *(((char *)(T))+1)=(char) (((A) >> 8));\ - *(((char *)(T))+2)=(char) (((A) >> 16));\ - *(((char *)(T))+3)=(char) (((A) >> 24)); } while(0) -#define int5store(T,A) do { *((char *)(T))= (char)((A)); \ - *(((char *)(T))+1)= (char)(((A) >> 8)); \ - *(((char *)(T))+2)= (char)(((A) >> 16)); \ - *(((char *)(T))+3)= (char)(((A) >> 24)); \ - *(((char *)(T))+4)= (char)(((A) >> 32)); \ - } while(0) -#define int6store(T,A) do { *((char *)(T))= (char)((A)); \ - *(((char *)(T))+1)= (char)(((A) >> 8)); \ - *(((char *)(T))+2)= (char)(((A) >> 16)); \ - *(((char *)(T))+3)= (char)(((A) >> 24)); \ - *(((char *)(T))+4)= (char)(((A) >> 32)); \ - *(((char *)(T))+5)= (char)(((A) >> 40)); \ - } while(0) -#define int8store(T,A) do { uint def_temp= (uint) (A), def_temp2= (uint) ((A) >> 32); \ - int4store((T),def_temp); \ - int4store((T+4),def_temp2); } while(0) -#ifdef WORDS_BIGENDIAN -#define float4store(T,A) do { *(T)= ((uchar *) &A)[3];\ - *((T)+1)=(char) ((uchar *) &A)[2];\ - *((T)+2)=(char) ((uchar *) &A)[1];\ - *((T)+3)=(char) ((uchar *) &A)[0]; } while(0) - -#define float4get(V,M) do { float def_temp;\ - ((uchar*) &def_temp)[0]=(M)[3];\ - ((uchar*) &def_temp)[1]=(M)[2];\ - ((uchar*) &def_temp)[2]=(M)[1];\ - ((uchar*) &def_temp)[3]=(M)[0];\ - (V)=def_temp; } while(0) -#define float8store(T,V) do { *(T)= ((uchar *) &V)[7];\ - *((T)+1)=(char) ((uchar *) &V)[6];\ - *((T)+2)=(char) ((uchar *) &V)[5];\ - *((T)+3)=(char) ((uchar *) &V)[4];\ - *((T)+4)=(char) ((uchar *) &V)[3];\ - *((T)+5)=(char) ((uchar *) &V)[2];\ - *((T)+6)=(char) ((uchar *) &V)[1];\ - *((T)+7)=(char) ((uchar *) &V)[0]; } while(0) - -#define float8get(V,M) do { double def_temp;\ - ((uchar*) &def_temp)[0]=(M)[7];\ - ((uchar*) &def_temp)[1]=(M)[6];\ - ((uchar*) &def_temp)[2]=(M)[5];\ - ((uchar*) &def_temp)[3]=(M)[4];\ - ((uchar*) &def_temp)[4]=(M)[3];\ - ((uchar*) &def_temp)[5]=(M)[2];\ - ((uchar*) &def_temp)[6]=(M)[1];\ - ((uchar*) &def_temp)[7]=(M)[0];\ - (V) = def_temp; } while(0) -#else -#define float4get(V,M) memcpy_fixed((uchar*) &V,(uchar*) (M),sizeof(float)) -#define float4store(V,M) memcpy_fixed((uchar*) V,(uchar*) (&M),sizeof(float)) - -#if defined(__FLOAT_WORD_ORDER) && (__FLOAT_WORD_ORDER == __BIG_ENDIAN) -#define doublestore(T,V) do { *(((char*)T)+0)=(char) ((uchar *) &V)[4];\ - *(((char*)T)+1)=(char) ((uchar *) &V)[5];\ - *(((char*)T)+2)=(char) ((uchar *) &V)[6];\ - *(((char*)T)+3)=(char) ((uchar *) &V)[7];\ - *(((char*)T)+4)=(char) ((uchar *) &V)[0];\ - *(((char*)T)+5)=(char) ((uchar *) &V)[1];\ - *(((char*)T)+6)=(char) ((uchar *) &V)[2];\ - *(((char*)T)+7)=(char) ((uchar *) &V)[3]; }\ - while(0) -#define doubleget(V,M) do { double def_temp;\ - ((uchar*) &def_temp)[0]=(M)[4];\ - ((uchar*) &def_temp)[1]=(M)[5];\ - ((uchar*) &def_temp)[2]=(M)[6];\ - ((uchar*) &def_temp)[3]=(M)[7];\ - ((uchar*) &def_temp)[4]=(M)[0];\ - ((uchar*) &def_temp)[5]=(M)[1];\ - ((uchar*) &def_temp)[6]=(M)[2];\ - ((uchar*) &def_temp)[7]=(M)[3];\ - (V) = def_temp; } while(0) -#endif /* __FLOAT_WORD_ORDER */ - -#define float8get(V,M) doubleget((V),(M)) -#define float8store(V,M) doublestore((V),(M)) -#endif /* WORDS_BIGENDIAN */ - -#endif /* __i386__ OR _WIN32 */ - -/* - Macro for reading 32-bit integer from network byte order (big-endian) - from unaligned memory location. -*/ -#define int4net(A) (int32) (((uint32) ((uchar) (A)[3])) |\ - (((uint32) ((uchar) (A)[2])) << 8) |\ - (((uint32) ((uchar) (A)[1])) << 16) |\ - (((uint32) ((uchar) (A)[0])) << 24)) -/* - Define-funktions for reading and storing in machine format from/to - short/long to/from some place in memory V should be a (not - register) variable, M is a pointer to byte -*/ - -#ifdef WORDS_BIGENDIAN - -#define ushortget(V,M) do { V = (uint16) (((uint16) ((uchar) (M)[1]))+\ - ((uint16) ((uint16) (M)[0]) << 8)); } while(0) -#define shortget(V,M) do { V = (short) (((short) ((uchar) (M)[1]))+\ - ((short) ((short) (M)[0]) << 8)); } while(0) -#define longget(V,M) do { int32 def_temp;\ - ((uchar*) &def_temp)[0]=(M)[0];\ - ((uchar*) &def_temp)[1]=(M)[1];\ - ((uchar*) &def_temp)[2]=(M)[2];\ - ((uchar*) &def_temp)[3]=(M)[3];\ - (V)=def_temp; } while(0) -#define ulongget(V,M) do { uint32 def_temp;\ - ((uchar*) &def_temp)[0]=(M)[0];\ - ((uchar*) &def_temp)[1]=(M)[1];\ - ((uchar*) &def_temp)[2]=(M)[2];\ - ((uchar*) &def_temp)[3]=(M)[3];\ - (V)=def_temp; } while(0) -#define shortstore(T,A) do { uint def_temp=(uint) (A) ;\ - *(((char*)T)+1)=(char)(def_temp); \ - *(((char*)T)+0)=(char)(def_temp >> 8); } while(0) -#define longstore(T,A) do { *(((char*)T)+3)=((A));\ - *(((char*)T)+2)=(((A) >> 8));\ - *(((char*)T)+1)=(((A) >> 16));\ - *(((char*)T)+0)=(((A) >> 24)); } while(0) - -#define floatget(V,M) memcpy_fixed((uchar*) &V,(uchar*) (M),sizeof(float)) -#define floatstore(T,V) memcpy_fixed((uchar*) (T),(uchar*)(&V),sizeof(float)) -#define doubleget(V,M) memcpy_fixed((uchar*) &V,(uchar*) (M),sizeof(double)) -#define doublestore(T,V) memcpy_fixed((uchar*) (T),(uchar*) &V,sizeof(double)) -#define longlongget(V,M) memcpy_fixed((uchar*) &V,(uchar*) (M),sizeof(ulonglong)) -#define longlongstore(T,V) memcpy_fixed((uchar*) (T),(uchar*) &V,sizeof(ulonglong)) - -#else - -#define ushortget(V,M) do { V = uint2korr(M); } while(0) -#define shortget(V,M) do { V = sint2korr(M); } while(0) -#define longget(V,M) do { V = sint4korr(M); } while(0) -#define ulongget(V,M) do { V = uint4korr(M); } while(0) -#define shortstore(T,V) int2store(T,V) -#define longstore(T,V) int4store(T,V) -#ifndef floatstore -#define floatstore(T,V) memcpy_fixed((uchar*) (T),(uchar*) (&V),sizeof(float)) -#define floatget(V,M) memcpy_fixed((uchar*) &V, (uchar*) (M), sizeof(float)) -#endif -#ifndef doubleget -#define doubleget(V,M) memcpy_fixed((uchar*) &V,(uchar*) (M),sizeof(double)) -#define doublestore(T,V) memcpy_fixed((uchar*) (T),(uchar*) &V,sizeof(double)) -#endif /* doubleget */ -#define longlongget(V,M) memcpy_fixed((uchar*) &V,(uchar*) (M),sizeof(ulonglong)) -#define longlongstore(T,V) memcpy_fixed((uchar*) (T),(uchar*) &V,sizeof(ulonglong)) - -#endif /* WORDS_BIGENDIAN */ - -/* sprintf does not always return the number of bytes :- */ -#ifdef SPRINTF_RETURNS_INT -#define my_sprintf(buff,args) sprintf args -#else -#ifdef SPRINTF_RETURNS_PTR -#define my_sprintf(buff,args) ((int)(sprintf args - buff)) -#else -#define my_sprintf(buff,args) ((ulong) sprintf args, (ulong) strlen(buff)) -#endif -#endif - -#ifndef THREAD -#define thread_safe_increment(V,L) (V)++ -#define thread_safe_decrement(V,L) (V)-- -#define thread_safe_add(V,C,L) (V)+=(C) -#define thread_safe_sub(V,C,L) (V)-=(C) -#define statistic_increment(V,L) (V)++ -#define statistic_decrement(V,L) (V)-- -#define statistic_add(V,C,L) (V)+=(C) -#define statistic_sub(V,C,L) (V)-=(C) -#endif - -#if defined(HAVE_CHARSET_utf8mb3) || defined(HAVE_CHARSET_utf8mb4) -#define MYSQL_UNIVERSAL_CLIENT_CHARSET "utf8" -#else -#define MYSQL_UNIVERSAL_CLIENT_CHARSET MYSQL_DEFAULT_CHARSET_NAME -#endif - -#if defined(EMBEDDED_LIBRARY) && !defined(HAVE_EMBEDDED_PRIVILEGE_CONTROL) -#define NO_EMBEDDED_ACCESS_CHECKS -#endif - -#ifdef HAVE_DLOPEN -#if defined(__WIN__) -#define dlsym(lib, name) GetProcAddress((HMODULE)lib, name) -#define dlopen(libname, unused) LoadLibraryEx(libname, NULL, 0) -#define dlclose(lib) FreeLibrary((HMODULE)lib) -#elif defined(HAVE_DLFCN_H) -#include -#endif -#endif - -/* FreeBSD 2.2.2 does not define RTLD_NOW) */ -#ifndef RTLD_NOW -#define RTLD_NOW 1 -#endif - -#ifndef HAVE_DLERROR -#define dlerror() "" -#endif - - -#ifndef __NETWARE__ -/* - * Include standard definitions of operator new and delete. - */ -#ifdef __cplusplus -#include -#endif -#else -/* - * Define placement versions of operator new and operator delete since - * we don't have when building for Netware. - */ -#ifdef __cplusplus -inline void *operator new(size_t, void *ptr) { return ptr; } -inline void *operator new[](size_t, void *ptr) { return ptr; } -inline void operator delete(void*, void*) { /* Do nothing */ } -inline void operator delete[](void*, void*) { /* Do nothing */ } -#endif -#endif - -/* Length of decimal number represented by INT32. */ -#define MY_INT32_NUM_DECIMAL_DIGITS 11 - -/* Length of decimal number represented by INT64. */ -#define MY_INT64_NUM_DECIMAL_DIGITS 21 - -/* Define some useful general macros (should be done after all headers). */ -#if !defined(max) -#define max(a, b) ((a) > (b) ? (a) : (b)) -#define min(a, b) ((a) < (b) ? (a) : (b)) -#endif -/* - Only Linux is known to need an explicit sync of the directory to make sure a - file creation/deletion/renaming in(from,to) this directory durable. -*/ -#ifdef TARGET_OS_LINUX -#define NEED_EXPLICIT_SYNC_DIR 1 -#else -/* - On linux default rwlock scheduling policy is good enough for - waiting_threads.c, on other systems use our special implementation - (which is slower). - - QQ perhaps this should be tested in configure ? how ? -*/ -#define WT_RWLOCKS_USE_MUTEXES 1 -#endif - -#if !defined(__cplusplus) && !defined(bool) -#define bool In_C_you_should_use_my_bool_instead() -#endif - -/* Provide __func__ macro definition for platforms that miss it. */ -#if __STDC_VERSION__ < 199901L -# if __GNUC__ >= 2 -# define __func__ __FUNCTION__ -# else -# define __func__ "" -# endif -#elif defined(_MSC_VER) -# if _MSC_VER < 1300 -# define __func__ "" -# else -# define __func__ __FUNCTION__ -# endif -#elif defined(__BORLANDC__) -# define __func__ __FUNC__ -#else -# define __func__ "" -#endif - -#ifndef HAVE_RINT -/** - All integers up to this number can be represented exactly as double precision - values (DBL_MANT_DIG == 53 for IEEE 754 hardware). -*/ -#define MAX_EXACT_INTEGER ((1LL << DBL_MANT_DIG) - 1) - -/** - rint(3) implementation for platforms that do not have it. - Always rounds to the nearest integer with ties being rounded to the nearest - even integer to mimic glibc's rint() behavior in the "round-to-nearest" - FPU mode. Hardware-specific optimizations are possible (frndint on x86). - Unlike this implementation, hardware will also honor the FPU rounding mode. -*/ - -static inline double rint(double x) -{ - double f, i; - f = modf(x, &i); - - /* - All doubles with absolute values > MAX_EXACT_INTEGER are even anyway, - no need to check it. - */ - if (x > 0.0) - i += (double) ((f > 0.5) || (f == 0.5 && - i <= (double) MAX_EXACT_INTEGER && - (longlong) i % 2)); - else - i -= (double) ((f < -0.5) || (f == -0.5 && - i >= (double) -MAX_EXACT_INTEGER && - (longlong) i % 2)); - return i; -} -#endif /* HAVE_RINT */ - -/* - MYSQL_PLUGIN_IMPORT macro is used to export mysqld data - (i.e variables) for usage in storage engine loadable plugins. - Outside of Windows, it is dummy. -*/ -#ifndef MYSQL_PLUGIN_IMPORT -#if (defined(_WIN32) && defined(MYSQL_DYNAMIC_PLUGIN)) -#define MYSQL_PLUGIN_IMPORT __declspec(dllimport) -#else -#define MYSQL_PLUGIN_IMPORT -#endif -#endif - -#endif /* my_global_h */ diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_libwrap.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_libwrap.h deleted file mode 100644 index 9a85794..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_libwrap.h +++ /dev/null @@ -1,27 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifdef HAVE_LIBWRAP -#include -#include -#ifdef NEED_SYS_SYSLOG_H -#include -#endif /* NEED_SYS_SYSLOG_H */ - -extern void my_fromhost(struct request_info *req); -extern int my_hosts_access(struct request_info *req); -extern char *my_eval_client(struct request_info *req); - -#endif /* HAVE_LIBWRAP */ diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_list.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_list.h deleted file mode 100644 index 775b565..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_list.h +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef _list_h_ -#define _list_h_ - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct st_list { - struct st_list *prev,*next; - void *data; -} LIST; - -typedef int (*list_walk_action)(void *,void *); - -extern LIST *list_add(LIST *root,LIST *element); -extern LIST *list_delete(LIST *root,LIST *element); -extern LIST *list_cons(void *data,LIST *root); -extern LIST *list_reverse(LIST *root); -extern void list_free(LIST *root,unsigned int free_data); -extern unsigned int list_length(LIST *); -extern int list_walk(LIST *,list_walk_action action,unsigned char * argument); - -#define list_rest(a) ((a)->next) -#define list_push(a,b) (a)=list_cons((b),(a)) -#define list_pop(A) {LIST *old=(A); (A)=list_delete(old,old) ; my_free((unsigned char *) old,MYF(MY_FAE)); } - -#ifdef __cplusplus -} -#endif -#endif diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_md5.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_md5.h deleted file mode 100644 index 6458f27..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_md5.h +++ /dev/null @@ -1,54 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* See md5.c for explanation and copyright information. */ - -/* - * $FreeBSD: src/contrib/cvs/lib/md5.h,v 1.2 1999/12/11 15:10:02 peter Exp $ - */ - -/* Unlike previous versions of this code, uint32 need not be exactly - 32 bits, merely 32 bits or more. Choosing a data type which is 32 - bits instead of 64 is not important; speed is considerably more - important. ANSI guarantees that "unsigned long" will be big enough, - and always using it seems to have few disadvantages. */ -typedef uint32 cvs_uint32; - -typedef struct { - cvs_uint32 buf[4]; - cvs_uint32 bits[2]; - unsigned char in[64]; -} my_MD5Context; - -#ifdef __cplusplus -extern "C" { -#endif -void my_MD5Init (my_MD5Context *context); -void my_MD5Update (my_MD5Context *context, - unsigned char const *buf, unsigned len); -void my_MD5Final (unsigned char digest[16], - my_MD5Context *context); - -#ifdef __cplusplus -} -#endif - -#define MY_MD5_HASH(digest,buf,len) \ -do { \ - my_MD5Context ctx; \ - my_MD5Init (&ctx); \ - my_MD5Update (&ctx, buf, len); \ - my_MD5Final (digest, &ctx); \ -} while (0) diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_net.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_net.h deleted file mode 100644 index 18fb3db..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_net.h +++ /dev/null @@ -1,114 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - thread safe version of some common functions: - my_inet_ntoa - - This file is also used to make handling of sockets and ioctl() - portable accross systems. - -*/ - -#ifndef _my_net_h -#define _my_net_h -C_MODE_START - -#include -#ifdef HAVE_SYS_SOCKET_H -#include -#endif -#ifdef HAVE_NETINET_IN_H -#include -#endif -#ifdef HAVE_ARPA_INET_H -#include -#endif -#ifdef HAVE_POLL -#include -#endif -#ifdef HAVE_SYS_IOCTL_H -#include -#endif - -#if !defined(__WIN__) && !defined(HAVE_BROKEN_NETINET_INCLUDES) && !defined(__NETWARE__) -#include -#include -#include -#if !defined(alpha_linux_port) -#include -#endif -#endif - -#if defined(__WIN__) -#define O_NONBLOCK 1 /* For emulation of fcntl() */ - -/* - SHUT_RDWR is called SD_BOTH in windows and - is defined to 2 in winsock2.h - #define SD_BOTH 0x02 -*/ -#define SHUT_RDWR 0x02 - -#endif - -/* - On OSes which don't have the in_addr_t, we guess that using uint32 is the best - possible choice. We guess this from the fact that on HP-UX64bit & FreeBSD64bit - & Solaris64bit, in_addr_t is equivalent to uint32. And on Linux32bit too. -*/ -#ifndef HAVE_IN_ADDR_T -#define in_addr_t uint32 -#endif - -/* Thread safe or portable version of some functions */ - -void my_inet_ntoa(struct in_addr in, char *buf); - -/* - Handling of gethostbyname_r() -*/ - -#if !defined(HAVE_GETHOSTBYNAME_R) -struct hostent *my_gethostbyname_r(const char *name, - struct hostent *result, char *buffer, - int buflen, int *h_errnop); -void my_gethostbyname_r_free(); -#elif defined(HAVE_PTHREAD_ATTR_CREATE) || defined(_AIX) || defined(HAVE_GETHOSTBYNAME_R_GLIBC2_STYLE) -struct hostent *my_gethostbyname_r(const char *name, - struct hostent *result, char *buffer, - int buflen, int *h_errnop); -#define my_gethostbyname_r_free() -#if !defined(HAVE_GETHOSTBYNAME_R_GLIBC2_STYLE) && !defined(HPUX10) -#define GETHOSTBYNAME_BUFF_SIZE sizeof(struct hostent_data) -#endif /* !defined(HAVE_GETHOSTBYNAME_R_GLIBC2_STYLE) */ - -#elif defined(HAVE_GETHOSTBYNAME_R_RETURN_INT) -#define GETHOSTBYNAME_BUFF_SIZE sizeof(struct hostent_data) -struct hostent *my_gethostbyname_r(const char *name, - struct hostent *result, char *buffer, - int buflen, int *h_errnop); -#define my_gethostbyname_r_free() -#else -#define my_gethostbyname_r(A,B,C,D,E) gethostbyname_r((A),(B),(C),(D),(E)) -#define my_gethostbyname_r_free() -#endif /* !defined(HAVE_GETHOSTBYNAME_R) */ - -#ifndef GETHOSTBYNAME_BUFF_SIZE -#define GETHOSTBYNAME_BUFF_SIZE 2048 -#endif - -C_MODE_END -#endif diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_no_pthread.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_no_pthread.h deleted file mode 100644 index b11dbff..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_no_pthread.h +++ /dev/null @@ -1,50 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - - -#if !defined(_my_no_pthread_h) && !defined(THREAD) -#define _my_no_pthread_h - - -/* - This block is to access some thread-related type definitions - even in builds which do not need thread functions, - as some variables (based on these types) are declared - even in non-threaded builds. - Case in point: 'mf_keycache.c' -*/ -#if defined(__WIN__) -#else /* Normal threads */ -#include - -#endif /* defined(__WIN__) */ - - -/* - This undefs some pthread mutex locks when one isn't using threads - to make thread safe code, that should also work in single thread - environment, easier to use. -*/ -#define pthread_mutex_init(A,B) -#define pthread_mutex_lock(A) -#define pthread_mutex_unlock(A) -#define pthread_mutex_destroy(A) -#define my_rwlock_init(A,B) -#define rw_rdlock(A) -#define rw_wrlock(A) -#define rw_unlock(A) -#define rwlock_destroy(A) - -#endif diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_nosys.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_nosys.h deleted file mode 100644 index df5639b..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_nosys.h +++ /dev/null @@ -1,52 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - Header to remove use of my_functions in functions where we need speed and - where calls to posix functions should work -*/ -#ifndef _my_nosys_h -#define _my_nosys_h -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef __MY_NOSYS__ -#define __MY_NOSYS__ - -#ifndef HAVE_STDLIB_H -#include -#endif - -#undef my_read /* Can be predefined in raid.h */ -#undef my_write -#undef my_seek -#define my_read(a,b,c,d) my_quick_read(a,b,c,d) -#define my_write(a,b,c,d) my_quick_write(a,b,c) -extern size_t my_quick_read(File Filedes,uchar *Buffer,size_t Count, - myf myFlags); -extern size_t my_quick_write(File Filedes,const uchar *Buffer,size_t Count); - -#if !defined(SAFEMALLOC) && defined(USE_HALLOC) -#define my_malloc(a,b) halloc(a,1) -#define my_no_flags_free(a) hfree(a) -#endif - -#endif /* __MY_NOSYS__ */ - -#ifdef __cplusplus -} -#endif -#endif diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_pthread.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_pthread.h deleted file mode 100644 index ab26860..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_pthread.h +++ /dev/null @@ -1,734 +0,0 @@ -/* Copyright (C) 2000-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc. - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* Defines to make different thread packages compatible */ - -#ifndef _my_pthread_h -#define _my_pthread_h - -#ifndef ETIME -#define ETIME ETIMEDOUT /* For FreeBSD */ -#endif - -#ifdef __cplusplus -#define EXTERNC extern "C" -extern "C" { -#else -#define EXTERNC -#endif /* __cplusplus */ - -#if defined(__WIN__) -typedef CRITICAL_SECTION pthread_mutex_t; -typedef DWORD pthread_t; -typedef struct thread_attr { - DWORD dwStackSize ; - DWORD dwCreatingFlag ; -} pthread_attr_t ; - -typedef struct { int dummy; } pthread_condattr_t; - -/* Implementation of posix conditions */ - -typedef struct st_pthread_link { - DWORD thread_id; - struct st_pthread_link *next; -} pthread_link; - -typedef struct { - uint32 waiting; - CRITICAL_SECTION lock_waiting; - - enum { - SIGNAL= 0, - BROADCAST= 1, - MAX_EVENTS= 2 - } EVENTS; - - HANDLE events[MAX_EVENTS]; - HANDLE broadcast_block_event; - -} pthread_cond_t; - - -typedef int pthread_mutexattr_t; -#define pthread_self() GetCurrentThreadId() -#define pthread_handler_t EXTERNC void * __cdecl -typedef void * (__cdecl *pthread_handler)(void *); - -/* - Struct and macros to be used in combination with the - windows implementation of pthread_cond_timedwait -*/ - -/* - Declare a union to make sure FILETIME is properly aligned - so it can be used directly as a 64 bit value. The value - stored is in 100ns units. - */ -union ft64 { - FILETIME ft; - __int64 i64; -}; - -struct timespec { - union ft64 tv; - /* The max timeout value in millisecond for pthread_cond_timedwait */ - long max_timeout_msec; -}; - -#define set_timespec_time_nsec(ABSTIME,TIME,NSEC) do { \ - (ABSTIME).tv.i64= (TIME)+(__int64)(NSEC)/100; \ - (ABSTIME).max_timeout_msec= (long)((NSEC)/1000000); \ -} while(0) - -#define set_timespec_nsec(ABSTIME,NSEC) do { \ - union ft64 tv; \ - GetSystemTimeAsFileTime(&tv.ft); \ - set_timespec_time_nsec((ABSTIME), tv.i64, (NSEC)); \ -} while(0) - -int win_pthread_mutex_trylock(pthread_mutex_t *mutex); -int pthread_create(pthread_t *,pthread_attr_t *,pthread_handler,void *); -int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr); -int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex); -int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex, - struct timespec *abstime); -int pthread_cond_signal(pthread_cond_t *cond); -int pthread_cond_broadcast(pthread_cond_t *cond); -int pthread_cond_destroy(pthread_cond_t *cond); -int pthread_attr_init(pthread_attr_t *connect_att); -int pthread_attr_setstacksize(pthread_attr_t *connect_att,DWORD stack); -int pthread_attr_destroy(pthread_attr_t *connect_att); -struct tm *localtime_r(const time_t *timep,struct tm *tmp); -struct tm *gmtime_r(const time_t *timep,struct tm *tmp); - -void pthread_exit(void *a); -int pthread_join(pthread_t thread, void **value_ptr); - - -#define ETIMEDOUT 145 /* Win32 doesn't have this */ -#define HAVE_LOCALTIME_R 1 -#define _REENTRANT 1 -#define HAVE_PTHREAD_ATTR_SETSTACKSIZE 1 - - -#undef SAFE_MUTEX /* This will cause conflicts */ -#define pthread_key(T,V) DWORD V -#define pthread_key_create(A,B) ((*A=TlsAlloc())==0xFFFFFFFF) -#define pthread_key_delete(A) TlsFree(A) -#define my_pthread_setspecific_ptr(T,V) (!TlsSetValue((T),(V))) -#define pthread_setspecific(A,B) (!TlsSetValue((A),(B))) -#define pthread_getspecific(A) (TlsGetValue(A)) -#define my_pthread_getspecific(T,A) ((T) TlsGetValue(A)) -#define my_pthread_getspecific_ptr(T,V) ((T) TlsGetValue(V)) - -#define pthread_equal(A,B) ((A) == (B)) -#define pthread_mutex_init(A,B) (InitializeCriticalSection(A),0) -#define pthread_mutex_lock(A) (EnterCriticalSection(A),0) -#define pthread_mutex_trylock(A) win_pthread_mutex_trylock((A)) -#define pthread_mutex_unlock(A) (LeaveCriticalSection(A),0) -#define pthread_mutex_destroy(A) DeleteCriticalSection(A) -#define pthread_kill(A,B) pthread_dummy((A) ? 0 : ESRCH) - - -/* Dummy defines for easier code */ -#define pthread_attr_setdetachstate(A,B) pthread_dummy(0) -#define pthread_attr_setscope(A,B) -#define pthread_detach_this_thread() -#define pthread_condattr_init(A) -#define pthread_condattr_destroy(A) -#define pthread_yield() SwitchToThread() - - -#else /* Normal threads */ - -#ifdef HAVE_rts_threads -#define sigwait org_sigwait -#include -#undef sigwait -#endif -#include -#ifndef _REENTRANT -#define _REENTRANT -#endif -#ifdef HAVE_THR_SETCONCURRENCY -#include /* Probably solaris */ -#endif -#ifdef HAVE_SCHED_H -#include -#endif -#ifdef HAVE_SYNCH_H -#include -#endif - -#ifdef __NETWARE__ -void my_pthread_exit(void *status); -#define pthread_exit(A) my_pthread_exit(A) -#endif - -#define pthread_key(T,V) pthread_key_t V -#define my_pthread_getspecific_ptr(T,V) my_pthread_getspecific(T,(V)) -#define my_pthread_setspecific_ptr(T,V) pthread_setspecific(T,(void*) (V)) -#define pthread_detach_this_thread() -#define pthread_handler_t EXTERNC void * -typedef void *(* pthread_handler)(void *); - -/* Test first for RTS or FSU threads */ - -#if defined(PTHREAD_SCOPE_GLOBAL) && !defined(PTHREAD_SCOPE_SYSTEM) -#define HAVE_rts_threads -extern int my_pthread_create_detached; -#define pthread_sigmask(A,B,C) sigprocmask((A),(B),(C)) -#define PTHREAD_CREATE_DETACHED &my_pthread_create_detached -#define PTHREAD_SCOPE_SYSTEM PTHREAD_SCOPE_GLOBAL -#define PTHREAD_SCOPE_PROCESS PTHREAD_SCOPE_LOCAL -#define USE_ALARM_THREAD -#endif /* defined(PTHREAD_SCOPE_GLOBAL) && !defined(PTHREAD_SCOPE_SYSTEM) */ - -#if defined(_BSDI_VERSION) && _BSDI_VERSION < 199910 -int sigwait(sigset_t *set, int *sig); -#endif - -#ifndef HAVE_NONPOSIX_SIGWAIT -#define my_sigwait(A,B) sigwait((A),(B)) -#else -int my_sigwait(const sigset_t *set,int *sig); -#endif - -#ifdef HAVE_NONPOSIX_PTHREAD_MUTEX_INIT -#ifndef SAFE_MUTEX -#define pthread_mutex_init(a,b) my_pthread_mutex_noposix_init((a),(b)) -extern int my_pthread_mutex_noposix_init(pthread_mutex_t *mp, - const pthread_mutexattr_t *attr); -#endif /* SAFE_MUTEX */ -#define pthread_cond_init(a,b) my_pthread_cond_noposix_init((a),(b)) -extern int my_pthread_cond_noposix_init(pthread_cond_t *mp, - const pthread_condattr_t *attr); -#endif /* HAVE_NONPOSIX_PTHREAD_MUTEX_INIT */ - -#if defined(HAVE_SIGTHREADMASK) && !defined(HAVE_PTHREAD_SIGMASK) -#define pthread_sigmask(A,B,C) sigthreadmask((A),(B),(C)) -#endif - -#if !defined(HAVE_SIGWAIT) && !defined(HAVE_rts_threads) && !defined(sigwait) && !defined(alpha_linux_port) && !defined(HAVE_NONPOSIX_SIGWAIT) && !defined(HAVE_DEC_3_2_THREADS) && !defined(_AIX) -int sigwait(sigset_t *setp, int *sigp); /* Use our implemention */ -#endif - - -/* - We define my_sigset() and use that instead of the system sigset() so that - we can favor an implementation based on sigaction(). On some systems, such - as Mac OS X, sigset() results in flags such as SA_RESTART being set, and - we want to make sure that no such flags are set. -*/ -#if defined(HAVE_SIGACTION) && !defined(my_sigset) -#define my_sigset(A,B) do { struct sigaction l_s; sigset_t l_set; int l_rc; \ - DBUG_ASSERT((A) != 0); \ - sigemptyset(&l_set); \ - l_s.sa_handler = (B); \ - l_s.sa_mask = l_set; \ - l_s.sa_flags = 0; \ - l_rc= sigaction((A), &l_s, (struct sigaction *) NULL);\ - DBUG_ASSERT(l_rc == 0); \ - } while (0) -#elif defined(HAVE_SIGSET) && !defined(my_sigset) -#define my_sigset(A,B) sigset((A),(B)) -#elif !defined(my_sigset) -#define my_sigset(A,B) signal((A),(B)) -#endif - -#if !defined(HAVE_PTHREAD_ATTR_SETSCOPE) || defined(HAVE_DEC_3_2_THREADS) -#define pthread_attr_setscope(A,B) -#undef HAVE_GETHOSTBYADDR_R /* No definition */ -#endif - -#if defined(HAVE_BROKEN_PTHREAD_COND_TIMEDWAIT) && !defined(SAFE_MUTEX) -extern int my_pthread_cond_timedwait(pthread_cond_t *cond, - pthread_mutex_t *mutex, - struct timespec *abstime); -#define pthread_cond_timedwait(A,B,C) my_pthread_cond_timedwait((A),(B),(C)) -#endif - -#if !defined( HAVE_NONPOSIX_PTHREAD_GETSPECIFIC) -#define my_pthread_getspecific(A,B) ((A) pthread_getspecific(B)) -#else -#define my_pthread_getspecific(A,B) ((A) my_pthread_getspecific_imp(B)) -void *my_pthread_getspecific_imp(pthread_key_t key); -#endif - -#ifndef HAVE_LOCALTIME_R -struct tm *localtime_r(const time_t *clock, struct tm *res); -#endif - -#ifndef HAVE_GMTIME_R -struct tm *gmtime_r(const time_t *clock, struct tm *res); -#endif - -#ifdef HAVE_PTHREAD_CONDATTR_CREATE -/* DCE threads on HPUX 10.20 */ -#define pthread_condattr_init pthread_condattr_create -#define pthread_condattr_destroy pthread_condattr_delete -#endif - -/* FSU THREADS */ -#if !defined(HAVE_PTHREAD_KEY_DELETE) && !defined(pthread_key_delete) -#define pthread_key_delete(A) pthread_dummy(0) -#endif - -#if ((defined(HAVE_PTHREAD_ATTR_CREATE) && !defined(HAVE_SIGWAIT)) || defined(HAVE_DEC_3_2_THREADS)) -/* This is set on AIX_3_2 and Siemens unix (and DEC OSF/1 3.2 too) */ -#define pthread_key_create(A,B) \ - pthread_keycreate(A,(B) ?\ - (pthread_destructor_t) (B) :\ - (pthread_destructor_t) pthread_dummy) -#define pthread_attr_init(A) pthread_attr_create(A) -#define pthread_attr_destroy(A) pthread_attr_delete(A) -#define pthread_attr_setdetachstate(A,B) pthread_dummy(0) -#define pthread_create(A,B,C,D) pthread_create((A),*(B),(C),(D)) -#ifndef pthread_sigmask -#define pthread_sigmask(A,B,C) sigprocmask((A),(B),(C)) -#endif -#define pthread_kill(A,B) pthread_dummy((A) ? 0 : ESRCH) -#undef pthread_detach_this_thread -#define pthread_detach_this_thread() { pthread_t tmp=pthread_self() ; pthread_detach(&tmp); } -#elif !defined(__NETWARE__) /* HAVE_PTHREAD_ATTR_CREATE && !HAVE_SIGWAIT */ -#ifndef HAVE_PTHREAD_KILL -# define HAVE_PTHREAD_KILL -#endif -#endif - -#endif /* defined(__WIN__) */ - -#if defined(HPUX10) && !defined(DONT_REMAP_PTHREAD_FUNCTIONS) -#undef pthread_cond_timedwait -#define pthread_cond_timedwait(a,b,c) my_pthread_cond_timedwait((a),(b),(c)) -int my_pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex, - struct timespec *abstime); -#endif - -#if defined(HPUX10) -#define pthread_attr_getstacksize(A,B) my_pthread_attr_getstacksize(A,B) -void my_pthread_attr_getstacksize(pthread_attr_t *attrib, size_t *size); -#endif - -#if defined(HAVE_POSIX1003_4a_MUTEX) && !defined(DONT_REMAP_PTHREAD_FUNCTIONS) -#undef pthread_mutex_trylock -#define pthread_mutex_trylock(a) my_pthread_mutex_trylock((a)) -int my_pthread_mutex_trylock(pthread_mutex_t *mutex); -#endif - -#if !defined(HAVE_PTHREAD_YIELD_ONE_ARG) && !defined(HAVE_PTHREAD_YIELD_ZERO_ARG) -/* no pthread_yield() available */ -#ifdef HAVE_SCHED_YIELD -#define pthread_yield() sched_yield() -#elif defined(HAVE_PTHREAD_YIELD_NP) /* can be Mac OS X */ -#define pthread_yield() pthread_yield_np() -#elif defined(HAVE_THR_YIELD) -#define pthread_yield() thr_yield() -#endif -#endif - -/* - The defines set_timespec and set_timespec_nsec should be used - for calculating an absolute time at which - pthread_cond_timedwait should timeout -*/ - -#define set_timespec(ABSTIME,SEC) set_timespec_nsec((ABSTIME),(SEC)*1000000000ULL) - -#ifndef set_timespec_nsec -#define set_timespec_nsec(ABSTIME,NSEC) \ - set_timespec_time_nsec((ABSTIME),my_getsystime(),(NSEC)) -#endif /* !set_timespec_nsec */ - -/* adapt for two different flavors of struct timespec */ -#ifdef HAVE_TIMESPEC_TS_SEC -#define MY_tv_sec ts_sec -#define MY_tv_nsec ts_nsec -#else -#define MY_tv_sec tv_sec -#define MY_tv_nsec tv_nsec -#endif /* HAVE_TIMESPEC_TS_SEC */ - -#ifndef set_timespec_time_nsec -#define set_timespec_time_nsec(ABSTIME,TIME,NSEC) do { \ - ulonglong nsec= (NSEC); \ - ulonglong now= (TIME) + (nsec/100); \ - (ABSTIME).MY_tv_sec= (now / 10000000ULL); \ - (ABSTIME).MY_tv_nsec= (now % 10000000ULL * 100 + (nsec % 100)); \ -} while(0) -#endif /* !set_timespec_time_nsec */ - -/* safe_mutex adds checking to mutex for easier debugging */ - -#if defined(__NETWARE__) && !defined(SAFE_MUTEX_DETECT_DESTROY) -#define SAFE_MUTEX_DETECT_DESTROY -#endif -struct st_hash; - -typedef struct st_safe_mutex_t -{ - pthread_mutex_t global,mutex; - const char *file, *name; - uint line,count; - myf create_flags, active_flags; - ulong id; - pthread_t thread; - struct st_hash *locked_mutex, *used_mutex; - struct st_safe_mutex_t *prev, *next; -#ifdef SAFE_MUTEX_DETECT_DESTROY - struct st_safe_mutex_info_t *info; /* to track destroying of mutexes */ -#endif -} safe_mutex_t; - -typedef struct st_safe_mutex_deadlock_t -{ - const char *file, *name; - safe_mutex_t *mutex; - uint line; - ulong count; - ulong id; - my_bool warning_only; -} safe_mutex_deadlock_t; - -#ifdef SAFE_MUTEX_DETECT_DESTROY -/* - Used to track the destroying of mutexes. This needs to be a seperate - structure because the safe_mutex_t structure could be freed before - the mutexes are destroyed. -*/ - -typedef struct st_safe_mutex_info_t -{ - struct st_safe_mutex_info_t *next; - struct st_safe_mutex_info_t *prev; - const char *init_file; - uint32 init_line; -} safe_mutex_info_t; -#endif /* SAFE_MUTEX_DETECT_DESTROY */ - -int safe_mutex_init(safe_mutex_t *mp, const pthread_mutexattr_t *attr, - const char *name, myf my_flags, - const char *file, uint line); -int safe_mutex_lock(safe_mutex_t *mp, myf my_flags, const char *file, - uint line); -int safe_mutex_unlock(safe_mutex_t *mp,const char *file, uint line); -int safe_mutex_destroy(safe_mutex_t *mp,const char *file, uint line); -int safe_cond_wait(pthread_cond_t *cond, safe_mutex_t *mp,const char *file, - uint line); -int safe_cond_timedwait(pthread_cond_t *cond, safe_mutex_t *mp, - struct timespec *abstime, const char *file, uint line); -void safe_mutex_global_init(void); -void safe_mutex_end(FILE *file); -void safe_mutex_free_deadlock_data(safe_mutex_t *mp); - - /* Wrappers if safe mutex is actually used */ -#define MYF_TRY_LOCK 1 -#define MYF_NO_DEADLOCK_DETECTION 2 - -#ifdef SAFE_MUTEX -#undef pthread_mutex_init -#undef pthread_mutex_lock -#undef pthread_mutex_unlock -#undef pthread_mutex_destroy -#undef pthread_mutex_wait -#undef pthread_mutex_timedwait -#undef pthread_mutex_t -#undef pthread_cond_wait -#undef pthread_cond_timedwait -#undef pthread_mutex_trylock -#define my_pthread_mutex_init(A,B,C,D) safe_mutex_init((A),(B),(C),(D),__FILE__,__LINE__) -#define pthread_mutex_init(A,B) safe_mutex_init((A),(B),#A,0,__FILE__,__LINE__) -#define pthread_mutex_lock(A) safe_mutex_lock((A), 0, __FILE__, __LINE__) -#define my_pthread_mutex_lock(A,B) safe_mutex_lock((A), (B), __FILE__, __LINE__) -#define pthread_mutex_unlock(A) safe_mutex_unlock((A),__FILE__,__LINE__) -#define pthread_mutex_destroy(A) safe_mutex_destroy((A),__FILE__,__LINE__) -#define pthread_cond_wait(A,B) safe_cond_wait((A),(B),__FILE__,__LINE__) -#define pthread_cond_timedwait(A,B,C) safe_cond_timedwait((A),(B),(C),__FILE__,__LINE__) -#define pthread_mutex_trylock(A) safe_mutex_lock((A), MYF_TRY_LOCK, __FILE__, __LINE__) -#define pthread_mutex_t safe_mutex_t -#define safe_mutex_assert_owner(mp) \ - DBUG_ASSERT((mp)->count > 0 && \ - pthread_equal(pthread_self(), (mp)->thread)) -#define safe_mutex_assert_not_owner(mp) \ - DBUG_ASSERT(! (mp)->count || \ - ! pthread_equal(pthread_self(), (mp)->thread)) -#else -#define my_pthread_mutex_init(A,B,C,D) pthread_mutex_init((A),(B)) -#define my_pthread_mutex_lock(A,B) pthread_mutex_lock(A) -#define safe_mutex_assert_owner(mp) -#define safe_mutex_assert_not_owner(mp) -#endif /* SAFE_MUTEX */ - -#if defined(MY_PTHREAD_FASTMUTEX) && !defined(SAFE_MUTEX) -typedef struct st_my_pthread_fastmutex_t -{ - pthread_mutex_t mutex; - uint spins; - uint rng_state; -} my_pthread_fastmutex_t; -void fastmutex_global_init(void); - -int my_pthread_fastmutex_init(my_pthread_fastmutex_t *mp, - const pthread_mutexattr_t *attr); -int my_pthread_fastmutex_lock(my_pthread_fastmutex_t *mp); - -#undef pthread_mutex_init -#undef pthread_mutex_lock -#undef pthread_mutex_unlock -#undef pthread_mutex_destroy -#undef pthread_mutex_wait -#undef pthread_mutex_timedwait -#undef pthread_mutex_t -#undef pthread_cond_wait -#undef pthread_cond_timedwait -#undef pthread_mutex_trylock -#define pthread_mutex_init(A,B) my_pthread_fastmutex_init((A),(B)) -#define pthread_mutex_lock(A) my_pthread_fastmutex_lock(A) -#define pthread_mutex_unlock(A) pthread_mutex_unlock(&(A)->mutex) -#define pthread_mutex_destroy(A) pthread_mutex_destroy(&(A)->mutex) -#define pthread_cond_wait(A,B) pthread_cond_wait((A),&(B)->mutex) -#define pthread_cond_timedwait(A,B,C) pthread_cond_timedwait((A),&(B)->mutex,(C)) -#define pthread_mutex_trylock(A) pthread_mutex_trylock(&(A)->mutex) -#define pthread_mutex_t my_pthread_fastmutex_t -#endif /* defined(MY_PTHREAD_FASTMUTEX) && !defined(SAFE_MUTEX) */ - - /* READ-WRITE thread locking */ - -#ifdef HAVE_BROKEN_RWLOCK /* For OpenUnix */ -#undef HAVE_PTHREAD_RWLOCK_RDLOCK -#undef HAVE_RWLOCK_INIT -#undef HAVE_RWLOCK_T -#endif - -#if defined(USE_MUTEX_INSTEAD_OF_RW_LOCKS) -/* use these defs for simple mutex locking */ -#define rw_lock_t pthread_mutex_t -#define my_rwlock_init(A,B) pthread_mutex_init((A),(B)) -#define rw_rdlock(A) pthread_mutex_lock((A)) -#define rw_wrlock(A) pthread_mutex_lock((A)) -#define rw_tryrdlock(A) pthread_mutex_trylock((A)) -#define rw_trywrlock(A) pthread_mutex_trylock((A)) -#define rw_unlock(A) pthread_mutex_unlock((A)) -#define rwlock_destroy(A) pthread_mutex_destroy((A)) -#elif defined(HAVE_PTHREAD_RWLOCK_RDLOCK) -#define rw_lock_t pthread_rwlock_t -#define my_rwlock_init(A,B) pthread_rwlock_init((A),(B)) -#define rw_rdlock(A) pthread_rwlock_rdlock(A) -#define rw_wrlock(A) pthread_rwlock_wrlock(A) -#define rw_tryrdlock(A) pthread_rwlock_tryrdlock((A)) -#define rw_trywrlock(A) pthread_rwlock_trywrlock((A)) -#define rw_unlock(A) pthread_rwlock_unlock(A) -#define rwlock_destroy(A) pthread_rwlock_destroy(A) -#elif defined(HAVE_RWLOCK_INIT) -#ifdef HAVE_RWLOCK_T /* For example Solaris 2.6-> */ -#define rw_lock_t rwlock_t -#endif -#define my_rwlock_init(A,B) rwlock_init((A),USYNC_THREAD,0) -#else -/* Use our own version of read/write locks */ -typedef struct _my_rw_lock_t { - pthread_mutex_t lock; /* lock for structure */ - pthread_cond_t readers; /* waiting readers */ - pthread_cond_t writers; /* waiting writers */ - int state; /* -1:writer,0:free,>0:readers */ - int waiters; /* number of waiting writers */ -} my_rw_lock_t; - -#define rw_lock_t my_rw_lock_t -#define rw_rdlock(A) my_rw_rdlock((A)) -#define rw_wrlock(A) my_rw_wrlock((A)) -#define rw_tryrdlock(A) my_rw_tryrdlock((A)) -#define rw_trywrlock(A) my_rw_trywrlock((A)) -#define rw_unlock(A) my_rw_unlock((A)) -#define rwlock_destroy(A) my_rwlock_destroy((A)) - -extern int my_rwlock_init(my_rw_lock_t *, void *); -extern int my_rwlock_destroy(my_rw_lock_t *); -extern int my_rw_rdlock(my_rw_lock_t *); -extern int my_rw_wrlock(my_rw_lock_t *); -extern int my_rw_unlock(my_rw_lock_t *); -extern int my_rw_tryrdlock(my_rw_lock_t *); -extern int my_rw_trywrlock(my_rw_lock_t *); -#endif /* USE_MUTEX_INSTEAD_OF_RW_LOCKS */ - -#define GETHOSTBYADDR_BUFF_SIZE 2048 - -#ifndef HAVE_THR_SETCONCURRENCY -#define thr_setconcurrency(A) pthread_dummy(0) -#endif -#if !defined(HAVE_PTHREAD_ATTR_SETSTACKSIZE) && ! defined(pthread_attr_setstacksize) -#define pthread_attr_setstacksize(A,B) pthread_dummy(0) -#endif - -/* Define mutex types, see my_thr_init.c */ -#define MY_MUTEX_INIT_SLOW NULL -#ifdef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP -extern pthread_mutexattr_t my_fast_mutexattr; -#define MY_MUTEX_INIT_FAST &my_fast_mutexattr -#else -#define MY_MUTEX_INIT_FAST NULL -#endif -#ifdef PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP -extern pthread_mutexattr_t my_errorcheck_mutexattr; -#define MY_MUTEX_INIT_ERRCHK &my_errorcheck_mutexattr -#else -#define MY_MUTEX_INIT_ERRCHK NULL -#endif - -#ifndef ESRCH -/* Define it to something */ -#define ESRCH 1 -#endif - -typedef ulong my_thread_id; - -extern void my_threadattr_global_init(void); -extern my_bool my_thread_global_init(void); -extern void my_thread_global_end(void); -extern my_bool my_thread_init(void); -extern void my_thread_end(void); -extern const char *my_thread_name(void); -extern my_thread_id my_thread_dbug_id(void); -extern int pthread_dummy(int); - -/* All thread specific variables are in the following struct */ - -#define THREAD_NAME_SIZE 10 -#ifndef DEFAULT_THREAD_STACK -#if SIZEOF_CHARP > 4 -/* - MySQL can survive with 32K, but some glibc libraries require > 128K stack - To resolve hostnames. Also recursive stored procedures needs stack. -*/ -#define DEFAULT_THREAD_STACK (256*1024L) -#else -#define DEFAULT_THREAD_STACK (195*1024) -#endif -#endif - -#define MY_PTHREAD_LOCK_READ 0 -#define MY_PTHREAD_LOCK_WRITE 1 - -struct st_my_thread_var -{ - int thr_errno; - pthread_cond_t suspend; - pthread_mutex_t mutex; - pthread_mutex_t * volatile current_mutex; - pthread_cond_t * volatile current_cond; - pthread_t pthread_self; - my_thread_id id; - int cmp_length; - int volatile abort; - my_bool init; - struct st_my_thread_var *next,**prev; - void *opt_info; - uint lock_type; /* used by conditional release the queue */ - void *stack_ends_here; - safe_mutex_t *mutex_in_use; -#ifndef DBUG_OFF - void *dbug; - char name[THREAD_NAME_SIZE+1]; -#endif -}; - -extern struct st_my_thread_var *_my_thread_var(void) __attribute__ ((const)); -extern void **my_thread_var_dbug(); -extern safe_mutex_t **my_thread_var_mutex_in_use(); -extern uint my_thread_end_wait_time; -extern my_bool safe_mutex_deadlock_detector; -#define my_thread_var (_my_thread_var()) -#define my_errno my_thread_var->thr_errno -/* - Keep track of shutdown,signal, and main threads so that my_end() will not - report errors with them -*/ - -/* Which kind of thread library is in use */ - -#define THD_LIB_OTHER 1 -#define THD_LIB_NPTL 2 -#define THD_LIB_LT 4 - -extern uint thd_lib_detected; - -/* - thread_safe_xxx functions are for critical statistic or counters. - The implementation is guaranteed to be thread safe, on all platforms. - Note that the calling code should *not* assume the counter is protected - by the mutex given, as the implementation of these helpers may change - to use my_atomic operations instead. -*/ - -/* - Warning: - When compiling without threads, this file is not included. - See the *other* declarations of thread_safe_xxx in include/my_global.h - - Second warning: - See include/config-win.h, for yet another implementation. -*/ -#ifdef THREAD -#ifndef thread_safe_increment -#define thread_safe_increment(V,L) \ - (pthread_mutex_lock((L)), (V)++, pthread_mutex_unlock((L))) -#define thread_safe_decrement(V,L) \ - (pthread_mutex_lock((L)), (V)--, pthread_mutex_unlock((L))) -#endif - -#ifndef thread_safe_add -#define thread_safe_add(V,C,L) \ - (pthread_mutex_lock((L)), (V)+=(C), pthread_mutex_unlock((L))) -#define thread_safe_sub(V,C,L) \ - (pthread_mutex_lock((L)), (V)-=(C), pthread_mutex_unlock((L))) -#endif -#endif - -/* - statistics_xxx functions are for non critical statistic, - maintained in global variables. - When compiling with SAFE_STATISTICS: - - race conditions can not occur. - - some locking occurs, which may cause performance degradation. - - When compiling without SAFE_STATISTICS: - - race conditions can occur, making the result slightly inaccurate. - - the lock given is not honored. -*/ -#ifdef SAFE_STATISTICS -#define statistic_increment(V,L) thread_safe_increment((V),(L)) -#define statistic_decrement(V,L) thread_safe_decrement((V),(L)) -#define statistic_add(V,C,L) thread_safe_add((V),(C),(L)) -#define statistic_sub(V,C,L) thread_safe_sub((V),(C),(L)) -#else -#define statistic_decrement(V,L) (V)-- -#define statistic_increment(V,L) (V)++ -#define statistic_add(V,C,L) (V)+=(C) -#define statistic_sub(V,C,L) (V)-=(C) -#endif /* SAFE_STATISTICS */ - -/* - No locking needed, the counter is owned by the thread -*/ -#define status_var_increment(V) (V)++ -#define status_var_decrement(V) (V)-- -#define status_var_add(V,C) (V)+=(C) -#define status_var_sub(V,C) (V)-=(C) - -#ifdef __cplusplus -} -#endif -#endif /* _my_ptread_h */ diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_stacktrace.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_stacktrace.h deleted file mode 100644 index e7ce42c..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_stacktrace.h +++ /dev/null @@ -1,66 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef _my_stacktrace_h_ -#define _my_stacktrace_h_ - -#include - -#ifdef TARGET_OS_LINUX -#if defined (__x86_64__) || defined (__i386__) || \ - (defined(__alpha__) && defined(__GNUC__)) -#define HAVE_STACKTRACE 1 -#endif -#elif defined(__WIN__) -#define HAVE_STACKTRACE 1 -#endif - -#if HAVE_BACKTRACE && (HAVE_BACKTRACE_SYMBOLS || HAVE_BACKTRACE_SYMBOLS_FD) -#undef HAVE_STACKTRACE -#define HAVE_STACKTRACE 1 -#endif - -#if !defined(__NETWARE__) -#define HAVE_WRITE_CORE -#endif - -#if HAVE_BACKTRACE && HAVE_BACKTRACE_SYMBOLS && \ - HAVE_CXXABI_H && HAVE_ABI_CXA_DEMANGLE && \ - HAVE_WEAK_SYMBOL -#define BACKTRACE_DEMANGLE 1 -#endif - -C_MODE_START - -#if defined(HAVE_STACKTRACE) || defined(HAVE_BACKTRACE) -void my_init_stacktrace(); -void my_print_stacktrace(uchar* stack_bottom, ulong thread_stack); -void my_safe_print_str(const char* name, const char* val, int max_len); -void my_write_core(int sig); -#if BACKTRACE_DEMANGLE -char *my_demangle(const char *mangled_name, int *status); -#endif -#ifdef __WIN__ -void my_set_exception_pointers(EXCEPTION_POINTERS *ep); -#endif -#endif - -#ifdef HAVE_WRITE_CORE -void my_write_core(int sig); -#endif - -C_MODE_END - -#endif /* _my_stacktrace_h_ */ diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_sys.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_sys.h deleted file mode 100644 index c8ec791..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_sys.h +++ /dev/null @@ -1,1082 +0,0 @@ -/* Copyright (C) 2000-2003 MySQL AB - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/** - @file - mysys library API -*/ - -#ifndef _my_sys_h -#define _my_sys_h -C_MODE_START - -#ifdef HAVE_AIOWAIT -#include /* Used by record-cache */ -typedef struct my_aio_result { - aio_result_t result; - int pending; -} my_aio_result; -#endif - -#ifndef THREAD -extern int NEAR my_errno; /* Last error in mysys */ -#else -#include -#endif - -#include /* for CHARSET_INFO */ -#include -#include - -#define MYSYS_PROGRAM_DONT_USE_CURSES() { error_handler_hook = my_message_no_curses; mysys_uses_curses=0;} -#define MY_INIT(name); { my_progname= name; my_init(); } - -/** - Max length of an error message generated by mysys utilities. - Some mysys functions produce error messages. These mostly go - to stderr. - This constant defines the size of the buffer used to format - the message. It should be kept in sync with MYSQL_ERRMSG_SIZE, - since sometimes mysys errors are stored in the server diagnostics - area, and we would like to avoid unexpected truncation. -*/ -#define MYSYS_ERRMSG_SIZE (512) - -#define MY_FILE_ERROR ((size_t) -1) - - /* General bitmaps for my_func's */ -#define MY_FFNF 1 /* Fatal if file not found */ -#define MY_FNABP 2 /* Fatal if not all bytes read/writen */ -#define MY_NABP 4 /* Error if not all bytes read/writen */ -#define MY_FAE 8 /* Fatal if any error */ -#define MY_WME 16 /* Write message on error */ -#define MY_WAIT_IF_FULL 32 /* Wait and try again if disk full error */ -#define MY_IGNORE_BADFD 32 /* my_sync: ignore 'bad descriptor' errors */ -#define MY_SYNC_DIR 1024 /* my_create/delete/rename: sync directory */ -#define MY_RAID 64 /* Support for RAID */ -#define MY_FULL_IO 512 /* For my_read - loop intil I/O is complete */ -#define MY_DONT_CHECK_FILESIZE 128 /* Option to init_io_cache() */ -#define MY_LINK_WARNING 32 /* my_redel() gives warning if links */ -#define MY_COPYTIME 64 /* my_redel() copys time */ -#define MY_DELETE_OLD 256 /* my_create_with_symlink() */ -#define MY_RESOLVE_LINK 128 /* my_realpath(); Only resolve links */ -#define MY_HOLD_ORIGINAL_MODES 128 /* my_copy() holds to file modes */ -#define MY_REDEL_MAKE_BACKUP 256 -#define MY_SEEK_NOT_DONE 32 /* my_lock may have to do a seek */ -#define MY_SHORT_WAIT 64 /* my_lock() don't wait if can't lock */ -#define MY_FORCE_LOCK 128 /* use my_lock() even if disable_locking */ -#define MY_NO_WAIT 256 /* my_lock() don't wait at all */ -#define MY_ZEROFILL 32 /* my_malloc(), fill array with zero */ -#define MY_ALLOW_ZERO_PTR 64 /* my_realloc() ; zero ptr -> malloc */ -#define MY_FREE_ON_ERROR 128 /* my_realloc() ; Free old ptr on error */ -#define MY_HOLD_ON_ERROR 256 /* my_realloc() ; Return old ptr on error */ -#define MY_DONT_OVERWRITE_FILE 2048 /* my_copy: Don't overwrite file */ -#define MY_THREADSAFE 2048 /* my_seek(): lock fd mutex */ - -#define MY_CHECK_ERROR 1 /* Params to my_end; Check open-close */ -#define MY_GIVE_INFO 2 /* Give time info about process*/ -#define MY_DONT_FREE_DBUG 4 /* Do not call DBUG_END() in my_end() */ - -#define MY_REMOVE_NONE 0 /* Params for modify_defaults_file */ -#define MY_REMOVE_OPTION 1 -#define MY_REMOVE_SECTION 2 - -#define ME_HIGHBYTE 8 /* Shift for colours */ -#define ME_NOCUR 1 /* Don't use curses message */ -#define ME_OLDWIN 2 /* Use old window */ -#define ME_BELL 4 /* Ring bell then printing message */ -#define ME_HOLDTANG 8 /* Don't delete last keys */ -#define ME_WAITTOT 16 /* Wait for errtime secs of for a action */ -#define ME_WAITTANG 32 /* Wait for a user action */ -#define ME_NOREFRESH 64 /* Dont refresh screen */ -#define ME_NOINPUT 128 /* Dont use the input libary */ -#define ME_COLOUR1 ((1 << ME_HIGHBYTE)) /* Possibly error-colours */ -#define ME_COLOUR2 ((2 << ME_HIGHBYTE)) -#define ME_COLOUR3 ((3 << ME_HIGHBYTE)) -#define ME_FATALERROR 1024 /* Fatal statement error */ -#define ME_JUST_INFO 8192 /**< not error but just info */ -#define ME_JUST_WARNING 16384 /**< not error but just warning */ - - /* Bits in last argument to fn_format */ -#define MY_REPLACE_DIR 1 /* replace dir in name with 'dir' */ -#define MY_REPLACE_EXT 2 /* replace extension with 'ext' */ -#define MY_UNPACK_FILENAME 4 /* Unpack name (~ -> home) */ -#define MY_PACK_FILENAME 8 /* Pack name (home -> ~) */ -#define MY_RESOLVE_SYMLINKS 16 /* Resolve all symbolic links */ -#define MY_RETURN_REAL_PATH 32 /* return full path for file */ -#define MY_SAFE_PATH 64 /* Return NULL if too long path */ -#define MY_RELATIVE_PATH 128 /* name is relative to 'dir' */ -#define MY_APPEND_EXT 256 /* add 'ext' as additional extension*/ - - - /* My seek flags */ -#define MY_SEEK_SET 0 -#define MY_SEEK_CUR 1 -#define MY_SEEK_END 2 - - /* Some constants */ -#define MY_WAIT_FOR_USER_TO_FIX_PANIC 60 /* in seconds */ -#define MY_WAIT_GIVE_USER_A_MESSAGE 10 /* Every 10 times of prev */ -#define MIN_COMPRESS_LENGTH 50 /* Don't compress small bl. */ -#define DFLT_INIT_HITS 3 - - /* root_alloc flags */ -#define MY_KEEP_PREALLOC 1 -#define MY_MARK_BLOCKS_FREE 2 /* move used to free list and reuse them */ - - /* Internal error numbers (for assembler functions) */ -#define MY_ERRNO_EDOM 33 -#define MY_ERRNO_ERANGE 34 - - /* Bits for get_date timeflag */ -#define GETDATE_DATE_TIME 1 -#define GETDATE_SHORT_DATE 2 -#define GETDATE_HHMMSSTIME 4 -#define GETDATE_GMT 8 -#define GETDATE_FIXEDLENGTH 16 - - /* defines when allocating data */ -#ifdef SAFEMALLOC -#define my_malloc(SZ,FLAG) _mymalloc((SZ), __FILE__, __LINE__, FLAG ) -#define my_malloc_ci(SZ,FLAG) _mymalloc((SZ), sFile, uLine, FLAG ) -#define my_realloc(PTR,SZ,FLAG) _myrealloc((PTR), (SZ), __FILE__, __LINE__, FLAG ) -#define my_checkmalloc() _sanity( __FILE__, __LINE__ ) -#define my_free(PTR,FLAG) _myfree((PTR), __FILE__, __LINE__,FLAG) -#define my_memdup(A,B,C) _my_memdup((A),(B), __FILE__,__LINE__,C) -#define my_strdup(A,C) _my_strdup((A), __FILE__,__LINE__,C) -#define my_strndup(A,B,C) _my_strndup((A),(B),__FILE__,__LINE__,C) -#define QUICK_SAFEMALLOC sf_malloc_quick=1 -#define NORMAL_SAFEMALLOC sf_malloc_quick=0 -extern uint sf_malloc_prehunc,sf_malloc_endhunc,sf_malloc_quick; -extern ulonglong sf_malloc_mem_limit; - -#define CALLER_INFO_PROTO , const char *sFile, uint uLine -#define CALLER_INFO , __FILE__, __LINE__ -#define ORIG_CALLER_INFO , sFile, uLine -#else -#define my_checkmalloc() -#undef TERMINATE -#define TERMINATE(A,B) {} -#define QUICK_SAFEMALLOC -#define NORMAL_SAFEMALLOC -extern void *my_malloc(size_t Size,myf MyFlags); -#define my_malloc_ci(SZ,FLAG) my_malloc( SZ, FLAG ) -extern void *my_realloc(void *oldpoint, size_t Size, myf MyFlags); -extern void my_no_flags_free(void *ptr); -extern void *my_memdup(const void *from,size_t length,myf MyFlags); -extern char *my_strdup(const char *from,myf MyFlags); -extern char *my_strndup(const char *from, size_t length, - myf MyFlags); -/* we do use FG (as a no-op) in below so that a typo on FG is caught */ -#define my_free(PTR,FG) ((void)FG,my_no_flags_free(PTR)) -#define CALLER_INFO_PROTO /* nothing */ -#define CALLER_INFO /* nothing */ -#define ORIG_CALLER_INFO /* nothing */ -#endif - -/* - ERROR INJECTION: Non-thread-safe global variable to request error inject. - Set this variable to non-zero to request the next my_malloc() to fail. - This works with my_malloc.c:my_malloc() and safemalloc.c:_mymalloc(). - If using this in tests, note that the error messages produced by - my_malloc and safemalloc are different. You may need to modify the - results with --replace_regex. You may find examples in - client/backup_stream.c and backup_client_coverage.test. - The global variable is defined in my_static.c. -*/ -IF_DBUG(extern int my_malloc_error_inject); - -#ifdef HAVE_LARGE_PAGES -extern uint my_get_large_page_size(void); -extern uchar * my_large_malloc(size_t size, myf my_flags); -extern void my_large_free(uchar * ptr, myf my_flags); -#else -#define my_get_large_page_size() (0) -#define my_large_malloc(A,B) my_malloc_lock((A),(B)) -#define my_large_free(A,B) my_free_lock((A),(B)) -#endif /* HAVE_LARGE_PAGES */ - -#ifdef HAVE_ALLOCA -#if defined(_AIX) && !defined(__GNUC__) && !defined(_AIX43) -#pragma alloca -#endif /* _AIX */ -#if defined(__MWERKS__) -#undef alloca -#define alloca _alloca -#endif /* __MWERKS__ */ -#if defined(__GNUC__) && !defined(HAVE_ALLOCA_H) && ! defined(alloca) -#define alloca __builtin_alloca -#endif /* GNUC */ -#define my_alloca(SZ) alloca((size_t) (SZ)) -#define my_afree(PTR) {} -#else -#define my_alloca(SZ) my_malloc(SZ,MYF(0)) -#define my_afree(PTR) my_free(PTR,MYF(MY_WME)) -#endif /* HAVE_ALLOCA */ - -#ifndef errno /* did we already get it? */ -#ifdef HAVE_ERRNO_AS_DEFINE -#include /* errno is a define */ -#else -extern int errno; /* declare errno */ -#endif -#endif /* #ifndef errno */ -extern char *home_dir; /* Home directory for user */ -extern const char *my_progname; /* program-name (printed in errors) */ -extern const char *my_progname_short; /* like above but without directory */ -extern char NEAR curr_dir[]; /* Current directory for user */ -extern void (*error_handler_hook)(uint my_err, const char *str,myf MyFlags); -extern void (*fatal_error_handler_hook)(uint my_err, const char *str, - myf MyFlags); -extern uint my_file_limit; -extern ulong my_thread_stack_size; - -extern const char *(*proc_info_hook)(void *, const char *, const char *, - const char *, const unsigned int); - -#if defined(ENABLED_DEBUG_SYNC) -extern void (*debug_sync_C_callback_ptr)(const char *, size_t); -#define DEBUG_SYNC_C(_sync_point_name_) do { \ - if (debug_sync_C_callback_ptr != NULL) \ - (*debug_sync_C_callback_ptr)(STRING_WITH_LEN(_sync_point_name_)); } \ - while(0) -#else -#define DEBUG_SYNC_C(_sync_point_name_) -#endif /* defined(ENABLED_DEBUG_SYNC) */ - -#ifdef HAVE_LARGE_PAGES -extern my_bool my_use_large_pages; -extern uint my_large_page_size; -#endif - -/* charsets */ -#define MY_ALL_CHARSETS_SIZE 2048 -extern MYSQL_PLUGIN_IMPORT CHARSET_INFO *default_charset_info; -extern MYSQL_PLUGIN_IMPORT CHARSET_INFO *all_charsets[MY_ALL_CHARSETS_SIZE]; -extern CHARSET_INFO compiled_charsets[]; - -/* statistics */ -extern ulong my_file_opened,my_stream_opened, my_tmp_file_created; -extern ulong my_file_total_opened; -extern uint mysys_usage_id; -extern my_bool my_init_done; - - /* Point to current my_message() */ -extern void (*my_sigtstp_cleanup)(void), - /* Executed before jump to shell */ - (*my_sigtstp_restart)(void), - (*my_abort_hook)(int); - /* Executed when comming from shell */ -extern MYSQL_PLUGIN_IMPORT int NEAR my_umask; /* Default creation mask */ -extern int NEAR my_umask_dir, - NEAR my_recived_signals, /* Signals we have got */ - NEAR my_safe_to_handle_signal, /* Set when allowed to SIGTSTP */ - NEAR my_dont_interrupt; /* call remember_intr when set */ -extern my_bool NEAR mysys_uses_curses, my_use_symdir; -extern size_t sf_malloc_cur_memory, sf_malloc_max_memory; - -extern ulong my_default_record_cache_size; -extern my_bool NEAR my_disable_locking,NEAR my_disable_async_io, - NEAR my_disable_flush_key_blocks, NEAR my_disable_symlinks; -extern char wild_many,wild_one,wild_prefix; -extern const char *charsets_dir; -/* from default.c */ -extern char *my_defaults_extra_file; -extern const char *my_defaults_group_suffix; -extern const char *my_defaults_file; - -extern my_bool timed_mutexes; - -typedef struct wild_file_pack /* Struct to hold info when selecting files */ -{ - uint wilds; /* How many wildcards */ - uint not_pos; /* Start of not-theese-files */ - char * *wild; /* Pointer to wildcards */ -} WF_PACK; - -enum loglevel { - ERROR_LEVEL, - WARNING_LEVEL, - INFORMATION_LEVEL -}; - -enum cache_type -{ - TYPE_NOT_SET= 0, READ_CACHE, WRITE_CACHE, - SEQ_READ_APPEND /* sequential read or append */, - READ_FIFO, READ_NET,WRITE_NET}; - -enum flush_type -{ - FLUSH_KEEP, /* flush block and keep it in the cache */ - FLUSH_RELEASE, /* flush block and remove it from the cache */ - FLUSH_IGNORE_CHANGED, /* remove block from the cache */ - /* - As my_disable_flush_pagecache_blocks is always 0, the following option - is strictly equivalent to FLUSH_KEEP - */ - FLUSH_FORCE_WRITE, - /** - @brief like FLUSH_KEEP but return immediately if file is already being - flushed (even partially) by another thread; only for page cache, - forbidden for key cache. - */ - FLUSH_KEEP_LAZY -}; - -typedef struct st_record_cache /* Used when cacheing records */ -{ - File file; - int rc_seek,error,inited; - uint rc_length,read_length,reclength; - my_off_t rc_record_pos,end_of_file; - uchar *rc_buff,*rc_buff2,*rc_pos,*rc_end,*rc_request_pos; -#ifdef HAVE_AIOWAIT - int use_async_io; - my_aio_result aio_result; -#endif - enum cache_type type; -} RECORD_CACHE; - -enum file_type -{ - UNOPEN = 0, FILE_BY_OPEN, FILE_BY_CREATE, STREAM_BY_FOPEN, STREAM_BY_FDOPEN, - FILE_BY_MKSTEMP, FILE_BY_DUP -}; - -struct st_my_file_info -{ - char *name; -#ifdef _WIN32 - HANDLE fhandle; /* win32 file handle */ - int oflag; /* open flags, e.g O_APPEND */ -#endif - enum file_type type; -#if defined(THREAD) && !defined(HAVE_PREAD) && !defined(_WIN32) - pthread_mutex_t mutex; -#endif -}; - -extern struct st_my_file_info *my_file_info; - -typedef struct st_dynamic_array -{ - uchar *buffer; - uint elements,max_element; - uint alloc_increment; - uint size_of_element; -} DYNAMIC_ARRAY; - -typedef struct st_my_tmpdir -{ - DYNAMIC_ARRAY full_list; - char **list; - uint cur, max; -#ifdef THREAD - pthread_mutex_t mutex; -#endif -} MY_TMPDIR; - -typedef struct st_dynamic_string -{ - char *str; - size_t length,max_length,alloc_increment; -} DYNAMIC_STRING; - -struct st_io_cache; -/** Function called when certain events happen to an IO_CACHE */ -typedef int (*IO_CACHE_CALLBACK)(struct st_io_cache *cache, - const uchar *buffert, uint length, - my_off_t filepos); - -#ifdef THREAD -typedef struct st_io_cache_share -{ - pthread_mutex_t mutex; /* To sync on reads into buffer. */ - pthread_cond_t cond; /* To wait for signals. */ - pthread_cond_t cond_writer; /* For a synchronized writer. */ - /* Offset in file corresponding to the first byte of buffer. */ - my_off_t pos_in_file; - /* If a synchronized write cache is the source of the data. */ - struct st_io_cache *source_cache; - uchar *buffer; /* The read buffer. */ - uchar *read_end; /* Behind last valid byte of buffer. */ - int running_threads; /* threads not in lock. */ - int total_threads; /* threads sharing the cache. */ - int error; /* Last error. */ -#ifdef NOT_YET_IMPLEMENTED - /* whether the structure should be free'd */ - my_bool alloced; -#endif -} IO_CACHE_SHARE; -#endif - -typedef struct st_io_cache /* Used when cacheing files */ -{ - /* Offset in file corresponding to the first byte of uchar* buffer. */ - my_off_t pos_in_file; - /* - The offset of end of file for READ_CACHE and WRITE_CACHE. - For SEQ_READ_APPEND it the maximum of the actual end of file and - the position represented by read_end. - */ - my_off_t end_of_file; - /* Points to current read position in the buffer */ - uchar *read_pos; - /* the non-inclusive boundary in the buffer for the currently valid read */ - uchar *read_end; - uchar *buffer; /* The read buffer */ - /* Used in ASYNC_IO */ - uchar *request_pos; - - /* Only used in WRITE caches and in SEQ_READ_APPEND to buffer writes */ - uchar *write_buffer; - /* - Only used in SEQ_READ_APPEND, and points to the current read position - in the write buffer. Note that reads in SEQ_READ_APPEND caches can - happen from both read buffer (uchar* buffer) and write buffer - (uchar* write_buffer). - */ - uchar *append_read_pos; - /* Points to current write position in the write buffer */ - uchar *write_pos; - /* The non-inclusive boundary of the valid write area */ - uchar *write_end; - - /* - Current_pos and current_end are convenience variables used by - my_b_tell() and other routines that need to know the current offset - current_pos points to &write_pos, and current_end to &write_end in a - WRITE_CACHE, and &read_pos and &read_end respectively otherwise - */ - uchar **current_pos, **current_end; -#ifdef THREAD - /* - The lock is for append buffer used in SEQ_READ_APPEND cache - need mutex copying from append buffer to read buffer. - */ - pthread_mutex_t append_buffer_lock; - /* - The following is used when several threads are reading the - same file in parallel. They are synchronized on disk - accesses reading the cached part of the file asynchronously. - It should be set to NULL to disable the feature. Only - READ_CACHE mode is supported. - */ - IO_CACHE_SHARE *share; -#endif - /* - A caller will use my_b_read() macro to read from the cache - if the data is already in cache, it will be simply copied with - memcpy() and internal variables will be accordinging updated with - no functions invoked. However, if the data is not fully in the cache, - my_b_read() will call read_function to fetch the data. read_function - must never be invoked directly. - */ - int (*read_function)(struct st_io_cache *,uchar *,size_t); - /* - Same idea as in the case of read_function, except my_b_write() needs to - be replaced with my_b_append() for a SEQ_READ_APPEND cache - */ - int (*write_function)(struct st_io_cache *,const uchar *,size_t); - /* - Specifies the type of the cache. Depending on the type of the cache - certain operations might not be available and yield unpredicatable - results. Details to be documented later - */ - enum cache_type type; - /* - Callbacks were added and are currently used for binary logging of LOAD - DATA INFILE - when a block is read from the file, we create a block - create/append event, and when IO_CACHE is closed, we create an end event; - also used to write the MyISAM WRITE_CACHE blocks to the MyISAM physical - log. These functions could, of course be used for other things. Note: some - callbacks share the same argument ("arg"). - */ - IO_CACHE_CALLBACK pre_read; /**< called before reading from disk */ - IO_CACHE_CALLBACK post_read; /**< called after reading from disk */ - IO_CACHE_CALLBACK pre_close; /**< called before ending the cache */ - /** Called _after_ writing to disk; not honoured by SEQ_READ_APPEND */ - IO_CACHE_CALLBACK post_write; - /* - Counts the number of times, when we were forced to use disk. We use it to - increase the binlog_cache_disk_use status variable. - */ - ulong disk_writes; - void *arg; /**< used by pre/post_read,post_write */ - char *file_name; /* if used with 'open_cached_file' */ - char *dir,*prefix; - File file; /* file descriptor */ - /* - seek_not_done is set by my_b_seek() to inform the upcoming read/write - operation that a seek needs to be preformed prior to the actual I/O - error is 0 if the cache operation was successful, -1 if there was a - "hard" error, and the actual number of I/O-ed bytes if the read/write was - partial. - */ - int seek_not_done,error; - /** - Cumulative 'error' since last [re]init_io_cache(). Useful if cache's user - polls for errors only once in a while. - */ - int hard_write_error_in_the_past; - /* buffer_length is memory size allocated for buffer or write_buffer */ - size_t buffer_length; - /* read_length is the same as buffer_length except when we use async io */ - size_t read_length; - myf myflags; /* Flags used to my_read/my_write */ - /* - alloced_buffer is 1 if the buffer was allocated by init_io_cache() and - 0 if it was supplied by the user. - Currently READ_NET is the only one that will use a buffer allocated - somewhere else - */ - my_bool alloced_buffer; -#ifdef HAVE_AIOWAIT - /* - As inidicated by ifdef, this is for async I/O, which is not currently - used (because it's not reliable on all systems) - */ - uint inited; - my_off_t aio_read_pos; - my_aio_result aio_result; -#endif -} IO_CACHE; - -typedef int (*qsort2_cmp)(const void *, const void *, const void *); - - /* defines for mf_iocache */ - - /* Test if buffer is inited */ -#define my_b_clear(info) (info)->buffer=0 -#define my_b_inited(info) (info)->buffer -#define my_b_EOF INT_MIN - -#define my_b_read(info,Buffer,Count) \ - ((info)->read_pos + (Count) <= (info)->read_end ?\ - (memcpy(Buffer,(info)->read_pos,(size_t) (Count)), \ - ((info)->read_pos+=(Count)),0) :\ - (*(info)->read_function)((info),Buffer,Count)) - -#define my_b_write(info,Buffer,Count) \ - ((info)->write_pos + (Count) <=(info)->write_end ?\ - (memcpy((info)->write_pos, (Buffer), (size_t)(Count)),\ - ((info)->write_pos+=(Count)),0) : \ - (*(info)->write_function)((info),(Buffer),(Count))) - -#define my_b_get(info) \ - ((info)->read_pos != (info)->read_end ?\ - ((info)->read_pos++, (int) (uchar) (info)->read_pos[-1]) :\ - _my_b_get(info)) - - /* my_b_write_byte dosn't have any err-check */ -#define my_b_write_byte(info,chr) \ - (((info)->write_pos < (info)->write_end) ?\ - ((*(info)->write_pos++)=(chr)) :\ - (_my_b_write(info,0,0) , ((*(info)->write_pos++)=(chr)))) - -#define my_b_fill_cache(info) \ - (((info)->read_end=(info)->read_pos),(*(info)->read_function)(info,0,0)) - -#define my_b_tell(info) ((info)->pos_in_file + \ - (size_t) (*(info)->current_pos - (info)->request_pos)) - -#define my_b_get_buffer_start(info) (info)->request_pos -#define my_b_get_bytes_in_buffer(info) (char*) (info)->read_end - \ - (char*) my_b_get_buffer_start(info) -#define my_b_get_pos_in_file(info) (info)->pos_in_file - -/* tell write offset in the SEQ_APPEND cache */ -int my_b_copy_to_file(IO_CACHE *cache, FILE *file); -my_off_t my_b_append_tell(IO_CACHE* info); -my_off_t my_b_safe_tell(IO_CACHE* info); /* picks the correct tell() */ - -#define my_b_bytes_in_cache(info) (size_t) (*(info)->current_end - \ - *(info)->current_pos) - -typedef uint32 ha_checksum; -extern ha_checksum my_crc_dbug_check; - -/* Define the type of function to be passed to process_default_option_files */ -typedef int (*Process_option_func)(void *ctx, const char *group_name, - const char *option); - -#include - - - /* Prototypes for mysys and my_func functions */ - -extern int my_copy(const char *from,const char *to,myf MyFlags); -extern int my_append(const char *from,const char *to,myf MyFlags); -extern int my_delete(const char *name,myf MyFlags); -extern int my_getwd(char * buf,size_t size,myf MyFlags); -extern int my_setwd(const char *dir,myf MyFlags); -extern int my_lock(File fd,int op,my_off_t start, my_off_t length,myf MyFlags); -extern void *my_once_alloc(size_t Size,myf MyFlags); -extern void my_once_free(void); -extern char *my_once_strdup(const char *src,myf myflags); -extern void *my_once_memdup(const void *src, size_t len, myf myflags); -extern File my_open(const char *FileName,int Flags,myf MyFlags); -extern File my_register_filename(File fd, const char *FileName, - enum file_type type_of_file, - uint error_message_number, myf MyFlags); -extern File my_create(const char *FileName,int CreateFlags, - int AccessFlags, myf MyFlags); -extern int my_close(File Filedes,myf MyFlags); -extern File my_dup(File file, myf MyFlags); -extern int my_mkdir(const char *dir, int Flags, myf MyFlags); -extern int my_readlink(char *to, const char *filename, myf MyFlags); -extern int my_is_symlink(const char *filename); -extern int my_realpath(char *to, const char *filename, myf MyFlags); -extern File my_create_with_symlink(const char *linkname, const char *filename, - int createflags, int access_flags, - myf MyFlags); -extern int my_delete_with_symlink(const char *name, myf MyFlags); -extern int my_rename_with_symlink(const char *from,const char *to,myf MyFlags); -extern int my_symlink(const char *content, const char *linkname, myf MyFlags); -extern size_t my_read(File Filedes,uchar *Buffer,size_t Count,myf MyFlags); -extern size_t my_pread(File Filedes,uchar *Buffer,size_t Count,my_off_t offset, - myf MyFlags); -extern int my_rename(const char *from,const char *to,myf MyFlags); -extern my_off_t my_seek(File fd,my_off_t pos,int whence,myf MyFlags); -extern my_off_t my_tell(File fd,myf MyFlags); -extern size_t my_write(File Filedes,const uchar *Buffer,size_t Count, - myf MyFlags); -extern size_t my_pwrite(File Filedes,const uchar *Buffer,size_t Count, - my_off_t offset,myf MyFlags); -extern size_t my_fread(FILE *stream,uchar *Buffer,size_t Count,myf MyFlags); -extern size_t my_fwrite(FILE *stream,const uchar *Buffer,size_t Count, - myf MyFlags); -extern my_off_t my_fseek(FILE *stream,my_off_t pos,int whence,myf MyFlags); -extern my_off_t my_ftell(FILE *stream,myf MyFlags); -extern void *_mymalloc(size_t uSize,const char *sFile, - uint uLine, myf MyFlag); -extern void *_myrealloc(void *pPtr,size_t uSize,const char *sFile, - uint uLine, myf MyFlag); -extern void * my_multi_malloc _VARARGS((myf MyFlags, ...)); -extern void _myfree(void *pPtr,const char *sFile,uint uLine, myf MyFlag); -extern int _sanity(const char *sFile, uint uLine); -extern void *_my_memdup(const void *from, size_t length, - const char *sFile, uint uLine,myf MyFlag); -extern char * _my_strdup(const char *from, const char *sFile, uint uLine, - myf MyFlag); -extern char *_my_strndup(const char *from, size_t length, - const char *sFile, uint uLine, - myf MyFlag); - -/* implemented in my_memmem.c */ -extern void *my_memmem(const void *haystack, size_t haystacklen, - const void *needle, size_t needlelen); - - -#ifdef _WIN32 -extern int my_access(const char *path, int amode); -#else -#define my_access access -#endif - -extern int check_if_legal_filename(const char *path); -extern int check_if_legal_tablename(const char *path); - -#ifdef _WIN32 -extern int nt_share_delete(const char *name,myf MyFlags); -#define my_delete_allow_opened(fname,flags) nt_share_delete((fname),(flags)) -#else -#define my_delete_allow_opened(fname,flags) my_delete((fname),(flags)) -#endif - -#ifdef _WIN32 -/* Windows-only functions (CRT equivalents)*/ -extern File my_sopen(const char *path, int oflag, int shflag, int pmode); -extern HANDLE my_get_osfhandle(File fd); -extern void my_osmaperr(unsigned long last_error); -#endif - -#ifndef TERMINATE -extern void TERMINATE(FILE *file, uint flag); -#endif -extern void init_glob_errs(void); -extern void wait_for_free_space(const char *filename, int errors); -extern FILE *my_fopen(const char *FileName,int Flags,myf MyFlags); -extern FILE *my_fdopen(File Filedes,const char *name, int Flags,myf MyFlags); -extern int my_fclose(FILE *fd,myf MyFlags); -extern File my_fileno(FILE *fd); -extern int my_chsize(File fd,my_off_t newlength, int filler, myf MyFlags); -extern int my_chmod(const char *name, mode_t mode, myf my_flags); -extern int my_sync(File fd, myf my_flags); -extern int my_sync_dir(const char *dir_name, myf my_flags); -extern int my_sync_dir_by_file(const char *file_name, myf my_flags); -extern void my_error _VARARGS((int nr,myf MyFlags, ...)); -extern void my_printf_error _VARARGS((uint my_err, const char *format, - myf MyFlags, ...)) - ATTRIBUTE_FORMAT(printf, 2, 4); -extern void my_printv_error(uint error, const char *format, myf MyFlags, - va_list ap); -extern int my_error_register(const char **errmsgs, int first, int last); -extern const char **my_error_unregister(int first, int last); -extern void my_message(uint my_err, const char *str,myf MyFlags); -extern void my_message_no_curses(uint my_err, const char *str,myf MyFlags); -extern my_bool my_init(void); -extern void my_end(int infoflag); -extern int my_redel(const char *from, const char *to, int MyFlags); -extern int my_copystat(const char *from, const char *to, int MyFlags); -extern char * my_filename(File fd); - -#ifndef THREAD -extern void dont_break(void); -extern void allow_break(void); -#else -#define dont_break() -#define allow_break() -#endif - -#ifdef EXTRA_DEBUG -void my_print_open_files(void); -#else -#define my_print_open_files() -#endif - -extern my_bool init_tmpdir(MY_TMPDIR *tmpdir, const char *pathlist); -extern char *my_tmpdir(MY_TMPDIR *tmpdir); -extern void free_tmpdir(MY_TMPDIR *tmpdir); - -extern void my_remember_signal(int signal_number,sig_handler (*func)(int)); -extern size_t dirname_part(char * to,const char *name, size_t *to_res_length); -extern size_t dirname_length(const char *name); -#define base_name(A) (A+dirname_length(A)) -extern int test_if_hard_path(const char *dir_name); -extern my_bool has_path(const char *name); -extern char *convert_dirname(char *to, const char *from, const char *from_end); -extern void to_unix_path(char * name); -extern char * fn_ext(const char *name); -extern char * fn_same(char * toname,const char *name,int flag); -extern char * fn_format(char * to,const char *name,const char *dir, - const char *form, uint flag); -extern size_t strlength(const char *str); -extern void pack_dirname(char * to,const char *from); -extern size_t normalize_dirname(char * to, const char *from); -extern size_t unpack_dirname(char * to,const char *from); -extern size_t cleanup_dirname(char * to,const char *from); -extern size_t system_filename(char * to,const char *from); -extern size_t unpack_filename(char * to,const char *from); -extern char * intern_filename(char * to,const char *from); -extern char * directory_file_name(char * dst, const char *src); -extern int pack_filename(char * to, const char *name, size_t max_length); -extern char * my_path(char * to,const char *progname, - const char *own_pathname_part); -extern char * my_load_path(char * to, const char *path, - const char *own_path_prefix); -extern int wild_compare(const char *str,const char *wildstr, - pbool str_is_pattern); -extern WF_PACK *wf_comp(char * str); -extern int wf_test(struct wild_file_pack *wf_pack,const char *name); -extern void wf_end(struct wild_file_pack *buffer); -extern size_t strip_sp(char * str); -extern my_bool array_append_string_unique(const char *str, - const char **array, size_t size); -extern void get_date(char * to,int timeflag,time_t use_time); -extern void soundex(CHARSET_INFO *, char * out_pntr, char * in_pntr, - pbool remove_garbage); -extern int init_record_cache(RECORD_CACHE *info,size_t cachesize,File file, - size_t reclength,enum cache_type type, - pbool use_async_io); -extern int read_cache_record(RECORD_CACHE *info,uchar *to); -extern int end_record_cache(RECORD_CACHE *info); -extern int write_cache_record(RECORD_CACHE *info,my_off_t filepos, - const uchar *record,size_t length); -extern int flush_write_cache(RECORD_CACHE *info); -extern long my_clock(void); -extern sig_handler sigtstp_handler(int signal_number); -extern void handle_recived_signals(void); - -extern sig_handler my_set_alarm_variable(int signo); -extern void my_string_ptr_sort(uchar *base,uint items,size_t size); -extern void radixsort_for_str_ptr(uchar* base[], uint number_of_elements, - size_t size_of_element,uchar *buffer[]); -extern qsort_t my_qsort(void *base_ptr, size_t total_elems, size_t size, - qsort_cmp cmp); -extern qsort_t my_qsort2(void *base_ptr, size_t total_elems, size_t size, - qsort2_cmp cmp, void *cmp_argument); -extern qsort2_cmp get_ptr_compare(size_t); -void my_store_ptr(uchar *buff, size_t pack_length, my_off_t pos); -my_off_t my_get_ptr(uchar *ptr, size_t pack_length); -extern int init_io_cache(IO_CACHE *info,File file,size_t cachesize, - enum cache_type type,my_off_t seek_offset, - pbool use_async_io, myf cache_myflags); -extern my_bool reinit_io_cache(IO_CACHE *info,enum cache_type type, - my_off_t seek_offset,pbool use_async_io, - pbool clear_cache); -extern void setup_io_cache(IO_CACHE* info); -extern int _my_b_read(IO_CACHE *info,uchar *Buffer,size_t Count); -#ifdef THREAD -extern int _my_b_read_r(IO_CACHE *info,uchar *Buffer,size_t Count); -extern void init_io_cache_share(IO_CACHE *read_cache, IO_CACHE_SHARE *cshare, - IO_CACHE *write_cache, uint num_threads); -extern void remove_io_thread(IO_CACHE *info); -#endif -extern int _my_b_seq_read(IO_CACHE *info,uchar *Buffer,size_t Count); -extern int _my_b_net_read(IO_CACHE *info,uchar *Buffer,size_t Count); -extern int _my_b_get(IO_CACHE *info); -extern int _my_b_async_read(IO_CACHE *info,uchar *Buffer,size_t Count); -extern int _my_b_write(IO_CACHE *info,const uchar *Buffer,size_t Count); -extern int my_b_append(IO_CACHE *info,const uchar *Buffer,size_t Count); -extern int my_b_safe_write(IO_CACHE *info,const uchar *Buffer,size_t Count); - -extern int my_block_write(IO_CACHE *info, const uchar *Buffer, - size_t Count, my_off_t pos); -extern int my_b_flush_io_cache(IO_CACHE *info, int need_append_buffer_lock); - -#define flush_io_cache(info) my_b_flush_io_cache((info),1) - -extern int end_io_cache(IO_CACHE *info); -extern size_t my_b_fill(IO_CACHE *info); -extern void my_b_seek(IO_CACHE *info,my_off_t pos); -extern size_t my_b_gets(IO_CACHE *info, char *to, size_t max_length); -extern my_off_t my_b_filelength(IO_CACHE *info); -extern size_t my_b_printf(IO_CACHE *info, const char* fmt, ...); -extern size_t my_b_vprintf(IO_CACHE *info, const char* fmt, va_list ap); -extern my_bool open_cached_file(IO_CACHE *cache,const char *dir, - const char *prefix, size_t cache_size, - myf cache_myflags); -extern my_bool real_open_cached_file(IO_CACHE *cache); -extern void close_cached_file(IO_CACHE *cache); -File create_temp_file(char *to, const char *dir, const char *pfx, - int mode, myf MyFlags); -#define my_init_dynamic_array(A,B,C,D) init_dynamic_array2(A,B,NULL,C,D CALLER_INFO) -#define my_init_dynamic_array_ci(A,B,C,D) init_dynamic_array2(A,B,NULL,C,D ORIG_CALLER_INFO) -#define my_init_dynamic_array2(A,B,C,D,E) init_dynamic_array2(A,B,C,D,E CALLER_INFO) -#define my_init_dynamic_array2_ci(A,B,C,D,E) init_dynamic_array2(A,B,C,D,E ORIG_CALLER_INFO) -extern my_bool init_dynamic_array2(DYNAMIC_ARRAY *array,uint element_size, - void *init_buffer, uint init_alloc, - uint alloc_increment - CALLER_INFO_PROTO); -/* init_dynamic_array() function is deprecated */ -extern my_bool init_dynamic_array(DYNAMIC_ARRAY *array,uint element_size, - uint init_alloc,uint alloc_increment - CALLER_INFO_PROTO); -extern my_bool insert_dynamic(DYNAMIC_ARRAY *array, const uchar * element); -extern uchar *alloc_dynamic(DYNAMIC_ARRAY *array); -extern uchar *pop_dynamic(DYNAMIC_ARRAY*); -extern my_bool set_dynamic(DYNAMIC_ARRAY *array,uchar * element,uint array_index); -extern my_bool allocate_dynamic(DYNAMIC_ARRAY *array, uint max_elements); -extern void get_dynamic(DYNAMIC_ARRAY *array,uchar * element,uint array_index); -extern void delete_dynamic(DYNAMIC_ARRAY *array); -extern void delete_dynamic_element(DYNAMIC_ARRAY *array, uint array_index); -extern void freeze_size(DYNAMIC_ARRAY *array); -extern int get_index_dynamic(DYNAMIC_ARRAY *array, uchar * element); -#define dynamic_array_ptr(array,array_index) ((array)->buffer+(array_index)*(array)->size_of_element) -#define dynamic_element(array,array_index,type) ((type)((array)->buffer) +(array_index)) -#define push_dynamic(A,B) insert_dynamic((A),(B)) -#define reset_dynamic(array) ((array)->elements= 0) -#define sort_dynamic(A,cmp) my_qsort((A)->buffer, (A)->elements, (A)->size_of_element, (cmp)) - -extern my_bool init_dynamic_string(DYNAMIC_STRING *str, const char *init_str, - size_t init_alloc,size_t alloc_increment); -extern my_bool dynstr_append(DYNAMIC_STRING *str, const char *append); -my_bool dynstr_append_mem(DYNAMIC_STRING *str, const char *append, - size_t length); -extern my_bool dynstr_append_os_quoted(DYNAMIC_STRING *str, const char *append, - ...); -extern my_bool dynstr_set(DYNAMIC_STRING *str, const char *init_str); -extern my_bool dynstr_realloc(DYNAMIC_STRING *str, size_t additional_size); -extern my_bool dynstr_trunc(DYNAMIC_STRING *str, size_t n); -extern void dynstr_free(DYNAMIC_STRING *str); -#ifdef HAVE_MLOCK -extern void *my_malloc_lock(size_t length,myf flags); -extern void my_free_lock(void *ptr,myf flags); -#else -#define my_malloc_lock(A,B) my_malloc((A),(B)) -#define my_free_lock(A,B) my_free((A),(B)) -#endif -#define alloc_root_inited(A) ((A)->min_malloc != 0) -#define ALLOC_ROOT_MIN_BLOCK_SIZE (MALLOC_OVERHEAD + sizeof(USED_MEM) + 8) -#define clear_alloc_root(A) do { (A)->free= (A)->used= (A)->pre_alloc= 0; (A)->min_malloc=0;} while(0) -extern void init_alloc_root(MEM_ROOT *mem_root, size_t block_size, - size_t pre_alloc_size); -extern void *alloc_root(MEM_ROOT *mem_root, size_t Size); -extern void *multi_alloc_root(MEM_ROOT *mem_root, ...); -extern void free_root(MEM_ROOT *root, myf MyFLAGS); -extern void set_prealloc_root(MEM_ROOT *root, char *ptr); -extern void reset_root_defaults(MEM_ROOT *mem_root, size_t block_size, - size_t prealloc_size); -extern char *strdup_root(MEM_ROOT *root,const char *str); -extern char *strmake_root(MEM_ROOT *root,const char *str,size_t len); -extern void *memdup_root(MEM_ROOT *root,const void *str, size_t len); -extern int get_defaults_options(int argc, char **argv, - char **defaults, char **extra_defaults, - char **group_suffix); -extern const char *args_separator; -extern int my_load_defaults(const char *conf_file, const char **groups, - int *argc, char ***argv, const char ***); -extern int load_defaults(const char *conf_file, const char **groups, - int *argc, char ***argv); -extern int modify_defaults_file(const char *file_location, const char *option, - const char *option_value, - const char *section_name, int remove_option); -extern int my_search_option_files(const char *conf_file, int *argc, - char ***argv, uint *args_used, - Process_option_func func, void *func_ctx, - const char **default_directories); -extern void free_defaults(char **argv); -extern void my_print_default_files(const char *conf_file); -extern void print_defaults(const char *conf_file, const char **groups); -extern my_bool my_compress(uchar *, size_t *, size_t *); -extern my_bool my_uncompress(uchar *, size_t , size_t *); -extern uchar *my_compress_alloc(const uchar *packet, size_t *len, - size_t *complen); -extern int packfrm(uchar *, size_t, uchar **, size_t *); -extern int unpackfrm(uchar **, size_t *, const uchar *); - -extern ha_checksum my_checksum(ha_checksum crc, const uchar *mem, - size_t count); -#ifndef DBUG_OFF -extern void my_debug_put_break_here(void); -#else -#define my_debug_put_break_here() do {} while(0) -#endif - -extern void my_sleep(ulong m_seconds); -extern ulong crc32(ulong crc, const uchar *buf, uint len); -extern uint my_set_max_open_files(uint files); -void my_free_open_file_info(void); - -extern time_t my_time(myf flags); -extern ulonglong my_getsystime(void); -extern ulonglong my_micro_time(); -extern ulonglong my_micro_time_and_time(time_t *time_arg); -time_t my_time_possible_from_micro(ulonglong microtime); -extern my_bool my_gethwaddr(uchar *to); -extern int my_getncpus(); - -#ifdef HAVE_SYS_MMAN_H -#include - -#ifndef MAP_NOSYNC -#define MAP_NOSYNC 0 -#endif -#ifndef MAP_NORESERVE -#define MAP_NORESERVE 0 /* For irix and AIX */ -#endif - -#ifdef HAVE_MMAP64 -#define my_mmap(a,b,c,d,e,f) mmap64(a,b,c,d,e,f) -#else -#define my_mmap(a,b,c,d,e,f) mmap(a,b,c,d,e,f) -#endif -#define my_munmap(a,b) munmap((a),(b)) - -#else -/* not a complete set of mmap() flags, but only those that nesessary */ -#define PROT_READ 1 -#define PROT_WRITE 2 -#define MAP_NORESERVE 0 -#define MAP_SHARED 0x0001 -#define MAP_PRIVATE 0x0002 -#define MAP_NOSYNC 0x0800 -#define MAP_FAILED ((void *)-1) -#define MS_SYNC 0x0000 - -#ifndef __NETWARE__ -#define HAVE_MMAP -#endif - -void *my_mmap(void *, size_t, int, int, int, my_off_t); -int my_munmap(void *, size_t); -#endif - -/* my_getpagesize */ -#ifdef HAVE_GETPAGESIZE -#define my_getpagesize() getpagesize() -#else -int my_getpagesize(void); -#endif - -int my_msync(int, void *, size_t, int); - -#define MY_UUID_SIZE 16 -#define MY_UUID_STRING_LENGTH (8+1+4+1+4+1+4+1+12) - -void my_uuid_init(ulong seed1, ulong seed2); -void my_uuid(uchar *guid); -void my_uuid2str(const uchar *guid, char *s); -void my_uuid_end(); - -struct my_rnd_struct { - unsigned long seed1,seed2,max_value; - double max_value_dbl; -}; - -void my_rnd_init(struct my_rnd_struct *rand_st, ulong seed1, ulong seed2); -double my_rnd(struct my_rnd_struct *rand_st); - -/* character sets */ -extern uint get_charset_number(const char *cs_name, uint cs_flags); -extern uint get_collation_number(const char *name); -extern const char *get_charset_name(uint cs_number); - -extern CHARSET_INFO *get_charset(uint cs_number, myf flags); -extern CHARSET_INFO *get_charset_by_name(const char *cs_name, myf flags); -extern CHARSET_INFO *get_charset_by_csname(const char *cs_name, - uint cs_flags, myf my_flags); - -extern my_bool resolve_charset(const char *cs_name, - CHARSET_INFO *default_cs, - CHARSET_INFO **cs); -extern my_bool resolve_collation(const char *cl_name, - CHARSET_INFO *default_cl, - CHARSET_INFO **cl); - -extern void free_charsets(void); -extern char *get_charsets_dir(char *buf); -extern my_bool my_charset_same(CHARSET_INFO *cs1, CHARSET_INFO *cs2); -extern my_bool init_compiled_charsets(myf flags); -extern void add_compiled_collation(CHARSET_INFO *cs); -extern size_t escape_string_for_mysql(CHARSET_INFO *charset_info, - char *to, size_t to_length, - const char *from, size_t length); -#ifdef __WIN__ -#define BACKSLASH_MBTAIL -/* File system character set */ -extern CHARSET_INFO *fs_character_set(void); -#endif -extern size_t escape_quotes_for_mysql(CHARSET_INFO *charset_info, - char *to, size_t to_length, - const char *from, size_t length); - -extern void thd_increment_bytes_sent(ulong length); -extern void thd_increment_bytes_received(ulong length); -extern void thd_increment_net_big_packet_count(ulong length); - -#ifdef __WIN__ -extern my_bool have_tcpip; /* Is set if tcpip is used */ - -/* implemented in my_windac.c */ - -int my_security_attr_create(SECURITY_ATTRIBUTES **psa, const char **perror, - DWORD owner_rights, DWORD everybody_rights); - -void my_security_attr_free(SECURITY_ATTRIBUTES *sa); - -/* implemented in my_conio.c */ -char* my_cgets(char *string, size_t clen, size_t* plen); - -#endif -#ifdef __NETWARE__ -void netware_reg_user(const char *ip, const char *user, - const char *application); -#endif - -C_MODE_END -#endif /* _my_sys_h */ diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_time.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_time.h deleted file mode 100644 index 58995f1..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_time.h +++ /dev/null @@ -1,172 +0,0 @@ -/* Copyright (C) 2004-2005 MySQL AB - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - This is a private header of sql-common library, containing - declarations for my_time.c -*/ - -#ifndef _my_time_h_ -#define _my_time_h_ -#include "my_global.h" -#include "mysql_time.h" - -C_MODE_START - -extern ulonglong log_10_int[20]; -extern uchar days_in_month[]; - -/* - Portable time_t replacement. - Should be signed and hold seconds for 1902 -- 2038-01-19 range - i.e at least a 32bit variable - - Using the system built in time_t is not an option as - we rely on the above requirements in the time functions - - For example QNX has an unsigned time_t type -*/ -typedef long my_time_t; - -#define MY_TIME_T_MAX LONG_MAX -#define MY_TIME_T_MIN LONG_MIN - -/* Time handling defaults */ -#define TIMESTAMP_MAX_YEAR 2038 -#define TIMESTAMP_MIN_YEAR (1900 + YY_PART_YEAR - 1) -#define TIMESTAMP_MAX_VALUE INT_MAX32 -#define TIMESTAMP_MIN_VALUE 1 - -/* two-digit years < this are 20..; >= this are 19.. */ -#define YY_PART_YEAR 70 - -/* Flags to str_to_datetime */ -#define TIME_FUZZY_DATE 1 -#define TIME_DATETIME_ONLY 2 -/* Must be same as MODE_NO_ZERO_IN_DATE */ -#define TIME_NO_ZERO_IN_DATE (65536L*2*2*2*2*2*2*2) -/* Must be same as MODE_NO_ZERO_DATE */ -#define TIME_NO_ZERO_DATE (TIME_NO_ZERO_IN_DATE*2) -#define TIME_INVALID_DATES (TIME_NO_ZERO_DATE*2) - -#define MYSQL_TIME_WARN_TRUNCATED 1 -#define MYSQL_TIME_WARN_OUT_OF_RANGE 2 - -/* Limits for the TIME data type */ -#define TIME_MAX_HOUR 838 -#define TIME_MAX_MINUTE 59 -#define TIME_MAX_SECOND 59 -#define TIME_MAX_VALUE (TIME_MAX_HOUR*10000 + TIME_MAX_MINUTE*100 + \ - TIME_MAX_SECOND) -#define TIME_MAX_VALUE_SECONDS (TIME_MAX_HOUR * 3600L + \ - TIME_MAX_MINUTE * 60L + TIME_MAX_SECOND) - -my_bool check_date(const MYSQL_TIME *ltime, my_bool not_zero_date, - ulong flags, int *was_cut); -enum enum_mysql_timestamp_type -str_to_datetime(const char *str, uint length, MYSQL_TIME *l_time, - uint flags, int *was_cut); -longlong number_to_datetime(longlong nr, MYSQL_TIME *time_res, - uint flags, int *was_cut); -ulonglong TIME_to_ulonglong_datetime(const MYSQL_TIME *); -ulonglong TIME_to_ulonglong_date(const MYSQL_TIME *); -ulonglong TIME_to_ulonglong_time(const MYSQL_TIME *); -ulonglong TIME_to_ulonglong(const MYSQL_TIME *); - - -my_bool str_to_time(const char *str,uint length, MYSQL_TIME *l_time, - int *warning); - -int check_time_range(struct st_mysql_time *, int *warning); - -long calc_daynr(uint year,uint month,uint day); -uint calc_days_in_year(uint year); -uint year_2000_handling(uint year); - -void my_init_time(void); - - -/* - Function to check sanity of a TIMESTAMP value - - DESCRIPTION - Check if a given MYSQL_TIME value fits in TIMESTAMP range. - This function doesn't make precise check, but rather a rough - estimate. - - RETURN VALUES - FALSE The value seems sane - TRUE The MYSQL_TIME value is definitely out of range -*/ - -static inline my_bool validate_timestamp_range(const MYSQL_TIME *t) -{ - if ((t->year > TIMESTAMP_MAX_YEAR || t->year < TIMESTAMP_MIN_YEAR) || - (t->year == TIMESTAMP_MAX_YEAR && (t->month > 1 || t->day > 19)) || - (t->year == TIMESTAMP_MIN_YEAR && (t->month < 12 || t->day < 31))) - return FALSE; - - return TRUE; -} - -my_time_t -my_system_gmt_sec(const MYSQL_TIME *t, long *my_timezone, - my_bool *in_dst_time_gap); - -void set_zero_time(MYSQL_TIME *tm, enum enum_mysql_timestamp_type time_type); - -/* - Required buffer length for my_time_to_str, my_date_to_str, - my_datetime_to_str and TIME_to_string functions. Note, that the - caller is still responsible to check that given TIME structure - has values in valid ranges, otherwise size of the buffer could - be not enough. We also rely on the fact that even wrong values - sent using binary protocol fit in this buffer. -*/ -#define MAX_DATE_STRING_REP_LENGTH 30 - -int my_time_to_str(const MYSQL_TIME *l_time, char *to); -int my_date_to_str(const MYSQL_TIME *l_time, char *to); -int my_datetime_to_str(const MYSQL_TIME *l_time, char *to); -int my_TIME_to_str(const MYSQL_TIME *l_time, char *to); - -/* - Available interval types used in any statement. - - 'interval_type' must be sorted so that simple intervals comes first, - ie year, quarter, month, week, day, hour, etc. The order based on - interval size is also important and the intervals should be kept in a - large to smaller order. (get_interval_value() depends on this) - - Note: If you change the order of elements in this enum you should fix - order of elements in 'interval_type_to_name' and 'interval_names' - arrays - - See also interval_type_to_name, get_interval_value, interval_names -*/ - -enum interval_type -{ - INTERVAL_YEAR, INTERVAL_QUARTER, INTERVAL_MONTH, INTERVAL_WEEK, INTERVAL_DAY, - INTERVAL_HOUR, INTERVAL_MINUTE, INTERVAL_SECOND, INTERVAL_MICROSECOND, - INTERVAL_YEAR_MONTH, INTERVAL_DAY_HOUR, INTERVAL_DAY_MINUTE, - INTERVAL_DAY_SECOND, INTERVAL_HOUR_MINUTE, INTERVAL_HOUR_SECOND, - INTERVAL_MINUTE_SECOND, INTERVAL_DAY_MICROSECOND, INTERVAL_HOUR_MICROSECOND, - INTERVAL_MINUTE_MICROSECOND, INTERVAL_SECOND_MICROSECOND, INTERVAL_LAST -}; - -C_MODE_END - -#endif /* _my_time_h_ */ diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_tree.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_tree.h deleted file mode 100644 index e387b25..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_tree.h +++ /dev/null @@ -1,96 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef _tree_h -#define _tree_h -#ifdef __cplusplus -extern "C" { -#endif - -#include "my_base.h" /* get 'enum ha_rkey_function' */ - -/* Worst case tree is half full. This gives use 2^(MAX_TREE_HEIGHT/2) leafs */ -#define MAX_TREE_HEIGHT 64 - -#define ELEMENT_KEY(tree,element)\ -(tree->offset_to_key ? (void*)((uchar*) element+tree->offset_to_key) :\ - *((void**) (element+1))) - -#define tree_set_pointer(element,ptr) *((uchar **) (element+1))=((uchar*) (ptr)) - -#define TREE_NO_DUPS 1 - -typedef enum { left_root_right, right_root_left } TREE_WALK; -typedef uint32 element_count; -typedef int (*tree_walk_action)(void *,element_count,void *); - -typedef enum { free_init, free_free, free_end } TREE_FREE; -typedef void (*tree_element_free)(void*, TREE_FREE, void *); - -typedef struct st_tree_element { - struct st_tree_element *left,*right; - uint32 count:31, - colour:1; /* black is marked as 1 */ -} TREE_ELEMENT; - -#define ELEMENT_CHILD(element, offs) (*(TREE_ELEMENT**)((char*)element + offs)) - -typedef struct st_tree { - TREE_ELEMENT *root,null_element; - TREE_ELEMENT **parents[MAX_TREE_HEIGHT]; - uint offset_to_key,elements_in_tree,size_of_element; - ulong memory_limit, allocated; - qsort_cmp2 compare; - void *custom_arg; - MEM_ROOT mem_root; - my_bool with_delete; - tree_element_free free; - uint flag; -} TREE; - - /* Functions on whole tree */ -void init_tree(TREE *tree, ulong default_alloc_size, ulong memory_limit, - int size, qsort_cmp2 compare, my_bool with_delete, - tree_element_free free_element, void *custom_arg); -void delete_tree(TREE*); -void reset_tree(TREE*); - - /* similar to delete tree, except we do not my_free() blocks in mem_root */ -#define is_tree_inited(tree) ((tree)->root != 0) - - /* Functions on leafs */ -TREE_ELEMENT *tree_insert(TREE *tree,void *key, uint key_size, - void *custom_arg); -void *tree_search(TREE *tree, void *key, void *custom_arg); -int tree_walk(TREE *tree,tree_walk_action action, - void *argument, TREE_WALK visit); -int tree_delete(TREE *tree, void *key, uint key_size, void *custom_arg); -void *tree_search_key(TREE *tree, const void *key, - TREE_ELEMENT **parents, TREE_ELEMENT ***last_pos, - enum ha_rkey_function flag, void *custom_arg); -void *tree_search_edge(TREE *tree, TREE_ELEMENT **parents, - TREE_ELEMENT ***last_pos, int child_offs); -void *tree_search_next(TREE *tree, TREE_ELEMENT ***last_pos, int l_offs, - int r_offs); -ha_rows tree_record_pos(TREE *tree, const void *key, - enum ha_rkey_function search_flag, void *custom_arg); -#define reset_free_element(tree) (tree)->free= 0 - -#define TREE_ELEMENT_EXTRA_SIZE (sizeof(TREE_ELEMENT) + sizeof(void*)) - -#ifdef __cplusplus -} -#endif -#endif diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_trie.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_trie.h deleted file mode 100644 index 72dd485..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_trie.h +++ /dev/null @@ -1,141 +0,0 @@ -/* Copyright (C) 2005 MySQL AB - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef _trie_h -#define _trie_h -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct st_trie_node -{ - uint16 leaf; /* Depth from root node if match, 0 else */ - uchar c; /* Label on this edge */ - struct st_trie_node *next; /* Next label */ - struct st_trie_node *links; /* Array of edges leaving this node */ - struct st_trie_node *fail; /* AC failure function */ -} TRIE_NODE; - -typedef struct st_trie -{ - TRIE_NODE root; - MEM_ROOT mem_root; - CHARSET_INFO *charset; - uint32 nnodes; - uint32 nwords; -} TRIE; - -typedef struct st_ac_trie_state -{ - TRIE *trie; - TRIE_NODE *node; -} AC_TRIE_STATE; - -extern TRIE *trie_init (TRIE *trie, CHARSET_INFO *charset); -extern void trie_free (TRIE *trie); -extern my_bool trie_insert (TRIE *trie, const uchar *key, uint keylen); -extern my_bool ac_trie_prepare (TRIE *trie); -extern void ac_trie_init (TRIE *trie, AC_TRIE_STATE *state); - - -/* `trie_goto' is internal function and shouldn't be used. */ - -static inline TRIE_NODE *trie_goto (TRIE_NODE *root, TRIE_NODE *node, uchar c) -{ - TRIE_NODE *next; - DBUG_ENTER("trie_goto"); - for (next= node->links; next; next= next->next) - if (next->c == c) - DBUG_RETURN(next); - if (root == node) - DBUG_RETURN(root); - DBUG_RETURN(NULL); -} - - -/* - SYNOPSIS - int ac_trie_next (AC_TRIE_STATE *state, uchar *c); - state - valid pointer to `AC_TRIE_STATE' - c - character to lookup - - DESCRIPTION - Implementation of search using Aho-Corasick automaton. - Performs char-by-char search. - - RETURN VALUE - `ac_trie_next' returns length of matched word or 0. -*/ - -static inline int ac_trie_next (AC_TRIE_STATE *state, uchar *c) -{ - TRIE_NODE *root, *node; - DBUG_ENTER("ac_trie_next"); - DBUG_ASSERT(state && c); - root= &state->trie->root; - node= state->node; - while (! (state->node= trie_goto(root, node, *c))) - node= node->fail; - DBUG_RETURN(state->node->leaf); -} - - -/* - SYNOPSIS - my_bool trie_search (TRIE *trie, const uchar *key, uint keylen); - trie - valid pointer to `TRIE' - key - valid pointer to key to insert - keylen - non-0 key length - - DESCRIPTION - Performs key lookup in trie. - - RETURN VALUE - `trie_search' returns `true' if key is in `trie'. Otherwise, - `false' is returned. - - NOTES - Consecutive search here is "best by test". arrays are very short, so - binary search or hashing would add too much complexity that would - overweight speed gain. Especially because compiler can optimize simple - consecutive loop better (tested) -*/ - -static inline my_bool trie_search (TRIE *trie, const uchar *key, uint keylen) -{ - TRIE_NODE *node; - uint k; - DBUG_ENTER("trie_search"); - DBUG_ASSERT(trie && key && keylen); - node= &trie->root; - - for (k= 0; k < keylen; k++) - { - uchar p; - if (! (node= node->links)) - DBUG_RETURN(FALSE); - p= key[k]; - while (p != node->c) - if (! (node= node->next)) - DBUG_RETURN(FALSE); - } - - DBUG_RETURN(node->leaf > 0); -} - -#ifdef __cplusplus -} -#endif -#endif diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_uctype.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_uctype.h deleted file mode 100644 index 9aaf478..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_uctype.h +++ /dev/null @@ -1,1479 +0,0 @@ -/* Copyright (C) 2006 MySQL AB - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ - -/* - Unicode ctype data - Generated from UnicodeData-5.0.0d9.txt -*/ -static unsigned char uctype_page00[256]= -{ - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 8, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 16, 16, 16, 16, 16, 16, - 16, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, - 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 129, 16, 16, 16, 16, 16, - 16, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, - 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 16, 16, 16, 16, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 8, 16, 16, 16, 16, 16, 16, 16, 16, 16, 2, 16, 16, 32, 16, 16, - 16, 16, 20, 20, 16, 2, 16, 16, 16, 20, 2, 16, 20, 20, 20, 16, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 16, 1, 1, 1, 1, 1, 1, 1, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 16, 2, 2, 2, 2, 2, 2, 2, 2 -}; - -static unsigned char uctype_page01[256]= -{ - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1, - 2, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 2, - 2, 1, 1, 2, 1, 2, 1, 1, 2, 1, 1, 1, 2, 2, 1, 1, - 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, 2, 2, 1, 1, 2, 1, - 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 2, 1, 2, 1, 1, - 2, 1, 1, 1, 2, 1, 2, 1, 1, 2, 2, 2, 1, 2, 2, 2, - 2, 2, 2, 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 2, 1, - 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 2, 1, 1, 2, 1, 2, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2 -}; - -static unsigned char uctype_page02[256]= -{ - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 1, 1, 2, - 2, 1, 2, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 16, 16, 16, 16, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 2, 2, 2, 2, 2, 16, 16, 16, 16, 16, 16, 16, 16, 16, 2, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16 -}; - -static unsigned char uctype_page03[256]= -{ - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 0, 0, 0, 0, 16, 16, 0, 0, 0, 0, 2, 2, 2, 2, 16, 0, - 0, 0, 0, 0, 16, 16, 1, 16, 1, 1, 1, 0, 1, 0, 1, 1, - 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, - 2, 2, 1, 1, 1, 2, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 2, 2, 2, 2, 1, 2, 16, 1, 2, 1, 1, 2, 2, 1, 1, 1 -}; - -static unsigned char uctype_page04[256]= -{ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 16, 18, 18, 18, 18, 0, 18, 18, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2 -}; - -static unsigned char uctype_page05[256]= -{ - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 0, 0, 2, 16, 16, 16, 16, 16, 16, - 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 0, 16, 16, 0, 0, 0, 0, 0, - 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 16, 18, - 16, 18, 18, 16, 18, 18, 16, 18, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, - 2, 2, 2, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_page06[256]= -{ - 32, 32, 32, 32, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 16, 16, - 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0, 16, 0, 0, 16, 16, - 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 16, 16, 16, 16, 2, 2, - 18, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 16, 2, 18, 18, 18, 18, 18, 18, 18, 32, 18, 18, - 18, 18, 18, 18, 18, 2, 2, 18, 18, 16, 18, 18, 18, 18, 2, 2, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 16, 16, 2 -}; - -static unsigned char uctype_page07[256]= -{ - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 32, - 2, 18, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 2, 2, 16, 16, 16, 16, 2, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_page09[256]= -{ - 0, 18, 18, 18, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 18, 2, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, - 2, 18, 18, 18, 18, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 18, 18, 16, 16, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, - 0, 18, 18, 18, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, - 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, - 2, 0, 2, 0, 0, 0, 2, 2, 2, 2, 0, 0, 18, 2, 18, 18, - 18, 18, 18, 18, 18, 0, 0, 18, 18, 0, 0, 18, 18, 18, 2, 0, - 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 2, 2, 0, 2, - 2, 2, 18, 18, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 2, 2, 16, 16, 20, 20, 20, 20, 20, 20, 16, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_page0A[256]= -{ - 0, 18, 18, 18, 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 2, - 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, - 2, 0, 2, 2, 0, 2, 2, 0, 2, 2, 0, 0, 18, 0, 18, 18, - 18, 18, 18, 0, 0, 0, 0, 18, 18, 0, 0, 18, 18, 18, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 0, 2, 0, - 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 18, 18, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 18, 18, 18, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, - 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, - 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 0, 0, 18, 2, 18, 18, - 18, 18, 18, 18, 18, 18, 0, 18, 18, 18, 0, 18, 18, 18, 0, 0, - 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 18, 18, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_page0B[256]= -{ - 0, 18, 18, 18, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, - 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, - 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 0, 0, 18, 2, 18, 18, - 18, 18, 18, 18, 0, 0, 0, 18, 18, 0, 0, 18, 18, 18, 0, 0, - 0, 0, 0, 0, 0, 0, 18, 18, 0, 0, 0, 0, 2, 2, 0, 2, - 2, 2, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 16, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 18, 2, 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 2, 2, - 2, 0, 2, 2, 2, 2, 0, 0, 0, 2, 2, 0, 2, 0, 2, 2, - 0, 0, 0, 2, 2, 0, 0, 0, 2, 2, 2, 0, 0, 0, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 18, 18, - 18, 18, 18, 0, 0, 0, 18, 18, 18, 0, 18, 18, 18, 18, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 20, 20, 20, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_page0C[256]= -{ - 0, 18, 18, 18, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, - 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 18, 18, - 18, 18, 18, 18, 18, 0, 18, 18, 18, 0, 18, 18, 18, 18, 0, 0, - 0, 0, 0, 0, 0, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 18, 18, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, - 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 0, 0, 18, 2, 18, 18, - 18, 18, 18, 18, 18, 0, 18, 18, 18, 0, 18, 18, 18, 18, 0, 0, - 0, 0, 0, 0, 0, 18, 18, 0, 0, 0, 0, 0, 0, 0, 2, 0, - 2, 2, 18, 18, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 0, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_page0D[256]= -{ - 0, 0, 18, 18, 0, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, - 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 18, 18, - 18, 18, 18, 18, 0, 0, 18, 18, 18, 0, 18, 18, 18, 18, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 18, 18, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 18, 0, 0, 0, 0, 18, - 18, 18, 18, 18, 18, 0, 18, 0, 18, 18, 18, 18, 18, 18, 18, 18, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 18, 18, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_page0E[256]= -{ - 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 18, 2, 2, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 16, - 2, 2, 2, 2, 2, 2, 2, 18, 18, 18, 18, 18, 18, 18, 18, 16, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 16, 16, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 2, 2, 0, 2, 0, 0, 2, 2, 0, 2, 0, 0, 2, 0, 0, - 0, 0, 0, 0, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, - 0, 2, 2, 2, 0, 2, 0, 2, 0, 0, 2, 2, 0, 2, 2, 2, - 2, 18, 2, 2, 18, 18, 18, 18, 18, 18, 0, 18, 18, 2, 0, 0, - 2, 2, 2, 2, 2, 0, 2, 0, 18, 18, 18, 18, 18, 18, 0, 0, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 2, 2, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_page0F[256]= -{ - 2, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 18, 18, 16, 16, 16, 16, 16, 16, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 16, 18, 16, 18, 16, 18, 16, 16, 16, 16, 18, 18, - 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, - 0, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 16, 18, 18, 2, 2, 2, 2, 0, 0, 0, 0, - 18, 18, 18, 18, 18, 18, 18, 18, 0, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 16, 16, - 16, 16, 16, 16, 16, 16, 18, 16, 16, 16, 16, 16, 16, 0, 0, 16, - 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_page10[256]= -{ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 0, 2, 2, 2, 2, 2, 0, 2, 2, 0, 18, 18, 18, 18, - 18, 18, 18, 0, 0, 0, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 16, 16, 16, 16, 16, 16, - 2, 2, 2, 2, 2, 2, 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 2, 0, 0, 0 -}; - -static unsigned char uctype_page11[256]= -{ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_page12[256]= -{ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 0, 2, 0, 2, 2, 2, 2, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 0, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 0, - 2, 0, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 -}; - -static unsigned char uctype_page13[256]= -{ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 0, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 18, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_page14[256]= -{ - 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 -}; - -static unsigned char uctype_page16[256]= -{ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, 2, - 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 8, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, 16, 7, 7, - 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_page17[256]= -{ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, - 2, 2, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 18, 18, 18, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, - 2, 0, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 32, 32, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 16, 16, 16, 2, 16, 16, 16, 16, 2, 18, 0, 0, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_page18[256]= -{ - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 18, 18, 18, 8, 0, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 18, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_page19[256]= -{ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, - 16, 0, 0, 0, 16, 16, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, - 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 2, 2, 2, 2, 2, 2, 2, 18, 18, 0, 0, 0, 0, 0, 0, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 0, 0, 0, 0, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16 -}; - -static unsigned char uctype_page1A[256]= -{ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 18, 18, 18, 18, 18, 0, 0, 16, 16, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_page1B[256]= -{ - 18, 18, 18, 18, 18, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_page1D[256]= -{ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 18 -}; - -static unsigned char uctype_page1E[256]= -{ - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_page1F[256]= -{ - 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 0, 1, 0, 1, 0, 1, 0, 1, - 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, - 2, 2, 2, 2, 2, 0, 2, 2, 1, 1, 1, 1, 1, 16, 2, 16, - 16, 16, 2, 2, 2, 0, 2, 2, 1, 1, 1, 1, 1, 16, 16, 16, - 2, 2, 2, 2, 0, 0, 2, 2, 1, 1, 1, 1, 0, 16, 16, 16, - 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 16, 16, 16, - 0, 0, 2, 2, 2, 0, 2, 2, 1, 1, 1, 1, 1, 16, 16, 0 -}; - -static unsigned char uctype_page20[256]= -{ - 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 32, 32, 32, 32, 32, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 8, 8, 32, 32, 32, 32, 32, 8, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 8, - 32, 32, 32, 32, 0, 0, 0, 0, 0, 0, 32, 32, 32, 32, 32, 32, - 20, 2, 0, 0, 20, 20, 20, 20, 20, 20, 16, 16, 16, 16, 16, 2, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 16, 16, 16, 16, 16, 0, - 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_page21[256]= -{ - 16, 16, 1, 16, 16, 16, 16, 1, 16, 16, 2, 1, 1, 1, 2, 2, - 1, 1, 1, 2, 16, 1, 16, 16, 16, 1, 1, 1, 1, 1, 16, 16, - 16, 16, 16, 16, 1, 16, 1, 16, 1, 16, 1, 1, 1, 1, 16, 2, - 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 16, 16, 2, 2, 1, 1, - 16, 16, 16, 16, 16, 1, 2, 2, 2, 2, 16, 16, 16, 16, 2, 0, - 0, 0, 0, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, - 7, 7, 7, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16 -}; - -static unsigned char uctype_page23[256]= -{ - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_page24[256]= -{ - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20 -}; - -static unsigned char uctype_page26[256]= -{ - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_page27[256]= -{ - 0, 16, 16, 16, 16, 0, 16, 16, 16, 16, 0, 0, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 0, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 16, 0, 16, - 16, 16, 16, 0, 0, 0, 16, 0, 16, 16, 16, 16, 16, 16, 16, 0, - 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 16, 0, 0, 0, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16 -}; - -static unsigned char uctype_page2B[256]= -{ - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, - 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_page2C[256]= -{ - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, - 1, 2, 1, 1, 1, 2, 2, 1, 2, 1, 2, 1, 2, 0, 0, 0, - 0, 0, 0, 0, 2, 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, - 1, 2, 1, 2, 2, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 16, 16, 20, 16, 16 -}; - -static unsigned char uctype_page2D[256]= -{ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 0, - 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 0, - 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 0, - 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_page2E[256]= -{ - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 16, 16, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_page2F[256]= -{ - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0 -}; - -static unsigned char uctype_page30[256]= -{ - 8, 16, 16, 16, 16, 2, 2, 7, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 7, 7, 7, 7, 7, 7, 7, 7, 7, 18, 18, 18, 18, 18, 18, - 16, 2, 2, 2, 2, 2, 16, 16, 7, 7, 7, 2, 2, 16, 16, 16, - 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 0, 0, 18, 18, 16, 16, 2, 2, 2, - 16, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 2, 2, 2, 2 -}; - -static unsigned char uctype_page31[256]= -{ - 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, - 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, - 16, 16, 20, 20, 20, 20, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 -}; - -static unsigned char uctype_page32[256]= -{ - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 16, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0 -}; - -static unsigned char uctype_page4D[256]= -{ - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16 -}; - -static unsigned char uctype_page9F[256]= -{ - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_pageA4[256]= -{ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_pageA7[256]= -{ - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 2, 2, 2, 2, 0, 0, 0, 0, 0, - 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_pageA8[256]= -{ - 2, 2, 18, 2, 2, 2, 18, 2, 2, 2, 2, 18, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 18, 18, 18, 18, 18, 16, 16, 16, 16, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_pageD7[256]= -{ - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_pageD8[256]= -{ - 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_pageDB[256]= -{ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, - 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32 -}; - -static unsigned char uctype_pageDC[256]= -{ - 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_pageDF[256]= -{ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32 -}; - -static unsigned char uctype_pageE0[256]= -{ - 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_pageF8[256]= -{ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32 -}; - -static unsigned char uctype_pageFA[256]= -{ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -static unsigned char uctype_pageFB[256]= -{ - 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 2, 18, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 0, 2, 0, - 2, 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 -}; - -static unsigned char uctype_pageFD[256]= -{ - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, 0, 0 -}; - -static unsigned char uctype_pageFE[256]= -{ - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, - 18, 18, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 16, 0, 16, 16, 16, 16, 0, 0, 0, 0, - 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 32 -}; - -static unsigned char uctype_pageFF[256]= -{ - 0, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 16, 16, 16, 16, 16, 16, - 16, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16, 16, - 16, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, 16, 16, 16, - 16, 16, 16, 16, 16, 16, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, - 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, - 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 0, 0, 0, - 16, 16, 16, 16, 16, 16, 16, 0, 16, 16, 16, 16, 16, 16, 16, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 32, 32, 16, 16, 0, 0 -}; - -MY_UNI_CTYPE my_uni_ctype[256]={ - {0,uctype_page00}, - {0,uctype_page01}, - {0,uctype_page02}, - {0,uctype_page03}, - {0,uctype_page04}, - {0,uctype_page05}, - {0,uctype_page06}, - {0,uctype_page07}, - {0,NULL}, - {0,uctype_page09}, - {0,uctype_page0A}, - {0,uctype_page0B}, - {0,uctype_page0C}, - {0,uctype_page0D}, - {0,uctype_page0E}, - {0,uctype_page0F}, - {0,uctype_page10}, - {0,uctype_page11}, - {0,uctype_page12}, - {0,uctype_page13}, - {0,uctype_page14}, - {2,NULL}, - {0,uctype_page16}, - {0,uctype_page17}, - {0,uctype_page18}, - {0,uctype_page19}, - {0,uctype_page1A}, - {0,uctype_page1B}, - {0,NULL}, - {0,uctype_page1D}, - {0,uctype_page1E}, - {0,uctype_page1F}, - {0,uctype_page20}, - {0,uctype_page21}, - {16,NULL}, - {0,uctype_page23}, - {0,uctype_page24}, - {16,NULL}, - {0,uctype_page26}, - {0,uctype_page27}, - {16,NULL}, - {16,NULL}, - {16,NULL}, - {0,uctype_page2B}, - {0,uctype_page2C}, - {0,uctype_page2D}, - {0,uctype_page2E}, - {0,uctype_page2F}, - {0,uctype_page30}, - {0,uctype_page31}, - {0,uctype_page32}, - {16,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {0,uctype_page4D}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {0,uctype_page9F}, - {2,NULL}, - {2,NULL}, - {2,NULL}, - {2,NULL}, - {0,uctype_pageA4}, - {0,NULL}, - {0,NULL}, - {0,uctype_pageA7}, - {0,uctype_pageA8}, - {0,NULL}, - {0,NULL}, - {0,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {3,NULL}, - {0,uctype_pageD7}, - {0,uctype_pageD8}, - {0,NULL}, - {0,NULL}, - {0,uctype_pageDB}, - {0,uctype_pageDC}, - {0,NULL}, - {0,NULL}, - {0,uctype_pageDF}, - {0,uctype_pageE0}, - {0,NULL}, - {0,NULL}, - {0,NULL}, - {0,NULL}, - {0,NULL}, - {0,NULL}, - {0,NULL}, - {0,NULL}, - {0,NULL}, - {0,NULL}, - {0,NULL}, - {0,NULL}, - {0,NULL}, - {0,NULL}, - {0,NULL}, - {0,NULL}, - {0,NULL}, - {0,NULL}, - {0,NULL}, - {0,NULL}, - {0,NULL}, - {0,NULL}, - {0,NULL}, - {0,uctype_pageF8}, - {2,NULL}, - {0,uctype_pageFA}, - {0,uctype_pageFB}, - {2,NULL}, - {0,uctype_pageFD}, - {0,uctype_pageFE}, - {0,uctype_pageFF} -}; - - diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_vle.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_vle.h deleted file mode 100644 index c09f822..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_vle.h +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright (C) 2005 MySQL AB - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef VLE_H -#define VLE_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "my_global.h" - -/* - The size (in bytes) required to store the object ITEM, which can be - either an expression or a type (since sizeof() is used on the item). -*/ -#define my_vle_sizeof(ITEM) (((sizeof(ITEM) * CHAR_BIT) + 6) / 7) - -uchar *my_vle_encode(uchar *vle, size_t max, ulong value); -uchar const *my_vle_decode(ulong *value_ptr, uchar const *vle); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_xml.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_xml.h deleted file mode 100644 index 6a453ee..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/my_xml.h +++ /dev/null @@ -1,89 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - - -#ifndef _my_xml_h -#define _my_xml_h - -#ifdef __cplusplus -extern "C" { -#endif - - -#define MY_XML_OK 0 -#define MY_XML_ERROR 1 - -/* - A flag whether to use absolute tag names in call-back functions, - like "a", "a.b" and "a.b.c" (used in character set file parser), - or relative names like "a", "b" and "c". -*/ -#define MY_XML_FLAG_RELATIVE_NAMES 1 - -/* - A flag whether to skip normilization of text values before calling - call-back functions: i.e. skip leading/trailing spaces, - \r, \n, \t characters. -*/ -#define MY_XML_FLAG_SKIP_TEXT_NORMALIZATION 2 - -enum my_xml_node_type -{ - MY_XML_NODE_TAG, /* can have TAG, ATTR and TEXT children */ - MY_XML_NODE_ATTR, /* can have TEXT children */ - MY_XML_NODE_TEXT /* cannot have children */ -}; - -typedef struct xml_stack_st -{ - int flags; - enum my_xml_node_type current_node_type; - char errstr[128]; - char attr[128]; - char *attrend; - const char *beg; - const char *cur; - const char *end; - void *user_data; - int (*enter)(struct xml_stack_st *st,const char *val, size_t len); - int (*value)(struct xml_stack_st *st,const char *val, size_t len); - int (*leave_xml)(struct xml_stack_st *st,const char *val, size_t len); -} MY_XML_PARSER; - -void my_xml_parser_create(MY_XML_PARSER *st); -void my_xml_parser_free(MY_XML_PARSER *st); -int my_xml_parse(MY_XML_PARSER *st,const char *str, size_t len); - -void my_xml_set_value_handler(MY_XML_PARSER *st, int (*)(MY_XML_PARSER *, - const char *, - size_t len)); -void my_xml_set_enter_handler(MY_XML_PARSER *st, int (*)(MY_XML_PARSER *, - const char *, - size_t len)); -void my_xml_set_leave_handler(MY_XML_PARSER *st, int (*)(MY_XML_PARSER *, - const char *, - size_t len)); -void my_xml_set_user_data(MY_XML_PARSER *st, void *); - -size_t my_xml_error_pos(MY_XML_PARSER *st); -uint my_xml_error_lineno(MY_XML_PARSER *st); - -const char *my_xml_error_string(MY_XML_PARSER *st); - -#ifdef __cplusplus -} -#endif - -#endif /* _my_xml_h */ diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/myisampack.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/myisampack.h deleted file mode 100644 index 34a085e..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/myisampack.h +++ /dev/null @@ -1,238 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - Storing of values in high byte first order. - - integer keys and file pointers are stored with high byte first to get - better compression -*/ - -/* these two are for uniformity */ -#define mi_sint1korr(A) ((int8)(*A)) -#define mi_uint1korr(A) ((uint8)(*A)) - -#define mi_sint2korr(A) ((int16) (((int16) (((const uchar*) (A))[1])) +\ - ((int16) ((int16) ((const char*) (A))[0]) << 8))) -#define mi_sint3korr(A) ((int32) (((((const uchar*) (A))[0]) & 128) ? \ - (((uint32) 255L << 24) | \ - (((uint32) ((const uchar*) (A))[0]) << 16) |\ - (((uint32) ((const uchar*) (A))[1]) << 8) | \ - ((uint32) ((const uchar*) (A))[2])) : \ - (((uint32) ((const uchar*) (A))[0]) << 16) |\ - (((uint32) ((const uchar*) (A))[1]) << 8) | \ - ((uint32) ((const uchar*) (A))[2]))) -#define mi_sint4korr(A) ((int32) (((int32) (((const uchar*) (A))[3])) +\ - ((int32) (((const uchar*) (A))[2]) << 8) +\ - ((int32) (((const uchar*) (A))[1]) << 16) +\ - ((int32) ((int16) ((const char*) (A))[0]) << 24))) -#define mi_sint8korr(A) ((longlong) mi_uint8korr(A)) -#define mi_uint2korr(A) ((uint16) (((uint16) (((const uchar*) (A))[1])) +\ - ((uint16) (((const uchar*) (A))[0]) << 8))) -#define mi_uint3korr(A) ((uint32) (((uint32) (((const uchar*) (A))[2])) +\ - (((uint32) (((const uchar*) (A))[1])) << 8) +\ - (((uint32) (((const uchar*) (A))[0])) << 16))) -#define mi_uint4korr(A) ((uint32) (((uint32) (((const uchar*) (A))[3])) +\ - (((uint32) (((const uchar*) (A))[2])) << 8) +\ - (((uint32) (((const uchar*) (A))[1])) << 16) +\ - (((uint32) (((const uchar*) (A))[0])) << 24))) -#define mi_uint5korr(A) ((ulonglong)(((uint32) (((const uchar*) (A))[4])) +\ - (((uint32) (((const uchar*) (A))[3])) << 8) +\ - (((uint32) (((const uchar*) (A))[2])) << 16) +\ - (((uint32) (((const uchar*) (A))[1])) << 24)) +\ - (((ulonglong) (((const uchar*) (A))[0])) << 32)) -#define mi_uint6korr(A) ((ulonglong)(((uint32) (((const uchar*) (A))[5])) +\ - (((uint32) (((const uchar*) (A))[4])) << 8) +\ - (((uint32) (((const uchar*) (A))[3])) << 16) +\ - (((uint32) (((const uchar*) (A))[2])) << 24)) +\ - (((ulonglong) (((uint32) (((const uchar*) (A))[1])) +\ - (((uint32) (((const uchar*) (A))[0]) << 8)))) <<\ - 32)) -#define mi_uint7korr(A) ((ulonglong)(((uint32) (((const uchar*) (A))[6])) +\ - (((uint32) (((const uchar*) (A))[5])) << 8) +\ - (((uint32) (((const uchar*) (A))[4])) << 16) +\ - (((uint32) (((const uchar*) (A))[3])) << 24)) +\ - (((ulonglong) (((uint32) (((const uchar*) (A))[2])) +\ - (((uint32) (((const uchar*) (A))[1])) << 8) +\ - (((uint32) (((const uchar*) (A))[0])) << 16))) <<\ - 32)) -#define mi_uint8korr(A) ((ulonglong)(((uint32) (((const uchar*) (A))[7])) +\ - (((uint32) (((const uchar*) (A))[6])) << 8) +\ - (((uint32) (((const uchar*) (A))[5])) << 16) +\ - (((uint32) (((const uchar*) (A))[4])) << 24)) +\ - (((ulonglong) (((uint32) (((const uchar*) (A))[3])) +\ - (((uint32) (((const uchar*) (A))[2])) << 8) +\ - (((uint32) (((const uchar*) (A))[1])) << 16) +\ - (((uint32) (((const uchar*) (A))[0])) << 24))) <<\ - 32)) - -/* This one is for uniformity */ -#define mi_int1store(T,A) *((uchar*)(T))= (uchar) (A) - -#define mi_int2store(T,A) { uint def_temp= (uint) (A) ;\ - ((uchar*) (T))[1]= (uchar) (def_temp);\ - ((uchar*) (T))[0]= (uchar) (def_temp >> 8); } -#define mi_int3store(T,A) { /*lint -save -e734 */\ - ulong def_temp= (ulong) (A);\ - ((uchar*) (T))[2]= (uchar) (def_temp);\ - ((uchar*) (T))[1]= (uchar) (def_temp >> 8);\ - ((uchar*) (T))[0]= (uchar) (def_temp >> 16);\ - /*lint -restore */} -#define mi_int4store(T,A) { ulong def_temp= (ulong) (A);\ - ((uchar*) (T))[3]= (uchar) (def_temp);\ - ((uchar*) (T))[2]= (uchar) (def_temp >> 8);\ - ((uchar*) (T))[1]= (uchar) (def_temp >> 16);\ - ((uchar*) (T))[0]= (uchar) (def_temp >> 24); } -#define mi_int5store(T,A) { ulong def_temp= (ulong) (A),\ - def_temp2= (ulong) ((A) >> 32);\ - ((uchar*) (T))[4]= (uchar) (def_temp);\ - ((uchar*) (T))[3]= (uchar) (def_temp >> 8);\ - ((uchar*) (T))[2]= (uchar) (def_temp >> 16);\ - ((uchar*) (T))[1]= (uchar) (def_temp >> 24);\ - ((uchar*) (T))[0]= (uchar) (def_temp2); } -#define mi_int6store(T,A) { ulong def_temp= (ulong) (A),\ - def_temp2= (ulong) ((A) >> 32);\ - ((uchar*) (T))[5]= (uchar) (def_temp);\ - ((uchar*) (T))[4]= (uchar) (def_temp >> 8);\ - ((uchar*) (T))[3]= (uchar) (def_temp >> 16);\ - ((uchar*) (T))[2]= (uchar) (def_temp >> 24);\ - ((uchar*) (T))[1]= (uchar) (def_temp2);\ - ((uchar*) (T))[0]= (uchar) (def_temp2 >> 8); } -#define mi_int7store(T,A) { ulong def_temp= (ulong) (A),\ - def_temp2= (ulong) ((A) >> 32);\ - ((uchar*) (T))[6]= (uchar) (def_temp);\ - ((uchar*) (T))[5]= (uchar) (def_temp >> 8);\ - ((uchar*) (T))[4]= (uchar) (def_temp >> 16);\ - ((uchar*) (T))[3]= (uchar) (def_temp >> 24);\ - ((uchar*) (T))[2]= (uchar) (def_temp2);\ - ((uchar*) (T))[1]= (uchar) (def_temp2 >> 8);\ - ((uchar*) (T))[0]= (uchar) (def_temp2 >> 16); } -#define mi_int8store(T,A) { ulong def_temp3= (ulong) (A),\ - def_temp4= (ulong) ((A) >> 32);\ - mi_int4store((uchar*) (T) + 0, def_temp4);\ - mi_int4store((uchar*) (T) + 4, def_temp3); } - -#ifdef WORDS_BIGENDIAN - -#define mi_float4store(T,A) { ((uchar*) (T))[0]= ((uchar*) &A)[0];\ - ((uchar*) (T))[1]= ((uchar*) &A)[1];\ - ((uchar*) (T))[2]= ((uchar*) &A)[2];\ - ((uchar*) (T))[3]= ((uchar*) &A)[3]; } - -#define mi_float4get(V,M) { float def_temp;\ - ((uchar*) &def_temp)[0]= ((const uchar*) (M))[0];\ - ((uchar*) &def_temp)[1]= ((const uchar*) (M))[1]; \ - ((uchar*) &def_temp)[2]= ((const uchar*) (M))[2];\ - ((uchar*) &def_temp)[3]= ((const uchar*) (M))[3];\ - (V)= def_temp; } - -#define mi_float8store(T,V) { ((uchar*) (T))[0]= ((const uchar*) &V)[0];\ - ((uchar*) (T))[1]= ((const uchar*) &V)[1];\ - ((uchar*) (T))[2]= ((const uchar*) &V)[2];\ - ((uchar*) (T))[3]= ((const uchar*) &V)[3];\ - ((uchar*) (T))[4]= ((const uchar*) &V)[4];\ - ((uchar*) (T))[5]= ((const uchar*) &V)[5];\ - ((uchar*) (T))[6]= ((const uchar*) &V)[6];\ - ((uchar*) (T))[7]= ((const uchar*) &V)[7]; } - -#define mi_float8get(V,M) { double def_temp;\ - ((uchar*) &def_temp)[0]= ((const uchar*) (M))[0];\ - ((uchar*) &def_temp)[1]= ((const uchar*) (M))[1];\ - ((uchar*) &def_temp)[2]= ((const uchar*) (M))[2];\ - ((uchar*) &def_temp)[3]= ((const uchar*) (M))[3];\ - ((uchar*) &def_temp)[4]= ((const uchar*) (M))[4];\ - ((uchar*) &def_temp)[5]= ((const uchar*) (M))[5];\ - ((uchar*) &def_temp)[6]= ((const uchar*) (M))[6];\ - ((uchar*) &def_temp)[7]= ((const uchar*) (M))[7]; \ - (V)= def_temp; } -#else - -#define mi_float4store(T,A) { ((uchar*) (T))[0]= ((const uchar*) &A)[3];\ - ((uchar*) (T))[1]= ((const uchar*) &A)[2];\ - ((uchar*) (T))[2]= ((const uchar*) &A)[1];\ - ((uchar*) (T))[3]= ((const uchar*) &A)[0]; } - -#define mi_float4get(V,M) { float def_temp;\ - ((uchar*) &def_temp)[0]= ((const uchar*) (M))[3];\ - ((uchar*) &def_temp)[1]= ((const uchar*) (M))[2];\ - ((uchar*) &def_temp)[2]= ((const uchar*) (M))[1];\ - ((uchar*) &def_temp)[3]= ((const uchar*) (M))[0];\ - (V)= def_temp; } - -#if defined(__FLOAT_WORD_ORDER) && (__FLOAT_WORD_ORDER == __BIG_ENDIAN) -#define mi_float8store(T,V) { ((uchar*) (T))[0]= ((const uchar*) &V)[3];\ - ((uchar*) (T))[1]= ((const uchar*) &V)[2];\ - ((uchar*) (T))[2]= ((const uchar*) &V)[1];\ - ((uchar*) (T))[3]= ((const uchar*) &V)[0];\ - ((uchar*) (T))[4]= ((const uchar*) &V)[7];\ - ((uchar*) (T))[5]= ((const uchar*) &V)[6];\ - ((uchar*) (T))[6]= ((const uchar*) &V)[5];\ - ((uchar*) (T))[7]= ((const uchar*) &V)[4];} - -#define mi_float8get(V,M) { double def_temp;\ - ((uchar*) &def_temp)[0]= ((const uchar*) (M))[3];\ - ((uchar*) &def_temp)[1]= ((const uchar*) (M))[2];\ - ((uchar*) &def_temp)[2]= ((const uchar*) (M))[1];\ - ((uchar*) &def_temp)[3]= ((const uchar*) (M))[0];\ - ((uchar*) &def_temp)[4]= ((const uchar*) (M))[7];\ - ((uchar*) &def_temp)[5]= ((const uchar*) (M))[6];\ - ((uchar*) &def_temp)[6]= ((const uchar*) (M))[5];\ - ((uchar*) &def_temp)[7]= ((const uchar*) (M))[4];\ - (V)= def_temp; } - -#else -#define mi_float8store(T,V) { ((uchar*) (T))[0]= ((const uchar*) &V)[7];\ - ((uchar*) (T))[1]= ((const uchar*) &V)[6];\ - ((uchar*) (T))[2]= ((const uchar*) &V)[5];\ - ((uchar*) (T))[3]= ((const uchar*) &V)[4];\ - ((uchar*) (T))[4]= ((const uchar*) &V)[3];\ - ((uchar*) (T))[5]= ((const uchar*) &V)[2];\ - ((uchar*) (T))[6]= ((const uchar*) &V)[1];\ - ((uchar*) (T))[7]= ((const uchar*) &V)[0];} - -#define mi_float8get(V,M) { double def_temp;\ - ((uchar*) &def_temp)[0]= ((const uchar*) (M))[7];\ - ((uchar*) &def_temp)[1]= ((const uchar*) (M))[6];\ - ((uchar*) &def_temp)[2]= ((const uchar*) (M))[5];\ - ((uchar*) &def_temp)[3]= ((const uchar*) (M))[4];\ - ((uchar*) &def_temp)[4]= ((const uchar*) (M))[3];\ - ((uchar*) &def_temp)[5]= ((const uchar*) (M))[2];\ - ((uchar*) &def_temp)[6]= ((const uchar*) (M))[1];\ - ((uchar*) &def_temp)[7]= ((const uchar*) (M))[0];\ - (V)= def_temp; } -#endif /* __FLOAT_WORD_ORDER */ -#endif /* WORDS_BIGENDIAN */ - -/* Fix to avoid warnings when sizeof(ha_rows) == sizeof(long) */ - -#ifdef BIG_TABLES -#define mi_rowstore(T,A) mi_int8store(T, A) -#define mi_rowkorr(T) mi_uint8korr(T) -#else -#define mi_rowstore(T,A) { mi_int4store(T, 0);\ - mi_int4store(((uchar*) (T) + 4), A); } -#define mi_rowkorr(T) mi_uint4korr((const uchar*) (T) + 4) -#endif - -#if SIZEOF_OFF_T > 4 -#define mi_sizestore(T,A) mi_int8store(T, A) -#define mi_sizekorr(T) mi_uint8korr(T) -#else -#define mi_sizestore(T,A) { if ((A) == HA_OFFSET_ERROR)\ - bfill((char*) (T), 8, 255);\ - else { mi_int4store((T), 0);\ - mi_int4store(((T) + 4), A); }} -#define mi_sizekorr(T) mi_uint4korr((const uchar*) (T) + 4) -#endif diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/mysql.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/mysql.h deleted file mode 100644 index 88333c4..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/mysql.h +++ /dev/null @@ -1,755 +0,0 @@ -/* Copyright (C) 2000-2003 MySQL AB - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - This file defines the client API to MySQL and also the ABI of the - dynamically linked libmysqlclient. - - The ABI should never be changed in a released product of MySQL - thus you need to take great care when changing the file. In case - the file is changed so the ABI is broken, you must also - update the SHAREDLIB_MAJOR_VERSION in configure.in . - -*/ - -#ifndef _mysql_h -#define _mysql_h - -#ifdef _AIX /* large-file support will break without this */ -#include -#endif - -#ifdef __CYGWIN__ /* CYGWIN implements a UNIX API */ -#undef WIN -#undef _WIN -#undef _WIN32 -#undef _WIN64 -#undef __WIN__ -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef _global_h /* If not standard header */ -#include -#ifdef __LCC__ -#include /* For windows */ -#endif -typedef char my_bool; -#if (defined(_WIN32) || defined(_WIN64)) && !defined(__WIN__) -#define __WIN__ -#endif -#if !defined(__WIN__) -#define STDCALL -#else -#define STDCALL __stdcall -#endif - -#ifndef my_socket_defined -#ifdef __WIN__ -#define my_socket SOCKET -#else -typedef int my_socket; -#endif /* __WIN__ */ -#endif /* my_socket_defined */ -#endif /* _global_h */ - -#include "mysql_version.h" -#include "mysql_com.h" -#include "mysql_time.h" - -#include "my_list.h" /* for LISTs used in 'MYSQL' and 'MYSQL_STMT' */ - -extern unsigned int mysql_port; -extern char *mysql_unix_port; - -#define CLIENT_NET_READ_TIMEOUT 365*24*3600 /* Timeout on read */ -#define CLIENT_NET_WRITE_TIMEOUT 365*24*3600 /* Timeout on write */ - -#ifdef __NETWARE__ -#pragma pack(push, 8) /* 8 byte alignment */ -#endif - -#define IS_PRI_KEY(n) ((n) & PRI_KEY_FLAG) -#define IS_NOT_NULL(n) ((n) & NOT_NULL_FLAG) -#define IS_BLOB(n) ((n) & BLOB_FLAG) -#define IS_NUM(t) ((t) <= MYSQL_TYPE_INT24 || (t) == MYSQL_TYPE_YEAR || (t) == MYSQL_TYPE_NEWDECIMAL) -#define IS_NUM_FIELD(f) ((f)->flags & NUM_FLAG) -#define INTERNAL_NUM_FIELD(f) (((f)->type <= MYSQL_TYPE_INT24 && ((f)->type != MYSQL_TYPE_TIMESTAMP || (f)->length == 14 || (f)->length == 8)) || (f)->type == MYSQL_TYPE_YEAR) -#define IS_LONGDATA(t) ((t) >= MYSQL_TYPE_TINY_BLOB && (t) <= MYSQL_TYPE_STRING) - - -typedef struct st_mysql_field { - char *name; /* Name of column */ - char *org_name; /* Original column name, if an alias */ - char *table; /* Table of column if column was a field */ - char *org_table; /* Org table name, if table was an alias */ - char *db; /* Database for table */ - char *catalog; /* Catalog for table */ - char *def; /* Default value (set by mysql_list_fields) */ - unsigned long length; /* Width of column (create length) */ - unsigned long max_length; /* Max width for selected set */ - unsigned int name_length; - unsigned int org_name_length; - unsigned int table_length; - unsigned int org_table_length; - unsigned int db_length; - unsigned int catalog_length; - unsigned int def_length; - unsigned int flags; /* Div flags */ - unsigned int decimals; /* Number of decimals in field */ - unsigned int charsetnr; /* Character set */ - enum enum_field_types type; /* Type of field. See mysql_com.h for types */ - void *extension; -} MYSQL_FIELD; - -typedef char **MYSQL_ROW; /* return data as array of strings */ -typedef unsigned int MYSQL_FIELD_OFFSET; /* offset to current field */ - -#ifndef _global_h -#if defined(NO_CLIENT_LONG_LONG) -typedef unsigned long my_ulonglong; -#elif defined (__WIN__) -typedef unsigned __int64 my_ulonglong; -#else -typedef unsigned long long my_ulonglong; -#endif -#endif - -#include "typelib.h" - -#define MYSQL_COUNT_ERROR (~(my_ulonglong) 0) - -/* backward compatibility define - to be removed eventually */ -#define ER_WARN_DATA_TRUNCATED WARN_DATA_TRUNCATED - -typedef struct st_mysql_rows { - struct st_mysql_rows *next; /* list of rows */ - MYSQL_ROW data; - unsigned long length; -} MYSQL_ROWS; - -typedef MYSQL_ROWS *MYSQL_ROW_OFFSET; /* offset to current row */ - -#include "my_alloc.h" - -typedef struct embedded_query_result EMBEDDED_QUERY_RESULT; -typedef struct st_mysql_data { - MYSQL_ROWS *data; - struct embedded_query_result *embedded_info; - MEM_ROOT alloc; - my_ulonglong rows; - unsigned int fields; - /* extra info for embedded library */ - void *extension; -} MYSQL_DATA; - -enum mysql_option -{ - MYSQL_OPT_CONNECT_TIMEOUT, MYSQL_OPT_COMPRESS, MYSQL_OPT_NAMED_PIPE, - MYSQL_INIT_COMMAND, MYSQL_READ_DEFAULT_FILE, MYSQL_READ_DEFAULT_GROUP, - MYSQL_SET_CHARSET_DIR, MYSQL_SET_CHARSET_NAME, MYSQL_OPT_LOCAL_INFILE, - MYSQL_OPT_PROTOCOL, MYSQL_SHARED_MEMORY_BASE_NAME, MYSQL_OPT_READ_TIMEOUT, - MYSQL_OPT_WRITE_TIMEOUT, MYSQL_OPT_USE_RESULT, - MYSQL_OPT_USE_REMOTE_CONNECTION, MYSQL_OPT_USE_EMBEDDED_CONNECTION, - MYSQL_OPT_GUESS_CONNECTION, MYSQL_SET_CLIENT_IP, MYSQL_SECURE_AUTH, - MYSQL_REPORT_DATA_TRUNCATION, MYSQL_OPT_RECONNECT, - MYSQL_OPT_SSL_VERIFY_SERVER_CERT -}; - -struct st_mysql_options { - unsigned int connect_timeout, read_timeout, write_timeout; - unsigned int port, protocol; - unsigned long client_flag; - char *host,*user,*password,*unix_socket,*db; - struct st_dynamic_array *init_commands; - char *my_cnf_file,*my_cnf_group, *charset_dir, *charset_name; - char *ssl_key; /* PEM key file */ - char *ssl_cert; /* PEM cert file */ - char *ssl_ca; /* PEM CA file */ - char *ssl_capath; /* PEM directory of CA-s? */ - char *ssl_cipher; /* cipher to use */ - char *shared_memory_base_name; - unsigned long max_allowed_packet; - my_bool use_ssl; /* if to use SSL or not */ - my_bool compress,named_pipe; - my_bool unused1; - my_bool unused2; - my_bool unused3; - my_bool unused4; - enum mysql_option methods_to_use; - char *client_ip; - /* Refuse client connecting to server if it uses old (pre-4.1.1) protocol */ - my_bool secure_auth; - /* 0 - never report, 1 - always report (default) */ - my_bool report_data_truncation; - - /* function pointers for local infile support */ - int (*local_infile_init)(void **, const char *, void *); - int (*local_infile_read)(void *, char *, unsigned int); - void (*local_infile_end)(void *); - int (*local_infile_error)(void *, char *, unsigned int); - void *local_infile_userdata; - void *extension; -}; - -enum mysql_status -{ - MYSQL_STATUS_READY,MYSQL_STATUS_GET_RESULT,MYSQL_STATUS_USE_RESULT -}; - -enum mysql_protocol_type -{ - MYSQL_PROTOCOL_DEFAULT, MYSQL_PROTOCOL_TCP, MYSQL_PROTOCOL_SOCKET, - MYSQL_PROTOCOL_PIPE, MYSQL_PROTOCOL_MEMORY -}; - -typedef struct character_set -{ - unsigned int number; /* character set number */ - unsigned int state; /* character set state */ - const char *csname; /* collation name */ - const char *name; /* character set name */ - const char *comment; /* comment */ - const char *dir; /* character set directory */ - unsigned int mbminlen; /* min. length for multibyte strings */ - unsigned int mbmaxlen; /* max. length for multibyte strings */ -} MY_CHARSET_INFO; - -struct st_mysql_methods; -struct st_mysql_stmt; - -typedef struct st_mysql -{ - NET net; /* Communication parameters */ - unsigned char *connector_fd; /* ConnectorFd for SSL */ - char *host,*user,*passwd,*unix_socket,*server_version,*host_info; - char *info, *db; - struct charset_info_st *charset; - MYSQL_FIELD *fields; - MEM_ROOT field_alloc; - my_ulonglong affected_rows; - my_ulonglong insert_id; /* id if insert on table with NEXTNR */ - my_ulonglong extra_info; /* Not used */ - unsigned long thread_id; /* Id for connection in server */ - unsigned long packet_length; - unsigned int port; - unsigned long client_flag,server_capabilities; - unsigned int protocol_version; - unsigned int field_count; - unsigned int server_status; - unsigned int server_language; - unsigned int warning_count; - struct st_mysql_options options; - enum mysql_status status; - my_bool free_me; /* If free in mysql_close */ - my_bool reconnect; /* set to 1 if automatic reconnect */ - - /* session-wide random string */ - char scramble[SCRAMBLE_LENGTH+1]; - my_bool unused1; - void *unused2, *unused3, *unused4, *unused5; - - LIST *stmts; /* list of all statements */ - const struct st_mysql_methods *methods; - void *thd; - /* - Points to boolean flag in MYSQL_RES or MYSQL_STMT. We set this flag - from mysql_stmt_close if close had to cancel result set of this object. - */ - my_bool *unbuffered_fetch_owner; - /* needed for embedded server - no net buffer to store the 'info' */ - char *info_buffer; - void *extension; -} MYSQL; - - -typedef struct st_mysql_res { - my_ulonglong row_count; - MYSQL_FIELD *fields; - MYSQL_DATA *data; - MYSQL_ROWS *data_cursor; - unsigned long *lengths; /* column lengths of current row */ - MYSQL *handle; /* for unbuffered reads */ - const struct st_mysql_methods *methods; - MYSQL_ROW row; /* If unbuffered read */ - MYSQL_ROW current_row; /* buffer to current row */ - MEM_ROOT field_alloc; - unsigned int field_count, current_field; - my_bool eof; /* Used by mysql_fetch_row */ - /* mysql_stmt_close() had to cancel this result */ - my_bool unbuffered_fetch_cancelled; - void *extension; -} MYSQL_RES; - - -#if !defined(MYSQL_SERVER) && !defined(MYSQL_CLIENT) -#define MYSQL_CLIENT -#endif - - -typedef struct st_mysql_parameters -{ - unsigned long *p_max_allowed_packet; - unsigned long *p_net_buffer_length; - void *extension; -} MYSQL_PARAMETERS; - -#if !defined(MYSQL_SERVER) && !defined(EMBEDDED_LIBRARY) -#define max_allowed_packet (*mysql_get_parameters()->p_max_allowed_packet) -#define net_buffer_length (*mysql_get_parameters()->p_net_buffer_length) -#endif - -/* - Set up and bring down the server; to ensure that applications will - work when linked against either the standard client library or the - embedded server library, these functions should be called. -*/ -int STDCALL mysql_server_init(int argc, char **argv, char **groups); -void STDCALL mysql_server_end(void); - -/* - mysql_server_init/end need to be called when using libmysqld or - libmysqlclient (exactly, mysql_server_init() is called by mysql_init() so - you don't need to call it explicitely; but you need to call - mysql_server_end() to free memory). The names are a bit misleading - (mysql_SERVER* to be used when using libmysqlCLIENT). So we add more general - names which suit well whether you're using libmysqld or libmysqlclient. We - intend to promote these aliases over the mysql_server* ones. -*/ -#define mysql_library_init mysql_server_init -#define mysql_library_end mysql_server_end - -MYSQL_PARAMETERS *STDCALL mysql_get_parameters(void); - -/* - Set up and bring down a thread; these function should be called - for each thread in an application which opens at least one MySQL - connection. All uses of the connection(s) should be between these - function calls. -*/ -my_bool STDCALL mysql_thread_init(void); -void STDCALL mysql_thread_end(void); - -/* - Functions to get information from the MYSQL and MYSQL_RES structures - Should definitely be used if one uses shared libraries. -*/ - -my_ulonglong STDCALL mysql_num_rows(MYSQL_RES *res); -unsigned int STDCALL mysql_num_fields(MYSQL_RES *res); -my_bool STDCALL mysql_eof(MYSQL_RES *res); -MYSQL_FIELD *STDCALL mysql_fetch_field_direct(MYSQL_RES *res, - unsigned int fieldnr); -MYSQL_FIELD * STDCALL mysql_fetch_fields(MYSQL_RES *res); -MYSQL_ROW_OFFSET STDCALL mysql_row_tell(MYSQL_RES *res); -MYSQL_FIELD_OFFSET STDCALL mysql_field_tell(MYSQL_RES *res); - -unsigned int STDCALL mysql_field_count(MYSQL *mysql); -my_ulonglong STDCALL mysql_affected_rows(MYSQL *mysql); -my_ulonglong STDCALL mysql_insert_id(MYSQL *mysql); -unsigned int STDCALL mysql_errno(MYSQL *mysql); -const char * STDCALL mysql_error(MYSQL *mysql); -const char *STDCALL mysql_sqlstate(MYSQL *mysql); -unsigned int STDCALL mysql_warning_count(MYSQL *mysql); -const char * STDCALL mysql_info(MYSQL *mysql); -unsigned long STDCALL mysql_thread_id(MYSQL *mysql); -const char * STDCALL mysql_character_set_name(MYSQL *mysql); -int STDCALL mysql_set_character_set(MYSQL *mysql, const char *csname); - -MYSQL * STDCALL mysql_init(MYSQL *mysql); -my_bool STDCALL mysql_ssl_set(MYSQL *mysql, const char *key, - const char *cert, const char *ca, - const char *capath, const char *cipher); -const char * STDCALL mysql_get_ssl_cipher(MYSQL *mysql); -my_bool STDCALL mysql_change_user(MYSQL *mysql, const char *user, - const char *passwd, const char *db); -MYSQL * STDCALL mysql_real_connect(MYSQL *mysql, const char *host, - const char *user, - const char *passwd, - const char *db, - unsigned int port, - const char *unix_socket, - unsigned long clientflag); -int STDCALL mysql_select_db(MYSQL *mysql, const char *db); -int STDCALL mysql_query(MYSQL *mysql, const char *q); -int STDCALL mysql_send_query(MYSQL *mysql, const char *q, - unsigned long length); -int STDCALL mysql_real_query(MYSQL *mysql, const char *q, - unsigned long length); -MYSQL_RES * STDCALL mysql_store_result(MYSQL *mysql); -MYSQL_RES * STDCALL mysql_use_result(MYSQL *mysql); - -void STDCALL mysql_get_character_set_info(MYSQL *mysql, - MY_CHARSET_INFO *charset); - -/* local infile support */ - -#define LOCAL_INFILE_ERROR_LEN 512 - -void -mysql_set_local_infile_handler(MYSQL *mysql, - int (*local_infile_init)(void **, const char *, - void *), - int (*local_infile_read)(void *, char *, - unsigned int), - void (*local_infile_end)(void *), - int (*local_infile_error)(void *, char*, - unsigned int), - void *); - -void -mysql_set_local_infile_default(MYSQL *mysql); - -int STDCALL mysql_shutdown(MYSQL *mysql, - enum mysql_enum_shutdown_level - shutdown_level); -int STDCALL mysql_dump_debug_info(MYSQL *mysql); -int STDCALL mysql_refresh(MYSQL *mysql, - unsigned int refresh_options); -int STDCALL mysql_kill(MYSQL *mysql,unsigned long pid); -int STDCALL mysql_set_server_option(MYSQL *mysql, - enum enum_mysql_set_option - option); -int STDCALL mysql_ping(MYSQL *mysql); -const char * STDCALL mysql_stat(MYSQL *mysql); -const char * STDCALL mysql_get_server_info(MYSQL *mysql); -const char * STDCALL mysql_get_client_info(void); -unsigned long STDCALL mysql_get_client_version(void); -const char * STDCALL mysql_get_host_info(MYSQL *mysql); -unsigned long STDCALL mysql_get_server_version(MYSQL *mysql); -unsigned int STDCALL mysql_get_proto_info(MYSQL *mysql); -MYSQL_RES * STDCALL mysql_list_dbs(MYSQL *mysql,const char *wild); -MYSQL_RES * STDCALL mysql_list_tables(MYSQL *mysql,const char *wild); -MYSQL_RES * STDCALL mysql_list_processes(MYSQL *mysql); -int STDCALL mysql_options(MYSQL *mysql,enum mysql_option option, - const void *arg); -void STDCALL mysql_free_result(MYSQL_RES *result); -void STDCALL mysql_data_seek(MYSQL_RES *result, - my_ulonglong offset); -MYSQL_ROW_OFFSET STDCALL mysql_row_seek(MYSQL_RES *result, - MYSQL_ROW_OFFSET offset); -MYSQL_FIELD_OFFSET STDCALL mysql_field_seek(MYSQL_RES *result, - MYSQL_FIELD_OFFSET offset); -MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result); -unsigned long * STDCALL mysql_fetch_lengths(MYSQL_RES *result); -MYSQL_FIELD * STDCALL mysql_fetch_field(MYSQL_RES *result); -MYSQL_RES * STDCALL mysql_list_fields(MYSQL *mysql, const char *table, - const char *wild); -unsigned long STDCALL mysql_escape_string(char *to,const char *from, - unsigned long from_length); -unsigned long STDCALL mysql_hex_string(char *to,const char *from, - unsigned long from_length); -unsigned long STDCALL mysql_real_escape_string(MYSQL *mysql, - char *to,const char *from, - unsigned long length); -void STDCALL mysql_debug(const char *debug); -void STDCALL myodbc_remove_escape(MYSQL *mysql,char *name); -unsigned int STDCALL mysql_thread_safe(void); -my_bool STDCALL mysql_embedded(void); -my_bool STDCALL mysql_read_query_result(MYSQL *mysql); - - -/* - The following definitions are added for the enhanced - client-server protocol -*/ - -/* statement state */ -enum enum_mysql_stmt_state -{ - MYSQL_STMT_INIT_DONE= 1, MYSQL_STMT_PREPARE_DONE, MYSQL_STMT_EXECUTE_DONE, - MYSQL_STMT_FETCH_DONE -}; - - -/* - This structure is used to define bind information, and - internally by the client library. - Public members with their descriptions are listed below - (conventionally `On input' refers to the binds given to - mysql_stmt_bind_param, `On output' refers to the binds given - to mysql_stmt_bind_result): - - buffer_type - One of the MYSQL_* types, used to describe - the host language type of buffer. - On output: if column type is different from - buffer_type, column value is automatically converted - to buffer_type before it is stored in the buffer. - buffer - On input: points to the buffer with input data. - On output: points to the buffer capable to store - output data. - The type of memory pointed by buffer must correspond - to buffer_type. See the correspondence table in - the comment to mysql_stmt_bind_param. - - The two above members are mandatory for any kind of bind. - - buffer_length - the length of the buffer. You don't have to set - it for any fixed length buffer: float, double, - int, etc. It must be set however for variable-length - types, such as BLOBs or STRINGs. - - length - On input: in case when lengths of input values - are different for each execute, you can set this to - point at a variable containining value length. This - way the value length can be different in each execute. - If length is not NULL, buffer_length is not used. - Note, length can even point at buffer_length if - you keep bind structures around while fetching: - this way you can change buffer_length before - each execution, everything will work ok. - On output: if length is set, mysql_stmt_fetch will - write column length into it. - - is_null - On input: points to a boolean variable that should - be set to TRUE for NULL values. - This member is useful only if your data may be - NULL in some but not all cases. - If your data is never NULL, is_null should be set to 0. - If your data is always NULL, set buffer_type - to MYSQL_TYPE_NULL, and is_null will not be used. - - is_unsigned - On input: used to signify that values provided for one - of numeric types are unsigned. - On output describes signedness of the output buffer. - If, taking into account is_unsigned flag, column data - is out of range of the output buffer, data for this column - is regarded truncated. Note that this has no correspondence - to the sign of result set column, if you need to find it out - use mysql_stmt_result_metadata. - error - where to write a truncation error if it is present. - possible error value is: - 0 no truncation - 1 value is out of range or buffer is too small - - Please note that MYSQL_BIND also has internals members. -*/ - -typedef struct st_mysql_bind -{ - unsigned long *length; /* output length pointer */ - my_bool *is_null; /* Pointer to null indicator */ - void *buffer; /* buffer to get/put data */ - /* set this if you want to track data truncations happened during fetch */ - my_bool *error; - unsigned char *row_ptr; /* for the current data position */ - void (*store_param_func)(NET *net, struct st_mysql_bind *param); - void (*fetch_result)(struct st_mysql_bind *, MYSQL_FIELD *, - unsigned char **row); - void (*skip_result)(struct st_mysql_bind *, MYSQL_FIELD *, - unsigned char **row); - /* output buffer length, must be set when fetching str/binary */ - unsigned long buffer_length; - unsigned long offset; /* offset position for char/binary fetch */ - unsigned long length_value; /* Used if length is 0 */ - unsigned int param_number; /* For null count and error messages */ - unsigned int pack_length; /* Internal length for packed data */ - enum enum_field_types buffer_type; /* buffer type */ - my_bool error_value; /* used if error is 0 */ - my_bool is_unsigned; /* set if integer type is unsigned */ - my_bool long_data_used; /* If used with mysql_send_long_data */ - my_bool is_null_value; /* Used if is_null is 0 */ - void *extension; -} MYSQL_BIND; - - -/* statement handler */ -typedef struct st_mysql_stmt -{ - MEM_ROOT mem_root; /* root allocations */ - LIST list; /* list to keep track of all stmts */ - MYSQL *mysql; /* connection handle */ - MYSQL_BIND *params; /* input parameters */ - MYSQL_BIND *bind; /* output parameters */ - MYSQL_FIELD *fields; /* result set metadata */ - MYSQL_DATA result; /* cached result set */ - MYSQL_ROWS *data_cursor; /* current row in cached result */ - /* - mysql_stmt_fetch() calls this function to fetch one row (it's different - for buffered, unbuffered and cursor fetch). - */ - int (*read_row_func)(struct st_mysql_stmt *stmt, - unsigned char **row); - /* copy of mysql->affected_rows after statement execution */ - my_ulonglong affected_rows; - my_ulonglong insert_id; /* copy of mysql->insert_id */ - unsigned long stmt_id; /* Id for prepared statement */ - unsigned long flags; /* i.e. type of cursor to open */ - unsigned long prefetch_rows; /* number of rows per one COM_FETCH */ - /* - Copied from mysql->server_status after execute/fetch to know - server-side cursor status for this statement. - */ - unsigned int server_status; - unsigned int last_errno; /* error code */ - unsigned int param_count; /* input parameter count */ - unsigned int field_count; /* number of columns in result set */ - enum enum_mysql_stmt_state state; /* statement state */ - char last_error[MYSQL_ERRMSG_SIZE]; /* error message */ - char sqlstate[SQLSTATE_LENGTH+1]; - /* Types of input parameters should be sent to server */ - my_bool send_types_to_server; - my_bool bind_param_done; /* input buffers were supplied */ - unsigned char bind_result_done; /* output buffers were supplied */ - /* mysql_stmt_close() had to cancel this result */ - my_bool unbuffered_fetch_cancelled; - /* - Is set to true if we need to calculate field->max_length for - metadata fields when doing mysql_stmt_store_result. - */ - my_bool update_max_length; - void *extension; -} MYSQL_STMT; - -enum enum_stmt_attr_type -{ - /* - When doing mysql_stmt_store_result calculate max_length attribute - of statement metadata. This is to be consistent with the old API, - where this was done automatically. - In the new API we do that only by request because it slows down - mysql_stmt_store_result sufficiently. - */ - STMT_ATTR_UPDATE_MAX_LENGTH, - /* - unsigned long with combination of cursor flags (read only, for update, - etc) - */ - STMT_ATTR_CURSOR_TYPE, - /* - Amount of rows to retrieve from server per one fetch if using cursors. - Accepts unsigned long attribute in the range 1 - ulong_max - */ - STMT_ATTR_PREFETCH_ROWS -}; - - -typedef struct st_mysql_methods -{ - my_bool (*read_query_result)(MYSQL *mysql); - my_bool (*advanced_command)(MYSQL *mysql, - enum enum_server_command command, - const unsigned char *header, - unsigned long header_length, - const unsigned char *arg, - unsigned long arg_length, - my_bool skip_check, - MYSQL_STMT *stmt); - MYSQL_DATA *(*read_rows)(MYSQL *mysql,MYSQL_FIELD *mysql_fields, - unsigned int fields); - MYSQL_RES * (*use_result)(MYSQL *mysql); - void (*fetch_lengths)(unsigned long *to, - MYSQL_ROW column, unsigned int field_count); - void (*flush_use_result)(MYSQL *mysql, my_bool flush_all_results); -#if !defined(MYSQL_SERVER) || defined(EMBEDDED_LIBRARY) - MYSQL_FIELD * (*list_fields)(MYSQL *mysql); - my_bool (*read_prepare_result)(MYSQL *mysql, MYSQL_STMT *stmt); - int (*stmt_execute)(MYSQL_STMT *stmt); - int (*read_binary_rows)(MYSQL_STMT *stmt); - int (*unbuffered_fetch)(MYSQL *mysql, char **row); - void (*free_embedded_thd)(MYSQL *mysql); - const char *(*read_statistics)(MYSQL *mysql); - my_bool (*next_result)(MYSQL *mysql); - int (*read_change_user_result)(MYSQL *mysql, char *buff, const char *passwd); - int (*read_rows_from_cursor)(MYSQL_STMT *stmt); -#endif -} MYSQL_METHODS; - - -MYSQL_STMT * STDCALL mysql_stmt_init(MYSQL *mysql); -int STDCALL mysql_stmt_prepare(MYSQL_STMT *stmt, const char *query, - unsigned long length); -int STDCALL mysql_stmt_execute(MYSQL_STMT *stmt); -int STDCALL mysql_stmt_fetch(MYSQL_STMT *stmt); -int STDCALL mysql_stmt_fetch_column(MYSQL_STMT *stmt, MYSQL_BIND *bind_arg, - unsigned int column, - unsigned long offset); -int STDCALL mysql_stmt_store_result(MYSQL_STMT *stmt); -unsigned long STDCALL mysql_stmt_param_count(MYSQL_STMT * stmt); -my_bool STDCALL mysql_stmt_attr_set(MYSQL_STMT *stmt, - enum enum_stmt_attr_type attr_type, - const void *attr); -my_bool STDCALL mysql_stmt_attr_get(MYSQL_STMT *stmt, - enum enum_stmt_attr_type attr_type, - void *attr); -my_bool STDCALL mysql_stmt_bind_param(MYSQL_STMT * stmt, MYSQL_BIND * bnd); -my_bool STDCALL mysql_stmt_bind_result(MYSQL_STMT * stmt, MYSQL_BIND * bnd); -my_bool STDCALL mysql_stmt_close(MYSQL_STMT * stmt); -my_bool STDCALL mysql_stmt_reset(MYSQL_STMT * stmt); -my_bool STDCALL mysql_stmt_free_result(MYSQL_STMT *stmt); -my_bool STDCALL mysql_stmt_send_long_data(MYSQL_STMT *stmt, - unsigned int param_number, - const char *data, - unsigned long length); -MYSQL_RES *STDCALL mysql_stmt_result_metadata(MYSQL_STMT *stmt); -MYSQL_RES *STDCALL mysql_stmt_param_metadata(MYSQL_STMT *stmt); -unsigned int STDCALL mysql_stmt_errno(MYSQL_STMT * stmt); -const char *STDCALL mysql_stmt_error(MYSQL_STMT * stmt); -const char *STDCALL mysql_stmt_sqlstate(MYSQL_STMT * stmt); -MYSQL_ROW_OFFSET STDCALL mysql_stmt_row_seek(MYSQL_STMT *stmt, - MYSQL_ROW_OFFSET offset); -MYSQL_ROW_OFFSET STDCALL mysql_stmt_row_tell(MYSQL_STMT *stmt); -void STDCALL mysql_stmt_data_seek(MYSQL_STMT *stmt, my_ulonglong offset); -my_ulonglong STDCALL mysql_stmt_num_rows(MYSQL_STMT *stmt); -my_ulonglong STDCALL mysql_stmt_affected_rows(MYSQL_STMT *stmt); -my_ulonglong STDCALL mysql_stmt_insert_id(MYSQL_STMT *stmt); -unsigned int STDCALL mysql_stmt_field_count(MYSQL_STMT *stmt); - -my_bool STDCALL mysql_commit(MYSQL * mysql); -my_bool STDCALL mysql_rollback(MYSQL * mysql); -my_bool STDCALL mysql_autocommit(MYSQL * mysql, my_bool auto_mode); -my_bool STDCALL mysql_more_results(MYSQL *mysql); -int STDCALL mysql_next_result(MYSQL *mysql); -int STDCALL mysql_stmt_next_result(MYSQL_STMT *stmt); -void STDCALL mysql_close(MYSQL *sock); - - -/* status return codes */ -#define MYSQL_NO_DATA 100 -#define MYSQL_DATA_TRUNCATED 101 - -#define mysql_reload(mysql) mysql_refresh((mysql),REFRESH_GRANT) - -#ifdef USE_OLD_FUNCTIONS -MYSQL * STDCALL mysql_connect(MYSQL *mysql, const char *host, - const char *user, const char *passwd); -int STDCALL mysql_create_db(MYSQL *mysql, const char *DB); -int STDCALL mysql_drop_db(MYSQL *mysql, const char *DB); -#endif -#define HAVE_MYSQL_REAL_CONNECT - -/* - The following functions are mainly exported because of mysqlbinlog; - They are not for general usage -*/ - -#define simple_command(mysql, command, arg, length, skip_check) \ - (*(mysql)->methods->advanced_command)(mysql, command, 0, \ - 0, arg, length, skip_check, NULL) -#define stmt_command(mysql, command, arg, length, stmt) \ - (*(mysql)->methods->advanced_command)(mysql, command, 0, \ - 0, arg, length, 1, stmt) - -#ifdef __NETWARE__ -#pragma pack(pop) /* restore alignment */ -#endif - -#ifdef __cplusplus -} -#endif - -#endif /* _mysql_h */ diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/mysql.h.pp b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/mysql.h.pp deleted file mode 100644 index a8d854b..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/mysql.h.pp +++ /dev/null @@ -1,617 +0,0 @@ -#include -typedef char my_bool; -typedef int my_socket; -#include "mysql_version.h" -#include "mysql_com.h" -enum enum_server_command -{ - COM_SLEEP, COM_QUIT, COM_INIT_DB, COM_QUERY, COM_FIELD_LIST, - COM_CREATE_DB, COM_DROP_DB, COM_REFRESH, COM_SHUTDOWN, COM_STATISTICS, - COM_PROCESS_INFO, COM_CONNECT, COM_PROCESS_KILL, COM_DEBUG, COM_PING, - COM_TIME, COM_DELAYED_INSERT, COM_CHANGE_USER, COM_BINLOG_DUMP, - COM_TABLE_DUMP, COM_CONNECT_OUT, COM_REGISTER_SLAVE, - COM_STMT_PREPARE, COM_STMT_EXECUTE, COM_STMT_SEND_LONG_DATA, COM_STMT_CLOSE, - COM_STMT_RESET, COM_SET_OPTION, COM_STMT_FETCH, COM_DAEMON, - COM_END -}; -struct st_vio; -typedef struct st_vio Vio; -typedef struct st_net { - Vio *vio; - unsigned char *buff,*buff_end,*write_pos,*read_pos; - my_socket fd; - unsigned long remain_in_buf,length, buf_length, where_b; - unsigned long max_packet,max_packet_size; - unsigned int pkt_nr,compress_pkt_nr; - unsigned int write_timeout, read_timeout, retry_count; - int fcntl; - unsigned int *return_status; - unsigned char reading_or_writing; - char save_char; - my_bool unused1; - my_bool unused2; - my_bool compress; - my_bool unused3; - unsigned char *unused; - unsigned int last_errno; - unsigned char error; - my_bool unused4; - my_bool unused5; - char last_error[512]; - char sqlstate[5 +1]; - void *extension; -} NET; -enum enum_field_types { MYSQL_TYPE_DECIMAL, MYSQL_TYPE_TINY, - MYSQL_TYPE_SHORT, MYSQL_TYPE_LONG, - MYSQL_TYPE_FLOAT, MYSQL_TYPE_DOUBLE, - MYSQL_TYPE_NULL, MYSQL_TYPE_TIMESTAMP, - MYSQL_TYPE_LONGLONG,MYSQL_TYPE_INT24, - MYSQL_TYPE_DATE, MYSQL_TYPE_TIME, - MYSQL_TYPE_DATETIME, MYSQL_TYPE_YEAR, - MYSQL_TYPE_NEWDATE, MYSQL_TYPE_VARCHAR, - MYSQL_TYPE_BIT, - MYSQL_TYPE_NEWDECIMAL=246, - MYSQL_TYPE_ENUM=247, - MYSQL_TYPE_SET=248, - MYSQL_TYPE_TINY_BLOB=249, - MYSQL_TYPE_MEDIUM_BLOB=250, - MYSQL_TYPE_LONG_BLOB=251, - MYSQL_TYPE_BLOB=252, - MYSQL_TYPE_VAR_STRING=253, - MYSQL_TYPE_STRING=254, - MYSQL_TYPE_GEOMETRY=255, - MAX_NO_FIELD_TYPES -}; -enum mysql_enum_shutdown_level { - SHUTDOWN_DEFAULT = 0, - SHUTDOWN_WAIT_CONNECTIONS= (unsigned char)(1 << 0), - SHUTDOWN_WAIT_TRANSACTIONS= (unsigned char)(1 << 1), - SHUTDOWN_WAIT_UPDATES= (unsigned char)(1 << 3), - SHUTDOWN_WAIT_ALL_BUFFERS= ((unsigned char)(1 << 3) << 1), - SHUTDOWN_WAIT_CRITICAL_BUFFERS= ((unsigned char)(1 << 3) << 1) + 1, - KILL_QUERY= 254, - KILL_CONNECTION= 255 -}; -enum enum_cursor_type -{ - CURSOR_TYPE_NO_CURSOR= 0, - CURSOR_TYPE_READ_ONLY= 1, - CURSOR_TYPE_FOR_UPDATE= 2, - CURSOR_TYPE_SCROLLABLE= 4 -}; -enum enum_mysql_set_option -{ - MYSQL_OPTION_MULTI_STATEMENTS_ON, - MYSQL_OPTION_MULTI_STATEMENTS_OFF -}; -my_bool my_net_init(NET *net, Vio* vio); -void my_net_local_init(NET *net); -void net_end(NET *net); - void net_clear(NET *net, my_bool clear_buffer); -my_bool net_realloc(NET *net, size_t length); -my_bool net_flush(NET *net); -my_bool my_net_write(NET *net,const unsigned char *packet, size_t len); -my_bool net_write_command(NET *net,unsigned char command, - const unsigned char *header, size_t head_len, - const unsigned char *packet, size_t len); -int net_real_write(NET *net,const unsigned char *packet, size_t len); -unsigned long my_net_read(NET *net); -struct sockaddr; -int my_connect(my_socket s, const struct sockaddr *name, unsigned int namelen, - unsigned int timeout); -struct my_rnd_struct; -enum Item_result -{ - STRING_RESULT=0, REAL_RESULT, INT_RESULT, ROW_RESULT, DECIMAL_RESULT -}; -typedef struct st_udf_args -{ - unsigned int arg_count; - enum Item_result *arg_type; - char **args; - unsigned long *lengths; - char *maybe_null; - char **attributes; - unsigned long *attribute_lengths; - void *extension; -} UDF_ARGS; -typedef struct st_udf_init -{ - my_bool maybe_null; - unsigned int decimals; - unsigned long max_length; - char *ptr; - my_bool const_item; - void *extension; -} UDF_INIT; -void create_random_string(char *to, unsigned int length, - struct my_rnd_struct *rand_st); -void hash_password(unsigned long *to, const char *password, unsigned int password_len); -void make_scrambled_password_323(char *to, const char *password); -void scramble_323(char *to, const char *message, const char *password); -my_bool check_scramble_323(const char *, const char *message, - unsigned long *salt); -void get_salt_from_password_323(unsigned long *res, const char *password); -void make_password_from_salt_323(char *to, const unsigned long *salt); -void make_scrambled_password(char *to, const char *password); -void scramble(char *to, const char *message, const char *password); -my_bool check_scramble(const char *reply, const char *message, - const unsigned char *hash_stage2); -void get_salt_from_password(unsigned char *res, const char *password); -void make_password_from_salt(char *to, const unsigned char *hash_stage2); -char *octet2hex(char *to, const char *str, unsigned int len); -char *get_tty_password(const char *opt_message); -const char *mysql_errno_to_sqlstate(unsigned int mysql_errno); -my_bool my_thread_init(void); -void my_thread_end(void); -#include "mysql_time.h" -enum enum_mysql_timestamp_type -{ - MYSQL_TIMESTAMP_NONE= -2, MYSQL_TIMESTAMP_ERROR= -1, - MYSQL_TIMESTAMP_DATE= 0, MYSQL_TIMESTAMP_DATETIME= 1, MYSQL_TIMESTAMP_TIME= 2 -}; -typedef struct st_mysql_time -{ - unsigned int year, month, day, hour, minute, second; - unsigned long second_part; - my_bool neg; - enum enum_mysql_timestamp_type time_type; -} MYSQL_TIME; -#include "my_list.h" -typedef struct st_list { - struct st_list *prev,*next; - void *data; -} LIST; -typedef int (*list_walk_action)(void *,void *); -extern LIST *list_add(LIST *root,LIST *element); -extern LIST *list_delete(LIST *root,LIST *element); -extern LIST *list_cons(void *data,LIST *root); -extern LIST *list_reverse(LIST *root); -extern void list_free(LIST *root,unsigned int free_data); -extern unsigned int list_length(LIST *); -extern int list_walk(LIST *,list_walk_action action,unsigned char * argument); -extern unsigned int mysql_port; -extern char *mysql_unix_port; -typedef struct st_mysql_field { - char *name; - char *org_name; - char *table; - char *org_table; - char *db; - char *catalog; - char *def; - unsigned long length; - unsigned long max_length; - unsigned int name_length; - unsigned int org_name_length; - unsigned int table_length; - unsigned int org_table_length; - unsigned int db_length; - unsigned int catalog_length; - unsigned int def_length; - unsigned int flags; - unsigned int decimals; - unsigned int charsetnr; - enum enum_field_types type; - void *extension; -} MYSQL_FIELD; -typedef char **MYSQL_ROW; -typedef unsigned int MYSQL_FIELD_OFFSET; -typedef unsigned long long my_ulonglong; -#include "typelib.h" -#include "my_alloc.h" -typedef struct st_used_mem -{ - struct st_used_mem *next; - size_t left; - size_t size; -} USED_MEM; -typedef struct st_mem_root -{ - USED_MEM *free; - USED_MEM *used; - USED_MEM *pre_alloc; - size_t min_malloc; - size_t block_size; - unsigned int block_num; - unsigned int first_block_usage; - void (*error_handler)(void); -} MEM_ROOT; -typedef struct st_typelib { - unsigned int count; - const char *name; - const char **type_names; - unsigned int *type_lengths; -} TYPELIB; -extern my_ulonglong find_typeset(char *x, TYPELIB *typelib,int *error_position); -extern int find_type_or_exit(const char *x, TYPELIB *typelib, - const char *option); -extern int find_type(char *x, const TYPELIB *typelib, unsigned int full_name); -extern void make_type(char *to,unsigned int nr,TYPELIB *typelib); -extern const char *get_type(TYPELIB *typelib,unsigned int nr); -extern TYPELIB *copy_typelib(MEM_ROOT *root, TYPELIB *from); -extern TYPELIB sql_protocol_typelib; -typedef struct st_mysql_rows { - struct st_mysql_rows *next; - MYSQL_ROW data; - unsigned long length; -} MYSQL_ROWS; -typedef MYSQL_ROWS *MYSQL_ROW_OFFSET; -#include "my_alloc.h" -typedef struct embedded_query_result EMBEDDED_QUERY_RESULT; -typedef struct st_mysql_data { - MYSQL_ROWS *data; - struct embedded_query_result *embedded_info; - MEM_ROOT alloc; - my_ulonglong rows; - unsigned int fields; - void *extension; -} MYSQL_DATA; -enum mysql_option -{ - MYSQL_OPT_CONNECT_TIMEOUT, MYSQL_OPT_COMPRESS, MYSQL_OPT_NAMED_PIPE, - MYSQL_INIT_COMMAND, MYSQL_READ_DEFAULT_FILE, MYSQL_READ_DEFAULT_GROUP, - MYSQL_SET_CHARSET_DIR, MYSQL_SET_CHARSET_NAME, MYSQL_OPT_LOCAL_INFILE, - MYSQL_OPT_PROTOCOL, MYSQL_SHARED_MEMORY_BASE_NAME, MYSQL_OPT_READ_TIMEOUT, - MYSQL_OPT_WRITE_TIMEOUT, MYSQL_OPT_USE_RESULT, - MYSQL_OPT_USE_REMOTE_CONNECTION, MYSQL_OPT_USE_EMBEDDED_CONNECTION, - MYSQL_OPT_GUESS_CONNECTION, MYSQL_SET_CLIENT_IP, MYSQL_SECURE_AUTH, - MYSQL_REPORT_DATA_TRUNCATION, MYSQL_OPT_RECONNECT, - MYSQL_OPT_SSL_VERIFY_SERVER_CERT -}; -struct st_mysql_options { - unsigned int connect_timeout, read_timeout, write_timeout; - unsigned int port, protocol; - unsigned long client_flag; - char *host,*user,*password,*unix_socket,*db; - struct st_dynamic_array *init_commands; - char *my_cnf_file,*my_cnf_group, *charset_dir, *charset_name; - char *ssl_key; - char *ssl_cert; - char *ssl_ca; - char *ssl_capath; - char *ssl_cipher; - char *shared_memory_base_name; - unsigned long max_allowed_packet; - my_bool use_ssl; - my_bool compress,named_pipe; - my_bool unused1; - my_bool unused2; - my_bool unused3; - my_bool unused4; - enum mysql_option methods_to_use; - char *client_ip; - my_bool secure_auth; - my_bool report_data_truncation; - int (*local_infile_init)(void **, const char *, void *); - int (*local_infile_read)(void *, char *, unsigned int); - void (*local_infile_end)(void *); - int (*local_infile_error)(void *, char *, unsigned int); - void *local_infile_userdata; - void *extension; -}; -enum mysql_status -{ - MYSQL_STATUS_READY,MYSQL_STATUS_GET_RESULT,MYSQL_STATUS_USE_RESULT -}; -enum mysql_protocol_type -{ - MYSQL_PROTOCOL_DEFAULT, MYSQL_PROTOCOL_TCP, MYSQL_PROTOCOL_SOCKET, - MYSQL_PROTOCOL_PIPE, MYSQL_PROTOCOL_MEMORY -}; -typedef struct character_set -{ - unsigned int number; - unsigned int state; - const char *csname; - const char *name; - const char *comment; - const char *dir; - unsigned int mbminlen; - unsigned int mbmaxlen; -} MY_CHARSET_INFO; -struct st_mysql_methods; -struct st_mysql_stmt; -typedef struct st_mysql -{ - NET net; - unsigned char *connector_fd; - char *host,*user,*passwd,*unix_socket,*server_version,*host_info; - char *info, *db; - struct charset_info_st *charset; - MYSQL_FIELD *fields; - MEM_ROOT field_alloc; - my_ulonglong affected_rows; - my_ulonglong insert_id; - my_ulonglong extra_info; - unsigned long thread_id; - unsigned long packet_length; - unsigned int port; - unsigned long client_flag,server_capabilities; - unsigned int protocol_version; - unsigned int field_count; - unsigned int server_status; - unsigned int server_language; - unsigned int warning_count; - struct st_mysql_options options; - enum mysql_status status; - my_bool free_me; - my_bool reconnect; - char scramble[20 +1]; - my_bool unused1; - void *unused2, *unused3, *unused4, *unused5; - LIST *stmts; - const struct st_mysql_methods *methods; - void *thd; - my_bool *unbuffered_fetch_owner; - char *info_buffer; - void *extension; -} MYSQL; -typedef struct st_mysql_res { - my_ulonglong row_count; - MYSQL_FIELD *fields; - MYSQL_DATA *data; - MYSQL_ROWS *data_cursor; - unsigned long *lengths; - MYSQL *handle; - const struct st_mysql_methods *methods; - MYSQL_ROW row; - MYSQL_ROW current_row; - MEM_ROOT field_alloc; - unsigned int field_count, current_field; - my_bool eof; - my_bool unbuffered_fetch_cancelled; - void *extension; -} MYSQL_RES; -typedef struct st_mysql_parameters -{ - unsigned long *p_max_allowed_packet; - unsigned long *p_net_buffer_length; - void *extension; -} MYSQL_PARAMETERS; -int mysql_server_init(int argc, char **argv, char **groups); -void mysql_server_end(void); -MYSQL_PARAMETERS * mysql_get_parameters(void); -my_bool mysql_thread_init(void); -void mysql_thread_end(void); -my_ulonglong mysql_num_rows(MYSQL_RES *res); -unsigned int mysql_num_fields(MYSQL_RES *res); -my_bool mysql_eof(MYSQL_RES *res); -MYSQL_FIELD * mysql_fetch_field_direct(MYSQL_RES *res, - unsigned int fieldnr); -MYSQL_FIELD * mysql_fetch_fields(MYSQL_RES *res); -MYSQL_ROW_OFFSET mysql_row_tell(MYSQL_RES *res); -MYSQL_FIELD_OFFSET mysql_field_tell(MYSQL_RES *res); -unsigned int mysql_field_count(MYSQL *mysql); -my_ulonglong mysql_affected_rows(MYSQL *mysql); -my_ulonglong mysql_insert_id(MYSQL *mysql); -unsigned int mysql_errno(MYSQL *mysql); -const char * mysql_error(MYSQL *mysql); -const char * mysql_sqlstate(MYSQL *mysql); -unsigned int mysql_warning_count(MYSQL *mysql); -const char * mysql_info(MYSQL *mysql); -unsigned long mysql_thread_id(MYSQL *mysql); -const char * mysql_character_set_name(MYSQL *mysql); -int mysql_set_character_set(MYSQL *mysql, const char *csname); -MYSQL * mysql_init(MYSQL *mysql); -my_bool mysql_ssl_set(MYSQL *mysql, const char *key, - const char *cert, const char *ca, - const char *capath, const char *cipher); -const char * mysql_get_ssl_cipher(MYSQL *mysql); -my_bool mysql_change_user(MYSQL *mysql, const char *user, - const char *passwd, const char *db); -MYSQL * mysql_real_connect(MYSQL *mysql, const char *host, - const char *user, - const char *passwd, - const char *db, - unsigned int port, - const char *unix_socket, - unsigned long clientflag); -int mysql_select_db(MYSQL *mysql, const char *db); -int mysql_query(MYSQL *mysql, const char *q); -int mysql_send_query(MYSQL *mysql, const char *q, - unsigned long length); -int mysql_real_query(MYSQL *mysql, const char *q, - unsigned long length); -MYSQL_RES * mysql_store_result(MYSQL *mysql); -MYSQL_RES * mysql_use_result(MYSQL *mysql); -void mysql_get_character_set_info(MYSQL *mysql, - MY_CHARSET_INFO *charset); -void -mysql_set_local_infile_handler(MYSQL *mysql, - int (*local_infile_init)(void **, const char *, - void *), - int (*local_infile_read)(void *, char *, - unsigned int), - void (*local_infile_end)(void *), - int (*local_infile_error)(void *, char*, - unsigned int), - void *); -void -mysql_set_local_infile_default(MYSQL *mysql); -int mysql_shutdown(MYSQL *mysql, - enum mysql_enum_shutdown_level - shutdown_level); -int mysql_dump_debug_info(MYSQL *mysql); -int mysql_refresh(MYSQL *mysql, - unsigned int refresh_options); -int mysql_kill(MYSQL *mysql,unsigned long pid); -int mysql_set_server_option(MYSQL *mysql, - enum enum_mysql_set_option - option); -int mysql_ping(MYSQL *mysql); -const char * mysql_stat(MYSQL *mysql); -const char * mysql_get_server_info(MYSQL *mysql); -const char * mysql_get_client_info(void); -unsigned long mysql_get_client_version(void); -const char * mysql_get_host_info(MYSQL *mysql); -unsigned long mysql_get_server_version(MYSQL *mysql); -unsigned int mysql_get_proto_info(MYSQL *mysql); -MYSQL_RES * mysql_list_dbs(MYSQL *mysql,const char *wild); -MYSQL_RES * mysql_list_tables(MYSQL *mysql,const char *wild); -MYSQL_RES * mysql_list_processes(MYSQL *mysql); -int mysql_options(MYSQL *mysql,enum mysql_option option, - const void *arg); -void mysql_free_result(MYSQL_RES *result); -void mysql_data_seek(MYSQL_RES *result, - my_ulonglong offset); -MYSQL_ROW_OFFSET mysql_row_seek(MYSQL_RES *result, - MYSQL_ROW_OFFSET offset); -MYSQL_FIELD_OFFSET mysql_field_seek(MYSQL_RES *result, - MYSQL_FIELD_OFFSET offset); -MYSQL_ROW mysql_fetch_row(MYSQL_RES *result); -unsigned long * mysql_fetch_lengths(MYSQL_RES *result); -MYSQL_FIELD * mysql_fetch_field(MYSQL_RES *result); -MYSQL_RES * mysql_list_fields(MYSQL *mysql, const char *table, - const char *wild); -unsigned long mysql_escape_string(char *to,const char *from, - unsigned long from_length); -unsigned long mysql_hex_string(char *to,const char *from, - unsigned long from_length); -unsigned long mysql_real_escape_string(MYSQL *mysql, - char *to,const char *from, - unsigned long length); -void mysql_debug(const char *debug); -void myodbc_remove_escape(MYSQL *mysql,char *name); -unsigned int mysql_thread_safe(void); -my_bool mysql_embedded(void); -my_bool mysql_read_query_result(MYSQL *mysql); -enum enum_mysql_stmt_state -{ - MYSQL_STMT_INIT_DONE= 1, MYSQL_STMT_PREPARE_DONE, MYSQL_STMT_EXECUTE_DONE, - MYSQL_STMT_FETCH_DONE -}; -typedef struct st_mysql_bind -{ - unsigned long *length; - my_bool *is_null; - void *buffer; - my_bool *error; - unsigned char *row_ptr; - void (*store_param_func)(NET *net, struct st_mysql_bind *param); - void (*fetch_result)(struct st_mysql_bind *, MYSQL_FIELD *, - unsigned char **row); - void (*skip_result)(struct st_mysql_bind *, MYSQL_FIELD *, - unsigned char **row); - unsigned long buffer_length; - unsigned long offset; - unsigned long length_value; - unsigned int param_number; - unsigned int pack_length; - enum enum_field_types buffer_type; - my_bool error_value; - my_bool is_unsigned; - my_bool long_data_used; - my_bool is_null_value; - void *extension; -} MYSQL_BIND; -typedef struct st_mysql_stmt -{ - MEM_ROOT mem_root; - LIST list; - MYSQL *mysql; - MYSQL_BIND *params; - MYSQL_BIND *bind; - MYSQL_FIELD *fields; - MYSQL_DATA result; - MYSQL_ROWS *data_cursor; - int (*read_row_func)(struct st_mysql_stmt *stmt, - unsigned char **row); - my_ulonglong affected_rows; - my_ulonglong insert_id; - unsigned long stmt_id; - unsigned long flags; - unsigned long prefetch_rows; - unsigned int server_status; - unsigned int last_errno; - unsigned int param_count; - unsigned int field_count; - enum enum_mysql_stmt_state state; - char last_error[512]; - char sqlstate[5 +1]; - my_bool send_types_to_server; - my_bool bind_param_done; - unsigned char bind_result_done; - my_bool unbuffered_fetch_cancelled; - my_bool update_max_length; - void *extension; -} MYSQL_STMT; -enum enum_stmt_attr_type -{ - STMT_ATTR_UPDATE_MAX_LENGTH, - STMT_ATTR_CURSOR_TYPE, - STMT_ATTR_PREFETCH_ROWS -}; -typedef struct st_mysql_methods -{ - my_bool (*read_query_result)(MYSQL *mysql); - my_bool (*advanced_command)(MYSQL *mysql, - enum enum_server_command command, - const unsigned char *header, - unsigned long header_length, - const unsigned char *arg, - unsigned long arg_length, - my_bool skip_check, - MYSQL_STMT *stmt); - MYSQL_DATA *(*read_rows)(MYSQL *mysql,MYSQL_FIELD *mysql_fields, - unsigned int fields); - MYSQL_RES * (*use_result)(MYSQL *mysql); - void (*fetch_lengths)(unsigned long *to, - MYSQL_ROW column, unsigned int field_count); - void (*flush_use_result)(MYSQL *mysql, my_bool flush_all_results); - MYSQL_FIELD * (*list_fields)(MYSQL *mysql); - my_bool (*read_prepare_result)(MYSQL *mysql, MYSQL_STMT *stmt); - int (*stmt_execute)(MYSQL_STMT *stmt); - int (*read_binary_rows)(MYSQL_STMT *stmt); - int (*unbuffered_fetch)(MYSQL *mysql, char **row); - void (*free_embedded_thd)(MYSQL *mysql); - const char *(*read_statistics)(MYSQL *mysql); - my_bool (*next_result)(MYSQL *mysql); - int (*read_change_user_result)(MYSQL *mysql, char *buff, const char *passwd); - int (*read_rows_from_cursor)(MYSQL_STMT *stmt); -} MYSQL_METHODS; -MYSQL_STMT * mysql_stmt_init(MYSQL *mysql); -int mysql_stmt_prepare(MYSQL_STMT *stmt, const char *query, - unsigned long length); -int mysql_stmt_execute(MYSQL_STMT *stmt); -int mysql_stmt_fetch(MYSQL_STMT *stmt); -int mysql_stmt_fetch_column(MYSQL_STMT *stmt, MYSQL_BIND *bind_arg, - unsigned int column, - unsigned long offset); -int mysql_stmt_store_result(MYSQL_STMT *stmt); -unsigned long mysql_stmt_param_count(MYSQL_STMT * stmt); -my_bool mysql_stmt_attr_set(MYSQL_STMT *stmt, - enum enum_stmt_attr_type attr_type, - const void *attr); -my_bool mysql_stmt_attr_get(MYSQL_STMT *stmt, - enum enum_stmt_attr_type attr_type, - void *attr); -my_bool mysql_stmt_bind_param(MYSQL_STMT * stmt, MYSQL_BIND * bnd); -my_bool mysql_stmt_bind_result(MYSQL_STMT * stmt, MYSQL_BIND * bnd); -my_bool mysql_stmt_close(MYSQL_STMT * stmt); -my_bool mysql_stmt_reset(MYSQL_STMT * stmt); -my_bool mysql_stmt_free_result(MYSQL_STMT *stmt); -my_bool mysql_stmt_send_long_data(MYSQL_STMT *stmt, - unsigned int param_number, - const char *data, - unsigned long length); -MYSQL_RES * mysql_stmt_result_metadata(MYSQL_STMT *stmt); -MYSQL_RES * mysql_stmt_param_metadata(MYSQL_STMT *stmt); -unsigned int mysql_stmt_errno(MYSQL_STMT * stmt); -const char * mysql_stmt_error(MYSQL_STMT * stmt); -const char * mysql_stmt_sqlstate(MYSQL_STMT * stmt); -MYSQL_ROW_OFFSET mysql_stmt_row_seek(MYSQL_STMT *stmt, - MYSQL_ROW_OFFSET offset); -MYSQL_ROW_OFFSET mysql_stmt_row_tell(MYSQL_STMT *stmt); -void mysql_stmt_data_seek(MYSQL_STMT *stmt, my_ulonglong offset); -my_ulonglong mysql_stmt_num_rows(MYSQL_STMT *stmt); -my_ulonglong mysql_stmt_affected_rows(MYSQL_STMT *stmt); -my_ulonglong mysql_stmt_insert_id(MYSQL_STMT *stmt); -unsigned int mysql_stmt_field_count(MYSQL_STMT *stmt); -my_bool mysql_commit(MYSQL * mysql); -my_bool mysql_rollback(MYSQL * mysql); -my_bool mysql_autocommit(MYSQL * mysql, my_bool auto_mode); -my_bool mysql_more_results(MYSQL *mysql); -int mysql_next_result(MYSQL *mysql); -int mysql_stmt_next_result(MYSQL_STMT *stmt); -void mysql_close(MYSQL *sock); diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/mysql_com.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/mysql_com.h deleted file mode 100644 index 8b16fd2..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/mysql_com.h +++ /dev/null @@ -1,543 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* -** Common definition between mysql server & client -*/ - -#ifndef _mysql_com_h -#define _mysql_com_h - -#define HOSTNAME_LENGTH 60 -#define SYSTEM_CHARSET_MBMAXLEN 4 -#define NAME_CHAR_LEN 64 /* Field/table name length */ -#define USERNAME_CHAR_LENGTH 16 -#define NAME_LEN (NAME_CHAR_LEN*SYSTEM_CHARSET_MBMAXLEN) -#define USERNAME_LENGTH (USERNAME_CHAR_LENGTH*SYSTEM_CHARSET_MBMAXLEN) - -#define SERVER_VERSION_LENGTH 60 -#define SQLSTATE_LENGTH 5 - -/* - Maximum length of comments -*/ -#define TABLE_COMMENT_INLINE_MAXLEN 180 /* pre 6.0: 60 (3-byte) characters */ -#define TABLE_COMMENT_MAXLEN 2048 -#define COLUMN_COMMENT_MAXLEN 1024 -#define INDEX_COMMENT_MAXLEN 1024 - - -/* - USER_HOST_BUFF_SIZE -- length of string buffer, that is enough to contain - username and hostname parts of the user identifier with trailing zero in - MySQL standard format: - user_name_part@host_name_part\0 -*/ -#define USER_HOST_BUFF_SIZE HOSTNAME_LENGTH + USERNAME_LENGTH + 2 - -#define LOCAL_HOST "localhost" -#define LOCAL_HOST_NAMEDPIPE "." - - -#if defined(__WIN__) && !defined( _CUSTOMCONFIG_) -#define MYSQL_NAMEDPIPE "MySQL" -#define MYSQL_SERVICENAME "MySQL" -#endif /* __WIN__ */ - -/* - You should add new commands to the end of this list, otherwise old - servers won't be able to handle them as 'unsupported'. -*/ - -enum enum_server_command -{ - COM_SLEEP, COM_QUIT, COM_INIT_DB, COM_QUERY, COM_FIELD_LIST, - COM_CREATE_DB, COM_DROP_DB, COM_REFRESH, COM_SHUTDOWN, COM_STATISTICS, - COM_PROCESS_INFO, COM_CONNECT, COM_PROCESS_KILL, COM_DEBUG, COM_PING, - COM_TIME, COM_DELAYED_INSERT, COM_CHANGE_USER, COM_BINLOG_DUMP, - COM_TABLE_DUMP, COM_CONNECT_OUT, COM_REGISTER_SLAVE, - COM_STMT_PREPARE, COM_STMT_EXECUTE, COM_STMT_SEND_LONG_DATA, COM_STMT_CLOSE, - COM_STMT_RESET, COM_SET_OPTION, COM_STMT_FETCH, COM_DAEMON, - /* don't forget to update const char *command_name[] in sql_parse.cc */ - - /* Must be last */ - COM_END -}; - - -/* - Length of random string sent by server on handshake; this is also length of - obfuscated password, recieved from client -*/ -#define SCRAMBLE_LENGTH 20 -#define SCRAMBLE_LENGTH_323 8 -/* length of password stored in the db: new passwords are preceeded with '*' */ -#define SCRAMBLED_PASSWORD_CHAR_LENGTH (SCRAMBLE_LENGTH*2+1) -#define SCRAMBLED_PASSWORD_CHAR_LENGTH_323 (SCRAMBLE_LENGTH_323*2) - - -#define NOT_NULL_FLAG 1 /* Field can't be NULL */ -#define PRI_KEY_FLAG 2 /* Field is part of a primary key */ -#define UNIQUE_KEY_FLAG 4 /* Field is part of a unique key */ -#define MULTIPLE_KEY_FLAG 8 /* Field is part of a key */ -#define BLOB_FLAG 16 /* Field is a blob */ -#define UNSIGNED_FLAG 32 /* Field is unsigned */ -#define ZEROFILL_FLAG 64 /* Field is zerofill */ -#define BINARY_FLAG 128 /* Field is binary */ - -/* The following are only sent to new clients */ -#define ENUM_FLAG 256 /* field is an enum */ -#define AUTO_INCREMENT_FLAG 512 /* field is a autoincrement field */ -#define TIMESTAMP_FLAG 1024 /* Field is a timestamp */ -#define SET_FLAG 2048 /* field is a set */ -#define NO_DEFAULT_VALUE_FLAG 4096 /* Field doesn't have default value */ -#define ON_UPDATE_NOW_FLAG 8192 /* Field is set to NOW on UPDATE */ -#define NUM_FLAG 32768 /* Field is num (for clients) */ -#define PART_KEY_FLAG 16384 /* Intern; Part of some key */ -#define GROUP_FLAG 32768 /* Intern: Group field */ -#define UNIQUE_FLAG 65536 /* Intern: Used by sql_yacc */ -#define BINCMP_FLAG 131072 /* Intern: Used by sql_yacc */ -#define GET_FIXED_FIELDS_FLAG (1 << 18) /* Used to get fields in item tree */ -#define FIELD_IN_PART_FUNC_FLAG (1 << 19)/* Field part of partition func */ -#define FIELD_IN_ADD_INDEX (1<< 20) /* Intern: Field used in ADD INDEX */ -#define FIELD_IS_RENAMED (1<< 21) /* Intern: Field is being renamed */ -#define FIELD_STORAGE_FLAGS 22 /* Storage type: bit 22, 23 and 24 */ -#define COLUMN_FORMAT_FLAGS 25 /* Column format: bit 25, 26 and 27 */ - -#define REFRESH_GRANT 1 /* Refresh grant tables */ -#define REFRESH_LOG 2 /* Start on new log file */ -#define REFRESH_TABLES 4 /* close all tables */ -#define REFRESH_HOSTS 8 /* Flush host cache */ -#define REFRESH_STATUS 16 /* Flush status variables */ -#define REFRESH_THREADS 32 /* Flush thread cache */ -#define REFRESH_SLAVE 64 /* Reset master info and restart slave - thread */ -#define REFRESH_MASTER 128 /* Remove all bin logs in the index - and truncate the index */ - -/* The following can't be set with mysql_refresh() */ -#define REFRESH_READ_LOCK 16384 /* Lock tables for read */ -#define REFRESH_FAST 32768 /* Intern flag */ - -/* RESET (remove all queries) from query cache */ -#define REFRESH_QUERY_CACHE 65536 -#define REFRESH_QUERY_CACHE_FREE 0x20000L /* pack query cache */ -#define REFRESH_DES_KEY_FILE 0x40000L -#define REFRESH_USER_RESOURCES 0x80000L -#define REFRESH_BACKUP_LOG 0x200000L - -#define CLIENT_LONG_PASSWORD 1 /* new more secure passwords */ -#define CLIENT_FOUND_ROWS 2 /* Found instead of affected rows */ -#define CLIENT_LONG_FLAG 4 /* Get all column flags */ -#define CLIENT_CONNECT_WITH_DB 8 /* One can specify db on connect */ -#define CLIENT_NO_SCHEMA 16 /* Don't allow database.table.column */ -#define CLIENT_COMPRESS 32 /* Can use compression protocol */ -#define CLIENT_ODBC 64 /* Odbc client */ -#define CLIENT_LOCAL_FILES 128 /* Can use LOAD DATA LOCAL */ -#define CLIENT_IGNORE_SPACE 256 /* Ignore spaces before '(' */ -#define CLIENT_PROTOCOL_41 512 /* New 4.1 protocol */ -#define CLIENT_INTERACTIVE 1024 /* This is an interactive client */ -#define CLIENT_SSL 2048 /* Switch to SSL after handshake */ -#define CLIENT_IGNORE_SIGPIPE 4096 /* IGNORE sigpipes */ -#define CLIENT_TRANSACTIONS 8192 /* Client knows about transactions */ -#define CLIENT_RESERVED 16384 /* Old flag for 4.1 protocol */ -#define CLIENT_SECURE_CONNECTION 32768 /* New 4.1 authentication */ -#define CLIENT_MULTI_STATEMENTS (1UL << 16) /* Enable/disable multi-stmt support */ -#define CLIENT_MULTI_RESULTS (1UL << 17) /* Enable/disable multi-results */ -#define CLIENT_PS_MULTI_RESULTS (1UL << 18) /* Multi-results in PS-protocol */ - -#define CLIENT_SSL_VERIFY_SERVER_CERT (1UL << 30) -#define CLIENT_REMEMBER_OPTIONS (1UL << 31) - -/* Gather all possible capabilites (flags) supported by the server */ -#define CLIENT_ALL_FLAGS (CLIENT_LONG_PASSWORD | \ - CLIENT_FOUND_ROWS | \ - CLIENT_LONG_FLAG | \ - CLIENT_CONNECT_WITH_DB | \ - CLIENT_NO_SCHEMA | \ - CLIENT_COMPRESS | \ - CLIENT_ODBC | \ - CLIENT_LOCAL_FILES | \ - CLIENT_IGNORE_SPACE | \ - CLIENT_PROTOCOL_41 | \ - CLIENT_INTERACTIVE | \ - CLIENT_SSL | \ - CLIENT_IGNORE_SIGPIPE | \ - CLIENT_TRANSACTIONS | \ - CLIENT_RESERVED | \ - CLIENT_SECURE_CONNECTION | \ - CLIENT_MULTI_STATEMENTS | \ - CLIENT_MULTI_RESULTS | \ - CLIENT_PS_MULTI_RESULTS | \ - CLIENT_SSL_VERIFY_SERVER_CERT | \ - CLIENT_REMEMBER_OPTIONS) - -/* - Switch off the flags that are optional and depending on build flags - If any of the optional flags is supported by the build it will be switched - on before sending to the client during the connection handshake. -*/ -#define CLIENT_BASIC_FLAGS (((CLIENT_ALL_FLAGS & ~CLIENT_SSL) \ - & ~CLIENT_COMPRESS) \ - & ~CLIENT_SSL_VERIFY_SERVER_CERT) - -#define SERVER_STATUS_IN_TRANS 1 /* Transaction has started */ -#define SERVER_STATUS_AUTOCOMMIT 2 /* Server in auto_commit mode */ -#define SERVER_MORE_RESULTS_EXISTS 8 /* Multi query - next query exists */ -#define SERVER_QUERY_NO_GOOD_INDEX_USED 16 -#define SERVER_QUERY_NO_INDEX_USED 32 -/** - The server was able to fulfill the clients request and opened a - read-only non-scrollable cursor for a query. This flag comes - in reply to COM_STMT_EXECUTE and COM_STMT_FETCH commands. -*/ -#define SERVER_STATUS_CURSOR_EXISTS 64 -/** - This flag is sent when a read-only cursor is exhausted, in reply to - COM_STMT_FETCH command. -*/ -#define SERVER_STATUS_LAST_ROW_SENT 128 -#define SERVER_STATUS_DB_DROPPED 256 /* A database was dropped */ -#define SERVER_STATUS_NO_BACKSLASH_ESCAPES 512 -/** - Sent to the client if after a prepared statement reprepare - we discovered that the new statement returns a different - number of result set columns. -*/ -#define SERVER_STATUS_METADATA_CHANGED 1024 -/* - Tell clients that this query was logged to the slow query log. - Not yet set in the server, but interface is defined for applications - to use. See WorkLog 4098. -*/ -#define SERVER_QUERY_WAS_SLOW 2048 - -/** - To mark ResultSet containing output parameter values. -*/ -#define SERVER_PS_OUT_PARAMS 4096 - -/** - Server status flags that must be cleared when starting - execution of a new SQL statement. - Flags from this set are only added to the - current server status by the execution engine, but - never removed -- the execution engine expects them - to disappear automagically by the next command. -*/ -#define SERVER_STATUS_CLEAR_SET (SERVER_QUERY_NO_GOOD_INDEX_USED| \ - SERVER_QUERY_NO_INDEX_USED|\ - SERVER_MORE_RESULTS_EXISTS|\ - SERVER_STATUS_METADATA_CHANGED) - -#define MYSQL_ERRMSG_SIZE 512 -#define NET_READ_TIMEOUT 30 /* Timeout on read */ -#define NET_WRITE_TIMEOUT 60 /* Timeout on write */ -#define NET_WAIT_TIMEOUT 8*60*60 /* Wait for new query */ - -#define ONLY_KILL_QUERY 1 - - -struct st_vio; /* Only C */ -typedef struct st_vio Vio; - -#define MAX_TINYINT_WIDTH 3 /* Max width for a TINY w.o. sign */ -#define MAX_SMALLINT_WIDTH 5 /* Max width for a SHORT w.o. sign */ -#define MAX_MEDIUMINT_WIDTH 8 /* Max width for a INT24 w.o. sign */ -#define MAX_INT_WIDTH 10 /* Max width for a LONG w.o. sign */ -#define MAX_BIGINT_WIDTH 20 /* Max width for a LONGLONG */ -#define MAX_CHAR_WIDTH 255 /* Max length for a CHAR colum */ -#define MAX_BLOB_WIDTH 16777216 /* Default width for blob */ - -typedef struct st_net { -#if !defined(CHECK_EMBEDDED_DIFFERENCES) || !defined(EMBEDDED_LIBRARY) - Vio *vio; - unsigned char *buff,*buff_end,*write_pos,*read_pos; - my_socket fd; /* For Perl DBI/dbd */ - /* - The following variable is set if we are doing several queries in one - command ( as in LOAD TABLE ... FROM MASTER ), - and do not want to confuse the client with OK at the wrong time - */ - unsigned long remain_in_buf,length, buf_length, where_b; - unsigned long max_packet,max_packet_size; - unsigned int pkt_nr,compress_pkt_nr; - unsigned int write_timeout, read_timeout, retry_count; - int fcntl; - unsigned int *return_status; - unsigned char reading_or_writing; - char save_char; - my_bool unused1; /* Please remove with the next incompatible ABI change. */ - my_bool unused2; /* Please remove with the next incompatible ABI change */ - my_bool compress; - my_bool unused3; /* Please remove with the next incompatible ABI change. */ - /* - Pointer to query object in query cache, do not equal NULL (0) for - queries in cache that have not stored its results yet - */ -#endif - /* - Unused, please remove with the next incompatible ABI change. - */ - unsigned char *unused; - unsigned int last_errno; - unsigned char error; - my_bool unused4; /* Please remove with the next incompatible ABI change. */ - my_bool unused5; /* Please remove with the next incompatible ABI change. */ - /** Client library error message buffer. Actually belongs to struct MYSQL. */ - char last_error[MYSQL_ERRMSG_SIZE]; - /** Client library sqlstate buffer. Set along with the error message. */ - char sqlstate[SQLSTATE_LENGTH+1]; - void *extension; -} NET; - - -#define packet_error (~(unsigned long) 0) - -enum enum_field_types { MYSQL_TYPE_DECIMAL, MYSQL_TYPE_TINY, - MYSQL_TYPE_SHORT, MYSQL_TYPE_LONG, - MYSQL_TYPE_FLOAT, MYSQL_TYPE_DOUBLE, - MYSQL_TYPE_NULL, MYSQL_TYPE_TIMESTAMP, - MYSQL_TYPE_LONGLONG,MYSQL_TYPE_INT24, - MYSQL_TYPE_DATE, MYSQL_TYPE_TIME, - MYSQL_TYPE_DATETIME, MYSQL_TYPE_YEAR, - MYSQL_TYPE_NEWDATE, MYSQL_TYPE_VARCHAR, - MYSQL_TYPE_BIT, - MYSQL_TYPE_NEWDECIMAL=246, - MYSQL_TYPE_ENUM=247, - MYSQL_TYPE_SET=248, - MYSQL_TYPE_TINY_BLOB=249, - MYSQL_TYPE_MEDIUM_BLOB=250, - MYSQL_TYPE_LONG_BLOB=251, - MYSQL_TYPE_BLOB=252, - MYSQL_TYPE_VAR_STRING=253, - MYSQL_TYPE_STRING=254, - MYSQL_TYPE_GEOMETRY=255, - MAX_NO_FIELD_TYPES /* Should always be last */ -}; - -/* For backward compatibility */ -#define CLIENT_MULTI_QUERIES CLIENT_MULTI_STATEMENTS -#define FIELD_TYPE_DECIMAL MYSQL_TYPE_DECIMAL -#define FIELD_TYPE_NEWDECIMAL MYSQL_TYPE_NEWDECIMAL -#define FIELD_TYPE_TINY MYSQL_TYPE_TINY -#define FIELD_TYPE_SHORT MYSQL_TYPE_SHORT -#define FIELD_TYPE_LONG MYSQL_TYPE_LONG -#define FIELD_TYPE_FLOAT MYSQL_TYPE_FLOAT -#define FIELD_TYPE_DOUBLE MYSQL_TYPE_DOUBLE -#define FIELD_TYPE_NULL MYSQL_TYPE_NULL -#define FIELD_TYPE_TIMESTAMP MYSQL_TYPE_TIMESTAMP -#define FIELD_TYPE_LONGLONG MYSQL_TYPE_LONGLONG -#define FIELD_TYPE_INT24 MYSQL_TYPE_INT24 -#define FIELD_TYPE_DATE MYSQL_TYPE_DATE -#define FIELD_TYPE_TIME MYSQL_TYPE_TIME -#define FIELD_TYPE_DATETIME MYSQL_TYPE_DATETIME -#define FIELD_TYPE_YEAR MYSQL_TYPE_YEAR -#define FIELD_TYPE_NEWDATE MYSQL_TYPE_NEWDATE -#define FIELD_TYPE_ENUM MYSQL_TYPE_ENUM -#define FIELD_TYPE_SET MYSQL_TYPE_SET -#define FIELD_TYPE_TINY_BLOB MYSQL_TYPE_TINY_BLOB -#define FIELD_TYPE_MEDIUM_BLOB MYSQL_TYPE_MEDIUM_BLOB -#define FIELD_TYPE_LONG_BLOB MYSQL_TYPE_LONG_BLOB -#define FIELD_TYPE_BLOB MYSQL_TYPE_BLOB -#define FIELD_TYPE_VAR_STRING MYSQL_TYPE_VAR_STRING -#define FIELD_TYPE_STRING MYSQL_TYPE_STRING -#define FIELD_TYPE_CHAR MYSQL_TYPE_TINY -#define FIELD_TYPE_INTERVAL MYSQL_TYPE_ENUM -#define FIELD_TYPE_GEOMETRY MYSQL_TYPE_GEOMETRY -#define FIELD_TYPE_BIT MYSQL_TYPE_BIT - - -/* Shutdown/kill enums and constants */ - -/* Bits for THD::killable. */ -#define MYSQL_SHUTDOWN_KILLABLE_CONNECT (unsigned char)(1 << 0) -#define MYSQL_SHUTDOWN_KILLABLE_TRANS (unsigned char)(1 << 1) -#define MYSQL_SHUTDOWN_KILLABLE_LOCK_TABLE (unsigned char)(1 << 2) -#define MYSQL_SHUTDOWN_KILLABLE_UPDATE (unsigned char)(1 << 3) - -enum mysql_enum_shutdown_level { - /* - We want levels to be in growing order of hardness (because we use number - comparisons). Note that DEFAULT does not respect the growing property, but - it's ok. - */ - SHUTDOWN_DEFAULT = 0, - /* wait for existing connections to finish */ - SHUTDOWN_WAIT_CONNECTIONS= MYSQL_SHUTDOWN_KILLABLE_CONNECT, - /* wait for existing trans to finish */ - SHUTDOWN_WAIT_TRANSACTIONS= MYSQL_SHUTDOWN_KILLABLE_TRANS, - /* wait for existing updates to finish (=> no partial MyISAM update) */ - SHUTDOWN_WAIT_UPDATES= MYSQL_SHUTDOWN_KILLABLE_UPDATE, - /* flush InnoDB buffers and other storage engines' buffers*/ - SHUTDOWN_WAIT_ALL_BUFFERS= (MYSQL_SHUTDOWN_KILLABLE_UPDATE << 1), - /* don't flush InnoDB buffers, flush other storage engines' buffers*/ - SHUTDOWN_WAIT_CRITICAL_BUFFERS= (MYSQL_SHUTDOWN_KILLABLE_UPDATE << 1) + 1, - /* Now the 2 levels of the KILL command */ -#if MYSQL_VERSION_ID >= 50000 - KILL_QUERY= 254, -#endif - KILL_CONNECTION= 255 -}; - - -enum enum_cursor_type -{ - CURSOR_TYPE_NO_CURSOR= 0, - CURSOR_TYPE_READ_ONLY= 1, - CURSOR_TYPE_FOR_UPDATE= 2, - CURSOR_TYPE_SCROLLABLE= 4 -}; - - -/* options for mysql_set_option */ -enum enum_mysql_set_option -{ - MYSQL_OPTION_MULTI_STATEMENTS_ON, - MYSQL_OPTION_MULTI_STATEMENTS_OFF -}; - -#define net_new_transaction(net) ((net)->pkt_nr=0) - -#ifdef __cplusplus -extern "C" { -#endif - -my_bool my_net_init(NET *net, Vio* vio); -void my_net_local_init(NET *net); -void net_end(NET *net); - void net_clear(NET *net, my_bool clear_buffer); -my_bool net_realloc(NET *net, size_t length); -my_bool net_flush(NET *net); -my_bool my_net_write(NET *net,const unsigned char *packet, size_t len); -my_bool net_write_command(NET *net,unsigned char command, - const unsigned char *header, size_t head_len, - const unsigned char *packet, size_t len); -int net_real_write(NET *net,const unsigned char *packet, size_t len); -unsigned long my_net_read(NET *net); - -#ifdef _global_h -void my_net_set_write_timeout(NET *net, uint timeout); -void my_net_set_read_timeout(NET *net, uint timeout); -#endif - -struct sockaddr; -int my_connect(my_socket s, const struct sockaddr *name, unsigned int namelen, - unsigned int timeout); -struct my_rnd_struct; - -#ifdef __cplusplus -} -#endif - - /* The following is for user defined functions */ - -enum Item_result -{ - STRING_RESULT=0, REAL_RESULT, INT_RESULT, ROW_RESULT, DECIMAL_RESULT -#ifdef MYSQL_SERVER - ,IMPOSSIBLE_RESULT /* Yes, we know this is ugly, don't tell us */ - ,MAX_NO_ITEM_RESULTS = IMPOSSIBLE_RESULT /* Should always be last */ -#endif -}; - -typedef struct st_udf_args -{ - unsigned int arg_count; /* Number of arguments */ - enum Item_result *arg_type; /* Pointer to item_results */ - char **args; /* Pointer to argument */ - unsigned long *lengths; /* Length of string arguments */ - char *maybe_null; /* Set to 1 for all maybe_null args */ - char **attributes; /* Pointer to attribute name */ - unsigned long *attribute_lengths; /* Length of attribute arguments */ - void *extension; -} UDF_ARGS; - - /* This holds information about the result */ - -typedef struct st_udf_init -{ - my_bool maybe_null; /* 1 if function can return NULL */ - unsigned int decimals; /* for real functions */ - unsigned long max_length; /* For string functions */ - char *ptr; /* free pointer for function data */ - my_bool const_item; /* 1 if function always returns the same value */ - void *extension; -} UDF_INIT; -/* - TODO: add a notion for determinism of the UDF. - See Item_udf_func::update_used_tables () -*/ - - /* Constants when using compression */ -#define NET_HEADER_SIZE 4 /* standard header size */ -#define COMP_HEADER_SIZE 3 /* compression header extra size */ - - /* Prototypes to password functions */ - -#ifdef __cplusplus -extern "C" { -#endif - -/* - These functions are used for authentication by client and server and - implemented in sql/password.c -*/ - -void create_random_string(char *to, unsigned int length, - struct my_rnd_struct *rand_st); - -void hash_password(unsigned long *to, const char *password, unsigned int password_len); -void make_scrambled_password_323(char *to, const char *password); -void scramble_323(char *to, const char *message, const char *password); -my_bool check_scramble_323(const char *, const char *message, - unsigned long *salt); -void get_salt_from_password_323(unsigned long *res, const char *password); -void make_password_from_salt_323(char *to, const unsigned long *salt); - -void make_scrambled_password(char *to, const char *password); -void scramble(char *to, const char *message, const char *password); -my_bool check_scramble(const char *reply, const char *message, - const unsigned char *hash_stage2); -void get_salt_from_password(unsigned char *res, const char *password); -void make_password_from_salt(char *to, const unsigned char *hash_stage2); -char *octet2hex(char *to, const char *str, unsigned int len); - -/* end of password.c */ - -char *get_tty_password(const char *opt_message); -const char *mysql_errno_to_sqlstate(unsigned int mysql_errno); - -/* Some other useful functions */ - -my_bool my_thread_init(void); -void my_thread_end(void); - -#ifdef _global_h -ulong STDCALL net_field_length(uchar **packet); -my_ulonglong net_field_length_ll(uchar **packet); -uchar *net_store_length(uchar *pkg, ulonglong length); -#endif - -#ifdef __cplusplus -} -#endif - -#define NULL_LENGTH ((unsigned long) ~0) /* For net_store_length */ -#define MYSQL_STMT_HEADER 4 -#define MYSQL_LONG_DATA_HEADER 6 - -#define NOT_FIXED_DEC 31 -#endif diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/mysql_time.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/mysql_time.h deleted file mode 100644 index 0a3f17a..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/mysql_time.h +++ /dev/null @@ -1,55 +0,0 @@ -/* Copyright (C) 2004 MySQL AB - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef _mysql_time_h_ -#define _mysql_time_h_ - -/* - Time declarations shared between the server and client API: - you should not add anything to this header unless it's used - (and hence should be visible) in mysql.h. - If you're looking for a place to add new time-related declaration, - it's most likely my_time.h. See also "C API Handling of Date - and Time Values" chapter in documentation. -*/ - -enum enum_mysql_timestamp_type -{ - MYSQL_TIMESTAMP_NONE= -2, MYSQL_TIMESTAMP_ERROR= -1, - MYSQL_TIMESTAMP_DATE= 0, MYSQL_TIMESTAMP_DATETIME= 1, MYSQL_TIMESTAMP_TIME= 2 -}; - - -/* - Structure which is used to represent datetime values inside MySQL. - - We assume that values in this structure are normalized, i.e. year <= 9999, - month <= 12, day <= 31, hour <= 23, hour <= 59, hour <= 59. Many functions - in server such as my_system_gmt_sec() or make_time() family of functions - rely on this (actually now usage of make_*() family relies on a bit weaker - restriction). Also functions that produce MYSQL_TIME as result ensure this. - There is one exception to this rule though if this structure holds time - value (time_type == MYSQL_TIMESTAMP_TIME) days and hour member can hold - bigger values. -*/ -typedef struct st_mysql_time -{ - unsigned int year, month, day, hour, minute, second; - unsigned long second_part; - my_bool neg; - enum enum_mysql_timestamp_type time_type; -} MYSQL_TIME; - -#endif /* _mysql_time_h_ */ diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/mysql_version.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/mysql_version.h deleted file mode 100644 index 3f052b8..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/mysql_version.h +++ /dev/null @@ -1,26 +0,0 @@ -/* Copyright Abandoned 1996, 1999, 2001 MySQL AB - This file is public domain and comes with NO WARRANTY of any kind */ - -/* Version numbers for protocol & mysqld */ - -#ifndef _mysql_version_h -#define _mysql_version_h - -#ifdef _CUSTOMCONFIG_ -# include -#else -# define PROTOCOL_VERSION 10 -# define MYSQL_SERVER_VERSION "6.0.0" -# define MYSQL_VERSION_ID 60000 -# define MYSQL_PORT 3306 -# define MYSQL_PORT_DEFAULT 0 -# define MYSQL_UNIX_ADDR "/tmp/mysql.sock" -# define MYSQL_CONFIG_NAME "my" -# define MYSQL_COMPILATION_COMMENT "Source distribution" -#endif /* _CUSTOMCONFIG_ */ - -#ifndef LICENSE -# define LICENSE GPL -#endif /* LICENSE */ - -#endif /* _mysql_version_h */ diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/mysql_version.h.in b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/mysql_version.h.in deleted file mode 100644 index a707c67..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/mysql_version.h.in +++ /dev/null @@ -1,26 +0,0 @@ -/* Copyright Abandoned 1996, 1999, 2001 MySQL AB - This file is public domain and comes with NO WARRANTY of any kind */ - -/* Version numbers for protocol & mysqld */ - -#ifndef _mysql_version_h -#define _mysql_version_h - -#ifdef _CUSTOMCONFIG_ -# include -#else -# define PROTOCOL_VERSION @PROTOCOL_VERSION@ -# define MYSQL_SERVER_VERSION "@MYSQL_SERVER_VERSION@" -# define MYSQL_VERSION_ID @MYSQL_VERSION_ID@ -# define MYSQL_PORT @MYSQL_TCP_PORT@ -# define MYSQL_PORT_DEFAULT @MYSQL_TCP_PORT_DEFAULT@ -# define MYSQL_UNIX_ADDR "@MYSQL_UNIX_ADDR@" -# define MYSQL_CONFIG_NAME "my" -# define MYSQL_COMPILATION_COMMENT "@COMPILATION_COMMENT@" -#endif /* _CUSTOMCONFIG_ */ - -#ifndef LICENSE -# define LICENSE GPL -#endif /* LICENSE */ - -#endif /* _mysql_version_h */ diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/mysqld_error.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/mysqld_error.h deleted file mode 100644 index 653e583..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/mysqld_error.h +++ /dev/null @@ -1,730 +0,0 @@ -/* Autogenerated file, please don't edit */ - -#define ER_ERROR_FIRST 1000 -#define ER_HASHCHK 1000 -#define ER_NISAMCHK 1001 -#define ER_NO 1002 -#define ER_YES 1003 -#define ER_CANT_CREATE_FILE 1004 -#define ER_CANT_CREATE_TABLE 1005 -#define ER_CANT_CREATE_DB 1006 -#define ER_DB_CREATE_EXISTS 1007 -#define ER_DB_DROP_EXISTS 1008 -#define ER_DB_DROP_DELETE 1009 -#define ER_DB_DROP_RMDIR 1010 -#define ER_CANT_DELETE_FILE 1011 -#define ER_CANT_FIND_SYSTEM_REC 1012 -#define ER_CANT_GET_STAT 1013 -#define ER_CANT_GET_WD 1014 -#define ER_CANT_LOCK 1015 -#define ER_CANT_OPEN_FILE 1016 -#define ER_FILE_NOT_FOUND 1017 -#define ER_CANT_READ_DIR 1018 -#define ER_CANT_SET_WD 1019 -#define ER_CHECKREAD 1020 -#define ER_DISK_FULL 1021 -#define ER_DUP_KEY 1022 -#define ER_ERROR_ON_CLOSE 1023 -#define ER_ERROR_ON_READ 1024 -#define ER_ERROR_ON_RENAME 1025 -#define ER_ERROR_ON_WRITE 1026 -#define ER_FILE_USED 1027 -#define ER_FILSORT_ABORT 1028 -#define ER_FORM_NOT_FOUND 1029 -#define ER_GET_ERRNO 1030 -#define ER_ILLEGAL_HA 1031 -#define ER_KEY_NOT_FOUND 1032 -#define ER_NOT_FORM_FILE 1033 -#define ER_NOT_KEYFILE 1034 -#define ER_OLD_KEYFILE 1035 -#define ER_OPEN_AS_READONLY 1036 -#define ER_OUTOFMEMORY 1037 -#define ER_OUT_OF_SORTMEMORY 1038 -#define ER_UNEXPECTED_EOF 1039 -#define ER_CON_COUNT_ERROR 1040 -#define ER_OUT_OF_RESOURCES 1041 -#define ER_BAD_HOST_ERROR 1042 -#define ER_HANDSHAKE_ERROR 1043 -#define ER_DBACCESS_DENIED_ERROR 1044 -#define ER_ACCESS_DENIED_ERROR 1045 -#define ER_NO_DB_ERROR 1046 -#define ER_UNKNOWN_COM_ERROR 1047 -#define ER_BAD_NULL_ERROR 1048 -#define ER_BAD_DB_ERROR 1049 -#define ER_TABLE_EXISTS_ERROR 1050 -#define ER_BAD_TABLE_ERROR 1051 -#define ER_NON_UNIQ_ERROR 1052 -#define ER_SERVER_SHUTDOWN 1053 -#define ER_BAD_FIELD_ERROR 1054 -#define ER_WRONG_FIELD_WITH_GROUP 1055 -#define ER_WRONG_GROUP_FIELD 1056 -#define ER_WRONG_SUM_SELECT 1057 -#define ER_WRONG_VALUE_COUNT 1058 -#define ER_TOO_LONG_IDENT 1059 -#define ER_DUP_FIELDNAME 1060 -#define ER_DUP_KEYNAME 1061 -#define ER_DUP_ENTRY 1062 -#define ER_WRONG_FIELD_SPEC 1063 -#define ER_PARSE_ERROR 1064 -#define ER_EMPTY_QUERY 1065 -#define ER_NONUNIQ_TABLE 1066 -#define ER_INVALID_DEFAULT 1067 -#define ER_MULTIPLE_PRI_KEY 1068 -#define ER_TOO_MANY_KEYS 1069 -#define ER_TOO_MANY_KEY_PARTS 1070 -#define ER_TOO_LONG_KEY 1071 -#define ER_KEY_COLUMN_DOES_NOT_EXITS 1072 -#define ER_BLOB_USED_AS_KEY 1073 -#define ER_TOO_BIG_FIELDLENGTH 1074 -#define ER_WRONG_AUTO_KEY 1075 -#define ER_READY 1076 -#define ER_NORMAL_SHUTDOWN 1077 -#define ER_GOT_SIGNAL 1078 -#define ER_SHUTDOWN_COMPLETE 1079 -#define ER_FORCING_CLOSE 1080 -#define ER_IPSOCK_ERROR 1081 -#define ER_NO_SUCH_INDEX 1082 -#define ER_WRONG_FIELD_TERMINATORS 1083 -#define ER_BLOBS_AND_NO_TERMINATED 1084 -#define ER_TEXTFILE_NOT_READABLE 1085 -#define ER_FILE_EXISTS_ERROR 1086 -#define ER_LOAD_INFO 1087 -#define ER_ALTER_INFO 1088 -#define ER_WRONG_SUB_KEY 1089 -#define ER_CANT_REMOVE_ALL_FIELDS 1090 -#define ER_CANT_DROP_FIELD_OR_KEY 1091 -#define ER_INSERT_INFO 1092 -#define ER_UPDATE_TABLE_USED 1093 -#define ER_NO_SUCH_THREAD 1094 -#define ER_KILL_DENIED_ERROR 1095 -#define ER_NO_TABLES_USED 1096 -#define ER_TOO_BIG_SET 1097 -#define ER_NO_UNIQUE_LOGFILE 1098 -#define ER_TABLE_NOT_LOCKED_FOR_WRITE 1099 -#define ER_TABLE_NOT_LOCKED 1100 -#define ER_BLOB_CANT_HAVE_DEFAULT 1101 -#define ER_WRONG_DB_NAME 1102 -#define ER_WRONG_TABLE_NAME 1103 -#define ER_TOO_BIG_SELECT 1104 -#define ER_UNKNOWN_ERROR 1105 -#define ER_UNKNOWN_PROCEDURE 1106 -#define ER_WRONG_PARAMCOUNT_TO_PROCEDURE 1107 -#define ER_WRONG_PARAMETERS_TO_PROCEDURE 1108 -#define ER_UNKNOWN_TABLE 1109 -#define ER_FIELD_SPECIFIED_TWICE 1110 -#define ER_INVALID_GROUP_FUNC_USE 1111 -#define ER_UNSUPPORTED_EXTENSION 1112 -#define ER_TABLE_MUST_HAVE_COLUMNS 1113 -#define ER_RECORD_FILE_FULL 1114 -#define ER_UNKNOWN_CHARACTER_SET 1115 -#define ER_TOO_MANY_TABLES 1116 -#define ER_TOO_MANY_FIELDS 1117 -#define ER_TOO_BIG_ROWSIZE 1118 -#define ER_STACK_OVERRUN 1119 -#define ER_WRONG_OUTER_JOIN 1120 -#define ER_NULL_COLUMN_IN_INDEX 1121 -#define ER_CANT_FIND_UDF 1122 -#define ER_CANT_INITIALIZE_UDF 1123 -#define ER_UDF_NO_PATHS 1124 -#define ER_UDF_EXISTS 1125 -#define ER_CANT_OPEN_LIBRARY 1126 -#define ER_CANT_FIND_DL_ENTRY 1127 -#define ER_FUNCTION_NOT_DEFINED 1128 -#define ER_HOST_IS_BLOCKED 1129 -#define ER_HOST_NOT_PRIVILEGED 1130 -#define ER_PASSWORD_ANONYMOUS_USER 1131 -#define ER_PASSWORD_NOT_ALLOWED 1132 -#define ER_PASSWORD_NO_MATCH 1133 -#define ER_UPDATE_INFO 1134 -#define ER_CANT_CREATE_THREAD 1135 -#define ER_WRONG_VALUE_COUNT_ON_ROW 1136 -#define ER_CANT_REOPEN_TABLE 1137 -#define ER_INVALID_USE_OF_NULL 1138 -#define ER_REGEXP_ERROR 1139 -#define ER_MIX_OF_GROUP_FUNC_AND_FIELDS 1140 -#define ER_NONEXISTING_GRANT 1141 -#define ER_TABLEACCESS_DENIED_ERROR 1142 -#define ER_COLUMNACCESS_DENIED_ERROR 1143 -#define ER_ILLEGAL_GRANT_FOR_TABLE 1144 -#define ER_GRANT_WRONG_HOST_OR_USER 1145 -#define ER_NO_SUCH_TABLE 1146 -#define ER_NONEXISTING_TABLE_GRANT 1147 -#define ER_NOT_ALLOWED_COMMAND 1148 -#define ER_SYNTAX_ERROR 1149 -#define ER_DELAYED_CANT_CHANGE_LOCK 1150 -#define ER_TOO_MANY_DELAYED_THREADS 1151 -#define ER_ABORTING_CONNECTION 1152 -#define ER_NET_PACKET_TOO_LARGE 1153 -#define ER_NET_READ_ERROR_FROM_PIPE 1154 -#define ER_NET_FCNTL_ERROR 1155 -#define ER_NET_PACKETS_OUT_OF_ORDER 1156 -#define ER_NET_UNCOMPRESS_ERROR 1157 -#define ER_NET_READ_ERROR 1158 -#define ER_NET_READ_INTERRUPTED 1159 -#define ER_NET_ERROR_ON_WRITE 1160 -#define ER_NET_WRITE_INTERRUPTED 1161 -#define ER_TOO_LONG_STRING 1162 -#define ER_TABLE_CANT_HANDLE_BLOB 1163 -#define ER_TABLE_CANT_HANDLE_AUTO_INCREMENT 1164 -#define ER_DELAYED_INSERT_TABLE_LOCKED 1165 -#define ER_WRONG_COLUMN_NAME 1166 -#define ER_WRONG_KEY_COLUMN 1167 -#define ER_WRONG_MRG_TABLE 1168 -#define ER_DUP_UNIQUE 1169 -#define ER_BLOB_KEY_WITHOUT_LENGTH 1170 -#define ER_PRIMARY_CANT_HAVE_NULL 1171 -#define ER_TOO_MANY_ROWS 1172 -#define ER_REQUIRES_PRIMARY_KEY 1173 -#define ER_NO_RAID_COMPILED 1174 -#define ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE 1175 -#define ER_KEY_DOES_NOT_EXITS 1176 -#define ER_CHECK_NO_SUCH_TABLE 1177 -#define ER_CHECK_NOT_IMPLEMENTED 1178 -#define ER_CANT_DO_THIS_DURING_AN_TRANSACTION 1179 -#define ER_ERROR_DURING_COMMIT 1180 -#define ER_ERROR_DURING_ROLLBACK 1181 -#define ER_ERROR_DURING_FLUSH_LOGS 1182 -#define ER_ERROR_DURING_CHECKPOINT 1183 -#define ER_NEW_ABORTING_CONNECTION 1184 -#define ER_DUMP_NOT_IMPLEMENTED 1185 -#define ER_FLUSH_MASTER_BINLOG_CLOSED 1186 -#define ER_INDEX_REBUILD 1187 -#define ER_MASTER 1188 -#define ER_MASTER_NET_READ 1189 -#define ER_MASTER_NET_WRITE 1190 -#define ER_FT_MATCHING_KEY_NOT_FOUND 1191 -#define ER_LOCK_OR_ACTIVE_TRANSACTION 1192 -#define ER_UNKNOWN_SYSTEM_VARIABLE 1193 -#define ER_CRASHED_ON_USAGE 1194 -#define ER_CRASHED_ON_REPAIR 1195 -#define ER_WARNING_NOT_COMPLETE_ROLLBACK 1196 -#define ER_TRANS_CACHE_FULL 1197 -#define ER_SLAVE_MUST_STOP 1198 -#define ER_SLAVE_NOT_RUNNING 1199 -#define ER_BAD_SLAVE 1200 -#define ER_MASTER_INFO 1201 -#define ER_SLAVE_THREAD 1202 -#define ER_TOO_MANY_USER_CONNECTIONS 1203 -#define ER_SET_CONSTANTS_ONLY 1204 -#define ER_LOCK_WAIT_TIMEOUT 1205 -#define ER_LOCK_TABLE_FULL 1206 -#define ER_READ_ONLY_TRANSACTION 1207 -#define ER_DROP_DB_WITH_READ_LOCK 1208 -#define ER_CREATE_DB_WITH_READ_LOCK 1209 -#define ER_WRONG_ARGUMENTS 1210 -#define ER_NO_PERMISSION_TO_CREATE_USER 1211 -#define ER_UNION_TABLES_IN_DIFFERENT_DIR 1212 -#define ER_LOCK_DEADLOCK 1213 -#define ER_TABLE_CANT_HANDLE_FT 1214 -#define ER_CANNOT_ADD_FOREIGN 1215 -#define ER_NO_REFERENCED_ROW 1216 -#define ER_ROW_IS_REFERENCED 1217 -#define ER_CONNECT_TO_MASTER 1218 -#define ER_QUERY_ON_MASTER 1219 -#define ER_ERROR_WHEN_EXECUTING_COMMAND 1220 -#define ER_WRONG_USAGE 1221 -#define ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT 1222 -#define ER_CANT_UPDATE_WITH_READLOCK 1223 -#define ER_MIXING_NOT_ALLOWED 1224 -#define ER_DUP_ARGUMENT 1225 -#define ER_USER_LIMIT_REACHED 1226 -#define ER_SPECIFIC_ACCESS_DENIED_ERROR 1227 -#define ER_LOCAL_VARIABLE 1228 -#define ER_GLOBAL_VARIABLE 1229 -#define ER_NO_DEFAULT 1230 -#define ER_WRONG_VALUE_FOR_VAR 1231 -#define ER_WRONG_TYPE_FOR_VAR 1232 -#define ER_VAR_CANT_BE_READ 1233 -#define ER_CANT_USE_OPTION_HERE 1234 -#define ER_NOT_SUPPORTED_YET 1235 -#define ER_MASTER_FATAL_ERROR_READING_BINLOG 1236 -#define ER_SLAVE_IGNORED_TABLE 1237 -#define ER_INCORRECT_GLOBAL_LOCAL_VAR 1238 -#define ER_WRONG_FK_DEF 1239 -#define ER_KEY_REF_DO_NOT_MATCH_TABLE_REF 1240 -#define ER_OPERAND_COLUMNS 1241 -#define ER_SUBQUERY_NO_1_ROW 1242 -#define ER_UNKNOWN_STMT_HANDLER 1243 -#define ER_CORRUPT_HELP_DB 1244 -#define ER_CYCLIC_REFERENCE 1245 -#define ER_AUTO_CONVERT 1246 -#define ER_ILLEGAL_REFERENCE 1247 -#define ER_DERIVED_MUST_HAVE_ALIAS 1248 -#define ER_SELECT_REDUCED 1249 -#define ER_TABLENAME_NOT_ALLOWED_HERE 1250 -#define ER_NOT_SUPPORTED_AUTH_MODE 1251 -#define ER_SPATIAL_CANT_HAVE_NULL 1252 -#define ER_COLLATION_CHARSET_MISMATCH 1253 -#define ER_SLAVE_WAS_RUNNING 1254 -#define ER_SLAVE_WAS_NOT_RUNNING 1255 -#define ER_TOO_BIG_FOR_UNCOMPRESS 1256 -#define ER_ZLIB_Z_MEM_ERROR 1257 -#define ER_ZLIB_Z_BUF_ERROR 1258 -#define ER_ZLIB_Z_DATA_ERROR 1259 -#define ER_CUT_VALUE_GROUP_CONCAT 1260 -#define ER_WARN_TOO_FEW_RECORDS 1261 -#define ER_WARN_TOO_MANY_RECORDS 1262 -#define ER_WARN_NULL_TO_NOTNULL 1263 -#define ER_WARN_DATA_OUT_OF_RANGE 1264 -#define WARN_DATA_TRUNCATED 1265 -#define ER_WARN_USING_OTHER_HANDLER 1266 -#define ER_CANT_AGGREGATE_2COLLATIONS 1267 -#define ER_DROP_USER 1268 -#define ER_REVOKE_GRANTS 1269 -#define ER_CANT_AGGREGATE_3COLLATIONS 1270 -#define ER_CANT_AGGREGATE_NCOLLATIONS 1271 -#define ER_VARIABLE_IS_NOT_STRUCT 1272 -#define ER_UNKNOWN_COLLATION 1273 -#define ER_SLAVE_IGNORED_SSL_PARAMS 1274 -#define ER_SERVER_IS_IN_SECURE_AUTH_MODE 1275 -#define ER_WARN_FIELD_RESOLVED 1276 -#define ER_BAD_SLAVE_UNTIL_COND 1277 -#define ER_MISSING_SKIP_SLAVE 1278 -#define ER_UNTIL_COND_IGNORED 1279 -#define ER_WRONG_NAME_FOR_INDEX 1280 -#define ER_WRONG_NAME_FOR_CATALOG 1281 -#define ER_WARN_QC_RESIZE 1282 -#define ER_BAD_FT_COLUMN 1283 -#define ER_UNKNOWN_KEY_CACHE 1284 -#define ER_WARN_HOSTNAME_WONT_WORK 1285 -#define ER_UNKNOWN_STORAGE_ENGINE 1286 -#define ER_WARN_DEPRECATED_SYNTAX 1287 -#define ER_NON_UPDATABLE_TABLE 1288 -#define ER_FEATURE_DISABLED 1289 -#define ER_OPTION_PREVENTS_STATEMENT 1290 -#define ER_DUPLICATED_VALUE_IN_TYPE 1291 -#define ER_TRUNCATED_WRONG_VALUE 1292 -#define ER_TOO_MUCH_AUTO_TIMESTAMP_COLS 1293 -#define ER_INVALID_ON_UPDATE 1294 -#define ER_UNSUPPORTED_PS 1295 -#define ER_GET_ERRMSG 1296 -#define ER_GET_TEMPORARY_ERRMSG 1297 -#define ER_UNKNOWN_TIME_ZONE 1298 -#define ER_WARN_INVALID_TIMESTAMP 1299 -#define ER_INVALID_CHARACTER_STRING 1300 -#define ER_WARN_ALLOWED_PACKET_OVERFLOWED 1301 -#define ER_CONFLICTING_DECLARATIONS 1302 -#define ER_SP_NO_RECURSIVE_CREATE 1303 -#define ER_SP_ALREADY_EXISTS 1304 -#define ER_SP_DOES_NOT_EXIST 1305 -#define ER_SP_DROP_FAILED 1306 -#define ER_SP_STORE_FAILED 1307 -#define ER_SP_LILABEL_MISMATCH 1308 -#define ER_SP_LABEL_REDEFINE 1309 -#define ER_SP_LABEL_MISMATCH 1310 -#define ER_SP_UNINIT_VAR 1311 -#define ER_SP_BADSELECT 1312 -#define ER_SP_BADRETURN 1313 -#define ER_SP_BADSTATEMENT 1314 -#define ER_UPDATE_LOG_DEPRECATED_IGNORED 1315 -#define ER_UPDATE_LOG_DEPRECATED_TRANSLATED 1316 -#define ER_QUERY_INTERRUPTED 1317 -#define ER_SP_WRONG_NO_OF_ARGS 1318 -#define ER_SP_COND_MISMATCH 1319 -#define ER_SP_NORETURN 1320 -#define ER_SP_NORETURNEND 1321 -#define ER_SP_BAD_CURSOR_QUERY 1322 -#define ER_SP_BAD_CURSOR_SELECT 1323 -#define ER_SP_CURSOR_MISMATCH 1324 -#define ER_SP_CURSOR_ALREADY_OPEN 1325 -#define ER_SP_CURSOR_NOT_OPEN 1326 -#define ER_SP_UNDECLARED_VAR 1327 -#define ER_SP_WRONG_NO_OF_FETCH_ARGS 1328 -#define ER_SP_FETCH_NO_DATA 1329 -#define ER_SP_DUP_PARAM 1330 -#define ER_SP_DUP_VAR 1331 -#define ER_SP_DUP_COND 1332 -#define ER_SP_DUP_CURS 1333 -#define ER_SP_CANT_ALTER 1334 -#define ER_SP_SUBSELECT_NYI 1335 -#define ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG 1336 -#define ER_SP_VARCOND_AFTER_CURSHNDLR 1337 -#define ER_SP_CURSOR_AFTER_HANDLER 1338 -#define ER_SP_CASE_NOT_FOUND 1339 -#define ER_FPARSER_TOO_BIG_FILE 1340 -#define ER_FPARSER_BAD_HEADER 1341 -#define ER_FPARSER_EOF_IN_COMMENT 1342 -#define ER_FPARSER_ERROR_IN_PARAMETER 1343 -#define ER_FPARSER_EOF_IN_UNKNOWN_PARAMETER 1344 -#define ER_VIEW_NO_EXPLAIN 1345 -#define ER_FRM_UNKNOWN_TYPE 1346 -#define ER_WRONG_OBJECT 1347 -#define ER_NONUPDATEABLE_COLUMN 1348 -#define ER_VIEW_SELECT_DERIVED 1349 -#define ER_VIEW_SELECT_CLAUSE 1350 -#define ER_VIEW_SELECT_VARIABLE 1351 -#define ER_VIEW_SELECT_TMPTABLE 1352 -#define ER_VIEW_WRONG_LIST 1353 -#define ER_WARN_VIEW_MERGE 1354 -#define ER_WARN_VIEW_WITHOUT_KEY 1355 -#define ER_VIEW_INVALID 1356 -#define ER_SP_NO_DROP_SP 1357 -#define ER_SP_GOTO_IN_HNDLR 1358 -#define ER_TRG_ALREADY_EXISTS 1359 -#define ER_TRG_DOES_NOT_EXIST 1360 -#define ER_TRG_ON_VIEW_OR_TEMP_TABLE 1361 -#define ER_TRG_CANT_CHANGE_ROW 1362 -#define ER_TRG_NO_SUCH_ROW_IN_TRG 1363 -#define ER_NO_DEFAULT_FOR_FIELD 1364 -#define ER_DIVISION_BY_ZERO 1365 -#define ER_TRUNCATED_WRONG_VALUE_FOR_FIELD 1366 -#define ER_ILLEGAL_VALUE_FOR_TYPE 1367 -#define ER_VIEW_NONUPD_CHECK 1368 -#define ER_VIEW_CHECK_FAILED 1369 -#define ER_PROCACCESS_DENIED_ERROR 1370 -#define ER_RELAY_LOG_FAIL 1371 -#define ER_PASSWD_LENGTH 1372 -#define ER_UNKNOWN_TARGET_BINLOG 1373 -#define ER_IO_ERR_LOG_INDEX_READ 1374 -#define ER_BINLOG_PURGE_PROHIBITED 1375 -#define ER_FSEEK_FAIL 1376 -#define ER_BINLOG_PURGE_FATAL_ERR 1377 -#define ER_LOG_IN_USE 1378 -#define ER_LOG_PURGE_UNKNOWN_ERR 1379 -#define ER_RELAY_LOG_INIT 1380 -#define ER_NO_BINARY_LOGGING 1381 -#define ER_RESERVED_SYNTAX 1382 -#define ER_WSAS_FAILED 1383 -#define ER_DIFF_GROUPS_PROC 1384 -#define ER_NO_GROUP_FOR_PROC 1385 -#define ER_ORDER_WITH_PROC 1386 -#define ER_LOGGING_PROHIBIT_CHANGING_OF 1387 -#define ER_NO_FILE_MAPPING 1388 -#define ER_WRONG_MAGIC 1389 -#define ER_PS_MANY_PARAM 1390 -#define ER_KEY_PART_0 1391 -#define ER_VIEW_CHECKSUM 1392 -#define ER_VIEW_MULTIUPDATE 1393 -#define ER_VIEW_NO_INSERT_FIELD_LIST 1394 -#define ER_VIEW_DELETE_MERGE_VIEW 1395 -#define ER_CANNOT_USER 1396 -#define ER_XAER_NOTA 1397 -#define ER_XAER_INVAL 1398 -#define ER_XAER_RMFAIL 1399 -#define ER_XAER_OUTSIDE 1400 -#define ER_XAER_RMERR 1401 -#define ER_XA_RBROLLBACK 1402 -#define ER_NONEXISTING_PROC_GRANT 1403 -#define ER_PROC_AUTO_GRANT_FAIL 1404 -#define ER_PROC_AUTO_REVOKE_FAIL 1405 -#define ER_DATA_TOO_LONG 1406 -#define ER_SP_BAD_SQLSTATE 1407 -#define ER_STARTUP 1408 -#define ER_LOAD_FROM_FIXED_SIZE_ROWS_TO_VAR 1409 -#define ER_CANT_CREATE_USER_WITH_GRANT 1410 -#define ER_WRONG_VALUE_FOR_TYPE 1411 -#define ER_TABLE_DEF_CHANGED 1412 -#define ER_SP_DUP_HANDLER 1413 -#define ER_SP_NOT_VAR_ARG 1414 -#define ER_SP_NO_RETSET 1415 -#define ER_CANT_CREATE_GEOMETRY_OBJECT 1416 -#define ER_FAILED_ROUTINE_BREAK_BINLOG 1417 -#define ER_BINLOG_UNSAFE_ROUTINE 1418 -#define ER_BINLOG_CREATE_ROUTINE_NEED_SUPER 1419 -#define ER_EXEC_STMT_WITH_OPEN_CURSOR 1420 -#define ER_STMT_HAS_NO_OPEN_CURSOR 1421 -#define ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG 1422 -#define ER_NO_DEFAULT_FOR_VIEW_FIELD 1423 -#define ER_SP_NO_RECURSION 1424 -#define ER_TOO_BIG_SCALE 1425 -#define ER_TOO_BIG_PRECISION 1426 -#define ER_M_BIGGER_THAN_D 1427 -#define ER_WRONG_LOCK_OF_SYSTEM_TABLE 1428 -#define ER_CONNECT_TO_FOREIGN_DATA_SOURCE 1429 -#define ER_QUERY_ON_FOREIGN_DATA_SOURCE 1430 -#define ER_FOREIGN_DATA_SOURCE_DOESNT_EXIST 1431 -#define ER_FOREIGN_DATA_STRING_INVALID_CANT_CREATE 1432 -#define ER_FOREIGN_DATA_STRING_INVALID 1433 -#define ER_CANT_CREATE_FEDERATED_TABLE 1434 -#define ER_TRG_IN_WRONG_SCHEMA 1435 -#define ER_STACK_OVERRUN_NEED_MORE 1436 -#define ER_TOO_LONG_BODY 1437 -#define ER_WARN_CANT_DROP_DEFAULT_KEYCACHE 1438 -#define ER_TOO_BIG_DISPLAYWIDTH 1439 -#define ER_XAER_DUPID 1440 -#define ER_DATETIME_FUNCTION_OVERFLOW 1441 -#define ER_CANT_UPDATE_USED_TABLE_IN_SF_OR_TRG 1442 -#define ER_VIEW_PREVENT_UPDATE 1443 -#define ER_PS_NO_RECURSION 1444 -#define ER_SP_CANT_SET_AUTOCOMMIT 1445 -#define ER_MALFORMED_DEFINER 1446 -#define ER_VIEW_FRM_NO_USER 1447 -#define ER_VIEW_OTHER_USER 1448 -#define ER_NO_SUCH_USER 1449 -#define ER_FORBID_SCHEMA_CHANGE 1450 -#define ER_ROW_IS_REFERENCED_2 1451 -#define ER_NO_REFERENCED_ROW_2 1452 -#define ER_SP_BAD_VAR_SHADOW 1453 -#define ER_TRG_NO_DEFINER 1454 -#define ER_OLD_FILE_FORMAT 1455 -#define ER_SP_RECURSION_LIMIT 1456 -#define ER_SP_PROC_TABLE_CORRUPT 1457 -#define ER_SP_WRONG_NAME 1458 -#define ER_TABLE_NEEDS_UPGRADE 1459 -#define ER_SP_NO_AGGREGATE 1460 -#define ER_MAX_PREPARED_STMT_COUNT_REACHED 1461 -#define ER_VIEW_RECURSIVE 1462 -#define ER_NON_GROUPING_FIELD_USED 1463 -#define ER_TABLE_CANT_HANDLE_SPKEYS 1464 -#define ER_NO_TRIGGERS_ON_SYSTEM_SCHEMA 1465 -#define ER_REMOVED_SPACES 1466 -#define ER_AUTOINC_READ_FAILED 1467 -#define ER_USERNAME 1468 -#define ER_HOSTNAME 1469 -#define ER_WRONG_STRING_LENGTH 1470 -#define ER_NON_INSERTABLE_TABLE 1471 -#define ER_ADMIN_WRONG_MRG_TABLE 1472 -#define ER_TOO_HIGH_LEVEL_OF_NESTING_FOR_SELECT 1473 -#define ER_NAME_BECOMES_EMPTY 1474 -#define ER_AMBIGUOUS_FIELD_TERM 1475 -#define ER_FOREIGN_SERVER_EXISTS 1476 -#define ER_FOREIGN_SERVER_DOESNT_EXIST 1477 -#define ER_ILLEGAL_HA_CREATE_OPTION 1478 -#define ER_PARTITION_REQUIRES_VALUES_ERROR 1479 -#define ER_PARTITION_WRONG_VALUES_ERROR 1480 -#define ER_PARTITION_MAXVALUE_ERROR 1481 -#define ER_PARTITION_SUBPARTITION_ERROR 1482 -#define ER_PARTITION_SUBPART_MIX_ERROR 1483 -#define ER_PARTITION_WRONG_NO_PART_ERROR 1484 -#define ER_PARTITION_WRONG_NO_SUBPART_ERROR 1485 -#define ER_CONST_EXPR_IN_PARTITION_FUNC_ERROR 1486 -#define ER_NO_CONST_EXPR_IN_RANGE_OR_LIST_ERROR 1487 -#define ER_FIELD_NOT_FOUND_PART_ERROR 1488 -#define ER_LIST_OF_FIELDS_ONLY_IN_HASH_ERROR 1489 -#define ER_INCONSISTENT_PARTITION_INFO_ERROR 1490 -#define ER_PARTITION_FUNC_NOT_ALLOWED_ERROR 1491 -#define ER_PARTITIONS_MUST_BE_DEFINED_ERROR 1492 -#define ER_RANGE_NOT_INCREASING_ERROR 1493 -#define ER_INCONSISTENT_TYPE_OF_FUNCTIONS_ERROR 1494 -#define ER_MULTIPLE_DEF_CONST_IN_LIST_PART_ERROR 1495 -#define ER_PARTITION_ENTRY_ERROR 1496 -#define ER_MIX_HANDLER_ERROR 1497 -#define ER_PARTITION_NOT_DEFINED_ERROR 1498 -#define ER_TOO_MANY_PARTITIONS_ERROR 1499 -#define ER_SUBPARTITION_ERROR 1500 -#define ER_CANT_CREATE_HANDLER_FILE 1501 -#define ER_BLOB_FIELD_IN_PART_FUNC_ERROR 1502 -#define ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF 1503 -#define ER_NO_PARTS_ERROR 1504 -#define ER_PARTITION_MGMT_ON_NONPARTITIONED 1505 -#define ER_FOREIGN_KEY_ON_PARTITIONED 1506 -#define ER_DROP_PARTITION_NON_EXISTENT 1507 -#define ER_DROP_LAST_PARTITION 1508 -#define ER_COALESCE_ONLY_ON_HASH_PARTITION 1509 -#define ER_REORG_HASH_ONLY_ON_SAME_NO 1510 -#define ER_REORG_NO_PARAM_ERROR 1511 -#define ER_ONLY_ON_RANGE_LIST_PARTITION 1512 -#define ER_ADD_PARTITION_SUBPART_ERROR 1513 -#define ER_ADD_PARTITION_NO_NEW_PARTITION 1514 -#define ER_COALESCE_PARTITION_NO_PARTITION 1515 -#define ER_REORG_PARTITION_NOT_EXIST 1516 -#define ER_SAME_NAME_PARTITION 1517 -#define ER_NO_BINLOG_ERROR 1518 -#define ER_CONSECUTIVE_REORG_PARTITIONS 1519 -#define ER_REORG_OUTSIDE_RANGE 1520 -#define ER_PARTITION_FUNCTION_FAILURE 1521 -#define ER_PART_STATE_ERROR 1522 -#define ER_LIMITED_PART_RANGE 1523 -#define ER_PLUGIN_IS_NOT_LOADED 1524 -#define ER_WRONG_VALUE 1525 -#define ER_NO_PARTITION_FOR_GIVEN_VALUE 1526 -#define ER_FILEGROUP_OPTION_ONLY_ONCE 1527 -#define ER_CREATE_FILEGROUP_FAILED 1528 -#define ER_DROP_FILEGROUP_FAILED 1529 -#define ER_TABLESPACE_AUTO_EXTEND_ERROR 1530 -#define ER_WRONG_SIZE_NUMBER 1531 -#define ER_SIZE_OVERFLOW_ERROR 1532 -#define ER_ALTER_FILEGROUP_FAILED 1533 -#define ER_BINLOG_ROW_LOGGING_FAILED 1534 -#define ER_BINLOG_ROW_WRONG_TABLE_DEF 1535 -#define ER_BINLOG_ROW_RBR_TO_SBR 1536 -#define ER_EVENT_ALREADY_EXISTS 1537 -#define ER_EVENT_STORE_FAILED 1538 -#define ER_EVENT_DOES_NOT_EXIST 1539 -#define ER_EVENT_CANT_ALTER 1540 -#define ER_EVENT_DROP_FAILED 1541 -#define ER_EVENT_INTERVAL_NOT_POSITIVE_OR_TOO_BIG 1542 -#define ER_EVENT_ENDS_BEFORE_STARTS 1543 -#define ER_EVENT_EXEC_TIME_IN_THE_PAST 1544 -#define ER_EVENT_OPEN_TABLE_FAILED 1545 -#define ER_EVENT_NEITHER_M_EXPR_NOR_M_AT 1546 -#define ER_COL_COUNT_DOESNT_MATCH_CORRUPTED 1547 -#define ER_CANNOT_LOAD_FROM_TABLE 1548 -#define ER_EVENT_CANNOT_DELETE 1549 -#define ER_EVENT_COMPILE_ERROR 1550 -#define ER_EVENT_SAME_NAME 1551 -#define ER_EVENT_DATA_TOO_LONG 1552 -#define ER_DROP_INDEX_FK 1553 -#define ER_WARN_DEPRECATED_SYNTAX_WITH_VER 1554 -#define ER_CANT_WRITE_LOCK_LOG_TABLE 1555 -#define ER_CANT_LOCK_LOG_TABLE 1556 -#define ER_FOREIGN_DUPLICATE_KEY 1557 -#define ER_COL_COUNT_DOESNT_MATCH_PLEASE_UPDATE 1558 -#define ER_TEMP_TABLE_PREVENTS_SWITCH_OUT_OF_RBR 1559 -#define ER_STORED_FUNCTION_PREVENTS_SWITCH_BINLOG_FORMAT 1560 -#define ER_NDB_CANT_SWITCH_BINLOG_FORMAT 1561 -#define ER_PARTITION_NO_TEMPORARY 1562 -#define ER_PARTITION_CONST_DOMAIN_ERROR 1563 -#define ER_PARTITION_FUNCTION_IS_NOT_ALLOWED 1564 -#define ER_DDL_LOG_ERROR 1565 -#define ER_NULL_IN_VALUES_LESS_THAN 1566 -#define ER_WRONG_PARTITION_NAME 1567 -#define ER_CANT_CHANGE_TX_ISOLATION 1568 -#define ER_DUP_ENTRY_AUTOINCREMENT_CASE 1569 -#define ER_EVENT_MODIFY_QUEUE_ERROR 1570 -#define ER_EVENT_SET_VAR_ERROR 1571 -#define ER_PARTITION_MERGE_ERROR 1572 -#define ER_CANT_ACTIVATE_LOG 1573 -#define ER_RBR_NOT_AVAILABLE 1574 -#define ER_BASE64_DECODE_ERROR 1575 -#define ER_EVENT_RECURSION_FORBIDDEN 1576 -#define ER_EVENTS_DB_ERROR 1577 -#define ER_ONLY_INTEGERS_ALLOWED 1578 -#define ER_UNSUPORTED_LOG_ENGINE 1579 -#define ER_BAD_LOG_STATEMENT 1580 -#define ER_CANT_RENAME_LOG_TABLE 1581 -#define ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT 1582 -#define ER_WRONG_PARAMETERS_TO_NATIVE_FCT 1583 -#define ER_WRONG_PARAMETERS_TO_STORED_FCT 1584 -#define ER_NATIVE_FCT_NAME_COLLISION 1585 -#define ER_DUP_ENTRY_WITH_KEY_NAME 1586 -#define ER_BINLOG_PURGE_EMFILE 1587 -#define ER_EVENT_CANNOT_CREATE_IN_THE_PAST 1588 -#define ER_EVENT_CANNOT_ALTER_IN_THE_PAST 1589 -#define ER_SLAVE_INCIDENT 1590 -#define ER_NO_PARTITION_FOR_GIVEN_VALUE_SILENT 1591 -#define ER_BINLOG_UNSAFE_STATEMENT 1592 -#define ER_SLAVE_FATAL_ERROR 1593 -#define ER_SLAVE_RELAY_LOG_READ_FAILURE 1594 -#define ER_SLAVE_RELAY_LOG_WRITE_FAILURE 1595 -#define ER_SLAVE_CREATE_EVENT_FAILURE 1596 -#define ER_SLAVE_MASTER_COM_FAILURE 1597 -#define ER_BINLOG_LOGGING_IMPOSSIBLE 1598 -#define ER_VIEW_NO_CREATION_CTX 1599 -#define ER_VIEW_INVALID_CREATION_CTX 1600 -#define ER_SR_INVALID_CREATION_CTX 1601 -#define ER_TRG_CORRUPTED_FILE 1602 -#define ER_TRG_NO_CREATION_CTX 1603 -#define ER_TRG_INVALID_CREATION_CTX 1604 -#define ER_EVENT_INVALID_CREATION_CTX 1605 -#define ER_TRG_CANT_OPEN_TABLE 1606 -#define ER_CANT_CREATE_SROUTINE 1607 -#define ER_SLAVE_AMBIGOUS_EXEC_MODE 1608 -#define ER_NO_FORMAT_DESCRIPTION_EVENT_BEFORE_BINLOG_STATEMENT 1609 -#define ER_SLAVE_CORRUPT_EVENT 1610 -#define ER_LOAD_DATA_INVALID_COLUMN 1611 -#define ER_LOG_PURGE_NO_FILE 1612 -#define ER_NEED_REPREPARE 1613 -#define ER_DELAYED_NOT_SUPPORTED 1614 -#define ER_WARN_AUTO_CONVERT_LOCK 1615 -#define ER_NO_AUTO_CONVERT_LOCK_STRICT 1616 -#define ER_NO_AUTO_CONVERT_LOCK_TRANSACTION 1617 -#define ER_NO_STORAGE_ENGINE 1618 -#define ER_BACKUP_BACKUP_START 1619 -#define ER_BACKUP_BACKUP_DONE 1620 -#define ER_BACKUP_RESTORE_START 1621 -#define ER_BACKUP_RESTORE_DONE 1622 -#define ER_BACKUP_NOTHING_TO_BACKUP 1623 -#define ER_BACKUP_CANNOT_INCLUDE_DB 1624 -#define ER_BACKUP_BACKUP 1625 -#define ER_BACKUP_RESTORE 1626 -#define ER_BACKUP_RUNNING 1627 -#define ER_BACKUP_BACKUP_PREPARE 1628 -#define ER_BACKUP_RESTORE_PREPARE 1629 -#define ER_BACKUP_INVALID_LOC 1630 -#define ER_BACKUP_READ_LOC 1631 -#define ER_BACKUP_WRITE_LOC 1632 -#define ER_BACKUP_LIST_DBS 1633 -#define ER_BACKUP_LIST_TABLES 1634 -#define ER_BACKUP_LIST_DB_TABLES 1635 -#define ER_BACKUP_SKIP_VIEW 1636 -#define ER_BACKUP_NO_ENGINE 1637 -#define ER_BACKUP_TABLE_OPEN 1638 -#define ER_BACKUP_READ_HEADER 1639 -#define ER_BACKUP_WRITE_HEADER 1640 -#define ER_BACKUP_NO_BACKUP_DRIVER 1641 -#define ER_BACKUP_NOT_ACCEPTED 1642 -#define ER_BACKUP_CREATE_BACKUP_DRIVER 1643 -#define ER_BACKUP_CREATE_RESTORE_DRIVER 1644 -#define ER_BACKUP_TOO_MANY_IMAGES 1645 -#define ER_BACKUP_WRITE_META 1646 -#define ER_BACKUP_READ_META 1647 -#define ER_BACKUP_CREATE_META 1648 -#define ER_BACKUP_GET_BUF 1649 -#define ER_BACKUP_WRITE_DATA 1650 -#define ER_BACKUP_READ_DATA 1651 -#define ER_BACKUP_NEXT_CHUNK 1652 -#define ER_BACKUP_INIT_BACKUP_DRIVER 1653 -#define ER_BACKUP_INIT_RESTORE_DRIVER 1654 -#define ER_BACKUP_STOP_BACKUP_DRIVER 1655 -#define ER_BACKUP_STOP_RESTORE_DRIVERS 1656 -#define ER_BACKUP_PREPARE_DRIVER 1657 -#define ER_BACKUP_CREATE_VP 1658 -#define ER_BACKUP_UNLOCK_DRIVER 1659 -#define ER_BACKUP_CANCEL_BACKUP 1660 -#define ER_BACKUP_CANCEL_RESTORE 1661 -#define ER_BACKUP_GET_DATA 1662 -#define ER_BACKUP_SEND_DATA 1663 -#define ER_BACKUP_SEND_DATA_RETRY 1664 -#define ER_BACKUP_OPEN_TABLES 1665 -#define ER_BACKUP_THREAD_INIT 1666 -#define ER_BACKUP_PROGRESS_TABLES 1667 -#define ER_TABLESPACE_EXIST 1668 -#define ER_NO_SUCH_TABLESPACE 1669 -#define ER_SLAVE_HEARTBEAT_FAILURE 1670 -#define ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE 1671 -#define ER_BACKUP_CANT_FIND_SE 1672 -#define ER_BACKUP_NO_NATIVE_BE 1673 -#define ER_BACKUP_UNKNOWN_BE 1674 -#define ER_BACKUP_WRONG_TABLE_BE 1675 -#define ER_BACKUP_CANT_RESTORE_DB 1676 -#define ER_BACKUP_CANT_RESTORE_TABLE 1677 -#define ER_BACKUP_CANT_RESTORE_VIEW 1678 -#define ER_BACKUP_CANT_RESTORE_SROUT 1679 -#define ER_BACKUP_CANT_RESTORE_EVENT 1680 -#define ER_BACKUP_CANT_RESTORE_TRIGGER 1681 -#define ER_BACKUP_CATALOG_ADD_DB 1682 -#define ER_BACKUP_CATALOG_ADD_TABLE 1683 -#define ER_BACKUP_CATALOG_ADD_VIEW 1684 -#define ER_BACKUP_CATALOG_ADD_SROUT 1685 -#define ER_BACKUP_CATALOG_ADD_EVENT 1686 -#define ER_BACKUP_CATALOG_ADD_TRIGGER 1687 -#define ER_BACKUP_UNKNOWN_OBJECT 1688 -#define ER_BACKUP_UNKNOWN_OBJECT_TYPE 1689 -#define ER_BACKUP_OPEN_WR 1690 -#define ER_BACKUP_OPEN_RD 1691 -#define ER_BACKUP_BAD_MAGIC 1692 -#define ER_BACKUP_CONTEXT_CREATE 1693 -#define ER_BACKUP_CONTEXT_REMOVE 1694 -#define ER_BAD_PATH 1695 -#define ER_DDL_BLOCK 1696 -#define ER_BACKUP_LOGGER_INIT 1697 -#define ER_BACKUP_WRITE_SUMMARY 1698 -#define ER_BACKUP_READ_SUMMARY 1699 -#define ER_BACKUP_GET_META_DB 1700 -#define ER_BACKUP_GET_META_TABLE 1701 -#define ER_BACKUP_GET_META_VIEW 1702 -#define ER_BACKUP_GET_META_SROUT 1703 -#define ER_BACKUP_GET_META_EVENT 1704 -#define ER_BACKUP_GET_META_TRIGGER 1705 -#define ER_BACKUP_CREATE_BE 1706 -#define ER_BACKUP_LIST_PERDB 1707 -#define ER_BACKUP_LIST_DB_VIEWS 1708 -#define ER_BACKUP_LIST_DB_SROUT 1709 -#define ER_BACKUP_LIST_DB_EVENTS 1710 -#define ER_BACKUP_LIST_DB_TRIGGERS 1711 -#define ER_BACKUP_LOG_WRITE_ERROR 1712 -#define ER_TABLESPACE_NOT_EMPTY 1713 -#define ER_BACKUP_CAT_ENUM 1714 -#define ER_BACKUP_CANT_RESTORE_TS 1715 -#define ER_BACKUP_TS_CHANGE 1716 -#define ER_BACKUP_GET_META_TS 1717 -#define ER_TABLESPACE_DATAFILE_EXIST 1718 -#define ER_BACKUP_CATALOG_ADD_TS 1719 -#define ER_DEBUG_SYNC_TIMEOUT 1720 -#define ER_DEBUG_SYNC_HIT_LIMIT 1721 -#define ER_BACKUP_FAILED_TO_INIT_COMPRESSION 1722 -#define ER_BACKUP_OBTAIN_NAME_LOCK_FAILED 1723 -#define ER_BACKUP_RELEASE_NAME_LOCK_FAILED 1724 -#define ER_BACKUP_BACKUPDIR 1725 -#define ER_ERROR_LAST 1725 diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/mysys/rijndael.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/mysys/rijndael.h deleted file mode 100644 index 89963a8..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/mysys/rijndael.h +++ /dev/null @@ -1,41 +0,0 @@ -/* Copyright (C) 2002 MySQL AB - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - - -/* - rijndael-alg-fst.h - - @version 3.0 (December 2000) - Optimised ANSI C code for the Rijndael cipher (now AES) - @author Vincent Rijmen - @author Antoon Bosselaers - @author Paulo Barreto - - This code is hereby placed in the public domain. - Modified by Peter Zaitsev to fit MySQL coding style. - */ - -#define AES_MAXKC (256/32) -#define AES_MAXKB (256/8) -#define AES_MAXNR 14 - -int rijndaelKeySetupEnc(uint32 rk[/*4*(Nr + 1)*/], const uint8 cipherKey[], - int keyBits); -int rijndaelKeySetupDec(uint32 rk[/*4*(Nr + 1)*/], const uint8 cipherKey[], - int keyBits); -void rijndaelEncrypt(const uint32 rk[/*4*(Nr + 1)*/], int Nr, - const uint8 pt[16], uint8 ct[16]); -void rijndaelDecrypt(const uint32 rk[/*4*(Nr + 1)*/], int Nr, - const uint8 ct[16], uint8 pt[16]); diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/mysys_err.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/mysys_err.h deleted file mode 100644 index 7167395..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/mysys_err.h +++ /dev/null @@ -1,90 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef _mysys_err_h -#define _mysys_err_h -#ifdef __cplusplus -extern "C" { -#endif - -#define GLOBERRS (EE_ERROR_LAST - EE_ERROR_FIRST + 1) /* Nr of global errors */ -#define EE(X) (globerrs[(X) - EE_ERROR_FIRST]) - -extern const char * NEAR globerrs[]; /* my_error_messages is here */ - -/* Error message numbers in global map */ -/* - Do not add error numbers before EE_ERROR_FIRST. - If necessary to add lower numbers, change EE_ERROR_FIRST accordingly. - - We start with error 1 to not confuse peoples with 'error 0' -*/ - -#define EE_ERROR_FIRST 1 /*Copy first error nr.*/ -#define EE_CANTCREATEFILE 1 -#define EE_READ 2 -#define EE_WRITE 3 -#define EE_BADCLOSE 4 -#define EE_OUTOFMEMORY 5 -#define EE_DELETE 6 -#define EE_LINK 7 -#define EE_EOFERR 9 -#define EE_CANTLOCK 10 -#define EE_CANTUNLOCK 11 -#define EE_DIR 12 -#define EE_STAT 13 -#define EE_CANT_CHSIZE 14 -#define EE_CANT_OPEN_STREAM 15 -#define EE_GETWD 16 -#define EE_SETWD 17 -#define EE_LINK_WARNING 18 -#define EE_OPEN_WARNING 19 -#define EE_DISK_FULL 20 -#define EE_CANT_MKDIR 21 -#define EE_UNKNOWN_CHARSET 22 -#define EE_OUT_OF_FILERESOURCES 23 -#define EE_CANT_READLINK 24 -#define EE_CANT_SYMLINK 25 -#define EE_REALPATH 26 -#define EE_SYNC 27 -#define EE_UNKNOWN_COLLATION 28 -#define EE_FILENOTFOUND 29 -#define EE_FILE_NOT_CLOSED 30 -#define EE_CANT_CHMOD 31 -#define EE_ERROR_LAST 31 /* Copy last error nr */ -/* Add error numbers before EE_ERROR_LAST and change it accordingly. */ - - /* exit codes for all MySQL programs */ - -#define EXIT_UNSPECIFIED_ERROR 1 -#define EXIT_UNKNOWN_OPTION 2 -#define EXIT_AMBIGUOUS_OPTION 3 -#define EXIT_NO_ARGUMENT_ALLOWED 4 -#define EXIT_ARGUMENT_REQUIRED 5 -#define EXIT_VAR_PREFIX_NOT_UNIQUE 6 -#define EXIT_UNKNOWN_VARIABLE 7 -#define EXIT_OUT_OF_MEMORY 8 -#define EXIT_UNKNOWN_SUFFIX 9 -#define EXIT_NO_PTR_TO_VARIABLE 10 -#define EXIT_CANNOT_CONNECT_TO_SERVICE 11 -#define EXIT_OPTION_DISABLED 12 -#define EXIT_ARGUMENT_INVALID 13 - - -#ifdef __cplusplus -} -#endif -#endif - diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/queues.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/queues.h deleted file mode 100644 index d01b73b..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/queues.h +++ /dev/null @@ -1,72 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - Code for generell handling of priority Queues. - Implemention of queues from "Algoritms in C" by Robert Sedgewick. - Copyright Monty Program KB. - By monty. -*/ - -#ifndef _queues_h -#define _queues_h -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct st_queue { - uchar **root; - void *first_cmp_arg; - uint elements; - uint max_elements; - uint offset_to_key; /* compare is done on element+offset */ - int max_at_top; /* Normally 1, set to -1 if queue_top gives max */ - int (*compare)(void *, uchar *,uchar *); - uint auto_extent; -} QUEUE; - -#define queue_top(queue) ((queue)->root[1]) -#define queue_element(queue,index) ((queue)->root[index+1]) -#define queue_end(queue) ((queue)->root[(queue)->elements]) -#define queue_replaced(queue) _downheap(queue,1) -#define queue_set_cmp_arg(queue, set_arg) (queue)->first_cmp_arg= set_arg -#define queue_set_max_at_top(queue, set_arg) \ - (queue)->max_at_top= set_arg ? -1 : 1 -typedef int (*queue_compare)(void *,uchar *, uchar *); - -int init_queue(QUEUE *queue,uint max_elements,uint offset_to_key, - pbool max_at_top, queue_compare compare, - void *first_cmp_arg); -int init_queue_ex(QUEUE *queue,uint max_elements,uint offset_to_key, - pbool max_at_top, queue_compare compare, - void *first_cmp_arg, uint auto_extent); -int reinit_queue(QUEUE *queue,uint max_elements,uint offset_to_key, - pbool max_at_top, queue_compare compare, - void *first_cmp_arg); -int resize_queue(QUEUE *queue, uint max_elements); -void delete_queue(QUEUE *queue); -void queue_insert(QUEUE *queue,uchar *element); -int queue_insert_safe(QUEUE *queue, uchar *element); -uchar *queue_remove(QUEUE *queue,uint idx); -#define queue_remove_all(queue) { (queue)->elements= 0; } -#define queue_is_full(queue) (queue->elements == queue->max_elements) -void _downheap(QUEUE *queue,uint idx); -void queue_fix(QUEUE *queue); -#define is_queue_inited(queue) ((queue)->root != 0) - -#ifdef __cplusplus -} -#endif -#endif diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/service_versions.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/service_versions.h deleted file mode 100644 index 114957c..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/service_versions.h +++ /dev/null @@ -1,24 +0,0 @@ -/* Copyright (C) 2009 Sun Microsystems, Inc. - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifdef _WIN32 -#define SERVICE_VERSION __declspec(dllexport) void * -#else -#define SERVICE_VERSION void * -#endif - -#define VERSION_my_snprintf 0x0100 -#define VERSION_thd_alloc 0x0100 - diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/sha1.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/sha1.h deleted file mode 100644 index e476456..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/sha1.h +++ /dev/null @@ -1,66 +0,0 @@ -/* Copyright (C) 2002, 2006 MySQL AB - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - This is the header file for code which implements the Secure - Hashing Algorithm 1 as defined in FIPS PUB 180-1 published - April 17, 1995. - - Many of the variable names in this code, especially the - single character names, were used because those were the names - used in the publication. - - Please read the file sha1.c for more information. - - Modified 2002 by Peter Zaitsev to better follow MySQL standards -*/ - - -enum sha_result_codes -{ - SHA_SUCCESS = 0, - SHA_NULL, /* Null pointer parameter */ - SHA_INPUT_TOO_LONG, /* input data too long */ - SHA_STATE_ERROR /* called Input after Result */ -}; - -#define SHA1_HASH_SIZE 20 /* Hash size in bytes */ - -/* - This structure will hold context information for the SHA-1 - hashing operation -*/ - -typedef struct SHA1_CONTEXT -{ - ulonglong Length; /* Message length in bits */ - uint32 Intermediate_Hash[SHA1_HASH_SIZE/4]; /* Message Digest */ - int Computed; /* Is the digest computed? */ - int Corrupted; /* Is the message digest corrupted? */ - int16 Message_Block_Index; /* Index into message block array */ - uint8 Message_Block[64]; /* 512-bit message blocks */ -} SHA1_CONTEXT; - -/* - Function Prototypes -*/ - -C_MODE_START - -int mysql_sha1_reset(SHA1_CONTEXT*); -int mysql_sha1_input(SHA1_CONTEXT*, const uint8 *, unsigned int); -int mysql_sha1_result(SHA1_CONTEXT* , uint8 Message_Digest[SHA1_HASH_SIZE]); - -C_MODE_END diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/sha2.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/sha2.h deleted file mode 100644 index 49dbac5..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/sha2.h +++ /dev/null @@ -1,72 +0,0 @@ -/* Copyright (C) 2007 MySQL AB - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef included_sha2_h -#define included_sha2_h - -#include - -#if defined(HAVE_YASSL) || defined(HAVE_OPENSSL) - -# ifdef HAVE_STDDEF_H -# include -# endif - -# ifndef HAVE_YASSL -# include - -# else - -#include "../extra/yassl/taocrypt/include/sha.hpp" - -# ifdef __cplusplus -extern "C" { -# endif - -#ifndef SHA512_DIGEST_LENGTH -#define SHA512_DIGEST_LENGTH TaoCrypt::SHA512::DIGEST_SIZE -#endif - -#ifndef SHA384_DIGEST_LENGTH -#define SHA384_DIGEST_LENGTH TaoCrypt::SHA384::DIGEST_SIZE -#endif - -#ifndef SHA256_DIGEST_LENGTH -#define SHA256_DIGEST_LENGTH TaoCrypt::SHA256::DIGEST_SIZE -#endif - -#ifndef SHA224_DIGEST_LENGTH -#define SHA224_DIGEST_LENGTH TaoCrypt::SHA224::DIGEST_SIZE -#endif - -#define GEN_YASSL_SHA2_BRIDGE(size) \ -unsigned char* SHA##size(const unsigned char *input_ptr, size_t input_length, \ - char unsigned *output_ptr); - -GEN_YASSL_SHA2_BRIDGE(512); -GEN_YASSL_SHA2_BRIDGE(384); -GEN_YASSL_SHA2_BRIDGE(256); -GEN_YASSL_SHA2_BRIDGE(224); - -#undef GEN_YASSL_SHA2_BRIDGE - -# ifdef __cplusplus -} -# endif - -# endif /* HAVE_YASSL */ - -#endif /* HAVE_OPENSSL || HAVE_YASSL */ -#endif /* included_sha2_h */ diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/sql_common.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/sql_common.h deleted file mode 100644 index 9e43d07..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/sql_common.h +++ /dev/null @@ -1,50 +0,0 @@ -/* Copyright (C) 2003-2004, 2006 MySQL AB - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - - -extern const char *unknown_sqlstate; -extern const char *cant_connect_sqlstate; -extern const char *not_error_sqlstate; - -#ifdef __cplusplus -extern "C" { -#endif - -extern CHARSET_INFO *default_client_charset_info; -MYSQL_FIELD *unpack_fields(MYSQL_DATA *data,MEM_ROOT *alloc,uint fields, - my_bool default_value, uint server_capabilities); -void free_rows(MYSQL_DATA *cur); -void free_old_query(MYSQL *mysql); -void end_server(MYSQL *mysql); -my_bool mysql_reconnect(MYSQL *mysql); -void mysql_read_default_options(struct st_mysql_options *options, - const char *filename,const char *group); -my_bool -cli_advanced_command(MYSQL *mysql, enum enum_server_command command, - const unsigned char *header, ulong header_length, - const unsigned char *arg, ulong arg_length, - my_bool skip_check, MYSQL_STMT *stmt); -unsigned long cli_safe_read(MYSQL *mysql); -void net_clear_error(NET *net); -void set_stmt_errmsg(MYSQL_STMT *stmt, NET *net); -void set_stmt_error(MYSQL_STMT *stmt, int errcode, const char *sqlstate, - const char *err); -void set_mysql_error(MYSQL *mysql, int errcode, const char *sqlstate); -#ifdef __cplusplus -} -#endif - -#define protocol_41(A) ((A)->server_capabilities & CLIENT_PROTOCOL_41) - diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/sslopt-case.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/sslopt-case.h deleted file mode 100644 index ee6c83c..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/sslopt-case.h +++ /dev/null @@ -1,28 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#if defined(HAVE_OPENSSL) && !defined(EMBEDDED_LIBRARY) - case OPT_SSL_KEY: - case OPT_SSL_CERT: - case OPT_SSL_CA: - case OPT_SSL_CAPATH: - case OPT_SSL_CIPHER: - /* - Enable use of SSL if we are using any ssl option - One can disable SSL later by using --skip-ssl or --ssl=0 - */ - opt_use_ssl= 1; - break; -#endif diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/sslopt-longopts.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/sslopt-longopts.h deleted file mode 100644 index 06422e5..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/sslopt-longopts.h +++ /dev/null @@ -1,45 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#if defined(HAVE_OPENSSL) && !defined(EMBEDDED_LIBRARY) - - {"ssl", OPT_SSL_SSL, - "Enable SSL for connection (automatically enabled with other flags). Disable with --skip-ssl.", - (uchar **) &opt_use_ssl, (uchar **) &opt_use_ssl, 0, GET_BOOL, NO_ARG, 0, 0, 0, - 0, 0, 0}, - {"ssl-ca", OPT_SSL_CA, - "CA file in PEM format (check OpenSSL docs, implies --ssl).", - (uchar **) &opt_ssl_ca, (uchar **) &opt_ssl_ca, 0, GET_STR, REQUIRED_ARG, - 0, 0, 0, 0, 0, 0}, - {"ssl-capath", OPT_SSL_CAPATH, - "CA directory (check OpenSSL docs, implies --ssl).", - (uchar **) &opt_ssl_capath, (uchar **) &opt_ssl_capath, 0, GET_STR, REQUIRED_ARG, - 0, 0, 0, 0, 0, 0}, - {"ssl-cert", OPT_SSL_CERT, "X509 cert in PEM format (implies --ssl).", - (uchar **) &opt_ssl_cert, (uchar **) &opt_ssl_cert, 0, GET_STR, REQUIRED_ARG, - 0, 0, 0, 0, 0, 0}, - {"ssl-cipher", OPT_SSL_CIPHER, "SSL cipher to use (implies --ssl).", - (uchar **) &opt_ssl_cipher, (uchar **) &opt_ssl_cipher, 0, GET_STR, REQUIRED_ARG, - 0, 0, 0, 0, 0, 0}, - {"ssl-key", OPT_SSL_KEY, "X509 key in PEM format (implies --ssl).", - (uchar **) &opt_ssl_key, (uchar **) &opt_ssl_key, 0, GET_STR, REQUIRED_ARG, - 0, 0, 0, 0, 0, 0}, -#ifdef MYSQL_CLIENT - {"ssl-verify-server-cert", OPT_SSL_VERIFY_SERVER_CERT, - "Verify server's \"Common Name\" in its cert against hostname used when connecting. This option is disabled by default.", - (uchar **) &opt_ssl_verify_server_cert, (uchar **) &opt_ssl_verify_server_cert, - 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, -#endif -#endif /* HAVE_OPENSSL */ diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/sslopt-vars.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/sslopt-vars.h deleted file mode 100644 index 9d25c33..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/sslopt-vars.h +++ /dev/null @@ -1,31 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#if defined(HAVE_OPENSSL) && !defined(EMBEDDED_LIBRARY) -#ifdef SSL_VARS_NOT_STATIC -#define SSL_STATIC -#else -#define SSL_STATIC static -#endif -SSL_STATIC my_bool opt_use_ssl = 0; -SSL_STATIC char *opt_ssl_ca = 0; -SSL_STATIC char *opt_ssl_capath = 0; -SSL_STATIC char *opt_ssl_cert = 0; -SSL_STATIC char *opt_ssl_cipher = 0; -SSL_STATIC char *opt_ssl_key = 0; -#ifdef MYSQL_CLIENT -SSL_STATIC my_bool opt_ssl_verify_server_cert= 0; -#endif -#endif diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/t_ctype.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/t_ctype.h deleted file mode 100644 index 1560001..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/t_ctype.h +++ /dev/null @@ -1,254 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - Copyright (C) 1998, 1999 by Pruet Boonma, all rights reserved. - Copyright (C) 1998 by Theppitak Karoonboonyanan, all rights reserved. - Permission to use, copy, modify, distribute and sell this software - and its documentation for any purpose is hereby granted without fee, - provided that the above copyright notice appear in all copies. - Smaphan Raruenrom and Pruet Boonma makes no representations about - the suitability of this software for any purpose. It is provided - "as is" without express or implied warranty. -*/ - -/* LC_COLLATE category + Level information */ - -#ifndef _t_ctype_h -#define _t_ctype_h - -#define TOT_LEVELS 5 -#define LAST_LEVEL 4 /* TOT_LEVELS - 1 */ - -#define IGNORE 0 - - -/* level 1 symbols & order */ -enum l1_symbols { - L1_08 = TOT_LEVELS, - L1_18, - L1_28, - L1_38, - L1_48, - L1_58, - L1_68, - L1_78, - L1_88, - L1_98, - L1_A8, - L1_B8, - L1_C8, - L1_D8, - L1_E8, - L1_F8, - L1_G8, - L1_H8, - L1_I8, - L1_J8, - L1_K8, - L1_L8, - L1_M8, - L1_N8, - L1_O8, - L1_P8, - L1_Q8, - L1_R8, - L1_S8, - L1_T8, - L1_U8, - L1_V8, - L1_W8, - L1_X8, - L1_Y8, - L1_Z8, - L1_KO_KAI, - L1_KHO_KHAI, - L1_KHO_KHUAT, - L1_KHO_KHWAI, - L1_KHO_KHON, - L1_KHO_RAKHANG, - L1_NGO_NGU, - L1_CHO_CHAN, - L1_CHO_CHING, - L1_CHO_CHANG, - L1_SO_SO, - L1_CHO_CHOE, - L1_YO_YING, - L1_DO_CHADA, - L1_TO_PATAK, - L1_THO_THAN, - L1_THO_NANGMONTHO, - L1_THO_PHUTHAO, - L1_NO_NEN, - L1_DO_DEK, - L1_TO_TAO, - L1_THO_THUNG, - L1_THO_THAHAN, - L1_THO_THONG, - L1_NO_NU, - L1_BO_BAIMAI, - L1_PO_PLA, - L1_PHO_PHUNG, - L1_FO_FA, - L1_PHO_PHAN, - L1_FO_FAN, - L1_PHO_SAMPHAO, - L1_MO_MA, - L1_YO_YAK, - L1_RO_RUA, - L1_RU, - L1_LO_LING, - L1_LU, - L1_WO_WAEN, - L1_SO_SALA, - L1_SO_RUSI, - L1_SO_SUA, - L1_HO_HIP, - L1_LO_CHULA, - L1_O_ANG, - L1_HO_NOKHUK, - L1_NKHIT, - L1_SARA_A, - L1_MAI_HAN_AKAT, - L1_SARA_AA, - L1_SARA_AM, - L1_SARA_I, - L1_SARA_II, - L1_SARA_UE, - L1_SARA_UEE, - L1_SARA_U, - L1_SARA_UU, - L1_SARA_E, - L1_SARA_AE, - L1_SARA_O, - L1_SARA_AI_MAIMUAN, - L1_SARA_AI_MAIMALAI -}; - -/* level 2 symbols & order */ -enum l2_symbols { - L2_BLANK = TOT_LEVELS, - L2_THAII, - L2_YAMAK, - L2_PINTHU, - L2_GARAN, - L2_TYKHU, - L2_TONE1, - L2_TONE2, - L2_TONE3, - L2_TONE4 -}; - -/* level 3 symbols & order */ -enum l3_symbols { - L3_BLANK = TOT_LEVELS, - L3_SPACE, - L3_NB_SACE, - L3_LOW_LINE, - L3_HYPHEN, - L3_COMMA, - L3_SEMICOLON, - L3_COLON, - L3_EXCLAMATION, - L3_QUESTION, - L3_SOLIDUS, - L3_FULL_STOP, - L3_PAIYAN_NOI, - L3_MAI_YAMOK, - L3_GRAVE, - L3_CIRCUMFLEX, - L3_TILDE, - L3_APOSTROPHE, - L3_QUOTATION, - L3_L_PARANTHESIS, - L3_L_BRACKET, - L3_L_BRACE, - L3_R_BRACE, - L3_R_BRACKET, - L3_R_PARENTHESIS, - L3_AT, - L3_BAHT, - L3_DOLLAR, - L3_FONGMAN, - L3_ANGKHANKHU, - L3_KHOMUT, - L3_ASTERISK, - L3_BK_SOLIDUS, - L3_AMPERSAND, - L3_NUMBER, - L3_PERCENT, - L3_PLUS, - L3_LESS_THAN, - L3_EQUAL, - L3_GREATER_THAN, - L3_V_LINE -}; - -/* level 4 symbols & order */ -enum l4_symbols { - L4_BLANK = TOT_LEVELS, - L4_MIN, - L4_CAP, - L4_EXT -}; - -enum level_symbols { - L_UPRUPR = TOT_LEVELS, - L_UPPER, - L_MIDDLE, - L_LOWER -}; - -#define _is(c) (t_ctype[(c)][LAST_LEVEL]) -#define _level 8 -#define _consnt 16 -#define _ldvowel 32 -#define _fllwvowel 64 -#define _uprvowel 128 -#define _lwrvowel 256 -#define _tone 512 -#define _diacrt1 1024 -#define _diacrt2 2048 -#define _combine 4096 -#define _stone 8192 -#define _tdig 16384 -#define _rearvowel (_fllwvowel | _uprvowel | _lwrvowel) -#define _diacrt (_diacrt1 | _diacrt2) -#define levelof(c) ( _is(c) & _level ) -#define isthai(c) ( (c) >= 128 ) -#define istalpha(c) ( _is(c) & (_consnt|_ldvowel|_rearvowel|\ - _tone|_diacrt1|_diacrt2) ) -#define isconsnt(c) ( _is(c) & _consnt ) -#define isldvowel(c) ( _is(c) & _ldvowel ) -#define isfllwvowel(c) ( _is(c) & _fllwvowel ) -#define ismidvowel(c) ( _is(c) & (_ldvowel|_fllwvowel) ) -#define isuprvowel(c) ( _is(c) & _uprvowel ) -#define islwrvowel(c) ( _is(c) & _lwrvowel ) -#define isuprlwrvowel(c) ( _is(c) & (_lwrvowel | _uprvowel)) -#define isrearvowel(c) ( _is(c) & _rearvowel ) -#define isvowel(c) ( _is(c) & (_ldvowel|_rearvowel) ) -#define istone(c) ( _is(c) & _tone ) -#define isunldable(c) ( _is(c) & (_rearvowel|_tone|_diacrt1|_diacrt2) ) -#define iscombinable(c) ( _is(c) & _combine ) -#define istdigit(c) ( _is(c) & _tdig ) -#define isstone(c) ( _is(c) & _stone ) -#define isdiacrt1(c) ( _is(c) & _diacrt1) -#define isdiacrt2(c) ( _is(c) & _diacrt2) -#define isdiacrt(c) ( _is(c) & _diacrt) - -/* Function prototype called by sql/field.cc */ -void ThNormalize(uchar* ptr, uint field_length, const uchar* from, uint length); - -#endif diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/thr_alarm.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/thr_alarm.h deleted file mode 100644 index fb90603..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/thr_alarm.h +++ /dev/null @@ -1,110 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* Prototypes when using thr_alarm library functions */ - -#ifndef _thr_alarm_h -#define _thr_alarm_h -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef USE_ALARM_THREAD -#define USE_ONE_SIGNAL_HAND /* One must call process_alarm */ -#endif -#ifdef HAVE_rts_threads -#undef USE_ONE_SIGNAL_HAND -#define USE_ALARM_THREAD -#define THR_SERVER_ALARM SIGUSR1 -#else -#define THR_SERVER_ALARM SIGALRM -#endif - -typedef struct st_alarm_info -{ - ulong next_alarm_time; - uint active_alarms; - uint max_used_alarms; -} ALARM_INFO; - -void thr_alarm_info(ALARM_INFO *info); - -#if defined(DONT_USE_THR_ALARM) || !defined(THREAD) - -#define USE_ALARM_THREAD -#undef USE_ONE_SIGNAL_HAND - -typedef my_bool thr_alarm_t; -typedef my_bool ALARM; - -#define thr_alarm_init(A) (*(A))=0 -#define thr_alarm_in_use(A) (*(A) != 0) -#define thr_end_alarm(A) -#define thr_alarm(A,B,C) ((*(A)=1)-1) -/* The following should maybe be (*(A)) */ -#define thr_got_alarm(A) 0 -#define init_thr_alarm(A) -#define thr_alarm_kill(A) -#define resize_thr_alarm(N) -#define end_thr_alarm(A) - -#else -#if defined(__WIN__) -typedef struct st_thr_alarm_entry -{ - rf_SetTimer crono; -} thr_alarm_entry; - -#else /* System with posix threads */ - -typedef int thr_alarm_entry; - -#define thr_got_alarm(thr_alarm) (**(thr_alarm)) - -#endif /* __WIN__ */ - -typedef thr_alarm_entry* thr_alarm_t; - -typedef struct st_alarm { - ulong expire_time; - thr_alarm_entry alarmed; /* set when alarm is due */ - pthread_t thread; - my_thread_id thread_id; - my_bool malloced; -} ALARM; - -extern uint thr_client_alarm; -extern pthread_t alarm_thread; - -#define thr_alarm_init(A) (*(A))=0 -#define thr_alarm_in_use(A) (*(A)!= 0) -void init_thr_alarm(uint max_alarm); -void resize_thr_alarm(uint max_alarms); -my_bool thr_alarm(thr_alarm_t *alarmed, uint sec, ALARM *buff); -void thr_alarm_kill(my_thread_id thread_id); -void thr_end_alarm(thr_alarm_t *alarmed); -void end_thr_alarm(my_bool free_structures); -sig_handler process_alarm(int); -#ifndef thr_got_alarm -my_bool thr_got_alarm(thr_alarm_t *alrm); -#endif - - -#endif /* DONT_USE_THR_ALARM */ - -#ifdef __cplusplus -} -#endif /* __cplusplus */ -#endif /* _thr_alarm_h */ diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/thr_lock.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/thr_lock.h deleted file mode 100644 index 38f0478..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/thr_lock.h +++ /dev/null @@ -1,181 +0,0 @@ -/* Copyright 2000-2008 MySQL AB, 2008 Sun Microsystems, Inc. - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* For use with thr_lock:s */ - -#ifndef _thr_lock_h -#define _thr_lock_h -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include - -struct st_thr_lock; -extern ulong locks_immediate,locks_waited ; - -/** - Lock types are used to request a lock on a table. Changes in this enumeration - might affect transactional locks as well. - Important: if a new lock type is added, a matching lock description - must be added to sql_test.cc's lock_descriptions array. - @see set_handler_table_locks - @see read_lock_type_for_table -*/ -enum thr_lock_type { TL_IGNORE=-1, - TL_UNLOCK, /* UNLOCK ANY LOCK */ - /* - Parser only! At open_tables() becomes TL_READ or - TL_READ_NO_INSERT depending on the binary log format - (SBR/RBR) and on the table category (log table). - Used for tables that are read by statements which - modify tables. - */ - TL_READ_DEFAULT, - TL_READ, /* Read lock */ - TL_READ_WITH_SHARED_LOCKS, - /* High prior. than TL_WRITE. Allow concurrent insert */ - TL_READ_HIGH_PRIORITY, - /* READ, Don't allow concurrent insert */ - TL_READ_NO_INSERT, - /* - Write lock, but allow other threads to read / write. - Used by BDB tables in MySQL to mark that someone is - reading/writing to the table. - */ - TL_WRITE_ALLOW_WRITE, - /* - Write lock, but allow other threads to read. - Used by ALTER TABLE in MySQL to allow readers - to use the table until ALTER TABLE is finished. - */ - TL_WRITE_ALLOW_READ, - /* - WRITE lock used by concurrent insert. Will allow - READ, if one could use concurrent insert on table. - */ - TL_WRITE_CONCURRENT_INSERT, - /* Write used by INSERT DELAYED. Allows READ locks */ - TL_WRITE_DELAYED, - /* - parser only! Late bound low_priority flag. - At open_tables() becomes thd->update_lock_default. - */ - TL_WRITE_DEFAULT, - /* WRITE lock that has lower priority than TL_READ */ - TL_WRITE_LOW_PRIORITY, - /* Normal WRITE lock */ - TL_WRITE, - /* Abort new lock request with an error */ - TL_WRITE_ONLY}; - -enum enum_thr_lock_result { THR_LOCK_SUCCESS= 0, THR_LOCK_ABORTED= 1, - THR_LOCK_WAIT_TIMEOUT= 2, THR_LOCK_DEADLOCK= 3 }; - - -extern ulong max_write_lock_count; -extern ulong table_lock_wait_timeout; -extern my_bool thr_lock_inited; -extern enum thr_lock_type thr_upgraded_concurrent_insert_lock; - -/* - A description of the thread which owns the lock. The address - of an instance of this structure is used to uniquely identify the thread. -*/ - -typedef struct st_thr_lock_info -{ - pthread_t thread; - my_thread_id thread_id; - ulong n_cursors; -} THR_LOCK_INFO; - -/* - Lock owner identifier. Globally identifies the lock owner within the - thread and among all the threads. The address of an instance of this - structure is used as id. -*/ - -typedef struct st_thr_lock_owner -{ - THR_LOCK_INFO *info; -} THR_LOCK_OWNER; - - -typedef struct st_thr_lock_data { - THR_LOCK_OWNER *owner; - struct st_thr_lock_data *next,**prev; - struct st_thr_lock *lock; - pthread_cond_t *cond; - enum thr_lock_type type; - void *status_param; /* Param to status functions */ - void *debug_print_param; -} THR_LOCK_DATA; - -struct st_lock_list { - THR_LOCK_DATA *data,**last; -}; - -typedef struct st_thr_lock { - LIST list; - pthread_mutex_t mutex; - struct st_lock_list read_wait; - struct st_lock_list read; - struct st_lock_list write_wait; - struct st_lock_list write; - /* write_lock_count is incremented for write locks and reset on read locks */ - ulong write_lock_count; - uint read_no_write_count; - void (*get_status)(void*, my_bool); /* When one gets a lock */ - void (*copy_status)(void*,void*); - void (*update_status)(void*); /* Before release of write */ - void (*restore_status)(void*); /* Before release of read */ - my_bool (*check_status)(void *); - my_bool allow_multiple_concurrent_insert; -} THR_LOCK; - - -extern LIST *thr_lock_thread_list; -extern pthread_mutex_t THR_LOCK_lock; - -my_bool init_thr_lock(void); /* Must be called once/thread */ -#define thr_lock_owner_init(owner, info_arg) (owner)->info= (info_arg) -void thr_lock_info_init(THR_LOCK_INFO *info); -void thr_lock_init(THR_LOCK *lock); -void thr_lock_delete(THR_LOCK *lock); -void thr_lock_data_init(THR_LOCK *lock,THR_LOCK_DATA *data, - void *status_param); -enum enum_thr_lock_result thr_lock(THR_LOCK_DATA *data, - THR_LOCK_OWNER *owner, - enum thr_lock_type lock_type); -void thr_unlock(THR_LOCK_DATA *data); -enum enum_thr_lock_result thr_multi_lock(THR_LOCK_DATA **data, - uint count, THR_LOCK_OWNER *owner); -void thr_multi_unlock(THR_LOCK_DATA **data,uint count); -void -thr_lock_merge_status(THR_LOCK_DATA **data, uint count); -void thr_abort_locks(THR_LOCK *lock, my_bool upgrade_lock); -my_bool thr_abort_locks_for_thread(THR_LOCK *lock, my_thread_id thread); -void thr_print_locks(void); /* For debugging */ -my_bool thr_upgrade_write_delay_lock(THR_LOCK_DATA *data, - enum thr_lock_type new_lock_type); -void thr_downgrade_write_lock(THR_LOCK_DATA *data, - enum thr_lock_type new_lock_type); -my_bool thr_reschedule_write_lock(THR_LOCK_DATA *data); -#ifdef __cplusplus -} -#endif -#endif /* _thr_lock_h */ diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/typelib.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/typelib.h deleted file mode 100644 index 46106d1..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/typelib.h +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - - -#ifndef _typelib_h -#define _typelib_h - -#include "my_alloc.h" - -typedef struct st_typelib { /* Different types saved here */ - unsigned int count; /* How many types */ - const char *name; /* Name of typelib */ - const char **type_names; - unsigned int *type_lengths; -} TYPELIB; - -extern my_ulonglong find_typeset(char *x, TYPELIB *typelib,int *error_position); -extern int find_type_or_exit(const char *x, TYPELIB *typelib, - const char *option); -extern int find_type(char *x, const TYPELIB *typelib, unsigned int full_name); -extern void make_type(char *to,unsigned int nr,TYPELIB *typelib); -extern const char *get_type(TYPELIB *typelib,unsigned int nr); -extern TYPELIB *copy_typelib(MEM_ROOT *root, TYPELIB *from); - -extern TYPELIB sql_protocol_typelib; - -#endif /* _typelib_h */ diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/violite.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/violite.h deleted file mode 100644 index 2720047..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/violite.h +++ /dev/null @@ -1,222 +0,0 @@ -/* Copyright (C) 2000 MySQL AB - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -/* - * Vio Lite. - * Purpose: include file for Vio that will work with C and C++ - */ - -#ifndef vio_violite_h_ -#define vio_violite_h_ - -#include "my_net.h" /* needed because of struct in_addr */ - - -/* Simple vio interface in C; The functions are implemented in violite.c */ - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -enum enum_vio_type -{ - VIO_CLOSED, VIO_TYPE_TCPIP, VIO_TYPE_SOCKET, VIO_TYPE_NAMEDPIPE, - VIO_TYPE_SSL, VIO_TYPE_SHARED_MEMORY -}; - - -#define VIO_LOCALHOST 1 /* a localhost connection */ -#define VIO_BUFFERED_READ 2 /* use buffered read */ -#define VIO_READ_BUFFER_SIZE 16384 /* size of read buffer */ - -Vio* vio_new(my_socket sd, enum enum_vio_type type, uint flags); -#ifdef __WIN__ -Vio* vio_new_win32pipe(HANDLE hPipe); -Vio* vio_new_win32shared_memory(NET *net,HANDLE handle_file_map, - HANDLE handle_map, - HANDLE event_server_wrote, - HANDLE event_server_read, - HANDLE event_client_wrote, - HANDLE event_client_read, - HANDLE event_conn_closed); -size_t vio_read_pipe(Vio *vio, uchar * buf, size_t size); -size_t vio_write_pipe(Vio *vio, const uchar * buf, size_t size); -int vio_close_pipe(Vio * vio); -#else -#define HANDLE void * -#endif /* __WIN__ */ - -void vio_delete(Vio* vio); -int vio_close(Vio* vio); -void vio_reset(Vio* vio, enum enum_vio_type type, - my_socket sd, HANDLE hPipe, uint flags); -size_t vio_read(Vio *vio, uchar * buf, size_t size); -size_t vio_read_buff(Vio *vio, uchar * buf, size_t size); -size_t vio_write(Vio *vio, const uchar * buf, size_t size); -int vio_blocking(Vio *vio, my_bool onoff, my_bool *old_mode); -my_bool vio_is_blocking(Vio *vio); -/* setsockopt TCP_NODELAY at IPPROTO_TCP level, when possible */ -int vio_fastsend(Vio *vio); -/* setsockopt SO_KEEPALIVE at SOL_SOCKET level, when possible */ -int vio_keepalive(Vio *vio, my_bool onoff); -/* Whenever we should retry the last read/write operation. */ -my_bool vio_should_retry(Vio *vio); -/* Check that operation was timed out */ -my_bool vio_was_interrupted(Vio *vio); -/* Short text description of the socket for those, who are curious.. */ -const char* vio_description(Vio *vio); -/* Return the type of the connection */ -enum enum_vio_type vio_type(Vio* vio); -/* Return last error number */ -int vio_errno(Vio*vio); -/* Get socket number */ -my_socket vio_fd(Vio*vio); -/* Remote peer's address and name in text form */ -my_bool vio_peer_addr(Vio *vio, char *buf, uint16 *port, size_t buflen); -my_bool vio_poll_read(Vio *vio,uint timeout); -my_bool vio_peek_read(Vio *vio, uint *bytes); -ssize_t vio_pending(Vio *vio); - -#ifdef HAVE_OPENSSL -#include -#if OPENSSL_VERSION_NUMBER < 0x0090700f -#define DES_cblock des_cblock -#define DES_key_schedule des_key_schedule -#define DES_set_key_unchecked(k,ks) des_set_key_unchecked((k),*(ks)) -#define DES_ede3_cbc_encrypt(i,o,l,k1,k2,k3,iv,e) des_ede3_cbc_encrypt((i),(o),(l),*(k1),*(k2),*(k3),(iv),(e)) -#endif - -#define HEADER_DES_LOCL_H dummy_something -#define YASSL_MYSQL_COMPATIBLE -#ifndef YASSL_PREFIX -#define YASSL_PREFIX -#endif -/* Set yaSSL to use same type as MySQL do for socket handles */ -typedef my_socket YASSL_SOCKET_T; -#define YASSL_SOCKET_T_DEFINED -#include -#include - -#ifndef EMBEDDED_LIBRARY - -struct st_VioSSLFd -{ - SSL_CTX *ssl_context; -}; - -int sslaccept(struct st_VioSSLFd*, Vio *, long timeout); -int sslconnect(struct st_VioSSLFd*, Vio *, long timeout); - -struct st_VioSSLFd -*new_VioSSLConnectorFd(const char *key_file, const char *cert_file, - const char *ca_file, const char *ca_path, - const char *cipher); -struct st_VioSSLFd -*new_VioSSLAcceptorFd(const char *key_file, const char *cert_file, - const char *ca_file,const char *ca_path, - const char *cipher); -void free_vio_ssl_acceptor_fd(struct st_VioSSLFd *fd); -#endif /* ! EMBEDDED_LIBRARY */ -#endif /* HAVE_OPENSSL */ - -#ifdef HAVE_SMEM -size_t vio_read_shared_memory(Vio *vio, uchar * buf, size_t size); -size_t vio_write_shared_memory(Vio *vio, const uchar * buf, size_t size); -int vio_close_shared_memory(Vio * vio); -#endif - -void vio_end(void); - -#ifdef __cplusplus -} -#endif - -#if !defined(DONT_MAP_VIO) -#define vio_delete(vio) (vio)->viodelete(vio) -#define vio_errno(vio) (vio)->vioerrno(vio) -#define vio_read(vio, buf, size) ((vio)->read)(vio,buf,size) -#define vio_write(vio, buf, size) ((vio)->write)(vio, buf, size) -#define vio_blocking(vio, set_blocking_mode, old_mode)\ - (vio)->vioblocking(vio, set_blocking_mode, old_mode) -#define vio_is_blocking(vio) (vio)->is_blocking(vio) -#define vio_fastsend(vio) (vio)->fastsend(vio) -#define vio_keepalive(vio, set_keep_alive) (vio)->viokeepalive(vio, set_keep_alive) -#define vio_should_retry(vio) (vio)->should_retry(vio) -#define vio_was_interrupted(vio) (vio)->was_interrupted(vio) -#define vio_close(vio) ((vio)->vioclose)(vio) -#define vio_peer_addr(vio, buf, prt, buflen) (vio)->peer_addr(vio, buf, prt, buflen) -#define vio_timeout(vio, which, seconds) (vio)->timeout(vio, which, seconds) -#endif /* !defined(DONT_MAP_VIO) */ - -/* This enumerator is used in parser - should be always visible */ -enum SSL_type -{ - SSL_TYPE_NOT_SPECIFIED= -1, - SSL_TYPE_NONE, - SSL_TYPE_ANY, - SSL_TYPE_X509, - SSL_TYPE_SPECIFIED -}; - - -/* HFTODO - hide this if we don't want client in embedded server */ -/* This structure is for every connection on both sides */ -struct st_vio -{ - my_socket sd; /* my_socket - real or imaginary */ - HANDLE hPipe; - my_bool localhost; /* Are we from localhost? */ - int fcntl_mode; /* Buffered fcntl(sd,F_GETFL) */ - struct sockaddr_storage local; /* Local internet address */ - struct sockaddr_storage remote; /* Remote internet address */ - int addrLen; /* Length of remote address */ - enum enum_vio_type type; /* Type of connection */ - char desc[30]; /* String description */ - char *read_buffer; /* buffer for vio_read_buff */ - char *read_pos; /* start of unfetched data in the - read buffer */ - char *read_end; /* end of unfetched data */ - /* function pointers. They are similar for socket/SSL/whatever */ - void (*viodelete)(Vio*); - int (*vioerrno)(Vio*); - size_t (*read)(Vio*, uchar *, size_t); - size_t (*write)(Vio*, const uchar *, size_t); - int (*vioblocking)(Vio*, my_bool, my_bool *); - my_bool (*is_blocking)(Vio*); - int (*viokeepalive)(Vio*, my_bool); - int (*fastsend)(Vio*); - my_bool (*peer_addr)(Vio*, char *, uint16*, size_t); - void (*in_addr)(Vio*, struct sockaddr_storage*); - my_bool (*should_retry)(Vio*); - my_bool (*was_interrupted)(Vio*); - int (*vioclose)(Vio*); - void (*timeout)(Vio*, unsigned int which, unsigned int timeout); -#ifdef HAVE_OPENSSL - void *ssl_arg; -#endif -#ifdef HAVE_SMEM - HANDLE handle_file_map; - char *handle_map; - HANDLE event_server_wrote; - HANDLE event_server_read; - HANDLE event_client_wrote; - HANDLE event_client_read; - HANDLE event_conn_closed; - size_t shared_memory_remain; - char *shared_memory_pos; - NET *net; -#endif /* HAVE_SMEM */ -}; -#endif /* vio_violite_h_ */ diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/waiting_threads.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/waiting_threads.h deleted file mode 100644 index 1e58052..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/waiting_threads.h +++ /dev/null @@ -1,130 +0,0 @@ -/* Copyright (C) 2008 MySQL AB, 2008-2009 Sun Microsystems, Inc. - - This program 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; version 2 of the License. - - This program is distributed 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 this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - -#ifndef _waiting_threads_h -#define _waiting_threads_h - -#include -#include - -#include - -C_MODE_START - -typedef struct st_wt_resource_id WT_RESOURCE_ID; -typedef struct st_wt_resource WT_RESOURCE; - -typedef struct st_wt_resource_type { - my_bool (*compare)(const void *a, const void *b); - const void *(*make_key)(const WT_RESOURCE_ID *id, uint *len); /* not used */ -} WT_RESOURCE_TYPE; - -struct st_wt_resource_id { - ulonglong value; - const WT_RESOURCE_TYPE *type; -}; -/* the below differs from sizeof(WT_RESOURCE_ID) by the amount of padding */ -#define sizeof_WT_RESOURCE_ID (sizeof(ulonglong)+sizeof(void*)) - -#define WT_WAIT_STATS 24 -#define WT_CYCLE_STATS 32 -extern ulonglong wt_wait_table[WT_WAIT_STATS]; -extern uint32 wt_wait_stats[WT_WAIT_STATS+1]; -extern uint32 wt_cycle_stats[2][WT_CYCLE_STATS+1]; -extern uint32 wt_success_stats; - -typedef struct st_wt_thd { - /* - XXX - there's no protection (mutex) against concurrent access of the - dynarray below. it is assumed that a caller will have it anyway - (not to protect this array but to protect its own - caller's - - data structures), and we'll get it for free. A caller needs to - ensure that a blocker won't release a resource before a blocked - thread starts waiting, which is usually done with a mutex. - - If the above assumption is wrong, we'll need to add a mutex here. - */ - DYNAMIC_ARRAY my_resources; - /* - 'waiting_for' is modified under waiting_for->lock, and only by thd itself - 'waiting_for' is read lock-free (using pinning protocol), but a thd object - can read its own 'waiting_for' without any locks or tricks. - */ - WT_RESOURCE *waiting_for; - LF_PINS *pins; - - /* pointers to values */ - const ulong *timeout_short; - const ulong *deadlock_search_depth_short; - const ulong *timeout_long; - const ulong *deadlock_search_depth_long; - - /* - weight relates to the desirability of a transaction being killed if it's - part of a deadlock. In a deadlock situation transactions with lower weights - are killed first. - - Examples of using the weight to implement different selection strategies: - - 1. Latest - Keep all weights equal. - 2. Random - Assight weights at random. - (variant: modify a weight randomly before every lock request) - 3. Youngest - Set weight to -NOW() - 4. Minimum locks - count locks granted in your lock manager, store the value as a weight - 5. Minimum work - depends on the definition of "work". For example, store the number - of rows modifies in this transaction (or a length of REDO log for a - transaction) as a weight. - - It is only statistically relevant and is not protected by any locks. - */ - ulong volatile weight; - /* - 'killed' is indirectly protected by waiting_for->lock because - a killed thread needs to clear its 'waiting_for' and thus needs a lock. - That is a thread needs an exclusive lock to read 'killed' reliably. - But other threads may change 'killed' from 0 to 1, a shared - lock is enough for that. - */ - my_bool killed; -#ifndef DBUG_OFF - const char *name; -#endif -} WT_THD; - -#define WT_TIMEOUT ETIMEDOUT -#define WT_OK 0 -#define WT_DEADLOCK -1 -#define WT_DEPTH_EXCEEDED -2 -#define WT_FREE_TO_GO -3 - -void wt_init(void); -void wt_end(void); -void wt_thd_lazy_init(WT_THD *, const ulong *, const ulong *, const ulong *, const ulong *); -void wt_thd_destroy(WT_THD *); -int wt_thd_will_wait_for(WT_THD *, WT_THD *, const WT_RESOURCE_ID *); -int wt_thd_cond_timedwait(WT_THD *, pthread_mutex_t *); -void wt_thd_release(WT_THD *, const WT_RESOURCE_ID *); -#define wt_thd_release_all(THD) wt_thd_release((THD), 0) -my_bool wt_resource_id_memcmp(const void *, const void *); - -C_MODE_END - -#endif diff --git a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/wqueue.h b/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/wqueue.h deleted file mode 100644 index 658f3d6..0000000 --- a/MySQLDriver/SYSZUXmysql/src/SYSZUXmysql/wqueue.h +++ /dev/null @@ -1,27 +0,0 @@ - -#ifndef _wqueue_h -#define _wqueue_h - -#include -#include - -/* info about requests in a waiting queue */ -typedef struct st_pagecache_wqueue -{ - struct st_my_thread_var *last_thread; /* circular list of waiting - threads */ -} WQUEUE; - -#ifdef THREAD -void wqueue_link_into_queue(WQUEUE *wqueue, struct st_my_thread_var *thread); -void wqueue_unlink_from_queue(WQUEUE *wqueue, struct st_my_thread_var *thread); -void wqueue_add_to_queue(WQUEUE *wqueue, struct st_my_thread_var *thread); -void wqueue_add_and_wait(WQUEUE *wqueue, - struct st_my_thread_var *thread, - pthread_mutex_t *lock); -void wqueue_release_queue(WQUEUE *wqueue); -void wqueue_release_one_locktype_from_queue(WQUEUE *wqueue); - -#endif - -#endif diff --git a/MySQLDriver/SYSZUXmysql/src/main.cpp b/MySQLDriver/SYSZUXmysql/src/main.cpp deleted file mode 100644 index 9bad85a..0000000 --- a/MySQLDriver/SYSZUXmysql/src/main.cpp +++ /dev/null @@ -1,83 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial Usage -** Licensees holding valid Qt Commercial licenses may use this file in -** accordance with the Qt Commercial License Agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Nokia. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include -#include -#include "qsql_mysql.h" - -QT_BEGIN_NAMESPACE - -class QMYSQLDriverPlugin : public QSqlDriverPlugin -{ -public: - QMYSQLDriverPlugin(); - - QSqlDriver* create(const QString &); - QStringList keys() const; -}; - -QMYSQLDriverPlugin::QMYSQLDriverPlugin() - : QSqlDriverPlugin() -{ -} - -QSqlDriver* QMYSQLDriverPlugin::create(const QString &name) -{ - if (name == QLatin1String("QMYSQL") || name == QLatin1String("QMYSQL3")) { - QMYSQLDriver* driver = new QMYSQLDriver(); - return driver; - } - return 0; -} - -QStringList QMYSQLDriverPlugin::keys() const -{ - QStringList l; - l << QLatin1String("QMYSQL3"); - l << QLatin1String("QMYSQL"); - return l; -} - -#if QT_VERSION < 0x050000 -Q_EXPORT_STATIC_PLUGIN(QMYSQLDriverPlugin) -Q_EXPORT_PLUGIN2(qsqlmysql, QMYSQLDriverPlugin) -#endif -QT_END_NAMESPACE diff --git a/MySQLDriver/SYSZUXmysql/src/qsql_mysql.cpp b/MySQLDriver/SYSZUXmysql/src/qsql_mysql.cpp deleted file mode 100644 index 0cc9e31..0000000 --- a/MySQLDriver/SYSZUXmysql/src/qsql_mysql.cpp +++ /dev/null @@ -1,1545 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtSql module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial Usage -** Licensees holding valid Qt Commercial licenses may use this file in -** accordance with the Qt Commercial License Agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Nokia. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qsql_mysql.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#ifdef Q_OS_WIN32 -// comment the next line out if you want to use MySQL/embedded on Win32 systems. -// note that it will crash if you don't statically link to the mysql/e library! -# define Q_NO_MYSQL_EMBEDDED - -#endif - -Q_DECLARE_METATYPE(MYSQL_RES*) -Q_DECLARE_METATYPE(MYSQL*) - -#if MYSQL_VERSION_ID >= 40108 -Q_DECLARE_METATYPE(MYSQL_STMT*) -#endif - -#if MYSQL_VERSION_ID >= 40100 -# define Q_CLIENT_MULTI_STATEMENTS CLIENT_MULTI_STATEMENTS -#else -# define Q_CLIENT_MULTI_STATEMENTS 0 -#endif - -QT_BEGIN_NAMESPACE - -class QMYSQLDriverPrivate -{ -public: - QMYSQLDriverPrivate() : mysql(0), -#ifndef QT_NO_TEXTCODEC - tc(QTextCodec::codecForLocale()), -#else - tc(0), -#endif - preparedQuerysEnabled(false) {} - MYSQL *mysql; - QTextCodec *tc; - - bool preparedQuerysEnabled; -}; - -static inline QString toUnicode(QTextCodec *tc, const char *str) -{ -#ifdef QT_NO_TEXTCODEC - Q_UNUSED(tc); - return QString::fromLatin1(str); -#else - return tc->toUnicode(str); -#endif -} - -static inline QString toUnicode(QTextCodec *tc, const char *str, int length) -{ -#ifdef QT_NO_TEXTCODEC - Q_UNUSED(tc); - return QString::fromLatin1(str, length); -#else - return tc->toUnicode(str, length); -#endif -} - -static inline QByteArray fromUnicode(QTextCodec *tc, const QString &str) -{ -#ifdef QT_NO_TEXTCODEC - Q_UNUSED(tc); - return str.toLatin1(); -#else - return tc->fromUnicode(str); -#endif -} - -static inline QVariant qDateFromString(const QString &val) -{ -#ifdef QT_NO_DATESTRING - Q_UNUSED(val); - return QVariant(val); -#else - if (val.isEmpty()) - return QVariant(QDate()); - return QVariant(QDate::fromString(val, Qt::ISODate)); -#endif -} - -static inline QVariant qTimeFromString(const QString &val) -{ -#ifdef QT_NO_DATESTRING - Q_UNUSED(val); - return QVariant(val); -#else - if (val.isEmpty()) - return QVariant(QTime()); - return QVariant(QTime::fromString(val, Qt::ISODate)); -#endif -} - -static inline QVariant qDateTimeFromString(QString &val) -{ -#ifdef QT_NO_DATESTRING - Q_UNUSED(val); - return QVariant(val); -#else - if (val.isEmpty()) - return QVariant(QDateTime()); - if (val.length() == 14) - // TIMESTAMPS have the format yyyyMMddhhmmss - val.insert(4, QLatin1Char('-')).insert(7, QLatin1Char('-')).insert(10, - QLatin1Char('T')).insert(13, QLatin1Char(':')).insert(16, QLatin1Char(':')); - return QVariant(QDateTime::fromString(val, Qt::ISODate)); -#endif -} - -class QMYSQLResultPrivate : public QObject -{ - Q_OBJECT -public: - QMYSQLResultPrivate(const QMYSQLDriver* dp, const QMYSQLResult* d) : driver(dp), result(0), q(d), - rowsAffected(0), hasBlobs(false) -#if MYSQL_VERSION_ID >= 40108 - , stmt(0), meta(0), inBinds(0), outBinds(0) -#endif - , preparedQuery(false) - { - connect(dp, SIGNAL(destroyed()), this, SLOT(driverDestroyed())); - } - - const QMYSQLDriver* driver; - MYSQL_RES *result; - MYSQL_ROW row; - const QMYSQLResult* q; - - int rowsAffected; - - bool bindInValues(); - void bindBlobs(); - - bool hasBlobs; - struct QMyField - { - QMyField() - : outField(0), nullIndicator(false), bufLength(0ul), - myField(0), type(QVariant::Invalid) - {} - char *outField; - my_bool nullIndicator; - ulong bufLength; - MYSQL_FIELD *myField; - QVariant::Type type; - }; - - QVector fields; - -#if MYSQL_VERSION_ID >= 40108 - MYSQL_STMT* stmt; - MYSQL_RES* meta; - - MYSQL_BIND *inBinds; - MYSQL_BIND *outBinds; -#endif - - bool preparedQuery; - -private Q_SLOTS: - void driverDestroyed() { driver = NULL; } -}; - -#ifndef QT_NO_TEXTCODEC -static QTextCodec* codec(MYSQL* mysql) -{ -#if MYSQL_VERSION_ID >= 32321 - QTextCodec* heuristicCodec = QTextCodec::codecForName(mysql_character_set_name(mysql)); - if (heuristicCodec) - return heuristicCodec; -#endif - return QTextCodec::codecForLocale(); -} -#endif // QT_NO_TEXTCODEC - -static QSqlError qMakeError(const QString& err, QSqlError::ErrorType type, - const QMYSQLDriverPrivate* p) -{ - const char *cerr = p->mysql ? mysql_error(p->mysql) : 0; - return QSqlError(QLatin1String("QMYSQL: ") + err, - p->tc ? toUnicode(p->tc, cerr) : QString::fromLatin1(cerr), - type, mysql_errno(p->mysql)); -} - - -static QVariant::Type qDecodeMYSQLType(int mysqltype, uint flags) -{ - QVariant::Type type; - switch (mysqltype) { - case FIELD_TYPE_TINY : - case FIELD_TYPE_SHORT : - case FIELD_TYPE_LONG : - case FIELD_TYPE_INT24 : - type = (flags & UNSIGNED_FLAG) ? QVariant::UInt : QVariant::Int; - break; - case FIELD_TYPE_YEAR : - type = QVariant::Int; - break; - case FIELD_TYPE_LONGLONG : - type = (flags & UNSIGNED_FLAG) ? QVariant::ULongLong : QVariant::LongLong; - break; - case FIELD_TYPE_FLOAT : - case FIELD_TYPE_DOUBLE : - case FIELD_TYPE_DECIMAL : -#if defined(FIELD_TYPE_NEWDECIMAL) - case FIELD_TYPE_NEWDECIMAL: -#endif - type = QVariant::Double; - break; - case FIELD_TYPE_DATE : - type = QVariant::Date; - break; - case FIELD_TYPE_TIME : - type = QVariant::Time; - break; - case FIELD_TYPE_DATETIME : - case FIELD_TYPE_TIMESTAMP : - type = QVariant::DateTime; - break; - case FIELD_TYPE_STRING : - case FIELD_TYPE_VAR_STRING : - case FIELD_TYPE_BLOB : - case FIELD_TYPE_TINY_BLOB : - case FIELD_TYPE_MEDIUM_BLOB : - case FIELD_TYPE_LONG_BLOB : - type = (flags & BINARY_FLAG) ? QVariant::ByteArray : QVariant::String; - break; - default: - case FIELD_TYPE_ENUM : - case FIELD_TYPE_SET : - type = QVariant::String; - break; - } - return type; -} - -static QSqlField qToField(MYSQL_FIELD *field, QTextCodec *tc) -{ - QSqlField f(toUnicode(tc, field->name), - qDecodeMYSQLType(int(field->type), field->flags)); - f.setRequired(IS_NOT_NULL(field->flags)); - f.setLength(field->length); - f.setPrecision(field->decimals); - f.setSqlType(field->type); - f.setAutoValue(field->flags & AUTO_INCREMENT_FLAG); - return f; -} - -#if MYSQL_VERSION_ID >= 40108 - -static QSqlError qMakeStmtError(const QString& err, QSqlError::ErrorType type, - MYSQL_STMT* stmt) -{ - const char *cerr = mysql_stmt_error(stmt); - return QSqlError(QLatin1String("QMYSQL3: ") + err, - QString::fromLatin1(cerr), - type, mysql_stmt_errno(stmt)); -} - -static bool qIsBlob(int t) -{ - return t == MYSQL_TYPE_TINY_BLOB - || t == MYSQL_TYPE_BLOB - || t == MYSQL_TYPE_MEDIUM_BLOB - || t == MYSQL_TYPE_LONG_BLOB; -} - -static bool qIsInteger(int t) -{ - return t == MYSQL_TYPE_TINY - || t == MYSQL_TYPE_SHORT - || t == MYSQL_TYPE_LONG - || t == MYSQL_TYPE_LONGLONG - || t == MYSQL_TYPE_INT24; -} - - -void QMYSQLResultPrivate::bindBlobs() -{ - int i; - MYSQL_FIELD *fieldInfo; - MYSQL_BIND *bind; - - for(i = 0; i < fields.count(); ++i) { - fieldInfo = fields.at(i).myField; - if (qIsBlob(inBinds[i].buffer_type) && meta && fieldInfo) { - bind = &inBinds[i]; - bind->buffer_length = fieldInfo->max_length; - delete[] static_cast(bind->buffer); - bind->buffer = new char[fieldInfo->max_length]; - fields[i].outField = static_cast(bind->buffer); - } - } -} - -bool QMYSQLResultPrivate::bindInValues() -{ - MYSQL_BIND *bind; - char *field; - int i = 0; - - if (!meta) - meta = mysql_stmt_result_metadata(stmt); - if (!meta) - return false; - - fields.resize(mysql_num_fields(meta)); - - inBinds = new MYSQL_BIND[fields.size()]; - memset(inBinds, 0, fields.size() * sizeof(MYSQL_BIND)); - - MYSQL_FIELD *fieldInfo; - - while((fieldInfo = mysql_fetch_field(meta))) { - QMyField &f = fields[i]; - f.myField = fieldInfo; - - f.type = qDecodeMYSQLType(fieldInfo->type, fieldInfo->flags); - if (qIsBlob(fieldInfo->type)) { - // the size of a blob-field is available as soon as we call - // mysql_stmt_store_result() - // after mysql_stmt_exec() in QMYSQLResult::exec() - fieldInfo->length = 0; - hasBlobs = true; - } else { - // fieldInfo->length specifies the display width, which may be too - // small to hold valid integer values (see - // http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html ), so - // always use the MAX_BIGINT_WIDTH for integer types - if (qIsInteger(fieldInfo->type)) { - fieldInfo->length = MAX_BIGINT_WIDTH; - } - fieldInfo->type = MYSQL_TYPE_STRING; - } - bind = &inBinds[i]; - field = new char[fieldInfo->length + 1]; - memset(field, 0, fieldInfo->length + 1); - - bind->buffer_type = fieldInfo->type; - bind->buffer = field; - bind->buffer_length = f.bufLength = fieldInfo->length + 1; - bind->is_null = &f.nullIndicator; - bind->length = &f.bufLength; - f.outField=field; - - ++i; - } - return true; -} -#endif - -QMYSQLResult::QMYSQLResult(const QMYSQLDriver* db) -: QSqlResult(db) -{ - d = new QMYSQLResultPrivate(db, this); -} - -QMYSQLResult::~QMYSQLResult() -{ - cleanup(); - delete d; -} - -QVariant QMYSQLResult::handle() const -{ -#if MYSQL_VERSION_ID >= 40108 - if(d->preparedQuery) - return d->meta ? qVariantFromValue(d->meta) : qVariantFromValue(d->stmt); - else -#endif - return qVariantFromValue(d->result); -} - -void QMYSQLResult::cleanup() -{ - if (d->result) - mysql_free_result(d->result); - -// must iterate trough leftover result sets from multi-selects or stored procedures -// if this isn't done subsequent queries will fail with "Commands out of sync" -#if MYSQL_VERSION_ID >= 40100 - while (d->driver && d->driver->d->mysql && mysql_next_result(d->driver->d->mysql) == 0) { - MYSQL_RES *res = mysql_store_result(d->driver->d->mysql); - if (res) - mysql_free_result(res); - } -#endif - -#if MYSQL_VERSION_ID >= 40108 - if (d->stmt) { - if (mysql_stmt_close(d->stmt)) - qWarning("QMYSQLResult::cleanup: unable to free statement handle"); - d->stmt = 0; - } - - if (d->meta) { - mysql_free_result(d->meta); - d->meta = 0; - } - - int i; - for (i = 0; i < d->fields.count(); ++i) - delete[] d->fields[i].outField; - - if (d->outBinds) { - delete[] d->outBinds; - d->outBinds = 0; - } - - if (d->inBinds) { - delete[] d->inBinds; - d->inBinds = 0; - } -#endif - - d->hasBlobs = false; - d->fields.clear(); - d->result = NULL; - d->row = NULL; - setAt(-1); - setActive(false); -} - -bool QMYSQLResult::fetch(int i) -{ - if(!d->driver) - return false; - if (isForwardOnly()) { // fake a forward seek - if (at() < i) { - int x = i - at(); - while (--x && fetchNext()) {}; - return fetchNext(); - } else { - return false; - } - } - if (at() == i) - return true; - if (d->preparedQuery) { -#if MYSQL_VERSION_ID >= 40108 - mysql_stmt_data_seek(d->stmt, i); - - int nRC = mysql_stmt_fetch(d->stmt); - if (nRC) { -#ifdef MYSQL_DATA_TRUNCATED - if (nRC == 1 || nRC == MYSQL_DATA_TRUNCATED) -#else - if (nRC == 1) -#endif - setLastError(qMakeStmtError(QCoreApplication::translate("QMYSQLResult", - "Unable to fetch data"), QSqlError::StatementError, d->stmt)); - return false; - } -#else - return false; -#endif - } else { - mysql_data_seek(d->result, i); - d->row = mysql_fetch_row(d->result); - if (!d->row) - return false; - } - - setAt(i); - return true; -} - -bool QMYSQLResult::fetchNext() -{ - if(!d->driver) - return false; - if (d->preparedQuery) { -#if MYSQL_VERSION_ID >= 40108 - int nRC = mysql_stmt_fetch(d->stmt); - if (nRC) { -#ifdef MYSQL_DATA_TRUNCATED - if (nRC == 1 || nRC == MYSQL_DATA_TRUNCATED) -#else - if (nRC == 1) -#endif // MYSQL_DATA_TRUNCATED - setLastError(qMakeStmtError(QCoreApplication::translate("QMYSQLResult", - "Unable to fetch data"), QSqlError::StatementError, d->stmt)); - return false; - } -#else - return false; -#endif - } else { - d->row = mysql_fetch_row(d->result); - if (!d->row) - return false; - } - setAt(at() + 1); - return true; -} - -bool QMYSQLResult::fetchLast() -{ - if(!d->driver) - return false; - if (isForwardOnly()) { // fake this since MySQL can't seek on forward only queries - bool success = fetchNext(); // did we move at all? - while (fetchNext()) {}; - return success; - } - - my_ulonglong numRows; - if (d->preparedQuery) { -#if MYSQL_VERSION_ID >= 40108 - numRows = mysql_stmt_num_rows(d->stmt); -#else - numRows = 0; -#endif - } else { - numRows = mysql_num_rows(d->result); - } - if (at() == int(numRows)) - return true; - if (!numRows) - return false; - return fetch(numRows - 1); -} - -bool QMYSQLResult::fetchFirst() -{ - if (at() == 0) - return true; - - if (isForwardOnly()) - return (at() == QSql::BeforeFirstRow) ? fetchNext() : false; - return fetch(0); -} - -QVariant QMYSQLResult::data(int field) -{ - - if (!isSelect() || field >= d->fields.count()) { - qWarning("QMYSQLResult::data: column %d out of range", field); - return QVariant(); - } - - if (!d->driver) - return QVariant(); - - int fieldLength = 0; - const QMYSQLResultPrivate::QMyField &f = d->fields.at(field); - QString val; - if (d->preparedQuery) { - if (f.nullIndicator) - return QVariant(f.type); - - if (f.type != QVariant::ByteArray) - val = toUnicode(d->driver->d->tc, f.outField, f.bufLength); - } else { - if (d->row[field] == NULL) { - // NULL value - return QVariant(f.type); - } - fieldLength = mysql_fetch_lengths(d->result)[field]; - if (f.type != QVariant::ByteArray) - val = toUnicode(d->driver->d->tc, d->row[field], fieldLength); - } - - switch(f.type) { - case QVariant::LongLong: - return QVariant(val.toLongLong()); - case QVariant::ULongLong: - return QVariant(val.toULongLong()); - case QVariant::Int: - return QVariant(val.toInt()); - case QVariant::UInt: - return QVariant(val.toUInt()); - case QVariant::Double: { - QVariant v; - bool ok=false; - double dbl = val.toDouble(&ok); - switch(numericalPrecisionPolicy()) { - case QSql::LowPrecisionInt32: - v=QVariant(dbl).toInt(); - break; - case QSql::LowPrecisionInt64: - v = QVariant(dbl).toLongLong(); - break; - case QSql::LowPrecisionDouble: - v = QVariant(dbl); - break; - case QSql::HighPrecision: - default: - v = val; - ok = true; - break; - } - if(ok) - return v; - else - return QVariant(); - } - return QVariant(val.toDouble()); - case QVariant::Date: - return qDateFromString(val); - case QVariant::Time: - return qTimeFromString(val); - case QVariant::DateTime: - return qDateTimeFromString(val); - case QVariant::ByteArray: { - - QByteArray ba; - if (d->preparedQuery) { - ba = QByteArray(f.outField, f.bufLength); - } else { - ba = QByteArray(d->row[field], fieldLength); - } - return QVariant(ba); - } - default: - case QVariant::String: - return QVariant(val); - } - qWarning("QMYSQLResult::data: unknown data type"); - return QVariant(); -} - -bool QMYSQLResult::isNull(int field) -{ - if (d->preparedQuery) - return d->fields.at(field).nullIndicator; - else - return d->row[field] == NULL; -} - -bool QMYSQLResult::reset (const QString& query) -{ - if (!driver() || !driver()->isOpen() || driver()->isOpenError() || !d->driver) - return false; - - d->preparedQuery = false; - - cleanup(); - - const QByteArray encQuery(fromUnicode(d->driver->d->tc, query)); - if (mysql_real_query(d->driver->d->mysql, encQuery.data(), encQuery.length())) { - setLastError(qMakeError(QCoreApplication::translate("QMYSQLResult", "Unable to execute query"), - QSqlError::StatementError, d->driver->d)); - return false; - } - d->result = mysql_store_result(d->driver->d->mysql); - if (!d->result && mysql_field_count(d->driver->d->mysql) > 0) { - setLastError(qMakeError(QCoreApplication::translate("QMYSQLResult", "Unable to store result"), - QSqlError::StatementError, d->driver->d)); - return false; - } - int numFields = mysql_field_count(d->driver->d->mysql); - setSelect(numFields != 0); - d->fields.resize(numFields); - d->rowsAffected = mysql_affected_rows(d->driver->d->mysql); - - if (isSelect()) { - for(int i = 0; i < numFields; i++) { - MYSQL_FIELD* field = mysql_fetch_field_direct(d->result, i); - d->fields[i].type = qDecodeMYSQLType(field->type, field->flags); - } - setAt(QSql::BeforeFirstRow); - } - setActive(true); - return isActive(); -} - -int QMYSQLResult::size() -{ - if (d->driver && isSelect()) - if (d->preparedQuery) -#if MYSQL_VERSION_ID >= 40108 - return mysql_stmt_num_rows(d->stmt); -#else - return -1; -#endif - else - return int(mysql_num_rows(d->result)); - else - return -1; -} - -int QMYSQLResult::numRowsAffected() -{ - return d->rowsAffected; -} - -QVariant QMYSQLResult::lastInsertId() const -{ - if (!isActive() || !d->driver) - return QVariant(); - - if (d->preparedQuery) { -#if MYSQL_VERSION_ID >= 40108 - quint64 id = mysql_stmt_insert_id(d->stmt); - if (id) - return QVariant(id); -#endif - } else { - quint64 id = mysql_insert_id(d->driver->d->mysql); - if (id) - return QVariant(id); - } - return QVariant(); -} - -QSqlRecord QMYSQLResult::record() const -{ - QSqlRecord info; - MYSQL_RES *res; - if (!isActive() || !isSelect() || !d->driver) - return info; - -#if MYSQL_VERSION_ID >= 40108 - res = d->preparedQuery ? d->meta : d->result; -#else - res = d->result; -#endif - - if (!mysql_errno(d->driver->d->mysql)) { - mysql_field_seek(res, 0); - MYSQL_FIELD* field = mysql_fetch_field(res); - while(field) { - info.append(qToField(field, d->driver->d->tc)); - field = mysql_fetch_field(res); - } - } - mysql_field_seek(res, 0); - return info; -} - -bool QMYSQLResult::nextResult() -{ - if(!d->driver) - return false; -#if MYSQL_VERSION_ID >= 40100 - setAt(-1); - setActive(false); - - if (d->result && isSelect()) - mysql_free_result(d->result); - d->result = 0; - setSelect(false); - - for (int i = 0; i < d->fields.count(); ++i) - delete[] d->fields[i].outField; - d->fields.clear(); - - int status = mysql_next_result(d->driver->d->mysql); - if (status > 0) { - setLastError(qMakeError(QCoreApplication::translate("QMYSQLResult", "Unable to execute next query"), - QSqlError::StatementError, d->driver->d)); - return false; - } else if (status == -1) { - return false; // No more result sets - } - - d->result = mysql_store_result(d->driver->d->mysql); - int numFields = mysql_field_count(d->driver->d->mysql); - if (!d->result && numFields > 0) { - setLastError(qMakeError(QCoreApplication::translate("QMYSQLResult", "Unable to store next result"), - QSqlError::StatementError, d->driver->d)); - return false; - } - - setSelect(numFields > 0); - d->fields.resize(numFields); - d->rowsAffected = mysql_affected_rows(d->driver->d->mysql); - - if (isSelect()) { - for (int i = 0; i < numFields; i++) { - MYSQL_FIELD* field = mysql_fetch_field_direct(d->result, i); - d->fields[i].type = qDecodeMYSQLType(field->type, field->flags); - } - } - - setActive(true); - return true; -#else - return false; -#endif -} - -#if QT_VERSION < 0x050000 -void QMYSQLResult::virtual_hook(int id, void *data) -{ - switch (id) { - case QSqlResult::NextResult: - Q_ASSERT(data); - *static_cast(data) = nextResult(); - break; - default: - QSqlResult::virtual_hook(id, data); - } -} -#endif - - -#if MYSQL_VERSION_ID >= 40108 - -static MYSQL_TIME *toMySqlDate(QDate date, QTime time, QVariant::Type type) -{ - Q_ASSERT(type == QVariant::Time || type == QVariant::Date - || type == QVariant::DateTime); - - MYSQL_TIME *myTime = new MYSQL_TIME; - memset(myTime, 0, sizeof(MYSQL_TIME)); - - if (type == QVariant::Time || type == QVariant::DateTime) { - myTime->hour = time.hour(); - myTime->minute = time.minute(); - myTime->second = time.second(); - myTime->second_part = time.msec(); - } - if (type == QVariant::Date || type == QVariant::DateTime) { - myTime->year = date.year(); - myTime->month = date.month(); - myTime->day = date.day(); - } - - return myTime; -} - -bool QMYSQLResult::prepare(const QString& query) -{ - if(!d->driver) - return false; -#if MYSQL_VERSION_ID >= 40108 - cleanup(); - if (!d->driver->d->preparedQuerysEnabled) - return QSqlResult::prepare(query); - - int r; - - if (query.isEmpty()) - return false; - - if (!d->stmt) - d->stmt = mysql_stmt_init(d->driver->d->mysql); - if (!d->stmt) { - setLastError(qMakeError(QCoreApplication::translate("QMYSQLResult", "Unable to prepare statement"), - QSqlError::StatementError, d->driver->d)); - return false; - } - - const QByteArray encQuery(fromUnicode(d->driver->d->tc, query)); - r = mysql_stmt_prepare(d->stmt, encQuery.constData(), encQuery.length()); - if (r != 0) { - setLastError(qMakeStmtError(QCoreApplication::translate("QMYSQLResult", - "Unable to prepare statement"), QSqlError::StatementError, d->stmt)); - cleanup(); - return false; - } - - if (mysql_stmt_param_count(d->stmt) > 0) {// allocate memory for outvalues - d->outBinds = new MYSQL_BIND[mysql_stmt_param_count(d->stmt)]; - } - - setSelect(d->bindInValues()); - d->preparedQuery = true; - return true; -#else - return false; -#endif -} - -bool QMYSQLResult::exec() -{ - if (!d->driver) - return false; - if (!d->preparedQuery) - return QSqlResult::exec(); - if (!d->stmt) - return false; - - int r = 0; - MYSQL_BIND* currBind; - QVector timeVector; - QVector stringVector; - QVector nullVector; - - const QVector values = boundValues(); - - r = mysql_stmt_reset(d->stmt); - if (r != 0) { - setLastError(qMakeStmtError(QCoreApplication::translate("QMYSQLResult", - "Unable to reset statement"), QSqlError::StatementError, d->stmt)); - return false; - } - - if (mysql_stmt_param_count(d->stmt) > 0 && - mysql_stmt_param_count(d->stmt) == (uint)values.count()) { - - nullVector.resize(values.count()); - for (int i = 0; i < values.count(); ++i) { - const QVariant &val = boundValues().at(i); - void *data = const_cast(val.constData()); - - currBind = &d->outBinds[i]; - - nullVector[i] = static_cast(val.isNull()); - currBind->is_null = &nullVector[i]; - currBind->length = 0; - currBind->is_unsigned = 0; - - switch (val.type()) { - case QVariant::ByteArray: - currBind->buffer_type = MYSQL_TYPE_BLOB; - currBind->buffer = const_cast(val.toByteArray().constData()); - currBind->buffer_length = val.toByteArray().size(); - break; - - case QVariant::Time: - case QVariant::Date: - case QVariant::DateTime: { - MYSQL_TIME *myTime = toMySqlDate(val.toDate(), val.toTime(), val.type()); - timeVector.append(myTime); - - currBind->buffer = myTime; - switch(val.type()) { - case QVariant::Time: - currBind->buffer_type = MYSQL_TYPE_TIME; - myTime->time_type = MYSQL_TIMESTAMP_TIME; - break; - case QVariant::Date: - currBind->buffer_type = MYSQL_TYPE_DATE; - myTime->time_type = MYSQL_TIMESTAMP_DATE; - break; - case QVariant::DateTime: - currBind->buffer_type = MYSQL_TYPE_DATETIME; - myTime->time_type = MYSQL_TIMESTAMP_DATETIME; - break; - default: - break; - } - currBind->buffer_length = sizeof(MYSQL_TIME); - currBind->length = 0; - break; } - case QVariant::UInt: - case QVariant::Int: - case QVariant::Bool: - currBind->buffer_type = MYSQL_TYPE_LONG; - currBind->buffer = data; - currBind->buffer_length = sizeof(int); - currBind->is_unsigned = (val.type() != QVariant::Int); - break; - case QVariant::Double: - currBind->buffer_type = MYSQL_TYPE_DOUBLE; - currBind->buffer = data; - currBind->buffer_length = sizeof(double); - break; - case QVariant::LongLong: - case QVariant::ULongLong: - currBind->buffer_type = MYSQL_TYPE_LONGLONG; - currBind->buffer = data; - currBind->buffer_length = sizeof(qint64); - currBind->is_unsigned = (val.type() == QVariant::ULongLong); - break; - case QVariant::String: - default: { - QByteArray ba = fromUnicode(d->driver->d->tc, val.toString()); - stringVector.append(ba); - currBind->buffer_type = MYSQL_TYPE_STRING; - currBind->buffer = const_cast(ba.constData()); - currBind->buffer_length = ba.length(); - break; } - } - } - - r = mysql_stmt_bind_param(d->stmt, d->outBinds); - if (r != 0) { - setLastError(qMakeStmtError(QCoreApplication::translate("QMYSQLResult", - "Unable to bind value"), QSqlError::StatementError, d->stmt)); - qDeleteAll(timeVector); - return false; - } - } - r = mysql_stmt_execute(d->stmt); - - qDeleteAll(timeVector); - - if (r != 0) { - setLastError(qMakeStmtError(QCoreApplication::translate("QMYSQLResult", - "Unable to execute statement"), QSqlError::StatementError, d->stmt)); - return false; - } - //if there is meta-data there is also data - setSelect(d->meta); - - d->rowsAffected = mysql_stmt_affected_rows(d->stmt); - - if (isSelect()) { - my_bool update_max_length = true; - - r = mysql_stmt_bind_result(d->stmt, d->inBinds); - if (r != 0) { - setLastError(qMakeStmtError(QCoreApplication::translate("QMYSQLResult", - "Unable to bind outvalues"), QSqlError::StatementError, d->stmt)); - return false; - } - if (d->hasBlobs) - mysql_stmt_attr_set(d->stmt, STMT_ATTR_UPDATE_MAX_LENGTH, &update_max_length); - - r = mysql_stmt_store_result(d->stmt); - if (r != 0) { - setLastError(qMakeStmtError(QCoreApplication::translate("QMYSQLResult", - "Unable to store statement results"), QSqlError::StatementError, d->stmt)); - return false; - } - - if (d->hasBlobs) { - // mysql_stmt_store_result() with STMT_ATTR_UPDATE_MAX_LENGTH set to true crashes - // when called without a preceding call to mysql_stmt_bind_result() - // in versions < 4.1.8 - d->bindBlobs(); - r = mysql_stmt_bind_result(d->stmt, d->inBinds); - if (r != 0) { - setLastError(qMakeStmtError(QCoreApplication::translate("QMYSQLResult", - "Unable to bind outvalues"), QSqlError::StatementError, d->stmt)); - return false; - } - } - setAt(QSql::BeforeFirstRow); - } - setActive(true); - return true; -} -#endif -///////////////////////////////////////////////////////// - -static int qMySqlConnectionCount = 0; -static bool qMySqlInitHandledByUser = false; - -static void qLibraryInit() -{ -#ifndef Q_NO_MYSQL_EMBEDDED -# if MYSQL_VERSION_ID >= 40000 - if (qMySqlInitHandledByUser || qMySqlConnectionCount > 1) - return; - -# if (MYSQL_VERSION_ID >= 40110 && MYSQL_VERSION_ID < 50000) || MYSQL_VERSION_ID >= 50003 - if (mysql_library_init(0, 0, 0)) { -# else - if (mysql_server_init(0, 0, 0)) { -# endif - qWarning("QMYSQLDriver::qServerInit: unable to start server."); - } -# endif // MYSQL_VERSION_ID -#endif // Q_NO_MYSQL_EMBEDDED -} - -static void qLibraryEnd() -{ -#ifndef Q_NO_MYSQL_EMBEDDED -# if MYSQL_VERSION_ID > 40000 -# if (MYSQL_VERSION_ID >= 40110 && MYSQL_VERSION_ID < 50000) || MYSQL_VERSION_ID >= 50003 - mysql_library_end(); -# else - mysql_server_end(); -# endif -# endif -#endif -} - -QMYSQLDriver::QMYSQLDriver(QObject * parent) - : QSqlDriver(parent) -{ - init(); - qLibraryInit(); -} - -/*! - Create a driver instance with the open connection handle, \a con. - The instance's parent (owner) is \a parent. -*/ - -QMYSQLDriver::QMYSQLDriver(MYSQL * con, QObject * parent) - : QSqlDriver(parent) -{ - init(); - if (con) { - d->mysql = (MYSQL *) con; -#ifndef QT_NO_TEXTCODEC - d->tc = codec(con); -#endif - setOpen(true); - setOpenError(false); - if (qMySqlConnectionCount == 1) - qMySqlInitHandledByUser = true; - } else { - qLibraryInit(); - } -} - -void QMYSQLDriver::init() -{ - d = new QMYSQLDriverPrivate(); - d->mysql = 0; - qMySqlConnectionCount++; -} - -QMYSQLDriver::~QMYSQLDriver() -{ - qMySqlConnectionCount--; - if (qMySqlConnectionCount == 0 && !qMySqlInitHandledByUser) - qLibraryEnd(); - delete d; -} - -bool QMYSQLDriver::hasFeature(DriverFeature f) const -{ - switch (f) { - case Transactions: -// CLIENT_TRANSACTION should be defined in all recent mysql client libs > 3.23.34 -#ifdef CLIENT_TRANSACTIONS - if (d->mysql) { - if ((d->mysql->server_capabilities & CLIENT_TRANSACTIONS) == CLIENT_TRANSACTIONS) - return true; - } -#endif - return false; - case NamedPlaceholders: - case BatchOperations: - case SimpleLocking: - case EventNotifications: - case FinishQuery: - return false; - case QuerySize: - case BLOB: - case LastInsertId: - case Unicode: - case LowPrecisionNumbers: - return true; - case PreparedQueries: - case PositionalPlaceholders: -#if MYSQL_VERSION_ID >= 40108 - return d->preparedQuerysEnabled; -#else - return false; -#endif - case MultipleResultSets: -#if MYSQL_VERSION_ID >= 40100 - return true; -#else - return false; -#endif - } - return false; -} - -static void setOptionFlag(uint &optionFlags, const QString &opt) -{ - if (opt == QLatin1String("CLIENT_COMPRESS")) - optionFlags |= CLIENT_COMPRESS; - else if (opt == QLatin1String("CLIENT_FOUND_ROWS")) - optionFlags |= CLIENT_FOUND_ROWS; - else if (opt == QLatin1String("CLIENT_IGNORE_SPACE")) - optionFlags |= CLIENT_IGNORE_SPACE; - else if (opt == QLatin1String("CLIENT_INTERACTIVE")) - optionFlags |= CLIENT_INTERACTIVE; - else if (opt == QLatin1String("CLIENT_NO_SCHEMA")) - optionFlags |= CLIENT_NO_SCHEMA; - else if (opt == QLatin1String("CLIENT_ODBC")) - optionFlags |= CLIENT_ODBC; - else if (opt == QLatin1String("CLIENT_SSL")) - optionFlags |= CLIENT_SSL; - else - qWarning("QMYSQLDriver::open: Unknown connect option '%s'", opt.toLocal8Bit().constData()); -} - -bool QMYSQLDriver::open(const QString& db, - const QString& user, - const QString& password, - const QString& host, - int port, - const QString& connOpts) -{ - if (isOpen()) - close(); - - /* This is a hack to get MySQL's stored procedure support working. - Since a stored procedure _may_ return multiple result sets, - we have to enable CLIEN_MULTI_STATEMENTS here, otherwise _any_ - stored procedure call will fail. - */ - unsigned int optionFlags = Q_CLIENT_MULTI_STATEMENTS; - const QStringList opts(connOpts.split(QLatin1Char(';'), QString::SkipEmptyParts)); - QString unixSocket; -#if MYSQL_VERSION_ID >= 50000 - my_bool reconnect=false; -#endif - - // extract the real options from the string - for (int i = 0; i < opts.count(); ++i) { - QString tmp(opts.at(i).simplified()); - int idx; - if ((idx = tmp.indexOf(QLatin1Char('='))) != -1) { - QString val = tmp.mid(idx + 1).simplified(); - QString opt = tmp.left(idx).simplified(); - if (opt == QLatin1String("UNIX_SOCKET")) - unixSocket = val; -#if MYSQL_VERSION_ID >= 50000 - else if (opt == QLatin1String("MYSQL_OPT_RECONNECT")) { - if (val == QLatin1String("TRUE") || val == QLatin1String("1") || val.isEmpty()) - reconnect = true; - } -#endif - else if (val == QLatin1String("TRUE") || val == QLatin1String("1")) - setOptionFlag(optionFlags, tmp.left(idx).simplified()); - else - qWarning("QMYSQLDriver::open: Illegal connect option value '%s'", - tmp.toLocal8Bit().constData()); - } else { - setOptionFlag(optionFlags, tmp); - } - } - - if ((d->mysql = mysql_init((MYSQL*) 0)) && - mysql_real_connect(d->mysql, - host.isNull() ? static_cast(0) - : host.toLocal8Bit().constData(), - user.isNull() ? static_cast(0) - : user.toLocal8Bit().constData(), - password.isNull() ? static_cast(0) - : password.toLocal8Bit().constData(), - db.isNull() ? static_cast(0) - : db.toLocal8Bit().constData(), - (port > -1) ? port : 0, - unixSocket.isNull() ? static_cast(0) - : unixSocket.toLocal8Bit().constData(), - optionFlags)) - { - if (!db.isEmpty() && mysql_select_db(d->mysql, db.toLocal8Bit().constData())) { - setLastError(qMakeError(tr("Unable to open database '") + db + - QLatin1Char('\''), QSqlError::ConnectionError, d)); - mysql_close(d->mysql); - setOpenError(true); - return false; - } -#if MYSQL_VERSION_ID >= 50000 - if(reconnect) - mysql_options(d->mysql, MYSQL_OPT_RECONNECT, &reconnect); -#endif - } else { - setLastError(qMakeError(tr("Unable to connect"), - QSqlError::ConnectionError, d)); - mysql_close(d->mysql); - d->mysql = NULL; - setOpenError(true); - return false; - } - -#if (MYSQL_VERSION_ID >= 40113 && MYSQL_VERSION_ID < 50000) || MYSQL_VERSION_ID >= 50007 - // force the communication to be utf8 - mysql_set_character_set(d->mysql, "utf8"); -#endif -#ifndef QT_NO_TEXTCODEC - d->tc = codec(d->mysql); -#endif - -#if MYSQL_VERSION_ID >= 40108 - d->preparedQuerysEnabled = mysql_get_client_version() >= 40108 - && mysql_get_server_version(d->mysql) >= 40100; -#else - d->preparedQuerysEnabled = false; -#endif - -#ifndef QT_NO_THREAD - mysql_thread_init(); -#endif - - - setOpen(true); - setOpenError(false); - return true; -} - -void QMYSQLDriver::close() -{ - if (isOpen()) { -#ifndef QT_NO_THREAD - mysql_thread_end(); -#endif - mysql_close(d->mysql); - d->mysql = NULL; - setOpen(false); - setOpenError(false); - } -} - -QSqlResult *QMYSQLDriver::createResult() const -{ - return new QMYSQLResult(this); -} - -QStringList QMYSQLDriver::tables(QSql::TableType type) const -{ - QStringList tl; -#if MYSQL_VERSION_ID >= 40100 - if( mysql_get_server_version(d->mysql) < 50000) - { -#endif - if (!isOpen()) - return tl; - if (!(type & QSql::Tables)) - return tl; - - MYSQL_RES* tableRes = mysql_list_tables(d->mysql, NULL); - MYSQL_ROW row; - int i = 0; - while (tableRes) { - mysql_data_seek(tableRes, i); - row = mysql_fetch_row(tableRes); - if (!row) - break; - tl.append(toUnicode(d->tc, row[0])); - i++; - } - mysql_free_result(tableRes); -#if MYSQL_VERSION_ID >= 40100 - } else { - QSqlQuery q(createResult()); - if(type & QSql::Tables) { - q.exec(QLatin1String("select table_name from information_schema.tables where table_type = 'BASE TABLE'")); - while(q.next()) - tl.append(q.value(0).toString()); - } - if(type & QSql::Views) { - q.exec(QLatin1String("select table_name from information_schema.tables where table_type = 'VIEW'")); - while(q.next()) - tl.append(q.value(0).toString()); - } - } -#endif - return tl; -} - -QSqlIndex QMYSQLDriver::primaryIndex(const QString& tablename) const -{ - QSqlIndex idx; - if (!isOpen()) - return idx; - - QSqlQuery i(createResult()); - QString stmt(QLatin1String("show index from %1;")); - QSqlRecord fil = record(tablename); - i.exec(stmt.arg(tablename)); - while (i.isActive() && i.next()) { - if (i.value(2).toString() == QLatin1String("PRIMARY")) { - idx.append(fil.field(i.value(4).toString())); - idx.setCursorName(i.value(0).toString()); - idx.setName(i.value(2).toString()); - } - } - - return idx; -} - -QSqlRecord QMYSQLDriver::record(const QString& tablename) const -{ - QString table=tablename; - if(isIdentifierEscaped(table, QSqlDriver::TableName)) - table = stripDelimiters(table, QSqlDriver::TableName); - - QSqlRecord info; - if (!isOpen()) - return info; - MYSQL_RES* r = mysql_list_fields(d->mysql, table.toLocal8Bit().constData(), 0); - if (!r) { - return info; - } - MYSQL_FIELD* field; - - while ((field = mysql_fetch_field(r))) - info.append(qToField(field, d->tc)); - mysql_free_result(r); - return info; -} - -QVariant QMYSQLDriver::handle() const -{ - return qVariantFromValue(d->mysql); -} - -bool QMYSQLDriver::beginTransaction() -{ -#ifndef CLIENT_TRANSACTIONS - return false; -#endif - if (!isOpen()) { - qWarning("QMYSQLDriver::beginTransaction: Database not open"); - return false; - } - if (mysql_query(d->mysql, "BEGIN WORK")) { - setLastError(qMakeError(tr("Unable to begin transaction"), - QSqlError::StatementError, d)); - return false; - } - return true; -} - -bool QMYSQLDriver::commitTransaction() -{ -#ifndef CLIENT_TRANSACTIONS - return false; -#endif - if (!isOpen()) { - qWarning("QMYSQLDriver::commitTransaction: Database not open"); - return false; - } - if (mysql_query(d->mysql, "COMMIT")) { - setLastError(qMakeError(tr("Unable to commit transaction"), - QSqlError::StatementError, d)); - return false; - } - return true; -} - -bool QMYSQLDriver::rollbackTransaction() -{ -#ifndef CLIENT_TRANSACTIONS - return false; -#endif - if (!isOpen()) { - qWarning("QMYSQLDriver::rollbackTransaction: Database not open"); - return false; - } - if (mysql_query(d->mysql, "ROLLBACK")) { - setLastError(qMakeError(tr("Unable to rollback transaction"), - QSqlError::StatementError, d)); - return false; - } - return true; -} - -QString QMYSQLDriver::formatValue(const QSqlField &field, bool trimStrings) const -{ - QString r; - if (field.isNull()) { - r = QLatin1String("NULL"); - } else { - switch(field.type()) { - case QVariant::String: - // Escape '\' characters - r = QSqlDriver::formatValue(field, trimStrings); - r.replace(QLatin1String("\\"), QLatin1String("\\\\")); - break; - case QVariant::ByteArray: - if (isOpen()) { - const QByteArray ba = field.value().toByteArray(); - // buffer has to be at least length*2+1 bytes - char* buffer = new char[ba.size() * 2 + 1]; - int escapedSize = int(mysql_real_escape_string(d->mysql, buffer, - ba.data(), ba.size())); - r.reserve(escapedSize + 3); - r.append(QLatin1Char('\'')).append(toUnicode(d->tc, buffer)).append(QLatin1Char('\'')); - delete[] buffer; - break; - } else { - qWarning("QMYSQLDriver::formatValue: Database not open"); - } - // fall through - default: - r = QSqlDriver::formatValue(field, trimStrings); - } - } - return r; -} - -QString QMYSQLDriver::escapeIdentifier(const QString &identifier, IdentifierType) const -{ - QString res = identifier; - if(!identifier.isEmpty() && !identifier.startsWith(QLatin1Char('`')) && !identifier.endsWith(QLatin1Char('`')) ) { - res.prepend(QLatin1Char('`')).append(QLatin1Char('`')); - res.replace(QLatin1Char('.'), QLatin1String("`.`")); - } - return res; -} - -bool QMYSQLDriver::isIdentifierEscapedImplementation(const QString &identifier, IdentifierType type) const -{ - Q_UNUSED(type); - return identifier.size() > 2 - && identifier.startsWith(QLatin1Char('`')) //left delimited - && identifier.endsWith(QLatin1Char('`')); //right delimited -} - -QT_END_NAMESPACE - -#include "qsql_mysql.moc" diff --git a/MySQLDriver/SYSZUXmysql/src/qsql_mysql.h b/MySQLDriver/SYSZUXmysql/src/qsql_mysql.h deleted file mode 100644 index 9fb8223..0000000 --- a/MySQLDriver/SYSZUXmysql/src/qsql_mysql.h +++ /dev/null @@ -1,149 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtSql module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial Usage -** Licensees holding valid Qt Commercial licenses may use this file in -** accordance with the Qt Commercial License Agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Nokia. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QSQL_MYSQL_H -#define QSQL_MYSQL_H - -#include -#include - -#if defined (Q_OS_WIN32) -#include -#endif - -#include "SYSZUXmysql/mysql.h" - -#ifdef QT_PLUGIN -#define Q_EXPORT_SQLDRIVER_MYSQL -#else -#define Q_EXPORT_SQLDRIVER_MYSQL Q_SQL_EXPORT -#endif - -QT_BEGIN_HEADER - -QT_BEGIN_NAMESPACE - -class QMYSQLDriverPrivate; -class QMYSQLResultPrivate; -class QMYSQLDriver; -class QSqlRecordInfo; - - -class QMYSQLResult : public QSqlResult -{ - friend class QMYSQLDriver; - friend class QMYSQLResultPrivate; -public: - explicit QMYSQLResult(const QMYSQLDriver* db); - ~QMYSQLResult(); - - QVariant handle() const; -protected: - void cleanup(); - bool fetch(int i); - bool fetchNext(); - bool fetchLast(); - bool fetchFirst(); - QVariant data(int field); - bool isNull(int field); - bool reset (const QString& query); - int size(); - int numRowsAffected(); - QVariant lastInsertId() const; - QSqlRecord record() const; -#if QT_VERSION < 0x050000 - void virtual_hook(int id, void *data); -#endif - bool nextResult(); - -#if MYSQL_VERSION_ID >= 40108 - bool prepare(const QString& stmt); - bool exec(); -#endif -private: - QMYSQLResultPrivate* d; -}; - -class Q_EXPORT_SQLDRIVER_MYSQL QMYSQLDriver : public QSqlDriver -{ - Q_OBJECT -#if QT_VERSION >= 0x050000 - Q_PLUGIN_METADATA(IID "QMYSQLDriverPlugin") -#endif - friend class QMYSQLResult; -public: - explicit QMYSQLDriver(QObject *parent=0); - explicit QMYSQLDriver(MYSQL *con, QObject * parent=0); - ~QMYSQLDriver(); - bool hasFeature(DriverFeature f) const; - bool open(const QString & db, - const QString & user, - const QString & password, - const QString & host, - int port, - const QString& connOpts); - void close(); - QSqlResult *createResult() const; - QStringList tables(QSql::TableType) const; - QSqlIndex primaryIndex(const QString& tablename) const; - QSqlRecord record(const QString& tablename) const; - QString formatValue(const QSqlField &field, - bool trimStrings) const; - QVariant handle() const; - QString escapeIdentifier(const QString &identifier, IdentifierType type) const; - -protected Q_SLOTS: - bool isIdentifierEscapedImplementation(const QString &identifier, IdentifierType type) const; - -protected: - bool beginTransaction(); - bool commitTransaction(); - bool rollbackTransaction(); -private: - void init(); - QMYSQLDriverPrivate* d; -}; - -QT_END_NAMESPACE - -QT_END_HEADER - -#endif // QSQL_MYSQL_H diff --git a/PluginFramework.pro b/PluginFramework.pro index 656c212..bf4e3a1 100644 --- a/PluginFramework.pro +++ b/PluginFramework.pro @@ -1,6 +1,5 @@ TEMPLATE = subdirs -lessThan(QT_MAJOR_VERSION, 5) { SUBDIRS += \ Main \ Plugins/UserManagementIF \ @@ -12,20 +11,4 @@ SUBDIRS += \ Plugins/Sell_Invoicing \ Plugins/Cash_Invoicing \ Plugins/Statistic_Invoicing \ - MySQLDriver/SYSZUXmysql \ RegisterTool -} -else{ -SUBDIRS += \ - Main \ - Plugins/UserManagementIF \ - Plugins/ProductManagementIF \ - Plugins/UserManagement_Invoicing \ - Plugins/UpdateProductDialog \ - Plugins/Purchase_Invoicing \ - Plugins/Storage_Invoicing \ - Plugins/Sell_Invoicing \ - Plugins/Cash_Invoicing \ - Plugins/Statistic_Invoicing \ - RegisterTool -} diff --git a/Plugins/Cash_Invoicing/Cash_Invoicing_global.h b/Plugins/Cash_Invoicing/Cash_Invoicing_global.h index 175d99e..de37bbb 100644 --- a/Plugins/Cash_Invoicing/Cash_Invoicing_global.h +++ b/Plugins/Cash_Invoicing/Cash_Invoicing_global.h @@ -1,5 +1,4 @@ -#ifndef CASH_INVOICING_GLOBAL_H -#define CASH_INVOICING_GLOBAL_H +#pragma once #include @@ -8,5 +7,3 @@ #else # define CASH_INVOICINGSHARED_EXPORT Q_DECL_IMPORT #endif - -#endif // CASH_INVOICING_GLOBAL_H diff --git a/Plugins/Cash_Invoicing/cash_invoicing.cpp b/Plugins/Cash_Invoicing/cash_invoicing.cpp index dc5e16c..0a1424c 100644 --- a/Plugins/Cash_Invoicing/cash_invoicing.cpp +++ b/Plugins/Cash_Invoicing/cash_invoicing.cpp @@ -1,10 +1,12 @@ -#include +#include #include + #include "cash_invoicing.h" +#include "cashupdateproductdialog.h" +#include "helper.h" #include "mainwindow.h" -#include "usermanagement_interface.h" #include "productmanagement_interface.h" -#include "cashupdateproductdialog.h" +#include "usermanagement_interface.h" Cash_Invoicing::Cash_Invoicing(): parentWindow(NULL), @@ -15,13 +17,7 @@ Cash_Invoicing::Cash_Invoicing(): serialNumberLineEdit(NULL), filterPushButton(NULL) { - QDir qmdir(":/Translations"); - foreach (QString fileName, qmdir.entryList(QDir::Files)) { - //qDebug()<load(QFileInfo(fileName).baseName(), ":/Translations"); - QApplication::instance()->installTranslator(qtTranslator); - } + INSTALL_TRANSLATION; } @@ -335,9 +331,3 @@ void Cash_Invoicing::productUpdated() cashModel->select(); cashView->resizeColumnsToContents(); } - -QT_BEGIN_NAMESPACE -#if QT_VERSION < 0x050000 -Q_EXPORT_PLUGIN2(Cash_Invoicing, Cash_Invoicing) -#endif -QT_END_NAMESPACE diff --git a/Plugins/Cash_Invoicing/cash_invoicing.h b/Plugins/Cash_Invoicing/cash_invoicing.h index cc39387..a0a3ad8 100644 --- a/Plugins/Cash_Invoicing/cash_invoicing.h +++ b/Plugins/Cash_Invoicing/cash_invoicing.h @@ -1,9 +1,9 @@ -#ifndef CASH_INVOICING_H -#define CASH_INVOICING_H +#pragma once #include #include #include + #include "Cash_Invoicing_global.h" QT_BEGIN_NAMESPACE @@ -21,9 +21,7 @@ class CASH_INVOICINGSHARED_EXPORT Cash_Invoicing : public QObject, public PluginInterface, public UserChangeNotifyInterface { Q_OBJECT -#if QT_VERSION >= 0x050000 Q_PLUGIN_METADATA(IID "Cash_Invoicing") -#endif Q_INTERFACES(PluginInterface UserChangeNotifyInterface) public: Cash_Invoicing(); @@ -71,5 +69,3 @@ private slots: QPushButton *filterPushButton; }; - -#endif // CASH_INVOICING_H diff --git a/Plugins/Cash_Invoicing/cashupdateproductdialog.cpp b/Plugins/Cash_Invoicing/cashupdateproductdialog.cpp index 61a191c..2572dcb 100644 --- a/Plugins/Cash_Invoicing/cashupdateproductdialog.cpp +++ b/Plugins/Cash_Invoicing/cashupdateproductdialog.cpp @@ -1,5 +1,5 @@ -#include "cashupdateproductdialog.h" -#if QT_VERSION >= 0x050000 +#include "cashupdateproductdialog.h" + #include #include #include @@ -13,9 +13,6 @@ #include #include #include -#else -#include -#endif CashUpdateProductDialog::CashUpdateProductDialog(UserManagementInterface *userManagementInterface, ProductManagementInterface *productManagementInterface, diff --git a/Plugins/Cash_Invoicing/cashupdateproductdialog.h b/Plugins/Cash_Invoicing/cashupdateproductdialog.h index 1fb28fb..3c6faa5 100644 --- a/Plugins/Cash_Invoicing/cashupdateproductdialog.h +++ b/Plugins/Cash_Invoicing/cashupdateproductdialog.h @@ -1,5 +1,4 @@ -#ifndef CASHUPDATEPRODUCTDIALOG_H -#define CASHUPDATEPRODUCTDIALOG_H +#pragma once #include "updateproductdialog.h" @@ -33,5 +32,3 @@ private slots: QDialogButtonBox *updateProductButtonBox; QPrinter *printer; }; - -#endif // CASHUPDATEPRODUCTDIALOG_H diff --git a/Plugins/ProductManagementIF/ProductManagementIF_global.h b/Plugins/ProductManagementIF/ProductManagementIF_global.h index 63a2f86..a5e0026 100644 --- a/Plugins/ProductManagementIF/ProductManagementIF_global.h +++ b/Plugins/ProductManagementIF/ProductManagementIF_global.h @@ -1,5 +1,4 @@ -#ifndef PRODUCTMANAGEMENTIF_GLOBAL_H -#define PRODUCTMANAGEMENTIF_GLOBAL_H +#pragma once #include @@ -8,5 +7,3 @@ #else # define PRODUCTMANAGEMENTIFSHARED_EXPORT Q_DECL_IMPORT #endif - -#endif // PRODUCTMANAGEMENTIF_GLOBAL_H diff --git a/Plugins/ProductManagementIF/productmanagementif.cpp b/Plugins/ProductManagementIF/productmanagementif.cpp index 3b012e9..ce94dfc 100644 --- a/Plugins/ProductManagementIF/productmanagementif.cpp +++ b/Plugins/ProductManagementIF/productmanagementif.cpp @@ -1,14 +1,13 @@ -#include -#if QT_VERSION < 0x050000 -#include -#else +#include #include -#endif + #include "mainwindow.h" #include #include #include "productmanagementif.h" +#include "helper.h" + const QStringList ProductManagementInterface::defaultProductType = QStringList() <<"其它"<<"手机"<<"手机卡"<<"手机配件"<<"平板电脑"; const QStringList ProductManagementInterface::defaultBrandName @@ -22,13 +21,7 @@ const QStringList ProductManagementInterface::replacementStatus = QStringList() ProductManagementIF::ProductManagementIF(): userManagementInterface(NULL) { - QDir qmdir(":/Translations"); - foreach (QString fileName, qmdir.entryList(QDir::Files)) { - //qDebug()<load(QFileInfo(fileName).baseName(), ":/Translations"); - QApplication::instance()->installTranslator(qtTranslator); - } + INSTALL_TRANSLATION; } ProductManagementIF::~ProductManagementIF() @@ -478,11 +471,11 @@ bool ProductManagementIF::isModelOutdate(QSqlRelationalTableModel* model, QStrin int fromIndex = queryString.indexOf("from", 0, Qt::CaseInsensitive); queryString.insert(fromIndex, ") "); queryString.insert(selectIndex+QString("select").length(), " count("); - QRegExp reg1("count\\(.*\\)"); - reg1.setMinimal(true); + QRegularExpression reg1("count\\(.*\\)"); + reg1.setPatternOptions(QRegularExpression::InvertedGreedinessOption); queryString.replace(reg1, "count(*)"); - QRegExp reg2("order by.*"); - reg2.setCaseSensitivity(Qt::CaseInsensitive); + QRegularExpression reg2("order by.*"); + reg2.setPatternOptions(QRegularExpression::CaseInsensitiveOption); queryString.remove(reg2); QSqlQuery query(userManagementInterface->getSqlQuery()); query.exec(queryString); @@ -919,8 +912,3 @@ bool ProductManagementIF::createProductManagementTables() const } return true; } -QT_BEGIN_NAMESPACE -#if QT_VERSION < 0x050000 -Q_EXPORT_PLUGIN2(ProductManagementIF, ProductManagementIF) -#endif -QT_END_NAMESPACE diff --git a/Plugins/ProductManagementIF/productmanagementif.h b/Plugins/ProductManagementIF/productmanagementif.h index f08749f..e6d9cec 100644 --- a/Plugins/ProductManagementIF/productmanagementif.h +++ b/Plugins/ProductManagementIF/productmanagementif.h @@ -1,5 +1,4 @@ -#ifndef PRODUCTMANAGEMENTIF_H -#define PRODUCTMANAGEMENTIF_H +#pragma once #include #include @@ -13,9 +12,7 @@ class PRODUCTMANAGEMENTIFSHARED_EXPORT ProductManagementIF : public QObject, public PluginInterface, public ProductManagementInterface { Q_OBJECT -#if QT_VERSION >= 0x050000 Q_PLUGIN_METADATA(IID "ProductManagementIF") -#endif Q_INTERFACES(PluginInterface ProductManagementInterface) public: ProductManagementIF(); @@ -104,5 +101,3 @@ class PRODUCTMANAGEMENTIFSHARED_EXPORT ProductManagementIF : private: UserManagementInterface *userManagementInterface; }; - -#endif // PRODUCTMANAGEMENTIF_H diff --git a/Plugins/Purchase_Invoicing/Purchase_Invoicing_global.h b/Plugins/Purchase_Invoicing/Purchase_Invoicing_global.h index f7bf8b4..83e3273 100644 --- a/Plugins/Purchase_Invoicing/Purchase_Invoicing_global.h +++ b/Plugins/Purchase_Invoicing/Purchase_Invoicing_global.h @@ -1,5 +1,4 @@ -#ifndef PURCHASE_INVOICING_GLOBAL_H -#define PURCHASE_INVOICING_GLOBAL_H +#pragma once #include @@ -8,5 +7,3 @@ #else # define PURCHASE_INVOICINGSHARED_EXPORT Q_DECL_IMPORT #endif - -#endif // PURCHASE_INVOICING_GLOBAL_H diff --git a/Plugins/Purchase_Invoicing/addproductdialog.h b/Plugins/Purchase_Invoicing/addproductdialog.h index bd0bc1d..903eaa9 100644 --- a/Plugins/Purchase_Invoicing/addproductdialog.h +++ b/Plugins/Purchase_Invoicing/addproductdialog.h @@ -1,5 +1,4 @@ -#ifndef ADDPRODUCTDIALOG_H -#define ADDPRODUCTDIALOG_H +#pragma once #include "updateproductdialog.h" @@ -21,5 +20,3 @@ private slots: void init(); bool checkInput(); }; - -#endif // ADDPRODUCTDIALOG_H diff --git a/Plugins/Purchase_Invoicing/purchase_invoicing.cpp b/Plugins/Purchase_Invoicing/purchase_invoicing.cpp index bca256e..27cf401 100644 --- a/Plugins/Purchase_Invoicing/purchase_invoicing.cpp +++ b/Plugins/Purchase_Invoicing/purchase_invoicing.cpp @@ -1,12 +1,14 @@ -#include +#include #include #include -#include "purchase_invoicing.h" + +#include "addproductdialog.h" +#include "helper.h" #include "mainwindow.h" -#include "usermanagement_interface.h" #include "productmanagement_interface.h" -#include "addproductdialog.h" +#include "purchase_invoicing.h" #include "updateproductdialog.h" +#include "usermanagement_interface.h" Purchase_Invoicing::Purchase_Invoicing() : mainWidget(NULL), @@ -49,13 +51,7 @@ Purchase_Invoicing::Purchase_Invoicing() : commentsComboBox(NULL), skip1stRowCheckBox(NULL) { - QDir qmdir(":/Translations"); - foreach (QString fileName, qmdir.entryList(QDir::Files)) { - //qDebug()<load(QFileInfo(fileName).baseName(), ":/Translations"); - QApplication::instance()->installTranslator(qtTranslator); - } + INSTALL_TRANSLATION; initImportConfigFile(); } @@ -1298,9 +1294,3 @@ void Purchase_Invoicing::initImportConfigFile() importConfig.setValue("config/Skip1stRow", true); } } - -QT_BEGIN_NAMESPACE -#if QT_VERSION < 0x050000 -Q_EXPORT_PLUGIN2(Purchase_Invoicing, Purchase_Invoicing) -#endif -QT_END_NAMESPACE diff --git a/Plugins/Purchase_Invoicing/purchase_invoicing.h b/Plugins/Purchase_Invoicing/purchase_invoicing.h index f7f71c6..b307f96 100644 --- a/Plugins/Purchase_Invoicing/purchase_invoicing.h +++ b/Plugins/Purchase_Invoicing/purchase_invoicing.h @@ -1,9 +1,9 @@ -#ifndef PURCHASE_INVOICING_H -#define PURCHASE_INVOICING_H +#pragma once #include #include #include + #include "Purchase_Invoicing_global.h" @@ -30,9 +30,7 @@ class PURCHASE_INVOICINGSHARED_EXPORT Purchase_Invoicing : public QObject, public PluginInterface, public UserChangeNotifyInterface { Q_OBJECT -#if QT_VERSION >= 0x050000 Q_PLUGIN_METADATA(IID "Purchase_Invoicing") -#endif Q_INTERFACES(PluginInterface UserChangeNotifyInterface) public: Purchase_Invoicing(); @@ -127,5 +125,3 @@ private slots: QComboBox *commentsComboBox; QCheckBox *skip1stRowCheckBox; }; - -#endif // PURCHASE_INVOICING_H diff --git a/Plugins/Sell_Invoicing/Sell_Invoicing_global.h b/Plugins/Sell_Invoicing/Sell_Invoicing_global.h index 9e55611..89c29a4 100644 --- a/Plugins/Sell_Invoicing/Sell_Invoicing_global.h +++ b/Plugins/Sell_Invoicing/Sell_Invoicing_global.h @@ -1,5 +1,4 @@ -#ifndef SELL_INVOICING_GLOBAL_H -#define SELL_INVOICING_GLOBAL_H +#pragma once #include @@ -8,5 +7,3 @@ #else # define SELL_INVOICINGSHARED_EXPORT Q_DECL_IMPORT #endif - -#endif // SELL_INVOICING_GLOBAL_H diff --git a/Plugins/Sell_Invoicing/sell_invoicing.cpp b/Plugins/Sell_Invoicing/sell_invoicing.cpp index 4a0e756..965499e 100644 --- a/Plugins/Sell_Invoicing/sell_invoicing.cpp +++ b/Plugins/Sell_Invoicing/sell_invoicing.cpp @@ -1,10 +1,12 @@ -#include +#include #include -#include "sell_invoicing.h" + +#include "helper.h" #include "mainwindow.h" -#include "usermanagement_interface.h" #include "productmanagement_interface.h" +#include "sell_invoicing.h" #include "sellupdateproductdialog.h" +#include "usermanagement_interface.h" Sell_Invoicing::Sell_Invoicing(): parentWindow(NULL), @@ -24,13 +26,7 @@ Sell_Invoicing::Sell_Invoicing(): serialNumberLineEdit(NULL), filterPushButton(NULL) { - QDir qmdir(":/Translations"); - foreach (QString fileName, qmdir.entryList(QDir::Files)) { - //qDebug()<load(QFileInfo(fileName).baseName(), ":/Translations"); - QApplication::instance()->installTranslator(qtTranslator); - } + INSTALL_TRANSLATION; } QWidget* Sell_Invoicing::getMainWidget() const @@ -560,10 +556,3 @@ void Sell_Invoicing::updateOrderFilter() orderModel->setFilter(filter); } - - -QT_BEGIN_NAMESPACE -#if QT_VERSION < 0x050000 -Q_EXPORT_PLUGIN2(Sell_Invoicing, Sell_Invoicing) -#endif -QT_END_NAMESPACE diff --git a/Plugins/Sell_Invoicing/sell_invoicing.h b/Plugins/Sell_Invoicing/sell_invoicing.h index bd7e74d..8ad4e65 100644 --- a/Plugins/Sell_Invoicing/sell_invoicing.h +++ b/Plugins/Sell_Invoicing/sell_invoicing.h @@ -1,5 +1,4 @@ -#ifndef SELL_INVOICING_H -#define SELL_INVOICING_H +#pragma once #include #include @@ -22,9 +21,7 @@ class SELL_INVOICINGSHARED_EXPORT Sell_Invoicing : public QObject, public PluginInterface, public UserChangeNotifyInterface { Q_OBJECT -#if QT_VERSION >= 0x050000 Q_PLUGIN_METADATA(IID "Sell_Invoicing") -#endif Q_INTERFACES(PluginInterface UserChangeNotifyInterface) public: Sell_Invoicing(); @@ -85,5 +82,3 @@ private slots: QString storageTimeStamp; }; - -#endif // SELL_INVOICING_H diff --git a/Plugins/Sell_Invoicing/sellupdateproductdialog.cpp b/Plugins/Sell_Invoicing/sellupdateproductdialog.cpp index c63607c..faca0d9 100644 --- a/Plugins/Sell_Invoicing/sellupdateproductdialog.cpp +++ b/Plugins/Sell_Invoicing/sellupdateproductdialog.cpp @@ -1,5 +1,5 @@ -#include "sellupdateproductdialog.h" -#if QT_VERSION >= 0x050000 +#include "sellupdateproductdialog.h" + #include #include #include @@ -11,9 +11,6 @@ #include #include #include -#else -#include -#endif SellUpdateProductDialog::SellUpdateProductDialog(UserManagementInterface *userManagementInterface, ProductManagementInterface *productManagementInterface, diff --git a/Plugins/Sell_Invoicing/sellupdateproductdialog.h b/Plugins/Sell_Invoicing/sellupdateproductdialog.h index ee5e781..f45fbcc 100644 --- a/Plugins/Sell_Invoicing/sellupdateproductdialog.h +++ b/Plugins/Sell_Invoicing/sellupdateproductdialog.h @@ -1,5 +1,4 @@ -#ifndef SELLUPDATEPRODUCTDIALOG_H -#define SELLUPDATEPRODUCTDIALOG_H +#pragma once #include "updateproductdialog.h" @@ -23,5 +22,3 @@ public slots: bool checkInput(); }; - -#endif // SELLUPDATEPRODUCTDIALOG_H diff --git a/Plugins/Statistic_Invoicing/Statistic_Invoicing.pro b/Plugins/Statistic_Invoicing/Statistic_Invoicing.pro index b1c05dc..b1f164f 100644 --- a/Plugins/Statistic_Invoicing/Statistic_Invoicing.pro +++ b/Plugins/Statistic_Invoicing/Statistic_Invoicing.pro @@ -4,8 +4,16 @@ # #------------------------------------------------- +#include( qwtconfig.pri ) + QT += sql widgets printsupport +# QXlsx code for Application Qt project +QXLSX_PARENTPATH=./ # current QXlsx path is . (. means curret directory) +QXLSX_HEADERPATH=./header/ # current QXlsx header path is ./header/ +QXLSX_SOURCEPATH=./source/ # current QXlsx source path is ./source/ +include(./QXlsx.pri) + TARGET = Statistic_Invoicing TEMPLATE = lib CONFIG += plugin copy_dir_files @@ -37,7 +45,7 @@ HEADERS += statistic_invoicing.h\ symbian { MMP_RULES += EXPORTUNFROZEN TARGET.UID3 = 0xED5A9B43 - TARGET.CAPABILITY = + TARGET.CAPABILITY = TARGET.EPOCALLOWDLLDATA = 1 addFiles.sources = Statistic_Invoicing.dll addFiles.path = !:/sys/bin diff --git a/Plugins/Statistic_Invoicing/Statistic_Invoicing_global.h b/Plugins/Statistic_Invoicing/Statistic_Invoicing_global.h index fe9d25a..287c023 100644 --- a/Plugins/Statistic_Invoicing/Statistic_Invoicing_global.h +++ b/Plugins/Statistic_Invoicing/Statistic_Invoicing_global.h @@ -1,5 +1,4 @@ -#ifndef STATISTIC_INVOICING_GLOBAL_H -#define STATISTIC_INVOICING_GLOBAL_H +#pragma once #include @@ -8,5 +7,3 @@ #else # define STATISTIC_INVOICINGSHARED_EXPORT Q_DECL_IMPORT #endif - -#endif // STATISTIC_INVOICING_GLOBAL_H diff --git a/Plugins/Statistic_Invoicing/barchart.cpp b/Plugins/Statistic_Invoicing/barchart.cpp index bfb3846..1a1d9c1 100644 --- a/Plugins/Statistic_Invoicing/barchart.cpp +++ b/Plugins/Statistic_Invoicing/barchart.cpp @@ -1,4 +1,5 @@ -#include "barchart.h" +#include "barchart.h" + #include #include #include @@ -6,7 +7,6 @@ #include #include #include -#if QT_VERSION >= 0x050000 #include #include #include @@ -20,9 +20,6 @@ #include #include #include -#else -#include -#endif BarChart::BarChart(QWidget *parent): QwtPlot(parent), @@ -98,19 +95,19 @@ void BarChart::populate() QList keys = salesData.keys(); switch (sortArg.sortType){ case SORTBYVOLUMEASCEND: - qSort(keys.begin(), keys.end(), SortByVolumeAscend(salesData)); + std::sort(keys.begin(), keys.end(), SortByVolumeAscend(salesData)); break; case SORTBYVOLUMEDESCEND: - qSort(keys.begin(), keys.end(), SortByVolumeDescend(salesData)); + std::sort(keys.begin(), keys.end(), SortByVolumeDescend(salesData)); break; case SORTBYQUANTITYASCEND: - qSort(keys.begin(), keys.end(), SortByQuantityAscend(salesData)); + std::sort(keys.begin(), keys.end(), SortByQuantityAscend(salesData)); break; case SORTBYQUANTITYDESCEND: - qSort(keys.begin(), keys.end(), SortByQuantityDescend(salesData)); + std::sort(keys.begin(), keys.end(), SortByQuantityDescend(salesData)); break; default: - qSort(keys.begin(), keys.end(), SortByVolumeDescend(salesData)); + std::sort(keys.begin(), keys.end(), SortByVolumeDescend(salesData)); } int finalRange = salesData.count()>sortArg.peopleRange? @@ -214,18 +211,20 @@ void BarChart::exportChart() void BarChart::printChart() { QPrinter printer(QPrinter::HighResolution); - printer.setOrientation(QPrinter::Landscape); + printer.setPageOrientation(QPageLayout::Landscape); QPrintDialog *dialog = new QPrintDialog(&printer, this); dialog->setWindowTitle(tr("Print Statistic Chart")); if (dialog->exec() == QDialog::Accepted) { QPainter painter; painter.begin(&printer); - double xscale = printer.pageRect().width()/double(width()); - double yscale = printer.pageRect().height()/double(height()); + double xscale = printer.pageRect(QPrinter::DevicePixel).width() / double(width()); + double yscale = printer.pageRect(QPrinter::DevicePixel).height() / double(height()); double scale = qMin(xscale, yscale); - painter.translate(printer.paperRect().x() + printer.pageRect().width()/2, - printer.paperRect().y() + printer.pageRect().height()/2); + painter.translate(printer.paperRect(QPrinter::DevicePixel).x() + + printer.pageRect(QPrinter::DevicePixel).width() / 2, + printer.paperRect(QPrinter::DevicePixel).y() + + printer.pageRect(QPrinter::DevicePixel).height() / 2); painter.scale(scale, scale); painter.translate(-width()/2, -height()/2); diff --git a/Plugins/Statistic_Invoicing/barchart.h b/Plugins/Statistic_Invoicing/barchart.h index d81f1c3..91e872c 100644 --- a/Plugins/Statistic_Invoicing/barchart.h +++ b/Plugins/Statistic_Invoicing/barchart.h @@ -1,9 +1,12 @@ -#ifndef _BAR_CHART_H_ +#pragma once -#include +#include +#include #include -#include + #include +#include + #include class QwtPlotMultiBarChart; @@ -111,19 +114,19 @@ class AssistantScaleDraw: public QwtScaleDraw QList keys = salesData.keys(); switch (sortArg.sortType){ case SORTBYVOLUMEASCEND: - qSort(keys.begin(), keys.end(), SortByVolumeAscend(salesData)); + std::sort(keys.begin(), keys.end(), SortByVolumeAscend(salesData)); break; case SORTBYVOLUMEDESCEND: - qSort(keys.begin(), keys.end(), SortByVolumeDescend(salesData)); + std::sort(keys.begin(), keys.end(), SortByVolumeDescend(salesData)); break; case SORTBYQUANTITYASCEND: - qSort(keys.begin(), keys.end(), SortByQuantityAscend(salesData)); + std::sort(keys.begin(), keys.end(), SortByQuantityAscend(salesData)); break; case SORTBYQUANTITYDESCEND: - qSort(keys.begin(), keys.end(), SortByQuantityDescend(salesData)); + std::sort(keys.begin(), keys.end(), SortByQuantityDescend(salesData)); break; default: - qSort(keys.begin(), keys.end(), SortByVolumeDescend(salesData)); + std::sort(keys.begin(), keys.end(), SortByVolumeDescend(salesData)); } if(value #include +#include "xlsxdocument.h" +#include "xlsxworkbook.h" +using namespace QXlsx; + int ExportExcelObject::export2Excel() { - if(fieldList.size() <= 0) - { + if (fieldList.size() <= 0) { qDebug() << "ExportExcelObject::export2Excel failed: No fields defined."; return -1; } - QSqlDatabase db = QSqlDatabase::addDatabase("QODBC", "excelexport"); - if(!db.isValid()) - { - qDebug() << "ExportExcelObject::export2Excel failed: QODBC not supported."; - return -2; - } - // set the dsn string - QString dsn = QString("DRIVER={Microsoft Excel Driver (*.xls)};DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\"%1\";DBQ=%2"). - arg(excelFilePath).arg(excelFilePath); - db.setDatabaseName(dsn); - if(!db.open()) - { - qDebug() << "ExportExcelObject::export2Excel failed: Create Excel file failed by DRIVER={Microsoft Excel Driver (*.xls)}."; - //QSqlDatabase::removeDatabase("excelexport"); - return -3; - } - - QSqlQuery query(db); - - //drop the table if it's already exists - QString s, sSql = QString("DROP TABLE [%1] (").arg(sheetName); - query.exec(sSql); - - //create the table (sheet in Excel file) - sSql = QString("CREATE TABLE [%1] (").arg(sheetName); - for (int i = 0; i < fieldList.size(); i++) - { - s = QString("[%1] %2").arg(fieldList.at(i)->sFieldName).arg(fieldList.at(i)->sFieldType); - sSql += s; - if(i < fieldList.size() - 1) - sSql += " , "; - } - - sSql += ")"; - query.prepare(sSql); - - if(!query.exec()) - { - qDebug() << "ExportExcelObject::export2Excel failed: Create Excel sheet failed."; - //db.close(); - //QSqlDatabase::removeDatabase("excelexport"); - return -4; - } + QXlsx::Document xlsxW; + int row = 1; + int col = 1; - //add all rows - sSql = QString("INSERT INTO [%1] (").arg(sheetName); - for (int i = 0; i < fieldList.size(); i++) - { - sSql += fieldList.at(i)->sFieldName; - if(i < fieldList.size() - 1) - sSql += " , "; - } - sSql += ") VALUES ("; - for (int i = 0; i < fieldList.size(); i++) - { - sSql += QString(":data%1").arg(i); - if(i < fieldList.size() - 1) - sSql += " , "; + for (int i = 0; i < fieldList.size(); i++) { + xlsxW.write(row, col + i, fieldList.at(i)->sFieldName); } - sSql += ")"; - - qDebug() << sSql; int r, iRet = 0; - for(r = 0 ; r < tableView->model()->rowCount() ; r++) - { - query.prepare(sSql); - for (int c = 0; c < fieldList.size(); c++) - { - query.bindValue(QString(":data%1").arg(c), tableView->model()->data(tableView->model()->index(r, fieldList.at(c)->iCol))); + for (r = 0; r < tableView->model()->rowCount(); r++) { + for (int c = 0; c < fieldList.size(); c++) { + xlsxW.write(row + r + 1, + col + c, + tableView->model() + ->data(tableView->model()->index(r, fieldList.at(c)->iCol)) + .toString()); } - if(query.exec()) - iRet++; + iRet++; - if(r % 10 == 0) + if (r % 10 == 0) emit exportedRowCount(r); } emit exportedRowCount(r); + if (xlsxW.saveAs(excelFilePath)) { + qDebug() << "[debug] success to write xlsx file"; + } else { + qDebug() << "[debug][error] failed to write xlsx file"; + return -2; + } + return iRet; } diff --git a/Plugins/Statistic_Invoicing/exportexcelobject.h b/Plugins/Statistic_Invoicing/exportexcelobject.h index 4fd1328..89c01cc 100644 --- a/Plugins/Statistic_Invoicing/exportexcelobject.h +++ b/Plugins/Statistic_Invoicing/exportexcelobject.h @@ -1,32 +1,4 @@ -// Copyright (c) 2010 Joel Gao -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// 1. Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -/////////////////////////////////////////////////////////////////////////////// - -#ifndef EXPORTEXCELOBJECT_H -#define EXPORTEXCELOBJECT_H +#pragma once #include #include @@ -76,5 +48,3 @@ class ExportExcelObject : public QObject QTableView *tableView; QList fieldList; }; - -#endif // EXPORTEXCELOBJECT_H diff --git a/Plugins/Statistic_Invoicing/statistic_invoicing.cpp b/Plugins/Statistic_Invoicing/statistic_invoicing.cpp index afe391a..04a38ef 100644 --- a/Plugins/Statistic_Invoicing/statistic_invoicing.cpp +++ b/Plugins/Statistic_Invoicing/statistic_invoicing.cpp @@ -1,12 +1,14 @@ -#include +#include #include -#include "statistic_invoicing.h" + +#include "barchart.h" +#include "exportexcelobject.h" +#include "helper.h" #include "mainwindow.h" -#include "usermanagement_interface.h" #include "productmanagement_interface.h" -#include "barchart.h" +#include "statistic_invoicing.h" #include "statisticupdateproductdialog.h" -#include "exportexcelobject.h" +#include "usermanagement_interface.h" const char *sortTypeProperty = "SortType"; @@ -178,13 +180,7 @@ Statistic_Invoicing::Statistic_Invoicing(): unsellProductProgressBar(NULL), allProductProgressBar(NULL) { - QDir qmdir(":/Translations"); - foreach (QString fileName, qmdir.entryList(QDir::Files)) { - //qDebug()<load(QFileInfo(fileName).baseName(), ":/Translations"); - QApplication::instance()->installTranslator(qtTranslator); - } + INSTALL_TRANSLATION; } @@ -1387,7 +1383,7 @@ void Statistic_Invoicing::populateSchemaComboBox(QComboBox *schemaComboBox) cons QSet schemaNameSet = userManagementInterface->getAllSchemaName();; schemaComboBox->clear(); - schemaComboBox->addItems(schemaNameSet.toList()); + schemaComboBox->addItems(schemaNameSet.values()); } void Statistic_Invoicing::onAllProductsFilter() @@ -1936,7 +1932,9 @@ void Statistic_Invoicing::onExportUnsellProducts2Excel() } } - QString fileName = QFileDialog::getSaveFileName(0, tr("Export to Excel"), qApp->applicationDirPath (), + QString fileName = QFileDialog::getSaveFileName(0, + tr("Export to Excel"), + qApp->applicationDirPath(), tr("Excel Files (*.xls)")); ExportExcelObject obj(fileName, tr("UnsellProducts"), unsellProductsView); @@ -2109,9 +2107,3 @@ void Statistic_Invoicing::updateUnsellProductinfo() statisticUpdateUnsellProductDialog->updateRecord(record); statisticUpdateUnsellProductDialog->exec(); } - -QT_BEGIN_NAMESPACE -#if QT_VERSION < 0x050000 -Q_EXPORT_PLUGIN2(Statistic_Invoicing, Statistic_Invoicing) -#endif -QT_END_NAMESPACE diff --git a/Plugins/Statistic_Invoicing/statistic_invoicing.h b/Plugins/Statistic_Invoicing/statistic_invoicing.h index efbe875..10a658d 100644 --- a/Plugins/Statistic_Invoicing/statistic_invoicing.h +++ b/Plugins/Statistic_Invoicing/statistic_invoicing.h @@ -1,5 +1,4 @@ -#ifndef STATISTIC_INVOICING_H -#define STATISTIC_INVOICING_H +#pragma once #include #include @@ -32,9 +31,7 @@ class STATISTIC_INVOICINGSHARED_EXPORT Statistic_Invoicing : public QObject, public PluginInterface, public UserChangeNotifyInterface { Q_OBJECT -#if QT_VERSION >= 0x050000 Q_PLUGIN_METADATA(IID "Statistic_Invoicing") -#endif Q_INTERFACES(PluginInterface UserChangeNotifyInterface) public: Statistic_Invoicing(); @@ -290,5 +287,3 @@ private slots: QProgressBar *unsellProductProgressBar; QProgressBar *allProductProgressBar; }; - -#endif // STATISTIC_INVOICING_H diff --git a/Plugins/Statistic_Invoicing/statisticupdateproductdialog.cpp b/Plugins/Statistic_Invoicing/statisticupdateproductdialog.cpp index e57f773..399badc 100644 --- a/Plugins/Statistic_Invoicing/statisticupdateproductdialog.cpp +++ b/Plugins/Statistic_Invoicing/statisticupdateproductdialog.cpp @@ -1,5 +1,5 @@ -#include "statisticupdateproductdialog.h" -#if QT_VERSION >= 0x050000 +#include "statisticupdateproductdialog.h" + #include #include #include @@ -11,9 +11,6 @@ #include #include #include -#else -#include -#endif StatisticUpdateProductDialog::StatisticUpdateProductDialog(UserManagementInterface *userManagementInterface, ProductManagementInterface *productManagementInterface, diff --git a/Plugins/Statistic_Invoicing/statisticupdateproductdialog.h b/Plugins/Statistic_Invoicing/statisticupdateproductdialog.h index 4228c22..2d1ee9b 100644 --- a/Plugins/Statistic_Invoicing/statisticupdateproductdialog.h +++ b/Plugins/Statistic_Invoicing/statisticupdateproductdialog.h @@ -1,5 +1,4 @@ -#ifndef STATISTICUPDATEPRODUCTDIALOG_H -#define STATISTICUPDATEPRODUCTDIALOG_H +#pragma once #include "updateproductdialog.h" @@ -16,5 +15,3 @@ public slots: private: void init(); }; - -#endif // STATISTICUPDATEPRODUCTDIALOG_H diff --git a/Plugins/Storage_Invoicing/Storage_Invoicing_global.h b/Plugins/Storage_Invoicing/Storage_Invoicing_global.h index c2c5929..499ed17 100644 --- a/Plugins/Storage_Invoicing/Storage_Invoicing_global.h +++ b/Plugins/Storage_Invoicing/Storage_Invoicing_global.h @@ -1,5 +1,4 @@ -#ifndef STORAGE_INVOICING_GLOBAL_H -#define STORAGE_INVOICING_GLOBAL_H +#pragma once #include @@ -8,5 +7,3 @@ #else # define STORAGE_INVOICINGSHARED_EXPORT Q_DECL_IMPORT #endif - -#endif // STORAGE_INVOICING_GLOBAL_H diff --git a/Plugins/Storage_Invoicing/storage_invoicing.cpp b/Plugins/Storage_Invoicing/storage_invoicing.cpp index 2dd0ccf..8f593d2 100644 --- a/Plugins/Storage_Invoicing/storage_invoicing.cpp +++ b/Plugins/Storage_Invoicing/storage_invoicing.cpp @@ -1,10 +1,12 @@ -#include +#include #include -#include "storage_invoicing.h" + +#include "helper.h" #include "mainwindow.h" -#include "usermanagement_interface.h" #include "productmanagement_interface.h" +#include "storage_invoicing.h" #include "storageupdateproductdialog.h" +#include "usermanagement_interface.h" Storage_Invoicing::Storage_Invoicing(): parentWindow(NULL), @@ -28,13 +30,7 @@ Storage_Invoicing::Storage_Invoicing(): filterPushButton(NULL) { - QDir qmdir(":/Translations"); - foreach (QString fileName, qmdir.entryList(QDir::Files)) { - //qDebug()<load(QFileInfo(fileName).baseName(), ":/Translations"); - QApplication::instance()->installTranslator(qtTranslator); - } + INSTALL_TRANSLATION; } QWidget* Storage_Invoicing::getMainWidget() const @@ -700,9 +696,3 @@ void Storage_Invoicing::updateStorageFilter() storageModel->setFilter(filter); } - -QT_BEGIN_NAMESPACE -#if QT_VERSION < 0x050000 -Q_EXPORT_PLUGIN2(Storage_Invoicing, Storage_Invoicing) -#endif -QT_END_NAMESPACE diff --git a/Plugins/Storage_Invoicing/storage_invoicing.h b/Plugins/Storage_Invoicing/storage_invoicing.h index d872013..d5239ef 100644 --- a/Plugins/Storage_Invoicing/storage_invoicing.h +++ b/Plugins/Storage_Invoicing/storage_invoicing.h @@ -1,5 +1,4 @@ -#ifndef STORAGE_INVOICING_H -#define STORAGE_INVOICING_H +#pragma once #include #include @@ -23,9 +22,7 @@ class STORAGE_INVOICINGSHARED_EXPORT Storage_Invoicing : public QObject, public PluginInterface, public UserChangeNotifyInterface { Q_OBJECT -#if QT_VERSION >= 0x050000 Q_PLUGIN_METADATA(IID "Storage_Invoicing") -#endif Q_INTERFACES(PluginInterface UserChangeNotifyInterface) public: Storage_Invoicing(); @@ -94,5 +91,3 @@ private slots: QString purchageTimeStamp; }; - -#endif // STORAGE_INVOICING_H diff --git a/Plugins/Storage_Invoicing/storageupdateproductdialog.cpp b/Plugins/Storage_Invoicing/storageupdateproductdialog.cpp index 60695cb..e7bb46a 100644 --- a/Plugins/Storage_Invoicing/storageupdateproductdialog.cpp +++ b/Plugins/Storage_Invoicing/storageupdateproductdialog.cpp @@ -1,5 +1,5 @@ -#include "storageupdateproductdialog.h" -#if QT_VERSION >= 0x050000 +#include "storageupdateproductdialog.h" + #include #include #include @@ -11,9 +11,6 @@ #include #include #include -#else -#include -#endif StorageUpdateProductDialog::StorageUpdateProductDialog(UserManagementInterface *userManagementInterface, ProductManagementInterface *productManagementInterface, diff --git a/Plugins/Storage_Invoicing/storageupdateproductdialog.h b/Plugins/Storage_Invoicing/storageupdateproductdialog.h index 597958c..ea28f9f 100644 --- a/Plugins/Storage_Invoicing/storageupdateproductdialog.h +++ b/Plugins/Storage_Invoicing/storageupdateproductdialog.h @@ -1,5 +1,4 @@ -#ifndef STORAGEUPDATEPRODUCTDIALOG_H -#define STORAGEUPDATEPRODUCTDIALOG_H +#pragma once #include "updateproductdialog.h" @@ -15,5 +14,3 @@ class StorageUpdateProductDialog : public UpdateProductDialog private: void init(); }; - -#endif // STORAGEUPDATEPRODUCTDIALOG_H diff --git a/Plugins/UpdateProductDialog/updateproductdialog.cpp b/Plugins/UpdateProductDialog/updateproductdialog.cpp index 09de7bb..70b5db0 100644 --- a/Plugins/UpdateProductDialog/updateproductdialog.cpp +++ b/Plugins/UpdateProductDialog/updateproductdialog.cpp @@ -1,63 +1,60 @@ -#include +#include #include #include + #include "productmanagement_interface.h" #include "updateproductdialog.h" +#include "helper.h" + UpdateProductDialog::UpdateProductDialog(UserManagementInterface *userManagementInterface, ProductManagementInterface *productManagementInterface, - QWidget *parent): - QDialog(parent), - userManagementInterface(userManagementInterface), - productManagementInterface(productManagementInterface), - serialNumberLabel(NULL), - serialNumberLineEdit(NULL), - productTypeLabel(NULL), - productTypeComboBox(NULL), - productTypeModel(NULL), - brandNameLabel(NULL), - brandNameComboBox(NULL), - brandNameModel(NULL), - productModelLabel(NULL), - productModelComboBox(NULL), - productModelModel(NULL), - productColorLabel(NULL), - productColorComboBox(NULL), - productColorModel(NULL), - productVendorLabel(NULL), - productVendorComboBox(NULL), - productVendorModel(NULL), - replacementInfoLabel(NULL), - replacementInfoComboBox(NULL), - replacementInfoModel(NULL), - barInfoLabel(NULL), - barInfoLineEdit(NULL), - quantityLabel(NULL), - quantitySpinBox(NULL), - unitLabel(NULL), - unitLineEdit(NULL), - schemaLabel(NULL), - schemaComboBox(NULL), - userSchemaModel(NULL), - oldPurchasePriceLabel(NULL), - oldPurchasePriceLineEdit(NULL), - purchasePriceLabel(NULL), - purchasePriceLineEdit(NULL), - sellingPriceLabel(NULL), - sellingPriceLineEdit(NULL), - commentsLabel(NULL), - commentsTextEdit(NULL), - updateProductButton(NULL), - leftButton(NULL), - rightButton(NULL) + QWidget *parent) + : QDialog(parent) + , userManagementInterface(userManagementInterface) + , productManagementInterface(productManagementInterface) + , serialNumberLabel(NULL) + , serialNumberLineEdit(NULL) + , productTypeLabel(NULL) + , productTypeComboBox(NULL) + , productTypeModel(NULL) + , brandNameLabel(NULL) + , brandNameComboBox(NULL) + , brandNameModel(NULL) + , productModelLabel(NULL) + , productModelComboBox(NULL) + , productModelModel(NULL) + , productColorLabel(NULL) + , productColorComboBox(NULL) + , productColorModel(NULL) + , productVendorLabel(NULL) + , productVendorComboBox(NULL) + , productVendorModel(NULL) + , replacementInfoLabel(NULL) + , replacementInfoComboBox(NULL) + , replacementInfoModel(NULL) + , barInfoLabel(NULL) + , barInfoLineEdit(NULL) + , quantityLabel(NULL) + , quantitySpinBox(NULL) + , unitLabel(NULL) + , unitLineEdit(NULL) + , schemaLabel(NULL) + , schemaComboBox(NULL) + , userSchemaModel(NULL) + , oldPurchasePriceLabel(NULL) + , oldPurchasePriceLineEdit(NULL) + , purchasePriceLabel(NULL) + , purchasePriceLineEdit(NULL) + , sellingPriceLabel(NULL) + , sellingPriceLineEdit(NULL) + , commentsLabel(NULL) + , commentsTextEdit(NULL) + , updateProductButton(NULL) + , leftButton(NULL) + , rightButton(NULL) { - QDir qmdir(":/Translations"); - foreach (QString fileName, qmdir.entryList(QDir::Files)) { - //qDebug()<load(QFileInfo(fileName).baseName(), ":/Translations"); - QApplication::instance()->installTranslator(qtTranslator); - } + INSTALL_TRANSLATION; init(); } @@ -152,15 +149,18 @@ void UpdateProductDialog::init() oldPurchasePriceLabel = new QLabel(tr("Old Purchase Price: "), this); oldPurchasePriceLineEdit = new QLineEdit(this); - oldPurchasePriceLineEdit->setValidator(new QRegExpValidator(QRegExp("(0|([1-9][0-9]*\\.?[0-9]*))"), this)); + oldPurchasePriceLineEdit->setValidator( + new QRegularExpressionValidator(QRegularExpression("(0|([1-9][0-9]*\\.?[0-9]*))"), this)); purchasePriceLabel = new QLabel(tr("Purchase Price: "), this); purchasePriceLineEdit = new QLineEdit(this); - purchasePriceLineEdit->setValidator(new QRegExpValidator(QRegExp("(0|([1-9][0-9]*\\.?[0-9]*))"), this)); + purchasePriceLineEdit->setValidator( + new QRegularExpressionValidator(QRegularExpression("(0|([1-9][0-9]*\\.?[0-9]*))"), this)); sellingPriceLabel = new QLabel(tr("Selling Price: "), this); sellingPriceLineEdit = new QLineEdit(this); - sellingPriceLineEdit->setValidator(new QRegExpValidator(QRegExp("(0|([1-9][0-9]*\\.?[0-9]*))"), this)); + sellingPriceLineEdit->setValidator( + new QRegularExpressionValidator(QRegularExpression("(0|([1-9][0-9]*\\.?[0-9]*))"), this)); commentsLabel = new QLabel(tr("Comments: "), this); commentsTextEdit = new QTextEdit(this); @@ -314,7 +314,7 @@ void UpdateProductDialog::populateSchemaComboBox() const } schemaComboBox->clear(); - schemaComboBox->addItems(schemaNameSet.toList()); + schemaComboBox->addItems(schemaNameSet.values()); } void UpdateProductDialog::populateSellerNameComboBox() const @@ -427,7 +427,7 @@ void UpdateProductDialog::hidePurchasePrice(bool hide) bool UpdateProductDialog::checkInput() { serialNumber = serialNumberLineEdit->text(); - serialNumber.simplified(); + serialNumber = serialNumber.simplified(); if(serialNumber.isEmpty()) { QMessageBox::critical(this, tr("Error"), tr("Serial Number can't be empty !")); serialNumberLineEdit->setFocus(); @@ -435,7 +435,7 @@ bool UpdateProductDialog::checkInput() } unit = unitLineEdit->text(); - unit.simplified(); + unit = unit.simplified(); if(unit.isEmpty()) { QMessageBox::critical(this, tr("Error"), tr("Unit can't be empty !")); unitLineEdit->setFocus(); @@ -446,7 +446,7 @@ bool UpdateProductDialog::checkInput() QString brandName = brandNameComboBox->currentText(); QString productModel = productModelComboBox->currentText(); - productType.simplified(); + productType = productType.simplified(); if(productType.isEmpty()) { QMessageBox::critical(this, tr("Error"), tr("Product Type can't be empty !")); productTypeComboBox->setFocus(); @@ -457,7 +457,7 @@ bool UpdateProductDialog::checkInput() productManagementInterface->addProductType(productType); } - brandName.simplified(); + brandName = brandName.simplified(); if(brandName.isEmpty()) { QMessageBox::critical(this, tr("Error"), tr("Brand Name can't be empty !")); brandNameComboBox->setFocus(); @@ -468,7 +468,7 @@ bool UpdateProductDialog::checkInput() productManagementInterface->addBrandName(brandName); } - productModel.simplified(); + productModel = productModel.simplified(); if(productModel.isEmpty()) { QMessageBox::critical(this, tr("Error"), tr("Product Model can't be empty !")); productModelComboBox->setFocus(); @@ -480,7 +480,7 @@ bool UpdateProductDialog::checkInput() } QString productColor = productColorComboBox->currentText(); - productColor.simplified(); + productColor = productColor.simplified(); if(productColor.isEmpty()) { QMessageBox::critical(this, tr("Error"), tr("Product Color can't be empty !")); productColorComboBox->setFocus(); @@ -492,7 +492,7 @@ bool UpdateProductDialog::checkInput() } QString productVendor = productVendorComboBox->currentText(); - productVendor.simplified(); + productVendor = productVendor.simplified(); if(productVendor.isEmpty()) { QMessageBox::critical(this, tr("Error"), tr("Product Vendor can't be empty !")); productVendorComboBox->setFocus(); @@ -504,7 +504,7 @@ bool UpdateProductDialog::checkInput() } QString replacementInfo = replacementInfoComboBox->currentText(); - replacementInfo.simplified(); + replacementInfo = replacementInfo.simplified(); if(replacementInfo.isEmpty()) { QMessageBox::critical(this, tr("Error"), tr("Replacement Info can't be empty !")); replacementInfoComboBox->setFocus(); diff --git a/Plugins/UpdateProductDialog/updateproductdialog.h b/Plugins/UpdateProductDialog/updateproductdialog.h index cfd59b0..a090bc9 100644 --- a/Plugins/UpdateProductDialog/updateproductdialog.h +++ b/Plugins/UpdateProductDialog/updateproductdialog.h @@ -1,7 +1,5 @@ -#ifndef UPDATEPRODUCTDIALOG_H -#define UPDATEPRODUCTDIALOG_H +#pragma once -#if QT_VERSION >= 0x050000 #include #include #include @@ -13,10 +11,8 @@ #include #include #include -#else -#include -#endif #include + #include "usermanagement_interface.h" #include "productmanagement_interface.h" @@ -152,5 +148,3 @@ private slots: QString timeStamp; int productID; }; - -#endif // UPDATEPRODUCTDIALOG_H diff --git a/Plugins/UpdateProductDialog/updateproductdialog_global.h b/Plugins/UpdateProductDialog/updateproductdialog_global.h index 15cdba2..abd3bab 100644 --- a/Plugins/UpdateProductDialog/updateproductdialog_global.h +++ b/Plugins/UpdateProductDialog/updateproductdialog_global.h @@ -1,5 +1,4 @@ -#ifndef UPDATEPRODUCTDIALOG_GLOBAL_H -#define UPDATEPRODUCTDIALOG_GLOBAL_H +#pragma once #include @@ -8,5 +7,3 @@ #else # define UPDATEPRODUCTDIALOGSHARED_EXPORT Q_DECL_IMPORT #endif - -#endif // UPDATEPRODUCTDIALOG_GLOBAL_H diff --git a/Plugins/UserManagementIF/usermanagementif.h b/Plugins/UserManagementIF/usermanagementif.h index ca070e0..45915e9 100644 --- a/Plugins/UserManagementIF/usermanagementif.h +++ b/Plugins/UserManagementIF/usermanagementif.h @@ -18,9 +18,7 @@ class USERMANAGEMENTIFSHARED_EXPORT UserManagementIF : public QObject, public PluginInterface, public UserManagementInterface { Q_OBJECT -#if QT_VERSION >= 0x050000 Q_PLUGIN_METADATA(IID "UserManagementIF") -#endif Q_INTERFACES(PluginInterface UserManagementInterface) public: UserManagementIF(); diff --git a/Plugins/UserManagement_Invoicing/logindialog.cpp b/Plugins/UserManagement_Invoicing/logindialog.cpp index f7d5706..1d3b4f1 100644 --- a/Plugins/UserManagement_Invoicing/logindialog.cpp +++ b/Plugins/UserManagement_Invoicing/logindialog.cpp @@ -1,5 +1,4 @@ #include -#if QT_VERSION >= 0x050000 #include #include #include @@ -11,7 +10,7 @@ #include #include #include -#endif + #include #include diff --git a/Plugins/UserManagement_Invoicing/logindialog.h b/Plugins/UserManagement_Invoicing/logindialog.h index 9355623..4908282 100644 --- a/Plugins/UserManagement_Invoicing/logindialog.h +++ b/Plugins/UserManagement_Invoicing/logindialog.h @@ -2,6 +2,7 @@ #include #include + #include "qspinbox.h" QT_BEGIN_NAMESPACE diff --git a/Plugins/UserManagement_Invoicing/usermanagement_invoicing.cpp b/Plugins/UserManagement_Invoicing/usermanagement_invoicing.cpp index 442d01f..cf07555 100644 --- a/Plugins/UserManagement_Invoicing/usermanagement_invoicing.cpp +++ b/Plugins/UserManagement_Invoicing/usermanagement_invoicing.cpp @@ -276,9 +276,3 @@ void UserManagement_Invoicing::update() parent->updateCurrentUserInfo(); userManagement(); } - -QT_BEGIN_NAMESPACE -#if QT_VERSION < 0x050000 -Q_EXPORT_PLUGIN2(UserManagement_Invoicing, UserManagement_Invoicing) -#endif -QT_END_NAMESPACE diff --git a/Plugins/UserManagement_Invoicing/usermanagement_invoicing.h b/Plugins/UserManagement_Invoicing/usermanagement_invoicing.h index 71a8575..2e0cff3 100644 --- a/Plugins/UserManagement_Invoicing/usermanagement_invoicing.h +++ b/Plugins/UserManagement_Invoicing/usermanagement_invoicing.h @@ -3,8 +3,10 @@ #include #include #include + #include #include + #include "UserManagement_Invoicing_global.h" class LoginDialog; @@ -23,9 +25,7 @@ class USERMANAGEMENT_INVOICINGSHARED_EXPORT UserManagement_Invoicing : public QObject, public PluginInterface, public UserChangeNotifyInterface { Q_OBJECT -#if QT_VERSION >= 0x050000 Q_PLUGIN_METADATA(IID "UserManagement_Invoicing") -#endif Q_INTERFACES(PluginInterface UserChangeNotifyInterface) public: UserManagement_Invoicing(); diff --git a/RegisterTool/mainwindow.cpp b/RegisterTool/mainwindow.cpp index d65b0c2..00ef9be 100644 --- a/RegisterTool/mainwindow.cpp +++ b/RegisterTool/mainwindow.cpp @@ -1,5 +1,5 @@ #include "mainwindow.h" -#if QT_VERSION >= 0x050000 + #include #include #include @@ -11,9 +11,6 @@ #include #include #include -#else -#include -#endif MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), @@ -79,11 +76,8 @@ QString MainWindow::calActiveCode(QString machineCode) QCryptographicHash sha1(QCryptographicHash::Sha1); -#if QT_VERSION < 0x050000 - QByteArray datagram(seed.toAscii()); -#else QByteArray datagram(seed.toLatin1()); -#endif + const char* tempConstChar = datagram.data(); sha1.addData(tempConstChar); QString activeCode=sha1.result().toHex(); From 7d1e6653d5b23c109a7dd89bc45c3e6be0c595e5 Mon Sep 17 00:00:00 2001 From: Feng Yin Date: Fri, 8 Dec 2023 22:51:43 +1100 Subject: [PATCH 4/4] Clean up default user usage. --- Plugins/UserManagementIF/usermanagementif.cpp | 37 +++++++++++-------- .../UserManagement_Invoicing/logindialog.cpp | 4 +- 2 files changed, 23 insertions(+), 18 deletions(-) diff --git a/Plugins/UserManagementIF/usermanagementif.cpp b/Plugins/UserManagementIF/usermanagementif.cpp index 9041420..f0ab5ff 100644 --- a/Plugins/UserManagementIF/usermanagementif.cpp +++ b/Plugins/UserManagementIF/usermanagementif.cpp @@ -6,7 +6,8 @@ const QStringList UserManagementInterface::defaultSchema = QStringList(); const QStringList UserManagementInterface::defaultRole = QStringList() <<"管理员"<<"采购"<<"库管"<<"销售"<<"收银员"<<"审计"; -const QStringList UserManagementInterface::defaultUser = QStringList() << "admin"; +const QStringList UserManagementInterface::defaultUser = QStringList() << "root" + << "admin"; const char *defaultDBSchemaName = "information_schema"; const char *dbSchemaName = "invoicing_schema"; @@ -113,13 +114,13 @@ void UserManagementIF::setDataBaseName(QString dbName) const bool UserManagementIF::openDatabase(QString username, QString password, QString ipaddress, int port) { - if (getDatabase(username).isValid()) { - currentUser = username; - currentIP = ipaddress; - currentPassword = password; - currentPort = port; - return true; - } + // if (getDatabase(username).isValid()) { + // currentUser = username; + // currentIP = ipaddress; + // currentPassword = password; + // currentPort = port; + // return true; + // } { // this is for when open db at very first time, there is no invoice db, so use default db for @@ -129,6 +130,7 @@ bool UserManagementIF::openDatabase(QString username, QString password, QString db.setHostName(ipaddress); db.setPort(port); if (!db.open(getDBLoginUserName(username), password)) { + qDebug() << "Failed to open!!" << getDBLoginUserName(username) << password; return false; } currentUser = username; @@ -315,6 +317,7 @@ int UserManagementIF::getUserIDByUserName(QString username) const QString UserManagementIF::getUserNameByUserID(int userID) const { QSqlQuery query(getSqlQuery()); + qDebug() << QString("select name from user where id = %1").arg(userID); query.exec(QString("select name from user where id = %1").arg(userID)); if(query.first()) { return query.record().value("name").toString(); @@ -395,7 +398,10 @@ bool UserManagementIF::addUserRoleByUserIDRoleID(int userID, int roleID) const //for table userschema QSet UserManagementIF::getSchemaIDSetByUserID(int userID) const { - if(getRoleIDSetByUserID(userID).contains(getRoleIDByRoleName("管理员"))) { + qDebug() << "getUserNameByUserID(userID)" << getUserNameByUserID(userID); + //if(getRoleIDSetByUserID(userID).contains(getRoleIDByRoleName("管理员"))) { + if (isAdmin(getUserNameByUserID(userID))) { + qDebug() << getAllSchemaName(); return getAllSchemaID(); } QSet schemaIDSet; @@ -521,13 +527,12 @@ bool UserManagementIF::createUserManagementTables() const } //insert default user & userrole int id = 1; - foreach(QString user, defaultUser) { - query.exec(QString("INSERT INTO `user` (`id`, `name`) VALUES (%1, '%2')") - .arg(id).arg(user)); - query.exec(QString("INSERT INTO `userrole` (`id`, `userID`, `roleID`) VALUES (%1, %2, %3)") - .arg(id).arg(id).arg(getRoleIDByRoleName("管理员"))); - id++; - } + query.exec( + QString("INSERT INTO `user` (`id`, `name`) VALUES (%1, '%2')").arg(id).arg(currentUser)); + query.exec(QString("INSERT INTO `userrole` (`id`, `userID`, `roleID`) VALUES (%1, %2, %3)") + .arg(id) + .arg(id) + .arg(getRoleIDByRoleName("管理员"))); } return true; diff --git a/Plugins/UserManagement_Invoicing/logindialog.cpp b/Plugins/UserManagement_Invoicing/logindialog.cpp index 1d3b4f1..cdc8a57 100644 --- a/Plugins/UserManagement_Invoicing/logindialog.cpp +++ b/Plugins/UserManagement_Invoicing/logindialog.cpp @@ -53,12 +53,12 @@ void LoginDialog::init() mainLayout->addWidget(rememberUsername, 0, 2); QLabel *passwordLabel = new QLabel(tr("Pass Word: "),this); - QRegularExpression pwRegExp("([a-zA-Z0-9]*)"); + QRegularExpression pwRegExp("([a-zA-Z0-9\\:\\@\\.\\,\\/\\+\\-\\!\\=]*)"); passwordLineEdit = new QLineEdit(this); QValidator *pwValidator = new QRegularExpressionValidator(pwRegExp, passwordLineEdit); passwordLineEdit->setValidator(pwValidator); passwordLineEdit->setEchoMode(QLineEdit::Password); - passwordLineEdit->setToolTip(tr("alphabet & number only")); + passwordLineEdit->setToolTip(tr("alphabet, number and :@.,/+-!= only")); rememberPassword = new QCheckBox(this); rememberPassword->setToolTip(tr("Remember Password")); mainLayout->addWidget(passwordLabel, 1,0, Qt::AlignRight);