/// <summary> /// Get where clause for persiston main table, or null if this is a whole-table persiston /// </summary> protected virtual SqlSelectBuilder.Where MainTableWhereClause(TableDef tabledef, PersistonKey key) { if (key.WholeTable) { return(null); } var pkType = tabledef.FindCol(tabledef.PrimaryKeyColName).CSType; object pk = key.PrimaryKey; //always string here if (pkType != typeof(string)) { pk = Utils.ChangeType(pk, pkType); } var w = new SqlSelectBuilder.Where(); w.AddWhere($"{tabledef.PrimaryKeyColName}={w.NextParameterName()}", pk); return(w); }
public void ExportWhereClause(SqlSelectBuilder.Where w, SqlFlavorizer sqlFlavor) { //numeric ranges if (Utils.IsSupportedNumericType(ColDef.CSType)) { try { (string lo, string hi) = SplitOnTilde(PackedValue); if (lo != null) { decimal dlo = decimal.Parse(lo); w.AddWhere($"{ColDef.Name}>={w.NextParameterName()}", dlo); } if (hi != null) { decimal dhi = decimal.Parse(hi); w.AddWhere($"{ColDef.Name}<={w.NextParameterName()}", dhi); } } catch { throw new Exception($"Misformatted numeric parameter: {PackedValue}"); } } //dates and times else if (ColDef.CSType == typeof(DateTime)) { bool isDateOnly = ColDef.WireType == Constants.TYPE_DATE; (string lo, string hi) = SplitOnTilde(PackedValue); if (lo != null) { var dlo = Retrovert.ParseRetroDateTime(lo, isDateOnly); w.AddWhere($"{ColDef.Name}>={w.NextParameterName()}", dlo); } if (hi != null) { var dhi = Retrovert.ParseRetroDateTime(hi, isDateOnly); w.AddWhere($"{ColDef.Name}<={w.NextParameterName()}", dhi); } } else if (ColDef.CSType == typeof(bool)) { bool b; if (PackedValue == "0") { b = false; } else if (PackedValue == "1") { b = true; } else { throw new Exception($"Boolean parameter must be 0 or 1: {PackedValue}"); } w.AddWhere($"{ColDef.Name}={w.NextParameterName()}", b); } else if (ColDef.CSType == typeof(string)) { w.AddWhere($"{ColDef.Name} {sqlFlavor.LikeOperator()} {w.NextParameterName()}", sqlFlavor.LikeParamValue(PackedValue)); } else { throw new Exception($"Type {ColDef.CSType.Name} not supported as a viewon parameter"); } }