public override SqlObject Visit(SqlPropertyName sqlPropertyName) { return(SqlPropertyName.Create( this.GetObfuscatedString( sqlPropertyName.Value, "p", ref this.fieldNameSequenceNumber))); }
public void SqlObjectCreateScalarExpressionTest() { CosmosObject expected = CosmosObject.Create(new Dictionary <string, CosmosElement> { ["name"] = CosmosString.Create("John") }); SqlObjectCreateScalarExpression john = SqlObjectCreateScalarExpression.Create( SqlObjectProperty.Create(SqlPropertyName.Create("name"), SqlLiteralScalarExpression.Create(SqlStringLiteral.Create("John")))); AssertEvaluation(expected, john); }
public override SqlObject VisitObject_property([NotNull] sqlParser.Object_propertyContext context) { Contract.Requires(context != null); Contract.Requires(context.STRING_LITERAL() != null); Contract.Requires(context.scalar_expression() != null); string name = CstToAstVisitor.GetStringValueFromNode(context.STRING_LITERAL()); SqlScalarExpression value = (SqlScalarExpression)this.Visit(context.scalar_expression()); SqlObjectProperty property = SqlObjectProperty.Create( SqlPropertyName.Create(name), value); return(property); }
/// <summary> /// Constructs <see cref="SqlScalarExpression"/> from a geometry <see cref="JToken"/>. /// </summary> /// <param name="jToken">Json token.</param> /// <returns>Instance of <see cref="SqlScalarExpression"/>.</returns> private static SqlScalarExpression FromJToken(JToken jToken) { switch (jToken.Type) { case JTokenType.Array: return(SqlArrayCreateScalarExpression.Create(jToken.Select(FromJToken).ToArray())); case JTokenType.Boolean: return(SqlLiteralScalarExpression.Create(SqlBooleanLiteral.Create(jToken.Value <bool>()))); case JTokenType.Null: return(SqlLiteralScalarExpression.SqlNullLiteralScalarExpression); case JTokenType.String: return(SqlLiteralScalarExpression.Create(SqlStringLiteral.Create(jToken.Value <string>()))); case JTokenType.Object: SqlObjectProperty[] properties = ((JObject)jToken).Properties() .Select( p => SqlObjectProperty.Create( SqlPropertyName.Create(p.Name), FromJToken(p.Value))) .ToArray(); return(SqlObjectCreateScalarExpression.Create(properties)); case JTokenType.Float: case JTokenType.Integer: SqlNumberLiteral sqlNumberLiteral = SqlNumberLiteral.Create(jToken.Value <double>()); return(SqlLiteralScalarExpression.Create(sqlNumberLiteral)); default: throw new DocumentQueryException(string.Format(CultureInfo.CurrentCulture, ClientResources.UnexpectedTokenType, jToken.Type)); } }
public override SqlObject VisitObjectCreateScalarExpression([NotNull] sqlParser.ObjectCreateScalarExpressionContext context) { Contract.Requires(context != null); // '{' object_propertty_list? '}' List <SqlObjectProperty> properties = new List <SqlObjectProperty>(); if (context.object_propertty_list() != null) { sqlParser.Object_propertyContext[] propertyContexts = context.object_propertty_list().object_property(); foreach (sqlParser.Object_propertyContext objectPropertyContext in propertyContexts) { string name = CstToAstVisitor.GetStringValueFromNode(objectPropertyContext.STRING_LITERAL()); SqlScalarExpression value = (SqlScalarExpression)this.Visit(objectPropertyContext.scalar_expression()); SqlObjectProperty property = SqlObjectProperty.Create( SqlPropertyName.Create(name), value); properties.Add(property); } } return(SqlObjectCreateScalarExpression.Create(properties)); }
/// <summary> /// Converts a JToken to a semantically equivalent SqlScalarExpression. /// </summary> /// <param name="token">The JToken to convert.</param> /// <returns>The semantically equivalent SqlScalarExpression.</returns> public static SqlScalarExpression Convert(JToken token) { if (token == null) { return(Undefined); } switch (token.Type) { case JTokenType.Array: { List <SqlScalarExpression> items = new List <SqlScalarExpression>(); foreach (JToken element in token) { items.Add(JTokenToSqlScalarExpression.Convert(element)); } return(SqlArrayCreateScalarExpression.Create(items.ToArray())); } case JTokenType.Boolean: { SqlBooleanLiteral literal = SqlBooleanLiteral.Create(token.ToObject <bool>()); return(SqlLiteralScalarExpression.Create(literal)); } case JTokenType.Null: { SqlNullLiteral literal = SqlNullLiteral.Singleton; return(SqlLiteralScalarExpression.Create(literal)); } case JTokenType.Integer: case JTokenType.Float: { SqlNumberLiteral literal = SqlNumberLiteral.Create(token.ToObject <double>()); return(SqlLiteralScalarExpression.Create(literal)); } case JTokenType.Object: { List <SqlObjectProperty> properties = new List <SqlObjectProperty>(); foreach (JProperty prop in (JToken)token) { SqlPropertyName name = SqlPropertyName.Create(prop.Name); JToken value = prop.Value; SqlScalarExpression expression = JTokenToSqlScalarExpression.Convert(value); SqlObjectProperty property = SqlObjectProperty.Create(name, expression); properties.Add(property); } return(SqlObjectCreateScalarExpression.Create(properties.ToArray())); } case JTokenType.String: { SqlStringLiteral literal = SqlStringLiteral.Create(token.ToObject <string>()); return(SqlLiteralScalarExpression.Create(literal)); } default: throw new ArgumentException(string.Format(CultureInfo.CurrentUICulture, "Unsupported JsonType {0}", token.Type)); } }