Exemplo n.º 1
0
        internal DbIns(Reach smb)
        {
            init();
            //TBD
            Db    db        = new Db(new ctx().DbDrivers);
            DbIns ret       = null;
            Zone  bktFilter = new Zone(new Pile <string>(), new Pile <string>("", true, "(", ")", "||:0"));
            Zone  strFilter = new Zone(new Pile <string>(), new Pile <string>("", true, "\"", "\"", "||:1"));

            /*
             * string insstr = "Grid(\"prdrln\").sC(\"sbj, obj, vb, rul, steps, excerpt, trust\").INS(XXXX)";
             * insstr = insstr.Replace("XXXX", "Grid(\"prdrln p1, prdvrb pv1, prdrln p2, prdvrb pv2, kndrln sc, itmrln si, prdvrb pv, prdrul pr, itmrln oi, kndrln oc\", cd(\"p1.obj\").EQ(\"p2.sbj\")).sC(\"si.id, oi.id, pv.id, pr.id, 0, '', 0.5\").sR(XXXX).SLD");
             * insstr = insstr.Replace("XXXX", "cd(\"0\").EQ(Grid(\"prdrln prdrln\").sC(\"count(*)\").sR(cd(\"sbj\").EQ(\"si.id\"), cd(\"obj\").EQ(\"oi.id\"), cd(\"vb\").EQ(\"pr.vb\")).SLC ), XXXX");
             * insstr = bktFilter.on(insstr).text;
             * insstr = insstr.Replace("XXXX", "cd(\"0\").EQ(Grid(\"prdrln prdrln\").sC(\"count(*)\").sR(cd(\"sbj\").EQ(\"si.id\"), cd(\"obj\").EQ(\"oi.id\"), cd(\"vb\").EQ(\"pr.vb\")).SLC ), XXXX");
             */

            Reach gridDef = smb - bktFilter.on(smb);
            Reach ins     = gridDef.at(".INS(");

            if (ins.len == 0)
            {
                throw new Exception("DbIns Constructor: invalid symbolic Definition");
            }
            DbGrid res = db.Grid(smb.before(ins));

            smb = smb.after(ins).before(-1, ")");
            if (smb.startsWith("Grid("))
            {
                ret = res.INS(new DbSlc(smb));
            }
            else
            {
                Pile <string> val = new Pile <string>();
                while (smb.len > 0)
                {
                    if (smb.startsWith("ds("))
                    {
                        val.Push(db.ds(smb.after(1, "\"").before(1, "\""))); smb = smb.after(1, "),").Trim();
                    }
                    else
                    {
                        val.Push(smb.before(1, ",").Trim()); smb = smb.after(1, ",").Trim();
                    }
                }
                ret = res.INS(val.array());
            }
            into   = ret.into;
            fields = ret.fields.Clone(); //new Pile<string>(ret.fieldNames);
            values = ret.values;
            slc    = ret.slc;
        }
Exemplo n.º 2
0
 public string sql(Db db)
 {
     if (grid == null)
     {
         if (into.Trim().Length == 0)
         {
             return("");
         }
         string ret = "INSERT INTO " + db.dbTable(into) + " (";
         foreach (DbField f in fields)
         {
             ret += f.sql(db) + ", ";
         }
         if (!ret.EndsWith(" ("))
         {
             ret = ret.Substring(0, ret.Length - 2);
         }
         if (slc == null)
         {
             ret += " ) \r\nVALUES ("; foreach (string v in values)
             {
                 ret += v + ", ";
             }
             ret = ret.Substring(0, ret.Length - 2) + " )";
         }
         else
         {
             if (!ret.EndsWith(" ("))
             {
                 ret += " ) \r\n";
             }
             ret += slc.sql(db);
         }
         return(ret);
     }
     else
     {
         DbSlcBlock slc = new DbSlcBlock(" <|> ");
         foreach (ObjPile raw in datSet.Raws)
         {
             string fld = "";
             foreach (object obj in raw)
             {
                 Type t = obj.GetType();
                 if (t == typeof(Reach))
                 {
                     fld += (Reach)obj + ", ";
                 }
                 if (t == typeof(string))
                 {
                     fld += db.ds((string)obj) + ", ";
                 }
                 if ((t == typeof(double)) || (t == typeof(float)))
                 {
                     fld += ("" + obj).Replace(",", ".") + ", ";
                 }
                 if ((t == typeof(long)) || (t == typeof(int)))
                 {
                     fld += "" + obj + ", ";
                 }
             }
             fld = fld.Substring(0, fld.Length - 2);
             if (db.avoidEmptyStrings)
             {
                 slc.Push(new DbGrid(".all_tables").sR(db.cd("table_name").EQ(new DbGrid(".all_tables").sC("Min(table_name)").SLC)).sC(fld).SLC);
             }
             else
             {
                 slc.Push(new DbGrid("").sC(fld).SLC);
             }
         }
         return(grid.INS(db.SlcOR(slc.array())).sql(db));
         //return sql(i.grid.INS(slc.val(this)));  //slc.val(this) is a string - so the INS does not create "insert into .... select ..." but it creates insert into .... values .....
     }
 }