using namespace std;
sqlpg::sqlpg() {
- string var;
+
//var = "host=postgresql1.alwaysdata.com port=5432 dbname=nothing2do.eu_diary user=nothing2do.eu password=x connect_timeout=10";
- var = "dbname=bob user=bob password=pass connect_timeout=10";
- cout << "Chaîne de connection: " + var << endl;
+ connect = "dbname=bob user=bob password=pass connect_timeout=10";
//conn = PQconnectStart(var.c_str());
- conn = PQconnectdb(var.c_str());
+ conn = PQconnectdb(connect.c_str());
}
int sqlpg::status(){
return oss.str();
}
int sqlpg::insert(vector<string> text) {
- string command;
+ cerr<<"insert(vector<string>) begin\n";
+ string command="INSERT INTO raw (date, texte) VALUES ($1::timestamp, $2);";
string tmp="";
+ int argc=2;
+ const char * value[2];
+ int length[2];
+ int binary[2];
if (text.size()>2){
if ((isdate(text[0]))+(isdate(text[1]))==3){
- cout<<"date detecte\n";
+ cerr<<"text[0]+text[1]==3(L55)\n";
date=text[0];
+ string a=date+" "+text[1];
+ value[0]=a.c_str();
+ length[0]=a.size();
+ binary[0]=0;
tmp=text[2];
for (int a=3;a<text.size(); a++){
tmp=tmp+" "+text[a];
}
- command="INSERT INTO raw (date, texte) VALUES ('"+date+" "+text[1]+"', '"+tmp+"')";
+ value[1]=tmp.c_str();
+ length[1]=tmp.size();
+ binary[1]=0;
+ //command="INSERT INTO raw (date, texte) VALUES ('"+date+" "+text[1]+"', '"+tmp+"')";
+
}
else if((text[0]=="-")&&(isdate(text[1])==2)){
- cout<<"date partielle\n";
+ cerr<<"date partielle(L72)\n";
+ tmp=text[2];
+ string a=date+" "+text[1];
+ value[0]=a.c_str();
+ length[0]=a.size();
+ binary[0]=0;
tmp=text[2];
for (int a=3;a<text.size(); a++){
tmp=tmp+" "+text[a];
}
- command="INSERT INTO raw (date, texte) VALUES ('"+date+" "+text[1]+"', '"+tmp+"')";
+ value[1]=tmp.c_str();
+ length[1]=tmp.size();
+ binary[1]=0;
+ //command="INSERT INTO raw (date, texte) VALUES ('"+date+" "+text[1]+"', '"+tmp+"')";
+
}
else{
+ cerr<<"text.size()>2; text[0] & text[1] isn't date. L89";
tmp=text[0];
+ string a="1971-11-11 22:22:22";
+ value[0]=a.c_str();
+ length[0]=a.size();
+ binary[0]=0;
+ //tmp=text[2];
+ value[1]=tmp.c_str();
+ length[1]=tmp.size();
+ binary[1]=0;
for (int a=1;a<text.size(); a++){
tmp=tmp+" "+text[a];
}
- command="INSERT INTO raw (date, texte) VALUES ('now()', '"+tmp+"')";
+ //command="INSERT INTO raw (date, texte) VALUES ('now()', '"+tmp+"')";
+
};
}
else {
+ cerr<<"text.size()<2 L111\n";
tmp=text[0];
- for (int a=1;a<text.size(); a++){
+ cerr<<"113\n";
+ string a="now";
+ cerr<<"115\n";
+ value[0]=a.c_str();
+ length[0]=a.size();
+ binary[0]=0;
+ for (int a=0;a<text.size(); a++){
tmp=tmp+" "+text[a];
- };
- command="INSERT INTO raw (date, texte) VALUES ('now()', '"+tmp+"')";
- };
-
- //cout<<command<<endl;
- /*res=PQexec(conn, command.c_str());
- testSQL();*/
- exec(command);
+ }
+ value[1]=tmp.c_str();
+ length[1]=tmp.size();
+ binary[1]=0;
+ //value[1]=now().c_str();
+ length[1]=19;
+ binary[1]=0;
+ cerr<<"text.size()<2 finish\n";
+ };
+ res=PQexecParams(conn, command.c_str(), argc, NULL, value, length, binary, 0);
+ testSQL(res);
+ cerr<<"insert(vector<string>) end\n";
+ //exec(command);
return 0;
}
-void sqlpg::deletetuple(string tmp){
- string command;
- command="DELETE FROM raw WHERE id ='" + tmp + "'";
- /*res=PQexec(conn, command.c_str());
- testSQL();*/
- exec(command);
- //cout<<command<<endl;
-}
-void sqlpg::deletedate(string a, string b){
- string command;
- command="delete from raw where date between '"+a+"' and '"+b+"';";
- /*res=PQexec(conn,command.c_str());
- if (PQresultStatus(res) != PGRES_COMMAND_OK)
- {
- cout<<"command failed: "<< PQerrorMessage(conn)<<endl;
- }*/
- exec(command);
- //cout<<command<<endl;
-}
-string now(){//SQL function NOW() exist !
+string sqlpg::now(int day){//day=0 return only HH:MM:SS, day=1 return YYYY-MM-DD HH:MM:SS, day=2 YYYY-MM-DD
// current date/time based on current system
time_t now = time(0);
tm *ltm = localtime(&now);
char * date;
// print various components of tm structure.
- sprintf(date,"%d-%d-%d %d:%d:%d", 1900+ltm->tm_year, 1+ltm->tm_mon, ltm->tm_mday, 1+ltm->tm_hour, 1+ltm->tm_min, 1+ltm->tm_sec);
+ if (day==0)sprintf(date,"%d:%d:%d", 1+ltm->tm_hour, 1+ltm->tm_min, 1+ltm->tm_sec);
+ else if (day==1)sprintf(date,"%d-%d-%d %d:%d:%d", 1900+ltm->tm_year, 1+ltm->tm_mon, ltm->tm_mday, 1+ltm->tm_hour, 1+ltm->tm_min, 1+ltm->tm_sec);
+ else if (day==2)sprintf(date,"%d-%d-%d", 1900+ltm->tm_year, 1+ltm->tm_mon, ltm->tm_mday);
+ else {
+ cout<<"error in date";
+ date="0000-00-00 00;00;00";
+ }
+
string d(date);
return d;
}
return a;
}
void sqlpg::var(){
- cout<<"date="<<date<<endl;
+ cout<<"date="<<date<<", chaîne de connection: " + connect << endl;;
}
sqlpg::~sqlpg() {
PQclear(res);
for (int j=0; j<lim-1; j++){
cout<<PQgetvalue(res, i, j)<<"+";
};
- cout<<PQgetvalue(res, i, lim-1)<<"|";
+ cout<<PQgetvalue(res, i, lim-1)<<"\n";
};
cout<<endl;
}
void sqlpg::exec(string a){
- //cout<<"exec("<<a<<")\n";
- res=PQexec(conn, a.c_str());
- //cout<<"exec:1/2\n";
+ cerr<<"exec(string "<<a<<")\n";
+ res=PQexecParams(conn, a.c_str(), 0, NULL, 0, NULL, NULL, 0);
+ cerr<<"exec:1/2\n";
if (!((PQresultStatus(res) == PGRES_COMMAND_OK)||(PQresultStatus(res) == PGRES_TUPLES_OK)))
{
cout<<"PQerrorMessage(conn) : "<< PQerrorMessage(conn)<<endl;
cout<<"PQresStatus(res)="<<PQresStatus(PQresultStatus(res))<<endl;
};
- //cout<<"exec() finish\n";
+ cerr<<"exec() finish\n";
}
void sqlpg::exec(vector<string> a){
- cout<<"a.size()=="<<a.size()<<"\n";
+ cerr<<"exec(vector<string>: a.size()=="<<a.size()<<"\n";
/*const char *paramValues[1];
int paramLengths[1];
int paramFormats[1];
0); /* ask for text results
*/
- const char *paramValues[1];
- int paramLengths[1];
- int paramFormats[1];
- //uint32_t binaryIntVal;
-paramValues[0]=a[1].c_str();
- res = PQexecParams(conn,
- "SELECT * FROM raw WHERE texte like %$1%",
- 1, /* one param */
- NULL, /* let the backend deduce param type */
- paramValues,
- NULL, /* don't need param lengths since text */
- NULL, /* default to all text params */
- 0); /* ask for text results */
- cout<<"exec() finish\n";
+ int argc=a.size()-1;
+ cerr<<"argc="<<argc<<endl;
+ const char *value[argc];
+ int length[argc];
+ int binary[argc];
+ for(int i=0; i<argc; i++){
+ value[i]=a[i+1].c_str();
+ length[i]=a[i+1].size();
+ binary[i]=0;
+ cerr<<"i="<<i<<" value="<<value[i]<<" length="<<length[i]<<"\n";
+ }
+ res=PQexecParams(conn, a[0].c_str(), argc, NULL, value, length, binary, 0);
+ testSQL(res);
+ print();
+ cerr<<"exec() finish\n";
}
inline int sqlpg::testSQL(PGresult* a){
if (!((PQresultStatus(a) == PGRES_COMMAND_OK)||(PQresultStatus(a) == PGRES_TUPLES_OK)))
};
}
bool sqlpg::alias(vector<string> a){
- //cout<<"alias start here\n";
+ cerr<<"alias start here\n";
string cmd;
cmd="select command,argc from alias where nom='"+a[0]+"' and argc = '"+toString(a.size()-1)+"';";// I need to select a function with argc too !
- //cout<<"cmd="<<cmd<<endl;
+ cerr<<"cmd="<<cmd<<endl;
exec(cmd);
if (PQntuples(res)<1){
- //cout<<"alias end pqntuples(res)="<<PQntuples(res)<<endl;
+ cerr<<"alias end pqntuples(res)="<<PQntuples(res)<<endl;
return 0;
}
string cmd2;
cmd2=PQgetvalue(res, 0, 0);
- //cout<<"cmd2="<<cmd2<<endl;
+ cerr<<"cmd2="<<cmd2<<endl;
int pos=0;
int argc=atoi(PQgetvalue(res, 0, 1));
- //cout<<"argc="<<argc<<endl;
- char *value[argc];
+ cerr<<"argc="<<argc<<endl;
+ const char *value[argc];
int length[argc];
int binary[argc];
- //cout<<"for argc="<<argc<<"\n";
+ cerr<<"for argc="<<argc<<"\n";
for(int i=0; i<argc; i++){
value[i]=a[i+1].c_str();
length[i]=a[i+1].size();
binary[i]=0;
- //cout<<"i="<<i<<" value="<<value[i]<<" length="<<length[i]<<"\n";
+ cerr<<"i="<<i<<" value="<<value[i]<<" length="<<length[i]<<"\n";
}
res=PQexecParams(conn, cmd2.c_str(), argc, NULL, value, length, binary, 0);
testSQL(res);
print();
- //cout<<"and end here\n";
+ cerr<<"alias() end here\n";
return 1;
}
void sqlpg::compulse(){
string cmd="select * from raw where analyzed='0' order by date asc;";
exec(cmd);
- //cout<<"exec1("<<cmd<<")\n";
- cout<<"PQntuples(res)="<<PQntuples(res)<<endl;
+ cerr<<"exec1("<<cmd<<") PQntuples(res)="<<PQntuples(res)<<endl;
int tuples=PQntuples(res);
for (int i=0; i<tuples;i++){
string buf, txt=PQgetvalue(res, i, PQfnumber(res, "texte"));
command=t.str();
}
else{
- cout<<"erreur de logique (txt est une clé primaire...)\nPQntuple(res)=="<<tmp<<"\n";
+ cerr<<"erreur de logique (txt est une clé primaire...)\nPQntuple(res)=="<<tmp<<"\n";
};
testSQL(PQexec(conn, command.c_str()));
};
stringstream y;
y<<"update raw set analyzed='1' where date='"<<(PQgetvalue(res, i, PQfnumber(res, "date")))<<"';";
- //cout<<"t="<<t<<endl;
+ cerr<<"y="<<y<<endl;
testSQL(PQexec(conn, y.str().c_str()));
- //exec(y.str()); it don't works and i don't know why
+ //ex ec(y.str()); it don't works and i don't know why
}
};