6 Star 4 Fork 2

GPLme / SG-Database

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
main.cpp 17.01 KB
一键复制 编辑 原始数据 按行查看 历史
ECIR 提交于 2021-04-17 21:16 . 增加日志功能
#include <QtCore/QCoreApplication>
#include <QCoreApplication>
#include <queue>
#include "aggHelper.h"
#include "TcpSocketServer.h"
#include "tableManager.h"
#include "dbProcess.h"
#include "jsCall.cpp"
string IO::default_path;
int IO::singleFileLen;
string tableManager::curOperatUser;
tableManager* tableManager::tablemanager;
table* tableManager::jurisdictionTable;
queue<processObject> dbProcess::processQueue;
queue<processObject> dbProcess::correspondQueue;
table* dbProcess::countTable;
view* view::viewmanager;
aggHelper* aggHelper::agghelper;
typeHelper* typeHelper::typehelper;
string logger::logFileName;
fstream logger::logFile;
#define RegisterJSType(TypeName,JSName) qRegisterMetaType<TypeName>(JSName)
using namespace std;
void outputVec(const vector<int> &vec)
{
for(int i : vec)
cout<<i<<" ";
cout<<endl;
}
class dbRun :public QThread{
virtual void run(){
while(true){
dbProcess::processRequst();
}
}
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
IO::singleFileLen=1000;
IO::default_path="C:\\database_test";
logger::logFileName="logFile";
logger::logFile=fstream (IO::default_path+"\\"+logger::logFileName+".txt",ios::out|ios::app);
RegisterJSType(table*,"table*");
RegisterJSType(col*,"col*");
RegisterJSType(Basic*,"Basic*");
RegisterJSType(jsCollection*,"jsCollection*");
RegisterJSType(processObject,"processObject");
manageContain::contain->init();
//创建所需表
col* USERNAME=new col(STR,"USERNAME");
col* PASSWORD=new col (STR,"PASSWORD");
table* Count=new table ("Count",{USERNAME,PASSWORD});
Count->add({typeHelper::typehelper->strToBasic("'ZT'"),typeHelper::typehelper->strToBasic(("'zt'"))});
Count->saveFile();
col* USER=new col(STR,"USERNAME");
col* TABLE=new col (STR,"TABLE");
table* Jurisdiction=new table ("Jurisdiction",{USER,TABLE});
Jurisdiction->add({typeHelper::typehelper->strToBasic("'ZT'"),typeHelper::typehelper->strToBasic(("'student'"))});
Jurisdiction->add({typeHelper::typehelper->strToBasic("'ZT'"),typeHelper::typehelper->strToBasic(("'teacher'"))});
Jurisdiction->saveFile();
col* viewName=new col(STR,"viewName");
col* viewCode=new col (STR,"viewCode");
table* views=new table ("views",{viewName,viewCode});
views->saveFile();
//静态工具初始化
typeHelper::typehelper=typeHelper::getTypeHelper();
manageContain::contain->init();
tableManager::tablemanager=tableManager::getTableManager(10);
aggHelper::agghelper=aggHelper::getHelper();
view::viewmanager=view::getViewManager();
//读取账户表 权限表
dbProcess::setCount(table::loadFile("Count"));
tableManager::setJurisdiction(table::loadFile("Jurisdiction"));
col* NAME=new col(STR,"NAME");
col* SCORE=new col (INT,"SCORE");
col* TEACHER=new col (STR,"TEACHER");
table* student=new table ("student",{NAME,SCORE,TEACHER});
student->add({typeHelper::typehelper->strToBasic("'zt'"),typeHelper::typehelper->strToBasic(("57")),typeHelper::typehelper->strToBasic("'jp'")});
student->add({typeHelper::typehelper->strToBasic("'gj'"),typeHelper::typehelper->strToBasic(("71")),typeHelper::typehelper->strToBasic("'gb'")});
student->add({typeHelper::typehelper->strToBasic("'yf'"),typeHelper::typehelper->strToBasic(("78")),typeHelper::typehelper->strToBasic("'gjb'")});
student->add({typeHelper::typehelper->strToBasic("'xr'"),typeHelper::typehelper->strToBasic(("89")),typeHelper::typehelper->strToBasic("'gjb'")});
student->add({typeHelper::typehelper->strToBasic("'wx'"),typeHelper::typehelper->strToBasic(("63")),typeHelper::typehelper->strToBasic("'jp'")});
student->add({typeHelper::typehelper->strToBasic("'ww'"),typeHelper::typehelper->strToBasic(("78")),typeHelper::typehelper->strToBasic("'gb'")});
long long startTime=getCurrentTime();
for(int i=0;i<1000000;++i){
student->add({typeHelper::typehelper->strToBasic("'yyyy'"),typeHelper::typehelper->strToBasic((QString::fromStdString(to_string(i)))),typeHelper::typehelper->strToBasic("'jp'")});
}
cout<<getCurrentTime()-startTime<<endl;
startTime=getCurrentTime();
student->saveFile();
cout<<getCurrentTime()-startTime<<endl;
student=tableManager::tablemanager->loadTable("student");
/*col* tc=new col (STR,"TEACHER");
col* lc=new col (STR,"LOC");
table* teacher=new table ("teacher",{tc,lc});
teacher->add({typeHelper::typehelper->strToBasic("'jp'"),typeHelper::typehelper->strToBasic("'HangZhou'")});
teacher->add({typeHelper::typehelper->strToBasic("'gb'"),typeHelper::typehelper->strToBasic("'BeiJing'")});
teacher->add({typeHelper::typehelper->strToBasic("'gjb'"),typeHelper::typehelper->strToBasic("'YangZhou'")});
teacher->saveFile();
col* NAME=new col(STR,"NAME");
col* SCORE=new col (INT,"SCORE");
col* TEACHER=new col (STR,"TEACHER");
table* student=new table ("student",{NAME,SCORE,TEACHER});
student->add({typeHelper::typehelper->strToBasic("'zt'"),typeHelper::typehelper->strToBasic(("57")),typeHelper::typehelper->strToBasic("'jp'")});
student->add({typeHelper::typehelper->strToBasic("'gj'"),typeHelper::typehelper->strToBasic(("71")),typeHelper::typehelper->strToBasic("'gb'")});
student->add({typeHelper::typehelper->strToBasic("'yf'"),typeHelper::typehelper->strToBasic(("78")),typeHelper::typehelper->strToBasic("'gjb'")});
student->add({typeHelper::typehelper->strToBasic("'xr'"),typeHelper::typehelper->strToBasic(("89")),typeHelper::typehelper->strToBasic("'gjb'")});
student->add({typeHelper::typehelper->strToBasic("'wx'"),typeHelper::typehelper->strToBasic(("63")),typeHelper::typehelper->strToBasic("'jp'")});
student->add({typeHelper::typehelper->strToBasic("'ww'"),typeHelper::typehelper->strToBasic(("78")),typeHelper::typehelper->strToBasic("'gb'")});
startTime=getCurrentTime();
startTime=getCurrentTime();
for(int i=0;i<1000000;++i){
student->add({typeHelper::typehelper->strToBasic("'yyyy'"),typeHelper::typehelper->strToBasic((QString::fromStdString(to_string(i)))),typeHelper::typehelper->strToBasic("'jp'")});
}
cout<<getCurrentTime()-startTime<<endl;
startTime=getCurrentTime();
student->saveFile();
cout<<getCurrentTime()-startTime<<endl;*/
/*startTime=getCurrentTime();
student=tableManager::tablemanager->loadTable("student");
cout<<getCurrentTime()-startTime<<endl;
startTime=getCurrentTime();
//student->setIndex("SCORE",RB);
cout<<getCurrentTime()-startTime<<endl;
startTime=getCurrentTime();
vector<int> resVec=student->find({"","(x<999)",""});
cout<<getCurrentTime()-startTime<<endl;
startTime=getCurrentTime();
student->del(resVec);
cout<<getCurrentTime()-startTime<<endl;
startTime=getCurrentTime();
student->updateFile();
cout<<getCurrentTime()-startTime<<endl;*/
//student->mod(2,{typeHelper::typehelper->strToBasic("NULL"),typeHelper::typehelper->strToBasic(("63")),typeHelper::typehelper->strToBasic("'jp'")});
//student->mod(2,{typeHelper::typehelper->strToBasic("NULL"),typeHelper::typehelper->strToBasic(("63")),typeHelper::typehelper->strToBasic("'jp'")});
/*student->setIndex("SCORE",RB);
startTime=getCurrentTime();
resVec=student->find({"","(x==57)",""});
cout<<getCurrentTime()-startTime<<endl;
//student->del(resVec);
//student->del({34,45});
startTime=getCurrentTime();
student->updateFile();*/
//cout<<getCurrentTime()-startTime<<endl;
//测试视图
/*view::viewmanager->addView("viewtest","function eval() {var tb=tablemanager.loadTable(\"student\");var result=tb.find([\"(x=='zt')\",\"\",\"\"]);return tb.genNewTable([\"SCORE\"],result).toStr();}");
table* testViewTable=view::viewmanager->evalView("viewtest");
cout<<testViewTable->toStr().toStdString();*/
//服务器
TcpSocketServer *m_pTcpServer=new TcpSocketServer();
if (!m_pTcpServer->listen(QHostAddress::Any, 8888))
{
qDebug() << "m_pTcpServer->listen() error";
}
dbRun* dbrun=new dbRun();
dbrun->start();
ServerResponseThread RT;
QObject::connect(&RT, SIGNAL(db_response_signal(processObject)), m_pTcpServer, SLOT(response_handle(processObject)));
RT.start();
/*读写速度测试
col* NAME=new col(STR,"NAME");
col* SCORE=new col (INT,"SCORE");
col* TEACHER=new col (STR,"TEACHER");
table* student=new table ("student",{NAME,SCORE,TEACHER});
student->add({typeHelper::typehelper->strToBasic("'zt'"),typeHelper::typehelper->strToBasic(("57")),typeHelper::typehelper->strToBasic("'jp'")});
student->add({typeHelper::typehelper->strToBasic("'gj'"),typeHelper::typehelper->strToBasic(("71")),typeHelper::typehelper->strToBasic("'gb'")});
student->add({typeHelper::typehelper->strToBasic("'yf'"),typeHelper::typehelper->strToBasic(("78")),typeHelper::typehelper->strToBasic("'gjb'")});
student->add({typeHelper::typehelper->strToBasic("'xr'"),typeHelper::typehelper->strToBasic(("89")),typeHelper::typehelper->strToBasic("'gjb'")});
student->add({typeHelper::typehelper->strToBasic("'wx'"),typeHelper::typehelper->strToBasic(("63")),typeHelper::typehelper->strToBasic("'jp'")});
student->add({typeHelper::typehelper->strToBasic("'ww'"),typeHelper::typehelper->strToBasic(("78")),typeHelper::typehelper->strToBasic("'gb'")});
long long startTime=getCurrentTime();
for(int i=0;i<10000;++i){
student->add({typeHelper::typehelper->strToBasic("'xr'"),typeHelper::typehelper->strToBasic((QString::fromStdString(to_string(i)))),typeHelper::typehelper->strToBasic("'jp'")});
}
cout<<getCurrentTime()-startTime<<endl;
startTime=getCurrentTime();
student->saveFile();
cout<<getCurrentTime()-startTime<<endl;
startTime=getCurrentTime();
student=tableManager::tablemanager->loadTable("student");
cout<<getCurrentTime()-startTime<<endl;
startTime=getCurrentTime();
vector<int> resVec=student->find({"","(x==34)",""});
cout<<getCurrentTime()-startTime<<endl;
startTime=getCurrentTime();
student->del(resVec);
cout<<getCurrentTime()-startTime<<endl;
startTime=getCurrentTime();
student->updateFile();
cout<<getCurrentTime()-startTime<<endl;
startTime=getCurrentTime();
for(int i=0;i<100;++i){
student->add({typeHelper::typehelper->strToBasic("'xr'"),typeHelper::typehelper->strToBasic((QString::fromStdString(to_string(i)))),typeHelper::typehelper->strToBasic("'jp'")});
}
cout<<getCurrentTime()-startTime<<endl;
startTime=getCurrentTime();
student->updateFile();
cout<<getCurrentTime()-startTime<<endl;*/
/*读写压力测试
* startTime=getCurrentTime();
for(int i=0;i<1;i++){
student=table::loadFile("student");
student->saveFile();
delete student;
cout<<i<<endl;
}
cout<<getCurrentTime()-startTime<<endl;*/
/*
多表连接
table* student=tableManager::tablemanager->loadTable("student");
student->add({typeHelper::typehelper->strToBasic("'wuwei'"),typeHelper::typehelper->strToBasic(("63")),typeHelper::typehelper->strToBasic("'sbjp'")});
student->add({typeHelper::typehelper->strToBasic("'wuweibb'"),typeHelper::typehelper->strToBasic(("63")),typeHelper::typehelper->strToBasic("'sbjp'")});
table* teacher=tableManager::tablemanager->loadTable("teacher");
teacher->add({typeHelper::typehelper->strToBasic("'jpsb'"),typeHelper::typehelper->strToBasic("'YANGZHOU'")});
vector<string> stuVec={"NAME","SCORE","TEACHER"};
vector<string> teaVec={"TEACHER","LOC"};
cout<<tableManager::tablemanager->tableJoin("tsleft","student",stuVec,"teacher",teaVec,"TEACHER","TEACHER","leftjoin")->toStr().toStdString();
cout<<tableManager::tablemanager->tableJoin("tsouter","teacher",teaVec,"student",stuVec,"TEACHER","TEACHER","outerjoin")->toStr().toStdString();*/
/*
col* USERNAME=new col(STR,"USERNAME");
col* PASSWORD=new col (STR,"PASSWORD");
table* Count=new table ("Count",{USERNAME,PASSWORD});
Count->add({typeHelper::typehelper->strToBasic("'ZT'"),typeHelper::typehelper->strToBasic(("'zt'"))});
Count->saveFile();
col* USER=new col(STR,"USERNAME");
col* TABLE=new col (STR,"TABLE");
table* Jurisdiction=new table ("Jurisdiction",{USER,TABLE});
Jurisdiction->add({typeHelper::typehelper->strToBasic("'ZT'"),typeHelper::typehelper->strToBasic(("'student'"))});
Jurisdiction->add({typeHelper::typehelper->strToBasic("'ZT'"),typeHelper::typehelper->strToBasic(("'teacher'"))});
Jurisdiction->saveFile();
col* viewName=new col(STR,"viewName");
col* viewCode=new col (STR,"viewCode");
table* views=new table ("views",{viewName,viewCode});
views->saveFile();*/
/*
//创建表 增加数据
col* NAME=new col(STR,"NAME");
col* SCORE=new col (INT,"SCORE");
col* TEACHER=new col (STR,"TEACHER");
table* student=new table ("student",{NAME,SCORE,TEACHER});
student->add({typeHelper::typehelper->strToBasic("'zt'"),typeHelper::typehelper->strToBasic(("57")),typeHelper::typehelper->strToBasic("'jp'")});
student->add({typeHelper::typehelper->strToBasic("'gj'"),typeHelper::typehelper->strToBasic(("71")),typeHelper::typehelper->strToBasic("'gb'")});
student->add({typeHelper::typehelper->strToBasic("'yf'"),typeHelper::typehelper->strToBasic(("78")),typeHelper::typehelper->strToBasic("'gjb'")});
student->add({typeHelper::typehelper->strToBasic("'xr'"),typeHelper::typehelper->strToBasic(("89")),typeHelper::typehelper->strToBasic("'gjb'")});
student->add({typeHelper::typehelper->strToBasic("'wx'"),typeHelper::typehelper->strToBasic(("63")),typeHelper::typehelper->strToBasic("'jp'")});
student->add({typeHelper::typehelper->strToBasic("'ww'"),typeHelper::typehelper->strToBasic(("78")),typeHelper::typehelper->strToBasic("'gb'")});
student->saveFile();
col* tName=new col(STR,"TEACHER");
col* loc=new col (STR,"LOC");
table* teacher=new table ("teacher",{tName,loc});
teacher->add({typeHelper::typehelper->strToBasic("'jp'"),typeHelper::typehelper->strToBasic(("'HangZhou'"))});
teacher->add({typeHelper::typehelper->strToBasic("'gb'"),typeHelper::typehelper->strToBasic(("'BeiJing'"))});
teacher->add({typeHelper::typehelper->strToBasic("'gjb'"),typeHelper::typehelper->strToBasic(("'ShangHai'"))});
teacher->saveFile();
//对表查询
//select max(student.SCORE)from student where student.NAME!="zt"
table* stu_1=tableManager::tablemanager->loadTable("student");
vector<int> resIndex=stu_1->find({"(x!='zt')","",""});
vector<Basic*> resBasic=stu_1->getCol("SCORE")->getData(resIndex);
cout<<aggHelper::helper->max(resBasic)->toStr()<<endl;
//select teacher.loc from teacher where teacher.tName==(select max(student.SCORE) from student )
table* stu_2=tableManager::tablemanager->loadTable("student");
table* tch=tableManager::tablemanager->loadTable("teacher");
string maxScore=aggHelper::helper->max(stu_2->getCol("SCORE")->getAllData())->toStr();
vector<int> getData=stu_2->find({"","(x=="+maxScore+")",""});
vector<Basic*> tchs=stu_2->getCol("TEACHER")->getData(stu_2->find({"","(x=="+maxScore+")",""}));
cout<<tch->getCol("LOC")->genNewCol(tch->find_in("TEACHER",tchs))->toStr()<<endl;
//定点修改
stu_1->del(stu_1->find({"(((x=='xr')||(x=='wx'))||(x=='ww'))","",""}));
stu_1->updateFile();
stu_1=table::loadFile("student");
stu_1->saveFile();
//更换索引
index* ni=new binarySearchIndex(SCORE);
stu_1->changeIndex(1,ni);
cout<<stu_1->genNewTable({"NAME","SCORE","TEACHER"},stu_1->find({"","(x<71)",""}))->toStr()<<endl;
//事务功能
cout<<stu_1->toStr()<<endl;
stu_1->updateFile();
stu_1->add({typeHelper::typehelper->strToBasic("'lz'"),typeHelper::typehelper->strToBasic(("54")),typeHelper::typehelper->strToBasic("'cnnndsb'")});
cout<<stu_1->toStr()<<endl;
stu_1->rollback();
cout<<stu_1->toStr()<<endl;
col* USERNAME=new col(STR,"USERNAME");
col* PASSWORD=new col (STR,"PASSWORD");
table* Count=new table ("Count",{USERNAME,PASSWORD});
Count->add({typeHelper::typehelper->strToBasic("'ZT'"),typeHelper::typehelper->strToBasic(("'zt'"))});
Count->saveFile();
col* USER=new col(STR,"USERNAME");
col* TABLE=new col (STR,"TABLE");
table* Jurisdiction=new table ("Jurisdiction",{USER,TABLE});
Jurisdiction->add({typeHelper::typehelper->strToBasic("'ZT'"),typeHelper::typehelper->strToBasic(("'student'"))});
Jurisdiction->add({typeHelper::typehelper->strToBasic("'ZT'"),typeHelper::typehelper->strToBasic(("'teacher'"))});
Jurisdiction->saveFile();
col* viewName=new col(STR,"viewName");
col* viewCode=new col (STR,"viewCode");
table* views=new table ("views",{viewName,viewCode});
views->saveFile();
*/
return a.exec();
};
C++
1
https://gitee.com/sg-first/SG-Database.git
git@gitee.com:sg-first/SG-Database.git
sg-first
SG-Database
SG-Database
master

搜索帮助