public void TestExecuteNoResultType( [Values(ExecuteSQLShared.ReturnModeType.RowByRow, ExecuteSQLShared.ReturnModeType.ListOfRows, ExecuteSQLShared.ReturnModeType.FirstRow, ExecuteSQLShared.ReturnModeType.FirstRowElseEmptyRow)] ExecuteSQLShared.ReturnModeType returnModeType) { string sql = "DECLARE @t TABLE ( AColumn INT )"; FunctionResult result = Execute(sql, returnModeType); Assert.IsNull(result.Value); Assert.IsNull(result.ExecutionPathResult); }
private FunctionResult Execute(ConnectionTypeSelection connectionType, Transaction transaction, string sqlStatement, ExecuteSQLShared.ReturnModeType returnMode, ResultType resultType, bool connectionStringAsExpression, params ParameterValue[] sqlFieldParameters) { string connectionString = connectionType == ConnectionTypeSelection.UseTransaction ? string.Empty : Helpers.DatabaseHelpers.GetDefaultConnectionString(connectionType.ToConnectionType().Value); object dynamicConnectionString; if (connectionStringAsExpression) { dynamicConnectionString = new MockExpression("\"" + connectionString + "\""); } else { dynamicConnectionString = connectionString; } var functionProperties = new PropertyValue[] { new PropertyValue(ExecuteSQLShared.TimeoutPropertyName, 5), new PropertyValue(ExecuteSQLShared.ReturnOptionsPropertyName, returnMode), new PropertyValue(ExecuteSQLShared.ResultTypePropertyName, resultType), new PropertyValue(DbShared.ConnectionTypePropertyName, connectionType), new PropertyValue(ExecuteSQLShared.SqlStatementPropertyName, sqlStatement) }; var executeParameters = new ParameterValue[] { new ParameterValue(ExecuteSQLShared.SqlStatementPropertyName, sqlStatement) }; if (connectionType == ConnectionTypeSelection.UseTransaction) { executeParameters = executeParameters.Concat(new ParameterValue[] { new ParameterValue(DbShared.TransactionPropertyName, transaction) }).ToArray(); } else { functionProperties = functionProperties.Concat(new PropertyValue[] { new PropertyValue(DbShared.ConnectionStringPropertyName, dynamicConnectionString) }).ToArray(); executeParameters = executeParameters.Concat(new ParameterValue[] { new ParameterValue(DbShared.ConnectionStringPropertyName, connectionString) }).ToArray(); } var tester = (new FunctionTester <ExecuteSQL.ExecuteSQL>()).Compile(functionProperties); return(tester.Execute(executeParameters .Concat <ParameterValue>(sqlFieldParameters).ToArray <ParameterValue>())); }
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)); }
private FunctionResult Execute(string sqlStatement, ExecuteSQLShared.ReturnModeType returnMode, ResultType resultType, bool connectionStringAsExpression = false, params ParameterValue[] sqlFieldParameters) { return(Execute(ConnectionTypeSelection.OleDb, null, sqlStatement, returnMode, resultType, connectionStringAsExpression, sqlFieldParameters)); }
private FunctionResult Execute(string sqlStatement, ExecuteSQLShared.ReturnModeType returnMode, params ParameterValue[] sqlFieldParameters) { return(Execute(ConnectionTypeSelection.OleDb, null, sqlStatement, returnMode, new ResultType(), false, sqlFieldParameters)); }