INSERT INTO alias (nom, command, argc) VALUES ('alias', 'select nom from alias;', 0);
insert into alias (nom, command, argc) values ('var', 'select nom from var', 0);
insert into alias (nom, command, argc) values ('var', 'select id,nom,value from var where nom=$1', 1);
-insert into alias (command, argc, nom, inf) values ('insert into memo (word, rem) values ($1, ''$$'');', 1, 'memo', '1');
+insert into alias (nom, command, argc, inf) values ('memo', 'insert into memo (word, rem) values ($1, $2);', 1, '1');
insert into alias (nom, command, argc) values ('memo', 'select distinct word from memo', 0);
-insert into alias (nom, command, argc) values ('memo', 'select rem from memo where word=$1', 1);
+insert into alias (nom, command, argc) values ('mem', 'select rem from memo where word=$1', 1);
//conn = PQconnectStart(var.c_str());
conn = PQconnectdb(connect.c_str());
clog<<"prepare SQL statement\n";
- string cmd="select command,argc,inf from alias where ((nom = $1) and (argc = $2)) OR ((nom = $1) and (inf='1') and (argc < $2)) OR ((argc=$2) and (nom=$1) and (inf<>'1'));";
-//
+ string cmd="select command,argc,inf from alias where ((nom = $1) and (argc = $2)) OR ((nom = $1) and (inf='1') and (argc < $2));";
clog<<"SQL statement="<<cmd<<endl;
res=PQprepare(conn, "selectalias", cmd.c_str(), 2, NULL);
testSQL(res);
bool sqlpg::alias(vector<string> a){
clog<<"alias start here\n";
string nom=a[0], as=toString(a.size()-1).c_str(), i;
- int argc=2;
- const char *value[2]={nom.c_str(), as.c_str()};
- int length[2]={nom.size(), as.size()};
- int binary[2]={0, 0};
- res=PQexecPrepared(conn, "selectalias", argc, value, length, binary, 0);
+ int argca=2, inf=0;
+ const char *valuea[2]={nom.c_str(), as.c_str()};
+ int lengtha[2]={nom.size(), as.size()};
+ int binarya[2]={0, 0};
+ res=PQexecPrepared(conn, "selectalias", argca, valuea, lengtha, binarya, 0);
testSQL(res);
if (PQntuples(res)!=1){
cerr<<"alias end pqntuples(res)="<<PQntuples(res)<<endl;
}
string cmd2;
cmd2=PQgetvalue(res, 0, 0);
+ clog<<"commande : "<<cmd2<<endl;
i=PQgetvalue(res, 0, 2);
-
+ int argc=atoi(PQgetvalue(res, 0, 1));
+ if (i!="0")inf=1;
+ int asize=a.size();
int pos=0;
- argc=atoi(PQgetvalue(res, 0, 1));
- //clog<<"bcl qui tue, i="<<i<<"\n";
- if(i=="1"){
- string b=a[argc];
- int pos=cmd2.find("$$");
- int asize=a.size();
- clog<<"pos="<<pos<<" cmd2="<<cmd2<<" asize="<<asize<<" argc="<<argc<<"\n";
- b=a[argc+1];
- for(int j=argc+2;j<asize;j++){
- b=b+" "+a[j];
- }
- cmd2.replace(pos, 2, b, 0, string::npos);
- clog<<"bcl qui tue, cmd2="<<cmd2<<" b="<<b<<"\n";
+ const char * value[argc+inf];
+ int length[argc+inf];
+ int binary[argc+inf];
+ string t;
+ clog<<"for (j=0; j<="<<argc<<"; j++) {inf="<<inf<<", argc="<<argc<<"}\n";
+ for(int j=0;j<argc; j++){
+ value[j]=a[j+1].c_str();
+ length[j]=a[j+1].size();
+ binary[j]=0;
+ clog<<"value["<<j<<"]="<<value[j]<<" length="<<length[j]<<"\n";
}
- clog<<"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;
- clog<<"i="<<i<<" value="<<value[i]<<" length="<<length[i]<<"\n";
+ clog<<"for finish, \n";
+ if(inf==1){
+ clog<<"inf==1\n";
+ t=a[argc+1];
+ clog<<"for infinite (j="<<argc+2<<"; j<="<<asize-1<<") t="<<t<<endl;
+ for(int j=argc+2; j<=asize-1; j++){
+ t=t+" "+a[j];
+ clog<<"bcl t="<<t<<endl;
+ }
+ clog<<"for infinite finish t="<<t<<endl;
+ value[argc]=t.c_str();
+ length[argc]=t.size();
+ binary[argc]=0;
}
- clog<<"argc="<<argc<<" cmd2="<<cmd2<<" i="<<i<<endl;
- res=PQprepare(conn, "execalias",cmd2.c_str(), argc, NULL);
+ for(int k=0; k<(argc+inf); k++){
+ clog<<"value["<<k<<"]="<<value[k]<<" length="<<length[k]<<"\n";
+ }
+ clog<<"if(inf=1) finish\n";
+
+
+
+
+ clog<<"cmd2="<<cmd2<<" argc="<<argc<<endl;
+ res=PQprepare(conn, "execalias",cmd2.c_str(), argc+inf, NULL);
+ clog<<"PQprepart done(cmd2="<<cmd2<<" argc+inf="<<argc+inf<<"\n";
testSQL(res);
- res=PQexecPrepared(conn, "execalias", argc, value, length, binary, 0);
+ res=PQexecPrepared(conn, "execalias", argc+inf, value, length, binary, 0);
+ clog<<"PQexecPrepared done argc+inf="<<argc+inf<<endl;
testSQL(res);
print();
exec("DEALLOCATE execalias");