public object Translate(TranslationContext context, ASTNode node) { if (DataTypes.Equal(node.ResultType, DataTypes.Boolean)) { return new Model.BinaryExpression(new Model.ValueExpression(1), "iEqual", new Model.ValueExpression(Boolean.Parse(node.GetAttribute<string>("value")) ? 1 : 0)); } else if (DataTypes.Equal(node.ResultType, DataTypes.Timestamp)) { // TODO: Convert to format expected by T-SQL return new Model.CallExpression("convert", new Model.Expression[] { new Model.IdentifierExpression("datetime"), new Model.ValueExpression(node.GetAttribute<string>("value")) }); } else { var result = new Model.ValueExpression(); if (DataTypes.Equal(node.ResultType, DataTypes.String)) { result.Token = Model.TokenType.String; result.Value = node.GetAttribute<string>("value"); } else if (DataTypes.Equal(node.ResultType, DataTypes.Integer)) { result.Token = Model.TokenType.Integer; result.Value = Int32.Parse(node.GetAttribute<string>("value")); } else if (DataTypes.Equal(node.ResultType, DataTypes.Real)) { result.Token = Model.TokenType.Decimal; result.Value = Decimal.Parse(node.GetAttribute<string>("value")); } else { throw new NotSupportedException(String.Format("Unsupported literal type: {0}.", node.ResultType.Name)); } return result; } }
public object Translate(TranslationContext context, ASTNode node) { var result = new Model.ValueExpression(); result.Token = Model.TokenType.String; result.Value = node.GetAttribute<string>("value"); return result; }
public object Translate(TranslationContext context, ASTNode node) { var result = new Model.ValueExpression(); result.Token = Model.TokenType.Boolean; result.Value = node.GetAttribute<string>("value"); // TODO: This assumes boolean representation will translate... return result; }
public object Translate(TranslationContext context, ASTNode node) { // Physical quantity is not supported as a value type within SQL, so the literal will need to be transformed to a "unit normalized representation" // TODO: First-class support for Quantity values within the target SQL environment. var value = Convert.ToDecimal(node.GetAttribute<string>("value")); var unit = node.GetAttribute<string>("unit"); switch (unit) { case "1" : break; // Do nothing, this is the unity unit in UCUM, value is unadjusted // Time units case "a" : value *= 365.25m; break; // Year, convert to days case "mo" : value *= 30.4375m; break; // Month, convert to days case "wk" : value *= 7m; break; // Week, convert to days case "d" : break; // Day // These time units are not yet supported //"h" : break; // Hour //"min" : break; // Minute //"Ms" : break; // Megasecond //"ks" : break; // Kilosecond //"s" : break; // Second //"ms" : break; // Millisecond //"us" : break; // Microsecond //"ns" : break; // Nanosecond //"ps" : break; // Picosecond default : throw new NotSupportedException(String.Format("Physical quantity unit translation for unit type of '{0}' is not supported.", unit)); } var result = new Model.ValueExpression(); result.Token = Model.TokenType.Decimal; result.Value = value; return result; }
public object Translate(TranslationContext context, ASTNode node) { var result = new Model.ValueExpression(); result.Token = Model.TokenType.Nil; return result; }