/*
* Copyright ( c ) 2016 The ZLToolKit project authors . All Rights Reserved .
*
* This file is part of ZLToolKit ( https : //github.com/ZLMediaKit/ZLToolKit).
*
* Use of this source code is governed by MIT license that can be found in the
* LICENSE file in the root of the source tree . All contributing project authors
* may be found in the AUTHORS file in the root of the source tree .
*/
# include <iostream>
# include "Util/logger.h"
# if defined(ENABLE_MYSQL)
# include "Util/SqlPool.h"
# endif
using namespace std ;
using namespace toolkit ;
int main ( ) {
//初始化日志 [AUTO-TRANSLATED:371bb4e5]
// Initialize log
Logger : : Instance ( ) . add ( std : : make_shared < ConsoleChannel > ( ) ) ;
# if defined(ENABLE_MYSQL)
/*
* 测 试 方 法 :
* 请 按 照 实 际 数 据 库 情 况 修 改 源 码 然 后 编 译 执 行 测 试
/*
* Test method :
* Please modify the source code according to the actual database situation and then compile and run the test
* [ AUTO - TRANSLATED : 0 bf528e2 ]
*/
string sql_ip = " 127.0.0.1 " ;
unsigned short sql_port = 3306 ;
string user = " root " ;
string password = " 111111 " ;
string character = " utf8mb4 " ;
# if defined(SUPPORT_DYNAMIC_TEMPLATE)
//初始化数据 [AUTO-TRANSLATED:62fabcf5]
// Initialize data
SqlPool : : Instance ( ) . Init ( sql_ip , sql_port , " " , user , password /*,character*/ ) ;
# else
//由于需要编译器对可变参数模板的支持, 所以gcc5.0以下一般都不支持,否则编译报错 [AUTO-TRANSLATED:fde51ba6]
// Because compiler support for variable parameter templates is required, versions below gcc5.0 generally do not support it, otherwise a compilation error will occur
ErrorL < < " your compiler does not support variable parameter templates! " < < endl ;
return - 1 ;
# endif //defined(SUPPORT_DYNAMIC_TEMPLATE)
//建议数据库连接池大小设置跟CPU个数一致(大一点为佳) [AUTO-TRANSLATED:14ca5335]
// It is recommended to set the database connection pool size to be consistent with the number of CPUs (slightly larger is better)
SqlPool : : Instance ( ) . setSize ( 3 + thread : : hardware_concurrency ( ) ) ;
vector < vector < string > > sqlRet ;
SqlWriter ( " create database test_db; " , false ) < < sqlRet ;
SqlWriter ( " create table test_db.test_table(user_name varchar(128),user_id int auto_increment primary key,user_pwd varchar(128)); " , false ) < < sqlRet ;
//同步插入 [AUTO-TRANSLATED:0c010898]
// Synchronous insertion
SqlWriter insertSql ( " insert into test_db.test_table(user_name,user_pwd) values ( ' ? ' , ' ? ' ) ; " );
insertSql < < " zltoolkit " < < " 123456 " < < sqlRet ;
//我们可以知道插入了几条数据,并且可以获取新插入(第一条)数据的rowID [AUTO-TRANSLATED:6c3fe4ae]
// We can know how many pieces of data were inserted, and we can get the rowID of the newly inserted (first) data
DebugL < < " AffectedRows: " < < insertSql . getAffectedRows ( ) < < " ,RowID: " < < insertSql . getRowID ( ) ;
//同步查询 [AUTO-TRANSLATED:6f60ace1]
// Synchronous query
SqlWriter sqlSelect ( " select user_id , user_pwd from test_db.test_table where user_name='?' limit 1; " ) ;
sqlSelect < < " zltoolkit " ;
vector < vector < string > > sqlRet0 ;
vector < list < string > > sqlRet1 ;
vector < deque < string > > sqlRet2 ;
vector < map < string , string > > sqlRet3 ;
vector < unordered_map < string , string > > sqlRet4 ;
sqlSelect < < sqlRet0 ;
sqlSelect < < sqlRet1 ;
sqlSelect < < sqlRet2 ;
sqlSelect < < sqlRet3 ;
sqlSelect < < sqlRet4 ;
for ( auto & line : sqlRet0 ) {
DebugL < < " vector<string> user_id: " < < line [ 0 ] < < " ,user_pwd: " < < line [ 1 ] ;
}
for ( auto & line : sqlRet1 ) {
DebugL < < " list<string> user_id: " < < line . front ( ) < < " ,user_pwd: " < < line . back ( ) ;
}
for ( auto & line : sqlRet2 ) {
DebugL < < " deque<string> user_id: " < < line [ 0 ] < < " ,user_pwd: " < < line [ 1 ] ;
}
for ( auto & line : sqlRet3 ) {
DebugL < < " map<string,string> user_id: " < < line [ " user_id " ] < < " ,user_pwd: " < < line [ " user_pwd " ] ;
}
for ( auto & line : sqlRet4 ) {
DebugL < < " unordered_map<string,string> user_id: " < < line [ " user_id " ] < < " ,user_pwd: " < < line [ " user_pwd " ] ;
}
//异步删除 [AUTO-TRANSLATED:4359ab91]
// Asynchronous deletion
SqlWriter insertDel ( " delete from test_db.test_table where user_name='?'; " ) ;
insertDel < < " zltoolkit " < < endl ;
//注意! [AUTO-TRANSLATED:acc754b6]
// Note!
//如果SqlWriter 的 "<<" 操作符后面紧跟SqlPool::SqlRetType类型, 则说明是同步操作并等待结果 [AUTO-TRANSLATED:be2b37a9]
// If the "<<" operator of SqlWriter is followed by SqlPool::SqlRetType type, it indicates a synchronous operation and waits for the result
//如果紧跟std::endl ,则是异步操作, 在后台线程完成sql操作。 [AUTO-TRANSLATED:982b1ad9]
// If followed by std::endl, it is an asynchronous operation, which completes the sql operation in the background thread.
# else
ErrorL < < " ENABLE_MYSQL not defined! " < < endl ;
return - 1 ;
# endif //ENABLE_MYSQL
return 0 ;
}