/// <summary> /// Renders a constant /// </summary> /// <param name="builder"></param> /// <param name="expr"></param> protected virtual void Constant(StringBuilder builder, OmConstant expr) { DataType type = expr.Type; if (type == DataType.Number) { builder.AppendFormat(System.Globalization.CultureInfo.InvariantCulture, "{0}", expr.Value); } else if (type == DataType.String) { if (expr.Value == null) { builder.Append("null"); } else { builder.AppendFormat("'{0}'", expr.Value.ToString()); } } else if (type == DataType.Date) { DateTime val = (DateTime)expr.Value; //строка закомментарена т.к. не правильно форматируются ровные даты //например: 2000-01-31 00:00:00 (реальное значение константы) //форматируется как 2000-01-31 - что приводит к неправильным результатом при сравнении //например Sqlite сравнивает строки и "2000-01-31 00:00:00" != "2000-01-31" //хотя времена равны //bool dateOnly = (val.Hour == 0 && val.Minute == 0 && val.Second == 0 && val.Millisecond == 0); bool dateOnly = false; string format = (dateOnly) ? dateFormat : dateTimeFormat; builder.AppendFormat("'{0}'", val.ToString(format)); } }
/// <summary> /// Renders a list of values /// </summary> /// <param name="builder"></param> /// <param name="values"></param> /// <returns></returns> protected virtual void ConstantList(StringBuilder builder, OmConstantCollection values) { for (int i = 0; i < values.Count; i++) { OmConstant val = values[i]; Constant(builder, val); if (i != values.Count - 1) { Coma(builder); } } }