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; }
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 ..... } }