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

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

?? litesql-gen-cpp.cpp

?? LiteSQL is a C++ library that integrates C++ objects tightly to relational database and thus provide
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
#include "litesql/split.hpp"#include "litesql/types.hpp"#include "litesql-gen-cpp.hpp"#include "litesql-gen-main.hpp"#include "cppgenerator.hpp"#include "xmlobjects.hpp"#include "md5.hpp"#include <ctype.h>#include <cstdio>#include <map>using namespace std;using namespace gen;using namespace litesql;string quote(string s) {    return "\"" + s + "\"";}string brackets(string s) {    return "(" + s + ")";}static bool validID(string s) {    static char* words[] =         {"asm","break","case","catch",         "char","class","const","continue","default",         "delete","do","double","else","enum","extern",         "float","for","friend","goto","if","inline","int",         "long","new","operator","private","protected",         "public","register","return","short","signed",         "sizeof","static","struct","switch","template",         "this","throw","try","typedef","union","unsigned",         "virtual","void","volatile","while",            // LiteSQL specific         "initValues", "insert", "addUpdates", "addIDUpdates",         "getFieldTypes", "delRecord", "delRelations",         "update", "del", "typeIsCorrect", "upcast", "upcastCopy"        };    for (size_t i = 0; i < sizeof(words) / sizeof(words[0]); i++)        if (s == words[i])            return false;    return true; }static void sanityCheck(xml::Database& db,                        vector<xml::Object>& objects,                        vector<xml::Relation>& relations) {    using namespace litesql;    if (!validID(db.name))         throw Except("invalid id: database.name : " + db.name);    for (size_t i = 0; i < objects.size(); i++) {        xml::Object& o = objects[i];        if (!validID(o.name))            throw Except("invalid id: object.name : " + o.name);        for (size_t i2 = 0; i2 < o.fields.size(); i2++) {            xml::Field& f = o.fields[i2];            if (!validID(f.name))                throw Except("invalid id: object.field.name : " + f.name);        }    }    for (size_t i = 0; i < relations.size(); i++) {        xml::Relation& r = relations[i];        if (!validID(r.getName()))            throw Except("invalid id: relation.name : " + r.getName());        for (size_t i2 = 0; i2 < r.fields.size(); i2++) {            xml::Field& f = r.fields[i2];            if (!validID(f.name))                throw Except("invalid id: relation.field.name : " + f.name);        }        for (size_t i2 = 0; i2 < r.related.size(); i2++) {            xml::Relate& rel = r.related[i2];            if (!validID(rel.handle) && !rel.handle.empty())                throw Except("invalid id: relation.relate.handle : " + rel.handle);        }    }   }string makeTableName(string s) {    if (s.size() > 31)        return "_" + md5HexDigest(s);    return s;}void writeStaticObjData(Class& cl, const xml::Object& o) {    Variable type__("type__", "const std::string", quote(o.name));    type__.static_();    cl.variable(type__);    Variable table__("table__", "const std::string",                      quote(makeTableName(o.getTable())));    table__.static_();    cl.variable(table__);    if (!o.parentObject) {        Variable sequence__("sequence__", "const std::string",                             quote(makeTableName(o.name + "_seq")));        sequence__.static_();        cl.variable(sequence__);    }}void writeObjFields(Class & cl, const xml::Object & o) {    Method init("initValues", "void");    bool hasValues = false;    init.static_();        for (size_t i = 0; i < o.fields.size(); i++) {        const xml::Field& fld = o.fields[i];        string data = quote(fld.name + "_") + "," +                      quote(fld.getSQLType()) + "," +                      "table__";        if (!fld.values.empty()) {            data += "," + fld.name + "_values";             Variable values(fld.name + "_values",                             "std::vector < std::pair< std::string, std::string > >");            values.static_().protected_();            cl.variable(values);            hasValues = true;            init.body(fld.name + "_values.clear();");            for (size_t i2 = 0; i2 < fld.values.size(); i2++) {                const xml::Value& val = fld.values[i2];                init.body(fld.name + "_values.push_back(make_pair("                          + quote(val.name) + "," + quote(val.value) + "));");                }        }        string ftypeClass ="const litesql::FieldType";        if (!fld.values.empty()) {            ftypeClass = fld.fieldTypeName + "Type";            Class ftypeCl(ftypeClass, "litesql::FieldType");            Method cons(ftypeClass);	    ftypeClass = o.name + "::" + ftypeClass;            cons.param(Variable("n", "const std::string&"))                .param(Variable("t", "const std::string&"))                .param(Variable("tbl", "const std::string&"))                .param(Variable("vals", "const litesql::FieldType::Values&", "Values()"))                .constructor("litesql::FieldType(n,t,tbl,vals)");                        ftypeCl.method(cons);            for (size_t v = 0; v < fld.values.size(); v++) {                const xml::Value& value = fld.values[v];                string v;                if (fld.getCPPType() == "std::string")                    v = quote(value.value);                else                    v = value.value;                Variable val(value.name, "const " + fld.getCPPType(), v);                                val.static_();                ftypeCl.variable(val);            }            cl.class_(ftypeCl);        }	        Variable ftype(fld.fieldTypeName, ftypeClass, data);        ftype.static_();        Variable field(fld.name, "litesql::Field<" + fld.getCPPType() + ">");        cl.variable(ftype);        cl.variable(field);        if (fld.values.size() > 0) {            Class valueHolder(xml::capitalize(fld.name));            for (size_t v = 0; v < fld.values.size(); v++) {                const xml::Value& value = fld.values[v];                string v;                if (fld.getCPPType() == "std::string")                    v = quote(value.value);                else                    v = value.value;                Variable val(value.name, "const " + fld.getCPPType(), v);                val.static_();                valueHolder.variable(val);            }            cl.class_(valueHolder);        }    }    if (hasValues)        cl.method(init);}void writeObjConstructors(Class& cl, const xml::Object& o) {    Method defaults("defaults", "void");    defaults.protected_();    bool hasDefaults = false;    for (size_t i = 0; i < o.fields.size(); i++) {        const xml::Field& f = o.fields[i];        if (!f.default_.empty() || !f.hasQuotedValues())            defaults.body(f.name + " = " + f.getQuotedDefaultValue() + ";");            hasDefaults = true;    }         Method cons1(o.name); // Object(const Database &)    string consParams = o.inherits + "(db)";    string cons2Params = o.inherits + "(db, rec)";    if (o.fields.size() > 0) {        Split fieldInst;        for (size_t i = 0; i < o.fields.size(); i++) {            const xml::Field& f = o.fields[i];            fieldInst.push_back(f.name + brackets(f.fieldTypeName));        }        consParams += ", " + fieldInst.join(", ");        cons2Params += ", " + fieldInst.join(", ");    }    cons1.param(Variable("db", "const litesql::Database&"))        .constructor(consParams);    if (hasDefaults)        cons1.body("defaults();");        Method cons2(o.name); // Object(const Database &, const Record& row    cons2.param(Variable("db", "const litesql::Database&"))        .param(Variable("rec", "const litesql::Record&"))        .constructor(cons2Params);    if (hasDefaults)         cons2.body("defaults();");    if (o.fields.size() > 0) {        int last = o.getLastFieldOffset();        cons2.body("size_t size = "                   "(rec.size() > " + toString(last) + ")"                   " ? " + toString(last) + " : rec.size();")            .body("switch(size) {");        for(int i = o.fields.size() - 1; i >= 0; i--) {            int p = last - o.fields.size() + i;            cons2.body("case " + toString(p+1) + ": "                        + o.fields[i].name + " = rec[" + toString(p) + "];");        }        cons2.body("}");    }        Method cons3(o.name); // Object(const Object& obj);    string consParams3 = o.inherits + "(obj)";        if (o.fields.size() > 0) {        Split fieldCopy;        for (size_t i = 0; i < o.fields.size(); i++) {            const xml::Field& f = o.fields[i];            fieldCopy.push_back(f.name + brackets("obj." + f.name));        }        consParams3 += ", " + fieldCopy.join(", ");    }    cons3.param(Variable("obj", "const " + o.name + "&"))        .constructor(consParams3);    if (hasDefaults)        cl.method(defaults);        Method assign("operator=", "const " + o.name + "&");    assign.param(Variable("obj", "const " + o.name + "&"));    if (o.fields.size() > 0) {        assign.body("if (this != &obj) {");        for (size_t i = 0; i < o.fields.size(); i++) {            const xml::Field& f = o.fields[i];            assign.body("    " + f.name + " = obj." + f.name + ";");        }        assign.body("}");    }    assign.body(o.inherits + "::operator=(obj);");    assign.body("return *this;");        cl.method(cons1).method(cons2).method(cons3).method(assign);    }void writeObjRelationHandles(Class& cl, xml::Object& o) {    for (size_t i = 0; i < o.handles.size(); i++) {        xml::RelationHandle& handle = o.handles[i];        xml::Relation* rel = handle.relation;        string className = xml::capitalize(handle.name) + "Handle";        Class hcl(className,                  "litesql::RelationHandle<" + o.name + ">");        Method cons(className);        cons.param(Variable("owner", "const " + o.name + "&")).            constructor("litesql::RelationHandle<" + o.name + ">(owner)");                Method link("link", "void");        Method unlink("unlink", "void");        Split params;        params.push_back("owner->getDatabase()");        params.resize(1 + rel->related.size());        params[1 + handle.relate->paramPos] = "*owner";        for (size_t i2 = 0; i2 < handle.destObjects.size(); i2++) {            xml::Object* dest = handle.destObjects[i2].first;            xml::Relate * relate = handle.destObjects[i2].second;            Variable var("o" + toString(i2), "const " + dest->name + "&");            link.param(var);            unlink.param(var);            params[1 + relate->paramPos] = "o" + toString(i2);        }        for (size_t i2 = 0; i2 < rel->fields.size(); i2++) {            xml::Field& field = rel->fields[i2];            // FIXME: default-arvoiset parametrit viimeiseksi            link.param(Variable(field.name, field.getCPPType(),                                 field.getQuotedDefaultValue()));            unlink.param(Variable(field.name, field.getCPPType()));            params.push_back(field.name);        }        link.body(rel->getName() + "::link(" + params.join(", ") + ");");        unlink.body(rel->getName() + "::unlink(" + params.join(", ") + ");");        Variable exprParam("expr", "const litesql::Expr&", "litesql::Expr()");        Variable srcExprParam("srcExpr", "const litesql::Expr&", "litesql::Expr()");        Method del("del", "void");        params.clear();

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
裸体一区二区三区| 麻豆精品视频在线| 久久电影网电视剧免费观看| 国产成人av电影在线| 色综合久久99| 国产日韩欧美麻豆| 日本不卡高清视频| 91黄色小视频| 国产精品区一区二区三区| 亚洲成人久久影院| 91麻豆国产福利精品| 久久久久久日产精品| 五月天久久比比资源色| 成人福利视频在线看| 日韩欧美一区电影| 亚洲一区二区三区中文字幕在线| 经典三级视频一区| 日韩小视频在线观看专区| 樱桃国产成人精品视频| 成人深夜在线观看| 国产亲近乱来精品视频| 久久国内精品自在自线400部| 在线精品视频免费观看| 最新热久久免费视频| 国产成人精品1024| 久久久久久一二三区| 国内精品久久久久影院薰衣草| 欧美伦理影视网| 亚洲一二三四久久| 色噜噜久久综合| 亚洲欧洲日产国产综合网| 成人亚洲一区二区一| 久久嫩草精品久久久精品一| 经典一区二区三区| 欧美精品一区二区精品网| 美女视频黄a大片欧美| 69堂精品视频| 视频一区二区中文字幕| 欧美一区二区观看视频| 奇米亚洲午夜久久精品| 日韩欧美一级在线播放| 免费在线观看一区| 日韩一区二区不卡| 国产综合色在线| 欧美大胆人体bbbb| 久久成人久久爱| 国产午夜亚洲精品羞羞网站| 国产成人精品www牛牛影视| 日本一区二区不卡视频| 99久久久精品| 亚洲乱码国产乱码精品精的特点| 91久久久免费一区二区| 亚洲va国产va欧美va观看| 欧美一区2区视频在线观看| 麻豆精品新av中文字幕| 亚洲国产精品黑人久久久| 色香蕉成人二区免费| 五月综合激情婷婷六月色窝| 日韩色在线观看| 国产99精品在线观看| 亚洲欧美激情视频在线观看一区二区三区| 在线视频一区二区三| 首页国产欧美日韩丝袜| 久久午夜免费电影| 97成人超碰视| 久久99国产精品免费网站| 国产精品福利一区二区| 欧美日韩不卡一区| 国产一区 二区| 亚洲一区二区在线观看视频| 日韩欧美一区二区免费| 99久久久久久99| 久久av老司机精品网站导航| 亚洲国产精品高清| 91精品在线一区二区| 大美女一区二区三区| 亚洲福利电影网| 久久色在线视频| 色婷婷国产精品| 韩日精品视频一区| 亚洲国产精品麻豆| 久久精品一区二区| 欧美顶级少妇做爰| eeuss鲁片一区二区三区| 日本伊人午夜精品| 亚洲日本在线a| 26uuuu精品一区二区| 色欧美片视频在线观看在线视频| 免费成人在线播放| 一区二区不卡在线视频 午夜欧美不卡在| 精品裸体舞一区二区三区| 一本大道av一区二区在线播放| 国产在线精品一区二区夜色| 亚洲一区二区影院| 中文字幕一区二区三区四区不卡 | 精品国精品国产尤物美女| 91蜜桃传媒精品久久久一区二区| 免费看欧美美女黄的网站| 亚洲日本中文字幕区| 国产日韩欧美在线一区| 26uuu国产电影一区二区| 欧美精品 国产精品| 色偷偷久久人人79超碰人人澡 | 成人免费黄色大片| 久久99精品视频| 秋霞电影一区二区| 亚州成人在线电影| 一区二区成人在线| 亚洲欧美福利一区二区| 亚洲欧美在线高清| 国产日韩欧美a| 欧美国产综合一区二区| 久久久亚洲欧洲日产国码αv| 日韩一级片在线播放| 日韩一区和二区| 欧美肥妇bbw| 91精品欧美一区二区三区综合在| 欧美亚洲综合色| 欧美三级电影精品| 在线观看亚洲精品| 欧美无砖砖区免费| 欧美丝袜第三区| 欧美日韩在线直播| 欧美日韩精品系列| 这里只有精品视频在线观看| 欧美日韩国产色站一区二区三区| 欧美午夜免费电影| 51久久夜色精品国产麻豆| 欧美一级免费观看| 日韩免费看网站| 久久精品在线观看| 国产精品福利电影一区二区三区四区| 国产精品欧美一区喷水| 最新不卡av在线| 亚洲影院在线观看| 免费人成黄页网站在线一区二区| 久久成人免费电影| 成人午夜视频在线| 欧美又粗又大又爽| 欧美精品高清视频| 国产亚洲一二三区| 中文字幕色av一区二区三区| 亚洲综合一区二区精品导航| 日韩av电影天堂| 国产乱人伦偷精品视频不卡| 91浏览器在线视频| 欧美成人性战久久| 国产精品不卡一区二区三区| 亚洲超碰精品一区二区| 国产专区欧美精品| 99精品在线观看视频| 7777精品伊人久久久大香线蕉的| 久久精品一区二区三区不卡 | 久久日韩粉嫩一区二区三区| 中文字幕日韩一区二区| 丝袜美腿成人在线| 成人在线综合网| 欧美精品欧美精品系列| 国产视频视频一区| 亚洲成a人v欧美综合天堂下载| 国产一区日韩二区欧美三区| 91老司机福利 在线| 欧美一级片在线| 亚洲老司机在线| 国产麻豆日韩欧美久久| 欧美视频日韩视频| 久久久久久免费| 日韩 欧美一区二区三区| av亚洲精华国产精华| 日韩精品最新网址| 亚洲黄色小视频| 国产剧情在线观看一区二区| 在线观看亚洲专区| 国产日韩欧美高清| 久久机这里只有精品| 欧美影视一区二区三区| 国产精品免费网站在线观看| 日韩av二区在线播放| 欧美亚洲愉拍一区二区| 国产精品拍天天在线| 国产精品系列在线观看| 日韩美女一区二区三区四区| 性做久久久久久免费观看| 91在线观看美女| 国产欧美视频一区二区| 精品一区二区三区视频在线观看| 欧美性videosxxxxx| 亚洲精品国产成人久久av盗摄| 国产a久久麻豆| 26uuuu精品一区二区| 精品在线观看免费| 91精品久久久久久久99蜜桃| 亚洲高清中文字幕| 在线免费观看日本欧美| 日韩一区欧美小说| 99久久伊人精品| 日韩伦理电影网| www.激情成人| 国产精品毛片久久久久久久| 高清视频一区二区|