亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? subsql.h

?? FastDb是高效的內存數據庫系統
?? H
字號:
//-< SUBSQL.H >------------------------------------------------------*--------*
// FastDB                    Version 1.0         (c) 1999  GARRET    *     ?  *
// (Main Memory Database Management System)                          *   /\|  *
//                                                                   *  /  \  *
//                          Created:     20-Nov-98    K.A. Knizhnik  * / [] \ *
//                          Last update: 10-Dec-98    K.A. Knizhnik  * GARRET *
//-------------------------------------------------------------------*--------*
// Interactive data manipulation language (subset of SQL)
//-------------------------------------------------------------------*--------*

#ifndef __SUBSQL_H__
#define __SUBSQL_H__

enum SubSqlTokens {
  tkn_alter = tkn_last_token,
  tkn_array,
  tkn_autoincrement,
  tkn_autocommit,
  tkn_backup,
  tkn_bool,
  tkn_commit,
  tkn_compactify,
  tkn_count,
  tkn_create,
  tkn_delete,
  tkn_describe,
  tkn_drop,
  tkn_exit,
  tkn_export,
  tkn_hash,
  tkn_help,
  tkn_http,
  tkn_import,
  tkn_index,
  tkn_int1,
  tkn_int2,
  tkn_int4,
  tkn_int8,
  tkn_inverse,
  tkn_of,
  tkn_off,
  tkn_on,
  tkn_open,
  tkn_real4,
  tkn_real8,
  tkn_reference,
  tkn_rollback,
  tkn_server,
  tkn_set,
  tkn_stop,
  tkn_semi,
  tkn_show,
  tkn_to,
  tkn_update,
  tkn_values,
  tkn_version
};



class dbList
{

public:
  enum NodeType {
    nInteger,
    nBool,
    nReal,
    nString,
    nTuple,
    nAutoinc,
    nIdentifier
  };

  dbList* next;
  int     type;
  union {
    bool  bval;
    db_int8  ival;
    real8 fval;
    char* sval;

    struct
    {
      int     nComponents;
      dbList* components;
    }

    aggregate;
  };

  ~dbList()
  {
    if (type == nTuple)
    {
      delete aggregate.components;
    }
    else if (type == nString || type == nIdentifier)
    {
      delete[] sval;
    }
  }

  dbList(int type)
  {
    this->type = type;
    next = NULL;
  }
};


struct tableField
{
  char* name;
  char* refTableName;
  char* inverseRefName;
  int   type;

  tableField()
  {
    name = refTableName = inverseRefName = NULL;
  }

  ~tableField()
  {
    delete[] name;
    delete[] refTableName;
    delete[] inverseRefName;
  }
};

class dbUpdateElement
{

public:
  dbUpdateElement*   next;
  dbFieldDescriptor* field;
  dbExprNode*        value;
  char*              strValue;

  dbUpdateElement()
  {
    next = NULL;
    strValue = NULL;
  }

  ~dbUpdateElement()
  {
    delete[] strValue;
  }
};


#define MAX_HISTORY_SIZE 16

class dbXmlScanner
{

public:
  enum {
    MaxIdentSize = 256
  };
  enum token {
    xml_ident,
    xml_sconst,
    xml_iconst,
    xml_fconst,
    xml_lt,
    xml_gt,
    xml_lts,
    xml_gts,
    xml_eq,
    xml_eof,
    xml_error
  };
  dbXmlScanner(FILE* f)
  {
    in = f;
    sconst = new char[size = 1024];
    line = 1;
    pos = 0;
  }

  token scan();

  char* getString()
  {
    return sconst;
  }

  char* getIdentifier()
  {
    return ident;
  }

  size_t  getStringLength()
  {
    return slen;
  }

  db_int8 getInt()
  {
    return iconst;
  }

  double getReal()
  {
    return fconst;
  }

  bool expect(int sourcePos, token expected)
  {
    token tkn = scan();

    if (tkn != expected)
    {
      fprintf(stderr, "subsql.cpp:%d: line %d, column %d: Get token %d instead of expected token %d\n",
              sourcePos, line, pos, tkn, expected);
      return false;
    }

    return true;
  }

  bool expect(int sourcePos, char* expected)
  {
    token tkn = scan();

    if (tkn != xml_ident)
    {
      fprintf(stderr, "subsql.cpp:%d: line %d, column %d: Get token %d instead of expected identifier\n",
              sourcePos, line, pos, tkn);
      return false;
    }

    if (strcmp(ident, expected) != 0)
    {
      fprintf(stderr, "subsql.cpp:%d: line %d, column %d: Get tag '%s' instead of expected '%s'\n",
              sourcePos, line, pos, ident, expected);
      return false;
    }

    return true;
  }

private:

  int   get
    ();

  void  unget(int ch);

  int       line;

  int       pos;

  FILE*     in;

  char*     sconst;

  size_t    size;

  size_t    slen;

  db_int8   iconst;

  double    fconst;

  char      ident[MaxIdentSize];
};

class dbTmpAllocator
{
  enum {
    CHUNK_SIZE = 4096
  };

  struct Chunk
  {
    Chunk* next;
    Chunk* prev; // is not used, added for alignment
  };

  Chunk* curr;
  size_t used;

public:
  dbTmpAllocator()
  {
    curr = NULL;
    used = CHUNK_SIZE;
  }

  ~dbTmpAllocator()
  {
    reset();
  }

  void reset()
  {
    Chunk *c, *next;

    for (c = curr; c != NULL; c = next)
    {
      next = c->next;
      dbFree(c);
    }

    curr = NULL;
    used = CHUNK_SIZE;
  }


  void* alloc(size_t size)
  {
    size = DOALIGN(size, 8);

    if (size > CHUNK_SIZE/2)
    {
      Chunk* newChunk = (Chunk*)dbMalloc(size + sizeof(Chunk));

      if (curr != NULL)
      {
        newChunk->next = curr->next;
        curr->next = newChunk;
      }
      else
      {
        curr = newChunk;
        newChunk->next = NULL;
        used = CHUNK_SIZE;
      }

      return newChunk+1;
    }
    else if (size <= CHUNK_SIZE - used)
    {
      used += size;
      return (char*)(curr+1) + used - size;
    }
    else
    {
      Chunk* newChunk = (Chunk*)dbMalloc(CHUNK_SIZE);
      used = sizeof(Chunk) + size;
      newChunk->next = curr;
      curr = newChunk;
      return newChunk+1;
    }
  }
};

class dbSubSql : public dbDatabase
{

private:
  int   pos;
  int   line;
  int   tknPos;
  char* buf;
  int   buflen;
  FILE* in;
  bool  opened;
  db_int8  ival;
  real8 fval;
  char* name;

  oid_t*  oidMap;
  oid_t   oidMapSize;

  dbTmpAllocator tmpAlloc;

  static char* prompt;

  dbTableDescriptor* droppedTables;
  dbTableDescriptor* existedTables;

  dbQuery query;
  dbCompiler compiler;

  int      ungetToken;
  bool     autocommit;

  dbThread httpServerThread;
  HTTPapi* httpServer;
  bool     httpServerRunning;
  char*    queryHistory[MAX_HISTORY_SIZE];
  unsigned historyUsed;
  unsigned historyCurr;
  static void thread_proc httpServerThreadProc(void* arg);

  void httpServerLoop();

  void startHttpServer(char const* address);
  void stopHttpServer(char const* address);

  void handleError(dbErrorClass error, char const* msg = NULL,  int arg = 0);

  void error(char const* msg);
  void warning(char const* msg);

  int  get
    ();

  void unget(int ch);

  int  scan();

  bool parse();

  bool expect(char* expected, int token);

  void recovery();

  void exportDatabase(FILE* out);

  bool importDatabase(FILE* in);

  oid_t mapId(long id);

  bool importField(char* terminator, dbFieldDescriptor* fd, byte* rec, dbXmlScanner& scanner);

  bool importRecord(char* terminator, dbFieldDescriptor* fieldList, byte* rec, dbXmlScanner& scanner);

  void insertRecord(dbTableDescriptor* desc, oid_t oid, void const* record);

  bool isValidOid(oid_t oid);

  static void dumpRecord(byte* record, dbFieldDescriptor* first);

  static int calculateRecordSize(dbList* list, int offs,
                                 dbFieldDescriptor* first);

  int  initializeRecordFields(dbList* node, byte* dst, int offs,
                              dbFieldDescriptor* first);

  bool insertRecord(dbList* list, dbTableDescriptor* desc);

  bool readCondition();

  int  readExpression();

  int  readValues(dbList** chain);

  bool updateFields(dbAnyCursor* cursor, dbUpdateElement* elems);

  bool updateTable(bool create);

  int  parseType(char*& refTableName, char*& inverseRefName);

  int  updateRecords(dbTableDescriptor* desc, dbList *fields, dbList *values, dbAnyCursor &cursor, byte *buf);

  dbFieldDescriptor* readFieldName();

public:
  void run(int firstParam, int argc, char* argv[]);

  void selectionPage(WWWconnection& con);

  void queryPage(WWWconnection& con);

  void defaultPage(WWWconnection& con);

  dbSubSql(dbAccessType accessType);

  virtual~dbSubSql();
};


#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人精品一区二| 亚洲综合男人的天堂| 美女脱光内衣内裤视频久久影院| 玉米视频成人免费看| 精品国产第一区二区三区观看体验| 91免费版pro下载短视频| 偷拍一区二区三区四区| 亚洲3atv精品一区二区三区| 中文字幕一区二区日韩精品绯色| 欧美精品一区二区三区在线| 色香色香欲天天天影视综合网| 成人综合日日夜夜| 国产精品91xxx| 国产精品白丝jk黑袜喷水| 国产成人午夜电影网| 国产99久久久国产精品免费看| 美女视频网站黄色亚洲| 奇米777欧美一区二区| 精品中文av资源站在线观看| 精油按摩中文字幕久久| 国内精品在线播放| 97久久超碰国产精品| 色中色一区二区| 欧美在线999| 欧美日韩国产成人在线91| 精品国产乱码久久久久久浪潮| 91麻豆精品91久久久久久清纯| 91麻豆精品国产自产在线| 久久这里只精品最新地址| 国产女同性恋一区二区| 成人免费在线视频| 亚洲国产综合色| 国产高清不卡一区| 91亚洲大成网污www| 欧美色涩在线第一页| 日韩精品一区二区三区在线观看| 久久久久一区二区三区四区| 国产精品久久久久久妇女6080| ●精品国产综合乱码久久久久| 一区二区日韩av| 蜜桃在线一区二区三区| 国产成人一区在线| 蜜臀va亚洲va欧美va天堂| 91碰在线视频| 日韩欧美一区二区免费| 日本一二三四高清不卡| 蜜桃视频第一区免费观看| 成人综合婷婷国产精品久久| 欧美亚洲高清一区二区三区不卡| 91精品国产色综合久久ai换脸| 亚洲三级电影全部在线观看高清| 午夜精品国产更新| 国产成人小视频| 不卡一区二区三区四区| 久久蜜桃av一区精品变态类天堂| 亚洲欧美在线视频观看| 美女诱惑一区二区| 欧美一区二区免费视频| 国产精品免费网站在线观看| 午夜欧美一区二区三区在线播放| 午夜影视日本亚洲欧洲精品| 一本高清dvd不卡在线观看| 欧美精品一区二区三区一线天视频| 综合电影一区二区三区| 免费高清在线一区| 欧美日韩中文另类| 亚洲视频精选在线| 久久免费美女视频| 国产麻豆午夜三级精品| 欧美日韩视频一区二区| 一区精品在线播放| 91在线观看地址| 日本一区二区三区电影| 美女性感视频久久| 日本高清成人免费播放| 一区二区三区四区乱视频| 成人美女视频在线看| 久久久久久久综合色一本| 国内精品写真在线观看| 日韩限制级电影在线观看| 亚洲午夜久久久久久久久电影网 | 风间由美中文字幕在线看视频国产欧美| 91国偷自产一区二区三区观看| 国产亚洲精品资源在线26u| 一个色在线综合| 3d动漫精品啪啪一区二区竹菊| 亚洲精品国产无天堂网2021| 波多野结衣中文字幕一区| 亚洲免费看黄网站| 欧美自拍偷拍午夜视频| 亚洲国产视频在线| 欧美午夜电影网| 免费成人在线影院| 日韩视频免费观看高清完整版 | 日韩av成人高清| 日韩三级在线观看| 日韩av中文字幕一区二区| 欧美日韩国产小视频在线观看| 国产精品萝li| 欧美精品日韩精品| 日本视频一区二区三区| 欧美高清在线一区二区| 在线视频你懂得一区二区三区| 成人免费在线视频观看| 色婷婷久久综合| 日韩激情一区二区| 精品国产91亚洲一区二区三区婷婷 | 色婷婷综合久久久久中文| 有码一区二区三区| 欧美丰满美乳xxx高潮www| 麻豆91在线播放免费| 91麻豆精品久久久久蜜臀| 久久精品国产久精国产爱| 国产日韩欧美精品一区| 91视频一区二区三区| 久久国产三级精品| 亚洲国产精品99久久久久久久久| av一区二区三区四区| 亚洲精品久久久蜜桃| 538在线一区二区精品国产| 久久66热re国产| 国产日韩欧美精品一区| 91精品国产色综合久久不卡蜜臀| 韩日精品视频一区| 亚洲精品国产精品乱码不99| 日韩欧美国产电影| 欧美日韩国产精品成人| 色婷婷久久综合| 本田岬高潮一区二区三区| 国产一区二区美女诱惑| 日韩不卡免费视频| 亚洲午夜免费电影| 亚洲最大成人综合| 亚洲精品欧美综合四区| 国产日产欧美一区| 亚洲精品一区二区三区99| 91麻豆精品国产无毒不卡在线观看| 色综合久久久久久久久| 不卡视频免费播放| 成人18视频在线播放| 综合网在线视频| 国产精品久久午夜| 中文字幕视频一区| 中文字幕在线观看不卡| 国产精品日产欧美久久久久| 国产女同性恋一区二区| 国产欧美日韩视频在线观看| 26uuu另类欧美| 国产视频一区二区在线观看| 久久久精品免费观看| 久久精品视频网| 亚洲国产成人午夜在线一区| 久久精品亚洲精品国产欧美 | 欧美日韩免费高清一区色橹橹 | 91精品午夜视频| 91精品国模一区二区三区| 91精品国产色综合久久不卡电影| 91精品国产综合久久香蕉麻豆| 777午夜精品视频在线播放| 6080yy午夜一二三区久久| 欧美人动与zoxxxx乱| 欧美一级片在线看| 精品国产在天天线2019| 国产三级精品在线| 亚洲男人电影天堂| 亚洲国产精品人人做人人爽| 日韩高清在线一区| 国内精品国产三级国产a久久| 韩国v欧美v日本v亚洲v| 国产成人精品三级麻豆| 91丨九色丨黑人外教| 欧美日韩综合不卡| 精品精品国产高清一毛片一天堂| 久久久99免费| 国产精品久久毛片a| 亚洲一区二区三区四区五区中文| 五月天激情小说综合| 国产一区二区主播在线| 91一区二区三区在线播放| 欧美日韩在线免费视频| 欧美mv日韩mv亚洲| 亚洲少妇30p| 奇米精品一区二区三区四区| 成人丝袜高跟foot| 欧美日韩国产bt| 久久久精品天堂| 一区二区高清在线| 国产一区二区三区电影在线观看 | 亚洲一区影音先锋| 韩国在线一区二区| 欧美色图在线观看| 欧美精品一区二区三区蜜桃视频| 国产精品乱人伦| 美女脱光内衣内裤视频久久影院| 粉嫩欧美一区二区三区高清影视| 色诱视频网站一区| 久久精品男人的天堂| 婷婷丁香激情综合| 国产不卡一区视频| 欧美不卡一区二区|