protected override void WriteFunctionToSql(QueryExpression queryExpression)
        {
            switch (queryExpression)
            {
            case RandomFunctionExpression randomFunctionExpression:
                Sql.Append($"FLOOR(RANDOM() * {int.MaxValue})::int");
                return;

            case LastInsertIdFunctionExpression lastInsertIdExpression:
                Sql.Append("LASTVAL()");
                return;

            case TableExistsVirtualFunctionExpression tableExistsExpression:
                ExpressionWriter.Visit(
                    Postgresql.Raw($@"SELECT 1 
   FROM   pg_catalog.pg_class c
   JOIN   pg_catalog.pg_namespace n ON n.oid = c.relnamespace
   WHERE  n.nspname = current_schema()
   AND    c.relname = '{tableExistsExpression.Table.TableName.Replace("'", "\\'")}'
   AND    c.relkind = 'r'    -- only tables")
                    );
                return;
            }
            base.WriteFunctionToSql(queryExpression);
        }
Ejemplo n.º 2
0
        public void SystemToExpressionTest()
        {
            Project    p  = new Project();
            MathSystem s1 = p.CurrentSystem;

            // BUILD SYSTEM 1: sin(x^2)*2
            Signal x = Binder.CreateSignal(); x.Label = "x";

            Std.ConstrainAlwaysReal(x);
            Signal x2      = StdBuilder.Square(x); x2.Label = "x2";
            Signal sinx2   = StdBuilder.Sine(x2); sinx2.Label = "sinx2";
            Signal sinx2t2 = sinx2 * IntegerValue.ConstantTwo;

            s1.AddSignalTree(sinx2t2, true, true);

            // EVALUATE SYSTEM 1 FOR x=1.5
            x.PostNewValue(new RealValue(1.5));
            p.SimulateInstant();
            Assert.AreEqual(0, s1.BusCount, "A0");
            Assert.AreEqual(5, s1.SignalCount, "A1");
            Assert.AreEqual(3, s1.PortCount, "A2");
            Assert.AreEqual("Std.Real(1.55614639377584)", sinx2t2.Value.ToString(), "A3");

            // SERIALIZE SYSTEM 1 TO EXPRESSION
            ExpressionWriter writer = new ExpressionWriter();
            SystemReader     reader = new SystemReader(writer);

            reader.ReadSystem(s1);
            string expr = writer.WrittenExpressions.Dequeue();

            Console.WriteLine(expr);

            // ....
        }
Ejemplo n.º 3
0
 public UpdateTableTests()
 {
     _sb      = new StringBuilder();
     _w       = new ExpressionWriter(_sb, new SqlServerBuilderHelper());
     _db      = Setup.GetDb();
     _builder = new UpdateTableBuilder <Post>(_db);
 }
Ejemplo n.º 4
0
 public UpdateTableTests()
 {
     _sb = new StringBuilder();
     _w = new ExpressionWriter(_sb,new SqlServerBuilderHelper());
     _db = Setup.GetDb();
     _builder = new UpdateTableBuilder<Post>(_db);
 }
Ejemplo n.º 5
0
        protected virtual void WriteExpression(object o, TextWriter writer, Expression expr)
        {
            // NOTE: we don't dispose of the JsonWriter because we didn't create the text writer
            JsonWriter jsonWriter = new JsonWriter(writer, !this.Settings.IsCompact, this.Settings.TypeAliases);

            ExpressionWriter.Write(jsonWriter, this.Settings.OutputTypeInformation, expr);
        }
Ejemplo n.º 6
0
        protected override void WriteFunctionToSql(QueryExpression queryExpression)
        {
            switch (queryExpression)
            {
            case ConcatenateQueryExpression concatenateQueryExpression:
                for (var i = 0; i < concatenateQueryExpression.Expressions.Length; i++)
                {
                    ExpressionWriter.Visit(concatenateQueryExpression.Expressions[i]);
                    if (i < concatenateQueryExpression.Expressions.Length - 1)
                    {
                        Sql.Append(" || ");
                    }
                }
                return;

            case LastInsertIdFunctionExpression lastInsertIdExpression:
                Sql.Append("last_insert_rowid()");
                return;

            case TableExistsVirtualFunctionExpression tableExistsExpression:
                ExpressionWriter.Visit(
                    QueryExpression.Select(
                        new[] { QueryExpression.Value(1) },
                        from: QueryExpression.Table("sqlite_master"),
                        where : QueryExpression.AndAlso(
                            QueryExpression.Compare(QueryExpression.Column("type"), ComparisonOperator.AreEqual, QueryExpression.Value("table")),
                            QueryExpression.Compare(QueryExpression.Column("name"), ComparisonOperator.AreEqual, QueryExpression.Value(tableExistsExpression.Table.TableName))
                            )
                        )
                    );
                return;
            }
            base.WriteFunctionToSql(queryExpression);
        }
Ejemplo n.º 7
0
 public UpdateTableTests()
 {
     _sb = new StringBuilder();
     _w = new ExpressionWriter(_sb,new SqlServerBuilderHelper());
     var db = new Mock<IAccessDb>();
     db.Setup(d => d.Provider).Returns(new SqlServerProvider());
     _builder = new UpdateTableBuilder<Post>(db.Object);
 }
Ejemplo n.º 8
0
 public WhereCriteriaTests()
 {
     _sb = new StringBuilder();
     _pm = new ParametersManager();
     _fRm = new Mock<IDbProviderExpressionHelper>();
     _fRm.Setup(d => d.EscapeName(It.IsAny<string>())).Returns((string v) => SqlServerProvider.EscapeIdentifier(v));
     _fRm.Setup(d => d.FormatBoolean(It.IsAny<bool>())).Returns((bool v) => v==true?"1":"0");
     _w = new ExpressionWriter(_sb,_fRm.Object,_pm);        
 }
Ejemplo n.º 9
0
        public void WiteToStringWithReferenceTest()
        {
            var p = new People {
                Name = "fireasy"
            };
            Expression <Func <Work, bool> > expression = (s) => s.People.Name == p.Name;

            Console.WriteLine(ExpressionWriter.WriteToString(expression));
        }
Ejemplo n.º 10
0
 public WhereCriteriaTests()
 {
     _sb  = new StringBuilder();
     _pm  = new ParametersManager();
     _fRm = new Mock <IDbProviderExpressionHelper>();
     _fRm.Setup(d => d.EscapeName(It.IsAny <string>())).Returns((string v) => SqlServerProvider.EscapeIdentifier(v));
     _fRm.Setup(d => d.FormatBoolean(It.IsAny <bool>())).Returns((bool v) => v == true?"1":"0");
     _w = new ExpressionWriter(_sb, _fRm.Object, _pm);
 }
Ejemplo n.º 11
0
        public UpdateTableTests()
        {
            _sb = new StringBuilder();
            _w  = new ExpressionWriter(_sb, new SqlServerBuilderHelper());
            var db = new Mock <IAccessDb>();

            db.Setup(d => d.Provider).Returns(new SqlServerProvider());
            _builder = new UpdateTableBuilder <Post>(db.Object);
        }
 public override void Write(ExpressionWriter writer)
 {
     writer.Append("(");
     writer.Append(this.LeftValue);
     writer.Append(" ");
     writer.Append(op);
     writer.Append(" ");
     writer.Append(this.RightValue);
     writer.Append(")");
 }
Ejemplo n.º 13
0
        public override void Write(ExpressionWriter writer)
        {
            // due to issue: https://github.com/Azure/autorest/issues/975,
            // date time offsets must be explicitly escaped before being passed to the filter

            string datestring         = this.DateTime.ToString("O");
            var    escaped_datestring = System.Uri.EscapeDataString(datestring);

            writer.Append(string.Format("datetimeoffset'{0}'", escaped_datestring));
        }
Ejemplo n.º 14
0
        public void WiteToStringWithConstantTest()
        {
            var str = "fireasy";
            var p   = new People {
                Age = 34
            };
            Expression <Func <People, bool> > expression = (s) => s.Name == str && s.Age == p.Age;

            Console.WriteLine(ExpressionWriter.WriteToString(expression));
        }
Ejemplo n.º 15
0
        /// <summary>
        /// 通过表达式计算出对应的缓存键。
        /// </summary>
        /// <param name="expression"></param>
        /// <returns></returns>
        private static string GetKey(Expression expression)
        {
            var evalExp  = PartialEvaluator.Eval(expression, TranslateProviderBase.EvaluatedLocallyFunc);
            var cacheKey = ExpressionWriter.WriteToString(evalExp);

            //使用md5进行hash编码
            var md5 = new MD5CryptoServiceProvider();

            byte[] data = md5.ComputeHash(Encoding.Unicode.GetBytes(cacheKey));
            return("$." + Convert.ToBase64String(data, Base64FormattingOptions.None));
        }
Ejemplo n.º 16
0
        public void WriteTest()
        {
            Expression <Func <People, bool> > expression = (s) => s.Age == 12;

            using (var writer = new StringWriter(CultureInfo.InvariantCulture))
            {
                ExpressionWriter.Write(writer, expression);

                Console.WriteLine(writer.ToString());
            }
        }
        public string ToFilterString()
        {
            var expr_and = ToExpression();

            var writer = new ExpressionWriter();

            writer.Append(expr_and);
            string text = writer.ToString();

            return(text);
        }
Ejemplo n.º 18
0
        /// <summary>
        /// Serializes an expression to a string
        /// </summary>
        /// <param name='context'>Data context used to generate type names for types.</param>
        /// <param name="e">Expression to serialize</param>
        /// <param name='inPath'>Whether or not the expression being written is part of the path of the URI.</param>
        /// <param name="uriVersion">the request data service version for the uri</param>
        /// <returns>serialized expression</returns>
        internal static string ExpressionToString(DataServiceContext context, Expression e, bool inPath, ref Version uriVersion)
        {
            ExpressionWriter ew         = new ExpressionWriter(context, inPath);
            string           serialized = ew.Translate(e);

            WebUtil.RaiseVersion(ref uriVersion, ew.uriVersion);
            if (ew.cantTranslateExpression)
            {
                throw new NotSupportedException(Strings.ALinq_CantTranslateExpression(e.ToString()));
            }

            return(serialized);
        }
        /// <summary>
        /// Formats the <paramref name="expression"/>.
        /// </summary>
        /// <param name="expression">The expression to format.</param>
        /// <param name="inCSharpNotation">If set to <see langword="true"/>,
        /// the result will be returned in C# notation
        /// (<see cref="ExpressionWriter"/> will be used).</param>
        /// <returns>A string containing formatted expression.</returns>
        public static string ToString(this Expression expression, bool inCSharpNotation)
        {
            if (!inCSharpNotation)
            {
                return(expression.ToString());
            }

            return(ExpressionWriter.Write(expression));

            //      // The old code
            //      string result = expression.ToString();
            //      result = Regex.Replace(result, @"value\([^)]+DisplayClass[^)]+\)\.", "");
            //      return result;
        }
Ejemplo n.º 20
0
        public void TestExpression()
        {
            var name     = new AssemblyName("TestAssembly");
            var assembly = AssemblyBuilder.DefineDynamicAssembly(name, AssemblyBuilderAccess.Run);

            var module = assembly.DefineDynamicModule("TestAssembly.dll");

            var myClass  = module.DefineType("MyClass");
            var myField  = myClass.DefineField("MyField", typeof(long), FieldAttributes.Public);
            var myMethod = myClass.DefineMethod("MyMethod", MethodAttributes.Public, CallingConventions.HasThis, typeof(long), new Type[0]);

            var expression = new Expression.Operation.Binary()
            {
                LeftOperand  = new Expression.Parameter("Input"),
                RightOperand = new Expression.Literal(10000),
                Operator     = new Syntax.Operator.Numerical.Addition()
            };

            var state = new ExpressionWriter.State()
            {
                FieldByName = new Dictionary <string, FieldInfo>()
                {
                    ["Input"] = myField
                },
                ArgumentsByName = new Dictionary <string, int>()
            };


            var generator = myMethod.GetILGenerator();
            var writer    = new ExpressionWriter(generator, state);

            writer.WriteExpression(expression);
            generator.Emit(OpCodes.Ret);

            var myClassInfo  = myClass.CreateType();
            var myFieldInfo  = myClass.GetField("MyField");
            var myMethodInfo = myClassInfo.GetMethods()[0];

            var myClassInstance = Activator.CreateInstance(myClass);

            myFieldInfo.SetValue(myClassInstance, 3);
            var output = myMethodInfo.Invoke(myClassInstance, new object[0]);

            Assert.AreEqual(output, 10003);
        }
        /// <summary>
        /// 通过表达式计算出对应的缓存键。
        /// </summary>
        /// <param name="expression">作为 Key 的 Lambda 表达式。</param>
        /// <param name="prefix">用于区分缓存的前缀。</param>
        /// <returns></returns>
        public string Generate(Expression expression, params string[] prefix)
        {
            var evalExp  = PartialEvaluator.Eval(expression, TranslateProviderBase.EvaluatedLocallyFunc);
            var cacheKey = ExpressionWriter.WriteToString(evalExp);

            //使用md5进行hash编码
            var md5  = new MD5CryptoServiceProvider();
            var data = md5.ComputeHash(Encoding.Unicode.GetBytes(cacheKey));

            var sb = new StringBuilder();

            foreach (var p in prefix)
            {
                if (!string.IsNullOrEmpty(p))
                {
                    sb.AppendFormat("{0}:", p);
                }
            }

            sb.Append(data.ToHex(true));

            return(sb.ToString());
        }
Ejemplo n.º 22
0
 public override void Write(ExpressionWriter writer)
 {
     writer.Append("(not");
     writer.Append(this.Expression);
     writer.Append(")");
 }
Ejemplo n.º 23
0
 public void TestSetup()
 {
     _stringWriter = new StringWriter();
     _jsonWriter   = new JsonWriter(_stringWriter, false);
     _exprWriter   = new ExpressionWriter(_jsonWriter, true);
 }
Ejemplo n.º 24
0
 public override void Write(ExpressionWriter writer)
 {
     this.WriteItems(writer, " and ");
 }
Ejemplo n.º 25
0
        public override void Write(ExpressionWriter writer)
        {
            string s = string.Format("'{0}'", this.Content);

            writer.Append(s);
        }
Ejemplo n.º 26
0
 /// <summary>Serializes an expression to a string.</summary>
 /// <param name="expression">Expression to serialize</param>
 /// <param name='inPath'>Whether or not the expression being written is part of the path of the URI.</param>
 /// <returns>The serialized expression.</returns>
 private string ExpressionToString(Expression expression, bool inPath)
 {
     return(ExpressionWriter.ExpressionToString(this.context, expression, inPath, ref this.uriVersion));
 }
 public override void Write(ExpressionWriter writer)
 {
     writer.Append(this.Integer.ToString());
 }
Ejemplo n.º 28
0
 public override void Write(ExpressionWriter writer)
 {
     writer.Append("null");
 }
Ejemplo n.º 29
0
 public override void Write(ExpressionWriter writer)
 {
     writer.Append(this.Name);
 }
Ejemplo n.º 30
0
        public void WriteToStringTest()
        {
            Expression <Func <People, bool> > expression = (s) => s.Age == 12;

            Console.WriteLine(ExpressionWriter.WriteToString(expression));
        }
Ejemplo n.º 31
0
        public void WiteToStringWithLengthTest()
        {
            Expression <Func <People, bool> > expression = (s) => s.Name.Length == 4;

            Console.WriteLine(ExpressionWriter.WriteToString(expression));
        }
Ejemplo n.º 32
0
        public void WiteToStringWithSubqueryTest()
        {
            Expression <Func <People, bool> > expression = (s) => s.Works.Count(t => t.Company == "aa") > 0;

            Console.WriteLine(ExpressionWriter.WriteToString(expression));
        }