コード例 #1
0
        public static void CompileExpression(IFunctionBuilder functionBuilder, IFunctionData data, string parameterName, string expressionName)
        {
            var propertyValue    = data.Properties[parameterName].Value;
            var expressionString = (propertyValue is string) ? propertyValue as string : string.Empty;

            SqlStringHandler stringHandler = SqlStringHandler.GetSqlStringHandler(expressionString);

            var parameterValues = new string[stringHandler.Expressions.Count];

            for (int i = 0; i < parameterValues.Length; i++)
            {
                parameterValues[i] = functionBuilder.GetParamName(expressionName + i) + ".ToString()";
            }

            if (parameterValues.Length > 0)
            {
                functionBuilder.AddCode(string.Format(@"{0} = Twenty57.Linx.Components.Database.Mongo.MongoStringHandler.GetExecutableQuery(
					{0},
					{1},
					new [] {{ {2} }});"                    ,
                                                      functionBuilder.GetParamName(parameterName),
                                                      CSharpUtilities.ArrayAsString(stringHandler.Expressions.Select(x => x.MatchText)),
                                                      parameterValues.Aggregate((a, b) => a + ",\n" + b)
                                                      ));
            }
        }
コード例 #2
0
        /// <summary>
        /// Create the template output
        /// </summary>
        public virtual string TransformText()
        {
            this.Write("\r\n");
            this.Write("\r\nvar OutputNames = ");

            #line 23 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(CSharpUtilities.ArrayAsString(ResultTypeFields.Select(x => x.Name))));

            #line default
            #line hidden
            this.Write(";\r\nvar ColumnNames = ");

            #line 24 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(CSharpUtilities.ArrayAsString(ResultTypeFields.Select(x => x.ColumnName))));

            #line default
            #line hidden
            this.Write(";\r\nvar SqlIdentifiers = ");

            #line 25 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(SqlIdentifiers));

            #line default
            #line hidden
            this.Write(";\r\nvar SqlValues = ");

            #line 26 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(SqlValues));

            #line default
            #line hidden
            this.Write(";\r\n\r\nvar executeSqlX = new Twenty57.Linx.Components.Database.ExecuteSQL.ExecuteSQ" +
                       "LX(\r\n");

            #line 29 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt"
            if (UseTransaction)
            {
            #line default
            #line hidden

            #line 30 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(TransactionProperty));

            #line default
            #line hidden
                this.Write(".GetConnectionType(), ");

            #line 30 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(TransactionProperty));

            #line default
            #line hidden
                this.Write(".GetDbTransaction(), \r\n");

            #line 31 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt"
            }
            else
            {
            #line default
            #line hidden

            #line 32 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(CSharpUtilities.EnumAsString(ConnectionType)));

            #line default
            #line hidden
                this.Write(", ");

            #line 32 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(ConnectionStringProperty));

            #line default
            #line hidden
                this.Write(", \r\n");

            #line 33 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt"
            }

            #line default
            #line hidden

            #line 34 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(Timeout));

            #line default
            #line hidden
            this.Write(", OutputNames, ColumnNames, ");

            #line 34 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(Sql));

            #line default
            #line hidden
            this.Write(", SqlIdentifiers, SqlValues);\r\nexecuteSqlX.LogEvent += message => ");

            #line 35 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt"
            this.Write(this.ToStringHelper.ToStringWithCulture(FunctionContextProperty));

            #line default
            #line hidden
            this.Write(".Log(message);\r\n\r\n");

            #line 37 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt"
            if (RowType != null)
            {
            #line default
            #line hidden
                this.Write("\r\nvar rowBuilder = new System.Func<");

            #line 39 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(RowTypeName));

            #line default
            #line hidden
                this.Write(">(() => {\r\n\t");

            #line 40 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt"
                var rowFields       = ResultTypeFields.Where(f => !string.IsNullOrEmpty(f.Name));
                var logFormatString = "Retrieved ";
                int index           = 0;
                foreach (var nextField in rowFields)
                {
                    logFormatString += string.Format("{0} = {{{1}}}, ", nextField.ColumnName, index++);
                }


            #line default
            #line hidden
                this.Write("\t");

            #line 46 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(FunctionContextProperty));

            #line default
            #line hidden
                this.Write(".Log(System.String.Format(");

            #line 46 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(CSharpUtilities.ToVerbatimString(logFormatString.TrimEnd(',', ' '))));

            #line default
            #line hidden
                this.Write("\r\n\t");

            #line 47 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt"
                foreach (var nextField in rowFields)
                {
            #line default
            #line hidden
                    this.Write("\t\t, Twenty57.Linx.Components.Database.Common.LogHelpers.GetDisplayString(executeS" +
                               "qlX.Reader[");

            #line 48 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(CSharpUtilities.ToVerbatimString(nextField.ColumnName)));

            #line default
            #line hidden
                    this.Write("])\r\n\t");

            #line 49 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt"
                }

            #line default
            #line hidden
                this.Write("\t));\r\n\r\n\treturn new ");

            #line 52 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt"
                this.Write(this.ToStringHelper.ToStringWithCulture(RowTypeName));

            #line default
            #line hidden
                this.Write("\r\n\t{\r\n\t\t");

            #line 54 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt"
                foreach (var nextField in rowFields)
                {
            #line default
            #line hidden
                    this.Write("\t\t\t");

            #line 55 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(GetParamName(nextField.Name)));

            #line default
            #line hidden
                    this.Write(" = Twenty57.Linx.Components.Database.ExecuteSQL.DatabaseHelpers.CheckDbValue<");

            #line 55 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(Twenty57.Linx.Components.Database.Common.TypeHelpers.GetCodeStringForType(nextField.TypeReference)));

            #line default
            #line hidden
                    this.Write(">(executeSqlX.Reader[");

            #line 55 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(CSharpUtilities.ToVerbatimString(nextField.ColumnName)));

            #line default
            #line hidden
                    this.Write("]), \r\n\t\t");

            #line 56 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt"
                }

            #line default
            #line hidden
                this.Write("\t};\r\n});\r\n\r\n");

            #line 60 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt"
                if (ReturnMode == ExecuteSQLShared.ReturnModeType.ListOfRows)
                {
            #line default
            #line hidden
                    this.Write("try\r\n{\r\n\texecuteSqlX.OpenReader();\r\n\r\n\tvar table = new List<");

            #line 65 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(RowTypeName));

            #line default
            #line hidden
                    this.Write(">();\r\n\twhile (executeSqlX.Reader.Read())\r\n\t\ttable.Add(rowBuilder());\r\n\treturn tab" +
                               "le;\r\n}\r\nfinally\r\n{\r\n\texecuteSqlX.Dispose();\r\n}\r\n");

            #line 74 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt"
                }
                else if ((ReturnMode == ExecuteSQLShared.ReturnModeType.FirstRow) || (ReturnMode == ExecuteSQLShared.ReturnModeType.FirstRowElseEmptyRow))
                {
            #line default
            #line hidden
                    this.Write("try\r\n{\r\n\texecuteSqlX.OpenReader();\r\n\r\n\t");

            #line 79 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(RowTypeName));

            #line default
            #line hidden
                    this.Write(" row;\r\n\tif (executeSqlX.Reader.Read())\r\n\t\trow = rowBuilder();\r\n\telse\r\n\t{\r\n\t\t");

            #line 84 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt"
                    if (ReturnMode == ExecuteSQLShared.ReturnModeType.FirstRow)
                    {
            #line default
            #line hidden
                        this.Write("\t\tthrow new Exception(\"No rows returned by query.\");\r\n\t\t");

            #line 86 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt"
                    }
                    else
                    {
            #line default
            #line hidden
                        this.Write("\t\trow = new ");

            #line 87 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt"
                        this.Write(this.ToStringHelper.ToStringWithCulture(RowTypeName));

            #line default
            #line hidden
                        this.Write("();\r\n\t\t");

            #line 88 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt"
                    }

            #line default
            #line hidden
                    this.Write("\t}\r\n\r\n\treturn row;\r\n}\r\nfinally\r\n{\r\n\texecuteSqlX.Dispose();\r\n}\r\n");

            #line 97 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt"
                }
                else
                {
            #line default
            #line hidden
                    this.Write("executeSqlX.OpenReader();\r\n");

            #line 99 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(ExecutionPathOutputName));

            #line default
            #line hidden
                    this.Write(" = \r\nexecuteSqlX.Rows<Twenty57.Linx.Plugin.Common.CodeGeneration.NextResult>(read" +
                               "er => {\r\n\tvar row = rowBuilder();\r\n\treturn new Twenty57.Linx.Plugin.Common.CodeG" +
                               "eneration.NextResult(\"");

            #line 102 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt"
                    this.Write(this.ToStringHelper.ToStringWithCulture(ExecutionPathName));

            #line default
            #line hidden
                    this.Write("\", row);\r\n});\r\n");

            #line 104 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt"
                }

            #line default
            #line hidden

            #line 105 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt"
            }
            else
            {
            #line default
            #line hidden
                this.Write("try\r\n{\r\n\texecuteSqlX.OpenReader();\r\n}\r\nfinally\r\n{\r\n\texecuteSqlX.Dispose();\r\n}\r\n");

            #line 114 "D:\Hg\Linx5 Components\Database\Code\Database\ExecuteSQL\ExecuteSQL_Gen.tt"
            }

            #line default
            #line hidden
            return(this.GenerationEnvironment.ToString());
        }
コード例 #3
0
        public override void GenerateCode(IFunctionBuilder functionBuilder)
        {
            ExecuteSQL_Gen generator = new ExecuteSQL_Gen();

            generator.Session = new Dictionary <string, object>();
            generator.Session.Add("FunctionContextProperty", functionBuilder.ContextParamName);
            generator.Session.Add("GetParamName", new Func <string, string>(functionBuilder.GetParamName));

            // Function properties
            generator.Session.Add("Timeout", FunctionData.Properties[ExecuteSQLShared.TimeoutPropertyName].GetValue <int>());
            ConnectionTypeSelection connectionType = FunctionData.Properties[DbShared.ConnectionTypePropertyName].GetValue <ConnectionTypeSelection>();
            bool useTransaction = connectionType == ConnectionTypeSelection.UseTransaction;

            generator.Session.Add("UseTransaction", useTransaction);
            if (useTransaction)
            {
                generator.Session.Add("TransactionProperty", functionBuilder.GetParamName(DbShared.TransactionPropertyName));
            }
            else
            {
                generator.Session.Add("ConnectionType", connectionType.ToConnectionType());
                generator.Session.Add("ConnectionStringProperty", functionBuilder.GetParamName(DbShared.ConnectionStringPropertyName));
            }
            generator.Session.Add("Sql", functionBuilder.GetParamName(ExecuteSQLShared.SqlStatementPropertyName));
            ExecuteSQLShared.ReturnModeType returnMode = FunctionData.Properties[ExecuteSQLShared.ReturnOptionsPropertyName].GetValue <ExecuteSQLShared.ReturnModeType>();
            generator.Session.Add("ReturnMode", returnMode);

            // SQL placeholders
            SqlStringHandler sqlStringHandler = SqlStringHandler.GetSqlStringHandler(StaticSqlStatementValue);

            generator.Session.Add("SqlIdentifiers", CSharpUtilities.ArrayAsString(sqlStringHandler.Expressions.Select(ex => SqlStringHandler.CreateSqlExpression(ex.ExpressionText))));
            int parameterIndex = 0;

            generator.Session.Add("SqlValues", "new object[] { " + string.Join(", ", sqlStringHandler.Expressions.Select(ex => functionBuilder.GetParamName(ExecuteSQLShared.SqlValuePropertyPrefix + (++parameterIndex)))) + " }");

            // Output columns
            var resultType = FunctionData.Properties[ExecuteSQLShared.ResultTypePropertyName].GetValue <ResultType>();

            generator.Session.Add("ResultTypeFields", resultType.Fields);

            ITypeReference rowTypeReference = null;

            if (resultType.Fields.Count != 0)
            {
                switch (returnMode)
                {
                case ExecuteSQLShared.ReturnModeType.RowByRow:
                    rowTypeReference = FunctionData.ExecutionPaths[ExecuteSQLShared.ExecutionPathName].Output;
                    break;

                case ExecuteSQLShared.ReturnModeType.ListOfRows:
                    rowTypeReference = FunctionData.Output.GetEnumerableContentType();
                    break;

                case ExecuteSQLShared.ReturnModeType.FirstRow:
                case ExecuteSQLShared.ReturnModeType.FirstRowElseEmptyRow:
                    rowTypeReference = FunctionData.Output;
                    break;
                }
            }
            generator.Session.Add("RowTypeName", rowTypeReference == null ? null : functionBuilder.GetTypeName(rowTypeReference));
            generator.Session.Add("RowType", rowTypeReference);
            generator.Session.Add("ExecutionPathName", ExecuteSQLShared.ExecutionPathName);
            generator.Session.Add("ExecutionPathOutputName", functionBuilder.ExecutionPathOutParamName);

            generator.Initialize();
            functionBuilder.AddCode(generator.TransformText());
            functionBuilder.AddAssemblyReference(typeof(ExecuteSQL));
            functionBuilder.AddAssemblyReference(typeof(System.Data.IDataReader));
        }