private static TSqlCreateFunctionStatement CreateTableValuedFunction( SqlAssemblyInfo assemblyInfo, MethodInfo method, SqlFunctionAttribute info) { var fillMethod = method.DeclaringType.GetMethod(info.FillRowMethodName, BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static); return(new TSqlCreateFunctionStatement( name: TSqlObjectIdentifier.Create("foundry", method.Name), parameters: method.GetParameters() .Select(parameter => new TSqlModuleParameter($"@{parameter.Name}", parameter.ParameterType)), returns: new TSqlClrTableType( fillMethod.GetParameters() .Skip(1) .Select(parameter => new TSqlClrTableTypeColumn(parameter.Name, parameter.ParameterType.GetElementType())) ), definition: new TSqlClrMethodSpecifier( assemblyInfo.Name, method.DeclaringType.FullName, method.Name ) )); }
private static TSqlCreateFunctionStatement CreateFunction( SqlAssemblyInfo assemblyInfo, MethodInfo method, SqlFunctionAttribute info) { if (method.ReturnType == typeof(IEnumerable) && !(info.FillRowMethodName is null)) { return(CreateTableValuedFunction(assemblyInfo, method, info)); } return(new TSqlCreateFunctionStatement( name: TSqlObjectIdentifier.Create("foundry", method.Name), parameters: method.GetParameters() .Select(parameter => new TSqlModuleParameter($"@{parameter.Name}", parameter.ParameterType)), returns: TSqlType.CreateFromType(method.ReturnType), definition: new TSqlClrMethodSpecifier( assemblyInfo.Name, method.DeclaringType.FullName, method.Name ) )); }
public static bool ObjectExists(this SqlConnection connection, TSqlObjectIdentifier identifier) { return(connection.ExecuteScalar <bool>( @"SELECT CAST(IIF(OBJECT_ID(@p_name) IS NULL, 0, 1) AS BIT)", new SqlParameter("@p_name", identifier.ToString()) )); }
private static TSqlCreateProcedureStatement CreateProcedure( SqlAssemblyInfo assemblyInfo, MethodInfo method, SqlProcedureAttribute info) { return(new TSqlCreateProcedureStatement( name: TSqlObjectIdentifier.Create("foundry", method.Name), parameters: method.GetParameters() .Select(parameter => new TSqlModuleParameter($"@{parameter.Name}", parameter.ParameterType)), definition: new TSqlClrMethodSpecifier( assemblyInfo.Name, method.DeclaringType.FullName, method.Name ) )); }
private static bool CreateObject( SqlConnection connection, TSqlObjectIdentifier identifier, TSqlStatement statement) { if (connection.ObjectExists(identifier)) { // TODO: logging return(false); } if (identifier is TSqlSchemaObjectIdentifier schemaIdentifier) { connection.CreateSchemaIfNotExists(schemaIdentifier.SchemaName); } connection.ExecuteNonQuery(statement.ToString()); return(true); }