]> git.nothing2do.fr Git - diary-shell.git/commitdiff
alias with infinite parameter now works almost correctly
authorNorbert Moutarde <norbert.moutarde@nothing2do.eu>
Fri, 12 Jul 2013 10:06:50 +0000 (12:06 +0200)
committerNorbert Moutarde <norbert.moutarde@nothing2do.eu>
Fri, 12 Jul 2013 10:06:50 +0000 (12:06 +0200)
alias.sql
main.cpp
sqldb.cpp
tables1.sql

index 929cdfb6ab45f223c9209aee7199623b6de255f6..266c6ba506dd73b77d6c4ef65c9bf207ef0c8e12 100644 (file)
--- a/alias.sql
+++ b/alias.sql
@@ -6,6 +6,6 @@ INSERT INTO alias (nom, command, argc) VALUES ('rm', 'DELETE FROM raw WHERE id =
 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);
index 0fac2367c14b6dea540ffa69746cab38ca73025f..a4494e4203b649e752e9c2d9e2beccd316f9897c 100644 (file)
--- a/main.cpp
+++ b/main.cpp
@@ -24,11 +24,12 @@ void help()
 int main(int argc, char *argv[])
 {
     cout << "Début du programme '" << argv[0] << "'. Nombre de paramètres reçus : " << argc  << endl;
-    cerr<<"===start===\n";
+    clog<<"===start===\n";
     sqlpg diary;
     string tmp, rep, shell="? ";
     int hm;
 do{
+    clog<<"\n";
     hm=diary.hmRecord();
     cout<<hm<<shell;
     getline(cin,rep,'\n');
index a1b9b40fe7512325a7c8856c9bbe13f01924ff6c..b5c4851375e6256926eb17b8eb33dc3bc6439177 100644 (file)
--- a/sqldb.cpp
+++ b/sqldb.cpp
@@ -17,8 +17,7 @@ sqlpg::sqlpg() {
     //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);
@@ -243,11 +242,11 @@ inline int sqlpg::testSQL(PGresult* a){
 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;
@@ -255,35 +254,52 @@ bool sqlpg::alias(vector<string> a){
     }
     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");
index bd8583b7fa4cddb73c0eb1a7372396185d6e9496..32ed9eeaa1535825721b8703c428ec7833331f77 100755 (executable)
@@ -11,7 +11,7 @@ id serial primary key,
 cmd text,
 argc integer,
 nom text,
-inf bit,
+inf bit DEFAULT 0,
 CONSTRAINT uc_aliasID UNIQUE (nom, argc)
 );