From e69f601f04bc508cea296b50f063d2e91c98791e Mon Sep 17 00:00:00 2001 From: NguyenPham Date: Thu, 27 Jan 2022 08:35:01 +1100 Subject: [PATCH] Version Beta --- README.md | 13 +- .../UserInterfaceState.xcuserstate | Bin 138418 -> 139185 bytes .../xcshareddata/xcschemes/ocgdb.xcscheme | 20 +- .../xcdebugger/Breakpoints_v2.xcbkptlist | 164 +++++------ src/board/base.cpp | 57 ++-- src/board/base.h | 6 +- src/builder.cpp | 259 +++++++++++------- src/builder.h | 13 +- src/main.cpp | 8 + 9 files changed, 308 insertions(+), 232 deletions(-) diff --git a/README.md b/README.md index 186b5ec..cc0cd89 100644 --- a/README.md +++ b/README.md @@ -10,13 +10,14 @@ Version Beta ## Why OCGDB? Features/Highlights -- Open databases: users could easily understand data structures, modify, convert to or from other database formats -- It supports the highest numbers of games (tested with 94 million games, estimated it could work with billions of games) -- It is based on SQL which is the strongest query language for querying general information. Users can query without using chess specific programs +- Open databases: users could easily understand data structures, modify, convert to, or from other database formats +- It is the format supporting the highest numbers of games (tested with 94 million games, estimated it could work with billions of games) +- It is based on SQL - the strongest query language for querying general information. Users can query without using chess specific programs - It has its own query language (PQL) for approximate-position-searching thus it can cover very widely -- It could use widely, from mobile, desktop, console to web applicationsĀ  -- It is one of programs that could create the smallest chess game databases -- It is one of the fastestĀ chess game database programs when generating databases and searching +- It could use for all database purposes, from mobile, desktop, console to web applications +- It is one of the formats/programs that could create the smallest chess game databases +- It is one of the fastest chess game database formats/programs when generating databases and searching +- 75% of code are SQLite and some other popular open-source libraries that are tested so widely and carefully. The rest 25% (about chess) is tested carefully too. Using this code is quite safe and can save a lot of headache and effort - MIT license: you may use it for any applications/purposes unlimitedly without worrying about license conditions diff --git a/projects/ocgdb.xcodeproj/project.xcworkspace/xcuserdata/nguyenpham.xcuserdatad/UserInterfaceState.xcuserstate b/projects/ocgdb.xcodeproj/project.xcworkspace/xcuserdata/nguyenpham.xcuserdatad/UserInterfaceState.xcuserstate index c5d37f205f4a2a825f621b5d4d5ebd2425b4f5c1..b25819f787bf30127dd815517d0617dca7b0317a 100644 GIT binary patch literal 139185 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 Pmgd;=)Exi+Wxe + isEnabled = "YES"> + isEnabled = "NO"> + isEnabled = "NO"> + + + isEnabled = "NO"> diff --git a/projects/ocgdb.xcodeproj/xcuserdata/nguyenpham.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/projects/ocgdb.xcodeproj/xcuserdata/nguyenpham.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist index bf75757..2ca3c44 100644 --- a/projects/ocgdb.xcodeproj/xcuserdata/nguyenpham.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ b/projects/ocgdb.xcodeproj/xcuserdata/nguyenpham.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -14,8 +14,8 @@ filePath = "../src/builder.cpp" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "654" - endingLineNumber = "654" + startingLineNumber = "667" + endingLineNumber = "667" landmarkName = "Builder::processPgnFile(path)" landmarkType = "7"> @@ -414,9 +414,9 @@ filePath = "../src/board/base.cpp" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "957" - endingLineNumber = "957" - landmarkName = "BoardCore::fromMoveList(gameId, moveVec, flag, shouldStop)" + startingLineNumber = "966" + endingLineNumber = "966" + landmarkName = "BoardCore::fromMoveList(gameId, itemMap, moveVec, flag, shouldStop)" landmarkType = "7"> @@ -510,8 +510,8 @@ filePath = "../src/builder.cpp" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "721" - endingLineNumber = "721" + startingLineNumber = "734" + endingLineNumber = "734" landmarkName = "Builder::createDb(path)" landmarkType = "7"> @@ -526,8 +526,8 @@ filePath = "../src/builder.cpp" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "719" - endingLineNumber = "719" + startingLineNumber = "732" + endingLineNumber = "732" landmarkName = "Builder::createDb(path)" landmarkType = "7"> @@ -542,8 +542,8 @@ filePath = "../src/builder.cpp" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "430" - endingLineNumber = "430" + startingLineNumber = "444" + endingLineNumber = "444" landmarkName = "Builder::addNewField(fieldName)" landmarkType = "7"> @@ -558,8 +558,8 @@ filePath = "../src/builder.cpp" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "1139" - endingLineNumber = "1139" + startingLineNumber = "1152" + endingLineNumber = "1152" landmarkName = "Builder::addGame(itemMap, moveText)" landmarkType = "7"> @@ -574,8 +574,8 @@ filePath = "../src/builder.cpp" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "1144" - endingLineNumber = "1144" + startingLineNumber = "1157" + endingLineNumber = "1157" landmarkName = "Builder::addGame(itemMap, moveText)" landmarkType = "7"> @@ -590,8 +590,8 @@ filePath = "../src/builder.cpp" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "1165" - endingLineNumber = "1165" + startingLineNumber = "1178" + endingLineNumber = "1178" landmarkName = "Builder::addGame(itemMap, moveText)" landmarkType = "7"> @@ -606,8 +606,8 @@ filePath = "../src/builder.cpp" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "934" - endingLineNumber = "934" + startingLineNumber = "947" + endingLineNumber = "947" landmarkName = "Builder::addGame(itemMap, moveText)" landmarkType = "7"> @@ -622,8 +622,8 @@ filePath = "../src/builder.cpp" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "1041" - endingLineNumber = "1041" + startingLineNumber = "1054" + endingLineNumber = "1054" landmarkName = "Builder::addGame(itemMap, moveText)" landmarkType = "7"> @@ -638,8 +638,8 @@ filePath = "../src/builder.cpp" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "1037" - endingLineNumber = "1037" + startingLineNumber = "1050" + endingLineNumber = "1050" landmarkName = "Builder::addGame(itemMap, moveText)" landmarkType = "7"> @@ -686,8 +686,8 @@ filePath = "../src/builder.cpp" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "1402" - endingLineNumber = "1402" + startingLineNumber = "1334" + endingLineNumber = "1334" landmarkName = "Builder::searchPosition(db, pgnPaths, query)" landmarkType = "7"> @@ -702,8 +702,8 @@ filePath = "../src/builder.cpp" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "942" - endingLineNumber = "942" + startingLineNumber = "955" + endingLineNumber = "955" landmarkName = "Builder::addGame(itemMap, moveText)" landmarkType = "7"> @@ -718,8 +718,8 @@ filePath = "../src/builder.cpp" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "943" - endingLineNumber = "943" + startingLineNumber = "956" + endingLineNumber = "956" landmarkName = "Builder::addGame(itemMap, moveText)" landmarkType = "7"> @@ -734,8 +734,8 @@ filePath = "../src/builder.cpp" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "952" - endingLineNumber = "952" + startingLineNumber = "965" + endingLineNumber = "965" landmarkName = "Builder::addGame(itemMap, moveText)" landmarkType = "7"> @@ -766,8 +766,8 @@ filePath = "../src/builder.cpp" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "1186" - endingLineNumber = "1186" + startingLineNumber = "1199" + endingLineNumber = "1199" landmarkName = "Builder::queryGame(itemMap, moveText)" landmarkType = "7"> @@ -782,8 +782,8 @@ filePath = "../src/builder.cpp" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "1205" - endingLineNumber = "1205" + startingLineNumber = "1218" + endingLineNumber = "1218" landmarkName = "Builder::queryGame(itemMap, moveText)" landmarkType = "7"> @@ -798,9 +798,9 @@ filePath = "../src/board/base.cpp" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "806" - endingLineNumber = "806" - landmarkName = "BoardCore::fromMoveList(gameId, str, notation, flag, shouldStop)" + startingLineNumber = "812" + endingLineNumber = "812" + landmarkName = "BoardCore::fromMoveList(gameId, itemMap, str, notation, flag, shouldStop)" landmarkType = "7"> @@ -814,9 +814,9 @@ filePath = "../src/board/base.cpp" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "852" - endingLineNumber = "852" - landmarkName = "BoardCore::fromMoveList(gameId, str, notation, flag, shouldStop)" + startingLineNumber = "858" + endingLineNumber = "858" + landmarkName = "BoardCore::fromMoveList(gameId, itemMap, str, notation, flag, shouldStop)" landmarkType = "7"> @@ -830,9 +830,9 @@ filePath = "../src/board/base.cpp" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "859" - endingLineNumber = "859" - landmarkName = "BoardCore::fromMoveList(gameId, str, notation, flag, shouldStop)" + startingLineNumber = "865" + endingLineNumber = "865" + landmarkName = "BoardCore::fromMoveList(gameId, itemMap, str, notation, flag, shouldStop)" landmarkType = "7"> @@ -846,8 +846,8 @@ filePath = "../src/builder.cpp" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "1397" - endingLineNumber = "1397" + startingLineNumber = "1329" + endingLineNumber = "1329" landmarkName = "Builder::searchPosition(db, pgnPaths, query)" landmarkType = "7"> @@ -862,9 +862,9 @@ filePath = "../src/board/base.cpp" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "855" - endingLineNumber = "855" - landmarkName = "BoardCore::fromMoveList(gameId, str, notation, flag, shouldStop)" + startingLineNumber = "861" + endingLineNumber = "861" + landmarkName = "BoardCore::fromMoveList(gameId, itemMap, str, notation, flag, shouldStop)" landmarkType = "7"> @@ -878,8 +878,8 @@ filePath = "../src/builder.cpp" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "1173" - endingLineNumber = "1173" + startingLineNumber = "1186" + endingLineNumber = "1186" landmarkName = "Builder::queryGame(itemMap, moveText)" landmarkType = "7"> @@ -894,8 +894,8 @@ filePath = "../src/builder.cpp" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "592" - endingLineNumber = "592" + startingLineNumber = "605" + endingLineNumber = "605" landmarkName = "Builder::processDataBlock(buffer, sz, connectBlock)" landmarkType = "7"> @@ -910,8 +910,8 @@ filePath = "../src/builder.cpp" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "633" - endingLineNumber = "633" + startingLineNumber = "646" + endingLineNumber = "646" landmarkName = "Builder::processPgnFile(path)" landmarkType = "7"> @@ -926,28 +926,12 @@ filePath = "../src/builder.cpp" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "1466" - endingLineNumber = "1466" + startingLineNumber = "1397" + endingLineNumber = "1397" landmarkName = "Builder::searchPosition(db, pgnPaths, query)" landmarkType = "7"> - - - - - - - - @@ -1006,8 +974,8 @@ filePath = "../src/board/base.cpp" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "1088" - endingLineNumber = "1088" + startingLineNumber = "1097" + endingLineNumber = "1097" landmarkName = "BoardCore::toSimplePgn()" landmarkType = "7"> @@ -1022,9 +990,9 @@ filePath = "../src/board/base.cpp" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "890" - endingLineNumber = "890" - landmarkName = "BoardCore::fromMoveList(gameId, str, notation, flag, shouldStop)" + startingLineNumber = "896" + endingLineNumber = "896" + landmarkName = "BoardCore::fromMoveList(gameId, itemMap, str, notation, flag, shouldStop)" landmarkType = "7"> diff --git a/src/board/base.cpp b/src/board/base.cpp index 876fb90..436515f 100644 --- a/src/board/base.cpp +++ b/src/board/base.cpp @@ -671,7 +671,13 @@ void BoardCore::_parseComment_standard(const std::string& comment, Hist& hist) hist.comment = str; } -bool BoardCore::fromMoveList(int64_t gameId, const std::string& str, Notation notation, int flag, std::function& bitboardVec, const BoardCore*)> shouldStop) + +bool BoardCore::fromMoveList(int64_t gameId, + const std::unordered_map* itemMap, + const std::string& str, + Notation notation, + int flag, + std::function& bitboardVec, const BoardCore*, const std::unordered_map*)> shouldStop) { std::lock_guard dolock(dataMutex); @@ -856,7 +862,7 @@ bool BoardCore::fromMoveList(int64_t gameId, const std::string& str, Notation no bitboardVec = posToBitboards(); assert(!bitboardVec.empty()); - if (shouldStop && shouldStop(gameId, bitboardVec, this)) { + if (shouldStop && shouldStop(gameId, bitboardVec, this, itemMap)) { hit = true; break; } @@ -899,7 +905,7 @@ bool BoardCore::fromMoveList(int64_t gameId, const std::string& str, Notation no // last position if (shouldStop && !hit) { bitboardVec = posToBitboards(); - if (shouldStop(gameId, bitboardVec, this)) { + if (shouldStop(gameId, bitboardVec, this, itemMap)) { hit = true; } } @@ -943,7 +949,10 @@ bool BoardCore::_quickCheck_rook(int from, int dest, bool checkMiddle) const } bool BoardCore::fromMoveList(int64_t gameId, - const std::vector& moveVec, int flag, std::function& bitboardVec, const BoardCore*)> shouldStop) + const std::unordered_map* itemMap, + const std::vector& moveVec, + int flag, + std::function& bitboardVec, const BoardCore*, const std::unordered_map*)> shouldStop) { assert(!moveVec.empty()); @@ -963,7 +972,7 @@ bool BoardCore::fromMoveList(int64_t gameId, bitboardVec = posToBitboards(); assert(!bitboardVec.empty()); - if (shouldStop && shouldStop(gameId, bitboardVec, this)) { + if (shouldStop && shouldStop(gameId, bitboardVec, this, itemMap)) { hit = true; break; } @@ -997,7 +1006,7 @@ bool BoardCore::fromMoveList(int64_t gameId, // last position if (shouldStop && !hit) { bitboardVec = posToBitboards(); - if (shouldStop(gameId, bitboardVec, this)) { + if (shouldStop(gameId, bitboardVec, this, itemMap)) { hit = true; } } @@ -1090,23 +1099,33 @@ std::string BoardCore::toSimplePgn() const return stringStream.str(); } -std::string BoardCore::toPgn(const std::unordered_map tags) const +std::string BoardCore::toPgn(const std::unordered_map* tags) const { - std::ostringstream stringStream; + std::string headString, eventString; + auto haveFEN = false; - auto it = tags.find("Event"); - stringStream << "[Event \"" - << (it != tags.end() ? it->second : "event") - << "\"]\n"; - - for(auto && it : tags) { - if (it.first != "Event") { - stringStream << "[" << it.first << "\"" - << it.second - << "\"]\n"; + if (tags) { + for(auto && it : *tags) { + auto tag = std::string(it.first); + auto s = "[" + tag + " \"" + std::string(it.second) + "\"]\n"; + + if (tag == "Event") { + eventString = s; + } else { + headString += s; + if (tag == "FEN") haveFEN = true; + } } } - if (!startFen.empty()) { + + if (eventString.empty()) { + eventString = "[Event \"\"]\n"; + } + + std::ostringstream stringStream; + stringStream << eventString << headString; + + if (!haveFEN && !startFen.empty()) { stringStream << "[FEN \"" << startFen << "\"]\n"; } diff --git a/src/board/base.h b/src/board/base.h index 5cef2a3..dd52e93 100644 --- a/src/board/base.h +++ b/src/board/base.h @@ -377,9 +377,9 @@ namespace bslib { ParseMoveListFlag_move_size_1_byte = 1 << 6, // for the 2nd function one only }; - virtual bool fromMoveList(int64_t gameId, const std::string&, Notation, int flag, std::function& bitboardVec, const BoardCore*)> = nullptr); + virtual bool fromMoveList(int64_t gameId, const std::unordered_map* itemMap, const std::string&, Notation, int flag, std::function& bitboardVec, const BoardCore*, const std::unordered_map*)> = nullptr); - virtual bool fromMoveList(int64_t gameId, const std::vector& moveVec, int flag, std::function& bitboardVec, const BoardCore*)> = nullptr); + virtual bool fromMoveList(int64_t gameId, const std::unordered_map* itemMap, const std::vector& moveVec, int flag, std::function& bitboardVec, const BoardCore*, const std::unordered_map*)> = nullptr); std::vector parsePv(const std::string& pvString, bool isCoordinateOnly); std::vector _parsePv(const std::string& pvString, bool isCoordinateOnly); @@ -392,7 +392,7 @@ namespace bslib { static std::string toMoveListString(const std::vector& histList, ChessVariant variant, Notation notation, int itemPerLine, bool moveCounter, CommentComputerInfoType computingInfo, bool pawnUnit, int precision); virtual std::string toSimplePgn() const; - virtual std::string toPgn(const std::unordered_map tags) const; + virtual std::string toPgn(const std::unordered_map* tags = nullptr) const; virtual int16_t move2i16(int from, int dest, int promotion, bool haveComment) const = 0; virtual void i16ToMove(int data, int& from, int& dest, int& promotion, bool& haveComment) const = 0; diff --git a/src/builder.cpp b/src/builder.cpp index b98e87f..b45ba25 100644 --- a/src/builder.cpp +++ b/src/builder.cpp @@ -80,6 +80,16 @@ bool ParaRecord::isValid() const ok = true; break; } + case Task::getgame: + { + if (gameID <= 0) { + errorString = "gameID must be greater than zero"; + break; + } + + ok = true; + break; + } default: break; @@ -109,7 +119,8 @@ std::string ParaRecord::toString() const const std::string taskNames[] = { "create SQL database", "query", - "bench" + "bench", + "get game" }; @@ -293,6 +304,9 @@ void Builder::runTask(const ParaRecord& param) case Task::query: query(param, param.queries); break; + case Task::getgame: + getGame(param); + break; default: break; @@ -512,7 +526,6 @@ void Builder::processDataBlock(char* buffer, long sz, bool connectBlock) if (hasEvent && p - buffer > 2) { *(p - 2) = 0; -// threadAddGame(tagMap, moves); if (paraRecord.task == Task::create) { threadAddGame(tagMap, moves); } else { @@ -1094,7 +1107,7 @@ bool Builder::addGame(const std::unordered_map& itemMap, const cha flag |= bslib::BoardCore::ParseMoveListFlag_discardComment; } - t->board->fromMoveList(gameID, moveText, bslib::Notation::san, flag); + t->board->fromMoveList(gameID, &itemMap, moveText, bslib::Notation::san, flag); plyCount = t->board->getHistListSize(); @@ -1202,37 +1215,12 @@ bool Builder::queryGame(const std::unordered_map& itemMap, const c if (paraRecord.optionFlag & query_flag_print_pgn) { flag |= bslib::BoardCore::ParseMoveListFlag_create_san; } - t->board->fromMoveList(gameID, moveText, bslib::Notation::san, flag, checkToStop); + t->board->fromMoveList(gameID, &itemMap, moveText, bslib::Notation::san, flag, checkToStop); } return true; } -void Builder::queryGameData(SQLite::Database& db, int gameIdx) -{ - auto ok = false; - - benchStatement->reset(); - benchStatement->bind(1, gameIdx); - - if (benchStatement->executeStep()) { - const int id = benchStatement->getColumn("ID"); - const std::string white = benchStatement->getColumn("White"); - const std::string black = benchStatement->getColumn("Black"); - const std::string fen = benchStatement->getColumn("FEN"); - const std::string moves = benchStatement->getColumn("Moves"); - const int plyCount = benchStatement->getColumn("PlyCount"); - - ok = id == gameIdx && !white.empty() && !black.empty() - && (!fen.empty() || !moves.empty()) - && plyCount >= 0; - } - - if (!ok) { - std::cerr << "Error: queryGameData incorrect for " << gameIdx << std::endl; - } -} - int popCount(uint64_t x) { int count = 0; @@ -1244,62 +1232,6 @@ int popCount(uint64_t x) { } -static const int lsb_64_table[64] = -{ - 63, 30, 3, 32, 59, 14, 11, 33, - 60, 24, 50, 9, 55, 19, 21, 34, - 61, 29, 2, 53, 51, 23, 41, 18, - 56, 28, 1, 43, 46, 27, 0, 35, - 62, 31, 58, 4, 5, 49, 54, 6, - 15, 52, 12, 40, 7, 42, 45, 16, - 25, 57, 48, 13, 10, 39, 8, 44, - 20, 47, 38, 22, 17, 37, 36, 26 -}; - -static int _bitScanForward(uint64_t bb) { - unsigned int folded; - assert (bb != 0); - bb ^= bb - 1; - folded = (int) bb ^ (bb >> 32); - return lsb_64_table[folded * 0x78291ACF >> 26]; -} - -static int bitScanForwardWithReset(uint64_t &bb) { - int idx = _bitScanForward(bb); - bb &= bb - 1; // reset bit outside - return idx; -} - - -void Builder::updateBoard(bslib::BoardCore* board, const std::vector& bbvec) -{ - // bitboards of black, white, king must not be zero - assert(board && bbvec.size() >= 9 && bbvec[0] && bbvec[1] && bbvec[2]); - - for(auto i = 0; i < 64; ++i) { - board->setEmpty(i); - } - - auto bbblack = bbvec[0]; - for(int type = bslib::KING; type <= bslib::PAWNSTD; ++type) { - auto bb = bbvec.at(type + 1); - - while(bb) { - auto pos = bitScanForwardWithReset(bb); assert(pos >= 0 && pos < 64); - auto side = (bbblack & bslib::ChessBoard::_posToBitboard[pos]) ? bslib::Side::black : bslib::Side::white; - bslib::Piece piece(type, side); - board->setPiece(pos, piece); - } - } - - auto chessBoard = static_cast(board); - auto prop = bbvec.at(8); - auto enpassant = static_cast(prop & 0xff); - chessBoard->setEnpassant(enpassant); - chessBoard->setCastleRights(0, (prop >> 8) & bslib::CastleRight_mask); - chessBoard->setCastleRights(1, (prop >> 10) & bslib::CastleRight_mask); -} - void doParsePGNGame(int64_t gameID, const std::string& fenText, const std::string& moveText, const std::vector& moveVec) { assert(builder); @@ -1334,7 +1266,7 @@ void Builder::parsePGNGame(int64_t gameID, const std::string& fenText, int flag = bslib::BoardCore::ParseMoveListFlag_create_bitboard; if (searchField == SearchField::moves) { // there is a text move only flag |= bslib::BoardCore::ParseMoveListFlag_quick_check; - t->board->fromMoveList(gameID, moveText, bslib::Notation::san, flag, checkToStop); + t->board->fromMoveList(gameID, nullptr, moveText, bslib::Notation::san, flag, checkToStop); } else { @@ -1342,7 +1274,7 @@ void Builder::parsePGNGame(int64_t gameID, const std::string& fenText, flag |= bslib::BoardCore::ParseMoveListFlag_move_size_1_byte; } - t->board->fromMoveList(gameID, moveVec, flag, checkToStop); + t->board->fromMoveList(gameID, nullptr, moveVec, flag, checkToStop); } t->gameCnt++; @@ -1393,7 +1325,7 @@ void Builder::searchPosition(SQLite::Database* db, const std::vector& bitboardVec, const bslib::BoardCore* board) -> bool { + checkToStop = [=](int64_t gameId, const std::vector& bitboardVec, const bslib::BoardCore* board, const std::unordered_map* itemMap) -> bool { assert(board && bitboardVec.size() >= 11); if (parser->evaluate(bitboardVec)) { @@ -1405,8 +1337,7 @@ void Builder::searchPosition(SQLite::Database* db, const std::vectorgetFen(); } if (paraRecord.optionFlag & query_flag_print_pgn) { - std::unordered_map tags; - std::cout << "\n\n" << board->toPgn(tags); + std::cout << "\n\n" << board->toPgn(itemMap); } std::cout << std::endl; } @@ -1494,9 +1425,9 @@ void Builder::bench(const ParaRecord& paraRecord) const std::vector queries { "Q = 3", // three White Queens -// "r[e4, e5, d4,d5]= 2", // two black Rooks in middle squares + "r[e4, e5, d4,d5]= 2", // two black Rooks in middle squares "P[d4, e5, f4, g4] = 4 and kb7", // White Pawns in d4, e5, f4, g4 and black King in b7 -// "B[c-f] + b[c-f] == 2", // There are two Bishops (any side) from column c to f + "B[c-f] + b[c-f] == 2", // There are two Bishops (any side) from column c to f "white6 = 5", // There are 5 white pieces on row 6 }; @@ -1544,4 +1475,148 @@ void Builder::query(const ParaRecord& _paraRecord, const std::vector moveNameSet; + + /* + Warning: It is easier to work with map. + However, for speeding of the parser, we use map instead. + Thus, here is a bit more completed when we have to store string in an buffer first + */ + std::unordered_map itemMap; + char * buf = (char*) malloc(1024 * 8), *p = buf; + + for(int i = 0, cnt = query.getColumnCount(); i < cnt; ++i) { + auto c = query.getColumn(i); + std::string name = c.getName(); + if (name == "Moves" || name == "Moves1" || name == "Moves2") { + moveNameSet.insert(name); + continue; + } + + // Ignore all ID column such as ID, WhiteID, BlackID, EventID... + auto nameLen = name.size(); + if (nameLen >= 2 && strcmp(name.c_str() + nameLen - 2, "ID") == 0) { + continue; + } + std::string str; + + switch (c.getType()) + { + case SQLITE_INTEGER: + { + auto k = c.getInt(); + str = std::to_string(k); + break; + } + case SQLITE_FLOAT: + { + auto k = c.getDouble(); + str = std::to_string(k); + break; + } + case SQLITE_BLOB: + { + // something wrong + break; + } + case SQLITE_NULL: + { + // something wrong + break; + } + case SQLITE3_TEXT: + { + str = c.getString(); + if (name == "FEN") { + fenString = str; + } + break; + } + + default: + assert(0); + break; + } + + if (name != "Event" && str.empty()) { + continue; + } + auto p0 = p; + strcpy(p, name.c_str()); + p += nameLen + 1; + itemMap[p0] = p; + strcpy(p, str.c_str()); + p += str.size() + 1; + } + + auto board = Builder::createBoard(bslib::ChessVariant::standard); + board->newGame(fenString); + + if (moveNameSet.find("Moves1") != moveNameSet.end() || moveNameSet.find("Moves2") != moveNameSet.end()) { + auto moveName = "Moves1"; + + int flag = bslib::BoardCore::ParseMoveListFlag_create_san; + + if (moveNameSet.find("Moves2") == moveNameSet.end()) { + flag |= bslib::BoardCore::ParseMoveListFlag_move_size_1_byte; + } else { + moveName = "Moves2"; + } + + auto c = query.getColumn(moveName); + auto moveBlob = static_cast(c.getBlob()); + + if (moveBlob) { + std::vector moveVec; + auto sz = c.size(); + for(auto i = 0; i < sz; ++i) { + moveVec.push_back(moveBlob[i]); + } + + board->fromMoveList(gameID, nullptr, moveVec, flag, nullptr); + } + } else { + assert(moveNameSet.find("Moves") != moveNameSet.end()); + auto moveText = query.getColumn("Moves").getString(); + + int flag = bslib::BoardCore::ParseMoveListFlag_quick_check + | bslib::BoardCore::ParseMoveListFlag_discardComment + | bslib::BoardCore::ParseMoveListFlag_create_san; + board->fromMoveList(gameID, nullptr, moveText.c_str(), bslib::Notation::san, flag, nullptr); + } + + std::cout << "Game retrieved successfully, PGN:\n" << board->toPgn(&itemMap) << std::endl; + + delete buf; + delete board; +} + + +void Builder::getGame(const ParaRecord& _paraRecord) +{ + paraRecord = _paraRecord; + SQLite::Database db(paraRecord.dbPath, SQLite::OPEN_READWRITE); + queryGameDataByID(db, paraRecord.gameID); +} diff --git a/src/builder.h b/src/builder.h index 5ba2c42..e63b6a6 100644 --- a/src/builder.h +++ b/src/builder.h @@ -40,7 +40,8 @@ enum class Task { create, query, - bench + bench, + getgame }; enum { @@ -67,7 +68,7 @@ class ParaRecord int optionFlag; Task task = Task::create; - int cpuNumber = -1, limitElo = 0, limitLen = 0; + int cpuNumber = -1, limitElo = 0, limitLen = 0, gameID = -1; int64_t gameNumberLimit = 0xffffffffffffULL; // stop when the number of games reached that limit int64_t resultNumberLimit = 0xffffffffffffULL; // stop when the number of results reached that limit @@ -129,6 +130,8 @@ class Builder void parsePGNGame(int64_t gameID, const std::string& fenText, const std::string& moveText, const std::vector& vec); + static void queryGameDataByID(SQLite::Database& db, int gameIdx); + private: enum class SearchField { @@ -143,6 +146,7 @@ class Builder void convertPgn2Sql(const ParaRecord&); void bench(const ParaRecord& paraRecord); void query(const ParaRecord& paraRecord, const std::vector& queries); + void getGame(const ParaRecord&); void searchPosition(SQLite::Database* db, const std::vector& pgnPaths, const std::string& query); @@ -166,9 +170,6 @@ class Builder void processHalfBegin(char* buffer, long len); void processHalfEnd(char* buffer, long len); - void updateBoard(bslib::BoardCore*, const std::vector& bbvec); - - void queryGameData(SQLite::Database& db, int gameIdx); void threadAddGame(const std::unordered_map& itemMap, const char* moveText); void threadQueryGame(const std::unordered_map& itemMap, const char* moveText); @@ -185,7 +186,7 @@ class Builder void threadParsePGNGame(int64_t gameID, const std::string& fenText, const std::string& moveText, const std::vector&); - std::function&, const bslib::BoardCore*)> checkToStop = nullptr; + std::function&, const bslib::BoardCore*, const std::unordered_map*)> checkToStop = nullptr; std::unordered_map playerIdMap, eventIdMap, siteIdMap; diff --git a/src/main.cpp b/src/main.cpp index b4168a9..c91127a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -74,6 +74,11 @@ int main(int argc, const char * argv[]) { paraRecord.queries.push_back(query); continue; } + if (str == "-g") { + paraRecord.task = ocgdb::Task::getgame; + paraRecord.gameID = std::atoi(argv[++i]); + continue; + } } std::cout << "All parameters:\n" << paraRecord.toString() << std::endl; @@ -104,6 +109,8 @@ void print_usage() std::cerr << " -cpu number of threads, omit for all cores, works with -pgn, -bench, -query" << std::endl; std::cerr << " -bench benchmarch querying games speed, works with -db and -cpu" << std::endl; std::cerr << " -q querying positions, repeat to add multi queries, works with -db and -cpu" << std::endl; + std::cerr << " -g get game with game ID number, works with -db" << std::endl; + std::cerr << " -elo discard games with Elo under n (for creating)" << std::endl; std::cerr << " -plycount discard games with ply-count under n (for creating)" << std::endl; std::cerr << " -resultcount stop querying if the number of results above n (for querying)" << std::endl; @@ -125,4 +132,5 @@ void print_usage() std::cerr << " ocgdb -pgn big.png -db :memory: -elo 2100 -o moves;moves1;discardsites" << std::endl; std::cerr << " ocgdb -bench -db big.ocgdb.db3 -cpu 4" << std::endl; std::cerr << " ocgdb -db big.ocgdb.db3 -cpu 4 -q \"Q=3\" -q\"P[d4, e5, f4, g4] = 4 and kb7\"" << std::endl; + std::cerr << " ocgdb -db big.ocgdb.db3 -g 4432" << std::endl; }