Esempio n. 1
0
        /// <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");
            }
        }