public override bool Visit(SqlUndefinedLiteral first, SqlObject secondAsObject) { if (!(secondAsObject is SqlUndefinedLiteral second)) { return(false); } return(true); }
public override SqlObject VisitLiteralScalarExpression([NotNull] sqlParser.LiteralScalarExpressionContext context) { Contract.Requires(context != null); Contract.Requires(context.ChildCount == 1); Contract.Requires(context.children[0].ChildCount == 1); TerminalNodeImpl terminalNode = (TerminalNodeImpl)(context.children[0].GetChild(0)); SqlLiteralScalarExpression sqlLiteralScalarExpression; switch (terminalNode.Symbol.Type) { case sqlParser.STRING_LITERAL: string value = CstToAstVisitor.GetStringValueFromNode(terminalNode); sqlLiteralScalarExpression = SqlLiteralScalarExpression.Create(SqlStringLiteral.Create(value)); break; case sqlParser.NUMERIC_LITERAL: Number64 number64 = CstToAstVisitor.GetNumber64ValueFromNode(terminalNode); sqlLiteralScalarExpression = SqlLiteralScalarExpression.Create(SqlNumberLiteral.Create(number64)); break; case sqlParser.K_TRUE: sqlLiteralScalarExpression = SqlLiteralScalarExpression.Create(SqlBooleanLiteral.Create(true)); break; case sqlParser.K_FALSE: sqlLiteralScalarExpression = SqlLiteralScalarExpression.Create(SqlBooleanLiteral.Create(false)); break; case sqlParser.K_NULL: sqlLiteralScalarExpression = SqlLiteralScalarExpression.Create(SqlNullLiteral.Create()); break; case sqlParser.K_UNDEFINED: sqlLiteralScalarExpression = SqlLiteralScalarExpression.Create(SqlUndefinedLiteral.Create()); break; default: throw new ArgumentOutOfRangeException($"Unknown symbol type: {terminalNode.Symbol.Type}"); } return(sqlLiteralScalarExpression); }
public override SqlObject VisitLiteral([NotNull] sqlParser.LiteralContext context) { TerminalNodeImpl terminalNode = (TerminalNodeImpl)context.children[0]; SqlLiteral sqlLiteral; switch (terminalNode.Symbol.Type) { case sqlParser.STRING_LITERAL: string value = CstToAstVisitor.GetStringValueFromNode(terminalNode); sqlLiteral = SqlStringLiteral.Create(value); break; case sqlParser.NUMERIC_LITERAL: Number64 number64 = CstToAstVisitor.GetNumber64ValueFromNode(terminalNode); sqlLiteral = SqlNumberLiteral.Create(number64); break; case sqlParser.K_TRUE: sqlLiteral = SqlBooleanLiteral.Create(true); break; case sqlParser.K_FALSE: sqlLiteral = SqlBooleanLiteral.Create(false); break; case sqlParser.K_NULL: sqlLiteral = SqlNullLiteral.Create(); break; case sqlParser.K_UNDEFINED: sqlLiteral = SqlUndefinedLiteral.Create(); break; default: throw new ArgumentOutOfRangeException($"Unknown symbol type: {terminalNode.Symbol.Type}"); } return(sqlLiteral); }
public abstract void Visit(SqlUndefinedLiteral sqlObject);
public override int Visit(SqlUndefinedLiteral sqlUndefinedLiteral) { return(SqlUndefinedLiteralHashCode); }
public override void Visit(SqlUndefinedLiteral sqlUndefinedLiteral) { this.writer.Write("undefined"); }
public override CosmosElement Visit(SqlUndefinedLiteral literal) => null;
public override SqlObject Visit(SqlUndefinedLiteral sqlUndefinedLiteral) { // Not PII return(sqlUndefinedLiteral); }
public abstract void Visit(SqlUndefinedLiteral literal);
public void SqlLiteralScalarExpressionTest() { SqlLiteralScalarExpression numberLiteral = SqlLiteralScalarExpression.Create(SqlNumberLiteral.Create(1)); AssertEvaluation(CosmosNumber64.Create(1), numberLiteral); SqlLiteralScalarExpression stringLiteral = SqlLiteralScalarExpression.Create(SqlStringLiteral.Create("Hello")); AssertEvaluation(CosmosString.Create("Hello"), stringLiteral); SqlLiteralScalarExpression trueLiteral = SqlLiteralScalarExpression.Create(SqlBooleanLiteral.True); AssertEvaluation(CosmosBoolean.Create(true), trueLiteral); SqlLiteralScalarExpression falseLiteral = SqlLiteralScalarExpression.Create(SqlBooleanLiteral.False); AssertEvaluation(CosmosBoolean.Create(false), falseLiteral); SqlLiteralScalarExpression nullLiteral = SqlLiteralScalarExpression.Create(SqlNullLiteral.Singleton); AssertEvaluation(CosmosNull.Create(), nullLiteral); SqlLiteralScalarExpression undefinedLiteral = SqlLiteralScalarExpression.Create(SqlUndefinedLiteral.Create()); AssertEvaluation(Undefined, undefinedLiteral); }
public abstract TResult Visit(SqlUndefinedLiteral sqlObject);
public void SqlConditionalScalarExpressionTest() { SqlLiteralScalarExpression nullLiteral = SqlLiteralScalarExpression.Create(SqlNullLiteral.Singleton); SqlLiteralScalarExpression undefinedLiteral = SqlLiteralScalarExpression.Create(SqlUndefinedLiteral.Create()); SqlLiteralScalarExpression five = SqlLiteralScalarExpression.Create(SqlNumberLiteral.Create(5)); SqlLiteralScalarExpression three = SqlLiteralScalarExpression.Create(SqlNumberLiteral.Create(3)); SqlConditionalScalarExpression nullConditionalThreeFive = SqlConditionalScalarExpression.Create(nullLiteral, three, five); AssertEvaluation(CosmosNumber64.Create(5), nullConditionalThreeFive); SqlConditionalScalarExpression undefinedCoalesceFive = SqlConditionalScalarExpression.Create(undefinedLiteral, three, five); AssertEvaluation(CosmosNumber64.Create(5), undefinedCoalesceFive); SqlLiteralScalarExpression trueBoolean = SqlLiteralScalarExpression.Create(SqlBooleanLiteral.True); SqlConditionalScalarExpression trueConditionalThreeFive = SqlConditionalScalarExpression.Create(trueBoolean, three, five); AssertEvaluation(CosmosNumber64.Create(3), trueConditionalThreeFive); }
public void SqlBinaryScalarExpressionTest() { SqlLiteralScalarExpression five = SqlLiteralScalarExpression.Create(SqlNumberLiteral.Create(5)); SqlLiteralScalarExpression three = SqlLiteralScalarExpression.Create(SqlNumberLiteral.Create(3)); SqlLiteralScalarExpression hello = SqlLiteralScalarExpression.Create(SqlStringLiteral.Create("Hello")); SqlLiteralScalarExpression world = SqlLiteralScalarExpression.Create(SqlStringLiteral.Create("World")); SqlLiteralScalarExpression trueBoolean = SqlLiteralScalarExpression.Create(SqlBooleanLiteral.True); SqlLiteralScalarExpression falseBoolean = SqlLiteralScalarExpression.Create(SqlBooleanLiteral.False); SqlLiteralScalarExpression nullLiteral = SqlLiteralScalarExpression.Create(SqlNullLiteral.Singleton); SqlLiteralScalarExpression undefinedLiteral = SqlLiteralScalarExpression.Create(SqlUndefinedLiteral.Create()); SqlArrayCreateScalarExpression arrayCreateScalarExpresion1 = SqlArrayCreateScalarExpression.Create(); SqlArrayCreateScalarExpression arrayCreateScalarExpresion2 = SqlArrayCreateScalarExpression.Create(five); SqlObjectCreateScalarExpression objectCreateScalarExpression = SqlObjectCreateScalarExpression.Create(); SqlBinaryScalarExpression fivePlusThree = SqlBinaryScalarExpression.Create(SqlBinaryScalarOperatorKind.Add, five, three); AssertEvaluation(CosmosNumber64.Create(3 + 5), fivePlusThree); SqlBinaryScalarExpression trueAndFalse = SqlBinaryScalarExpression.Create(SqlBinaryScalarOperatorKind.And, trueBoolean, falseBoolean); AssertEvaluation(CosmosBoolean.Create(true && false), trueAndFalse); SqlBinaryScalarExpression falseAndUndefined = SqlBinaryScalarExpression.Create(SqlBinaryScalarOperatorKind.And, falseBoolean, undefinedLiteral); AssertEvaluation(CosmosBoolean.Create(false), falseAndUndefined); SqlBinaryScalarExpression trueAndUndefined = SqlBinaryScalarExpression.Create(SqlBinaryScalarOperatorKind.And, trueBoolean, undefinedLiteral); AssertEvaluation(Undefined, trueAndUndefined); try { SqlBinaryScalarExpression threeBitwiseAndFive = SqlBinaryScalarExpression.Create(SqlBinaryScalarOperatorKind.BitwiseAnd, three, five); AssertEvaluation(CosmosNumber64.Create(1), threeBitwiseAndFive); } catch (Exception) { } try { SqlBinaryScalarExpression threeBitwiseOrFive = SqlBinaryScalarExpression.Create(SqlBinaryScalarOperatorKind.BitwiseOr, three, five); AssertEvaluation(CosmosNumber64.Create(7), threeBitwiseOrFive); } catch (Exception) { } try { SqlBinaryScalarExpression threeBitwiseXorFive = SqlBinaryScalarExpression.Create(SqlBinaryScalarOperatorKind.BitwiseXor, three, five); AssertEvaluation(CosmosNumber64.Create(7), threeBitwiseXorFive); } catch (Exception) { } SqlBinaryScalarExpression nullCoalesceFive = SqlBinaryScalarExpression.Create(SqlBinaryScalarOperatorKind.Coalesce, nullLiteral, five); AssertEvaluation(CosmosNull.Create(), nullCoalesceFive); SqlBinaryScalarExpression fiveDivideFive = SqlBinaryScalarExpression.Create(SqlBinaryScalarOperatorKind.Divide, five, five); AssertEvaluation(CosmosNumber64.Create(5 / 5), fiveDivideFive); SqlBinaryScalarExpression fiveEqualFive = SqlBinaryScalarExpression.Create(SqlBinaryScalarOperatorKind.Equal, five, five); AssertEvaluation(CosmosBoolean.Create(5 == 5), fiveEqualFive); SqlBinaryScalarExpression threeEqualFive = SqlBinaryScalarExpression.Create(SqlBinaryScalarOperatorKind.Equal, three, five); AssertEvaluation(CosmosBoolean.Create(3 == 5), threeEqualFive); AssertEvaluation( CosmosBoolean.Create(true), SqlBinaryScalarExpression.Create( SqlBinaryScalarOperatorKind.Equal, arrayCreateScalarExpresion1, arrayCreateScalarExpresion1)); AssertEvaluation( CosmosBoolean.Create(false), SqlBinaryScalarExpression.Create( SqlBinaryScalarOperatorKind.Equal, arrayCreateScalarExpresion1, arrayCreateScalarExpresion2)); AssertEvaluation( CosmosBoolean.Create(false), SqlBinaryScalarExpression.Create( SqlBinaryScalarOperatorKind.Equal, arrayCreateScalarExpresion1, objectCreateScalarExpression)); SqlBinaryScalarExpression threeGreaterThanFive = SqlBinaryScalarExpression.Create(SqlBinaryScalarOperatorKind.GreaterThan, three, five); AssertEvaluation(CosmosBoolean.Create(3 > 5), threeGreaterThanFive); SqlBinaryScalarExpression fiveGreaterThanThree = SqlBinaryScalarExpression.Create(SqlBinaryScalarOperatorKind.GreaterThan, five, three); AssertEvaluation(CosmosBoolean.Create(5 > 3), fiveGreaterThanThree); SqlBinaryScalarExpression threeGreaterThanOrEqualFive = SqlBinaryScalarExpression.Create(SqlBinaryScalarOperatorKind.GreaterThanOrEqual, three, five); AssertEvaluation(CosmosBoolean.Create(3 >= 5), threeGreaterThanOrEqualFive); SqlBinaryScalarExpression fiveGreaterThanOrEqualThree = SqlBinaryScalarExpression.Create(SqlBinaryScalarOperatorKind.GreaterThanOrEqual, five, three); AssertEvaluation(CosmosBoolean.Create(5 >= 3), fiveGreaterThanOrEqualThree); SqlBinaryScalarExpression threeLessThanFive = SqlBinaryScalarExpression.Create(SqlBinaryScalarOperatorKind.LessThan, three, five); AssertEvaluation(CosmosBoolean.Create(3 < 5), threeLessThanFive); SqlBinaryScalarExpression fiveLessThanThree = SqlBinaryScalarExpression.Create(SqlBinaryScalarOperatorKind.LessThan, five, three); AssertEvaluation(CosmosBoolean.Create(5 < 3), fiveLessThanThree); SqlBinaryScalarExpression threeLessThanOrEqualFive = SqlBinaryScalarExpression.Create(SqlBinaryScalarOperatorKind.LessThanOrEqual, three, five); AssertEvaluation(CosmosBoolean.Create(3 <= 5), threeLessThanOrEqualFive); SqlBinaryScalarExpression fiveLessThanOrEqualThree = SqlBinaryScalarExpression.Create(SqlBinaryScalarOperatorKind.LessThanOrEqual, five, three); AssertEvaluation(CosmosBoolean.Create(5 <= 3), fiveLessThanOrEqualThree); SqlBinaryScalarExpression fiveModThree = SqlBinaryScalarExpression.Create(SqlBinaryScalarOperatorKind.Modulo, five, three); AssertEvaluation(CosmosNumber64.Create(5 % 3), fiveModThree); SqlBinaryScalarExpression fiveMultiplyThree = SqlBinaryScalarExpression.Create(SqlBinaryScalarOperatorKind.Multiply, five, three); AssertEvaluation(CosmosNumber64.Create(5 * 3), fiveMultiplyThree); SqlBinaryScalarExpression fiveNotEqualThree = SqlBinaryScalarExpression.Create(SqlBinaryScalarOperatorKind.NotEqual, five, three); AssertEvaluation(CosmosBoolean.Create(5 != 3), fiveNotEqualThree); SqlBinaryScalarExpression fiveNotEqualFive = SqlBinaryScalarExpression.Create(SqlBinaryScalarOperatorKind.NotEqual, five, five); AssertEvaluation(CosmosBoolean.Create(5 != 5), fiveNotEqualFive); SqlBinaryScalarExpression trueOrFalse = SqlBinaryScalarExpression.Create(SqlBinaryScalarOperatorKind.Or, trueBoolean, falseBoolean); AssertEvaluation(CosmosBoolean.Create(true || false), trueOrFalse); SqlBinaryScalarExpression trueOrUndefined = SqlBinaryScalarExpression.Create(SqlBinaryScalarOperatorKind.Or, trueBoolean, undefinedLiteral); AssertEvaluation(CosmosBoolean.Create(true), trueOrUndefined); SqlBinaryScalarExpression falseOrUndefined = SqlBinaryScalarExpression.Create(SqlBinaryScalarOperatorKind.Or, falseBoolean, undefinedLiteral); AssertEvaluation(Undefined, falseOrUndefined); SqlBinaryScalarExpression helloConcatWorld = SqlBinaryScalarExpression.Create(SqlBinaryScalarOperatorKind.StringConcat, hello, world); AssertEvaluation(CosmosString.Create("Hello" + "World"), helloConcatWorld); SqlBinaryScalarExpression fiveSubtract3 = SqlBinaryScalarExpression.Create(SqlBinaryScalarOperatorKind.Subtract, five, three); AssertEvaluation(CosmosNumber64.Create(5 - 3), fiveSubtract3); }
public void ARRAY_CONTAINS() { // ARRAY_CONTAINS(["apples", "strawberries", "bananas"], "apples") AssertEvaluation( expected: CosmosBoolean.Create(new string[] { "apples", "strawberries", "bananas" }.Contains("apples")), sqlScalarExpression: SqlFunctionCallScalarExpression.CreateBuiltin( SqlFunctionCallScalarExpression.Identifiers.ArrayContains, JTokenToSqlScalarExpression.Convert(new JArray("apples", "strawberries", "bananas")), SqlLiteralScalarExpression.Create(SqlStringLiteral.Create("apples")))); // ARRAY_CONTAINS(["apples", "strawberries", "bananas"], "mangoes") AssertEvaluation( expected: CosmosBoolean.Create(new string[] { "apples", "strawberries", "bananas" }.Contains("mangoes")), sqlScalarExpression: SqlFunctionCallScalarExpression.CreateBuiltin( SqlFunctionCallScalarExpression.Identifiers.ArrayContains, JTokenToSqlScalarExpression.Convert(new JArray("apples", "strawberries", "bananas")), SqlLiteralScalarExpression.Create(SqlStringLiteral.Create("mangoes")))); // ARRAY_CONTAINS([{"name": "apples", "fresh": true}, {"name": "strawberries", "fresh": true}], {"name": "apples"}, true) AssertEvaluation( expected: CosmosBoolean.Create(true), sqlScalarExpression: SqlFunctionCallScalarExpression.CreateBuiltin( SqlFunctionCallScalarExpression.Identifiers.ArrayContains, JTokenToSqlScalarExpression.Convert(new JArray( JObject.FromObject(new { name = "apples", fresh = true }), JObject.FromObject(new { name = "strawberries", fresh = true }))), JTokenToSqlScalarExpression.Convert(JObject.FromObject(new { name = "apples" })), trueBoolean)); // ARRAY_CONTAINS([{"name": "apples", "fresh": true}, {"name": "strawberries", "fresh": true}], {"name": "apples"}, undefined) AssertEvaluation( expected: CosmosBoolean.Create(false), sqlScalarExpression: SqlFunctionCallScalarExpression.CreateBuiltin( SqlFunctionCallScalarExpression.Identifiers.ArrayContains, JTokenToSqlScalarExpression.Convert(new JArray( JObject.FromObject(new { name = "apples", fresh = true }), JObject.FromObject(new { name = "strawberries", fresh = true }))), JTokenToSqlScalarExpression.Convert(JObject.FromObject(new { name = "apples" })), SqlLiteralScalarExpression.Create(SqlUndefinedLiteral.Create()))); // ARRAY_CONTAINS([{"name": "apples", "fresh": true}, {"name": "strawberries", "fresh": true}], {"name": "apples"}) AssertEvaluation( expected: CosmosBoolean.Create(false), sqlScalarExpression: SqlFunctionCallScalarExpression.CreateBuiltin( SqlFunctionCallScalarExpression.Identifiers.ArrayContains, JTokenToSqlScalarExpression.Convert(new JArray( JObject.FromObject(new { name = "apples", fresh = true }), JObject.FromObject(new { name = "strawberries", fresh = true }))), JTokenToSqlScalarExpression.Convert(JObject.FromObject(new { name = "apples" })))); // ARRAY_CONTAINS([{"name": "apples", "fresh": true}, {"name": "strawberries", "fresh": true}], {"name": "mangoes"}, true) AssertEvaluation( expected: CosmosBoolean.Create(false), sqlScalarExpression: SqlFunctionCallScalarExpression.CreateBuiltin( SqlFunctionCallScalarExpression.Identifiers.ArrayContains, JTokenToSqlScalarExpression.Convert(new JArray( JObject.FromObject(new { name = "apples", fresh = true }), JObject.FromObject(new { name = "strawberries", fresh = true }))), JTokenToSqlScalarExpression.Convert(JObject.FromObject(new { name = "mangoes" })), trueBoolean)); // ARRAY_CONTAINS([SQUARE(2), POWER(2, 2)] 2) AssertEvaluation( expected: CosmosBoolean.Create(new double[] { 2 * 2, Math.Pow(2, 2) }.Contains(2)), sqlScalarExpression: SqlFunctionCallScalarExpression.CreateBuiltin( SqlFunctionCallScalarExpression.Identifiers.ArrayContains, SqlArrayCreateScalarExpression.Create( SqlFunctionCallScalarExpression.CreateBuiltin( SqlFunctionCallScalarExpression.Identifiers.Square, SqlLiteralScalarExpression.Create(SqlNumberLiteral.Create(2))), SqlFunctionCallScalarExpression.CreateBuiltin( SqlFunctionCallScalarExpression.Identifiers.Power, SqlLiteralScalarExpression.Create(SqlNumberLiteral.Create(2)), SqlLiteralScalarExpression.Create(SqlNumberLiteral.Create(2)))), JTokenToSqlScalarExpression.Convert(2))); }
public abstract TOutput Visit(SqlUndefinedLiteral sqlObject, TArg input);
public abstract TResult Visit(SqlUndefinedLiteral literal);