protected override void BuildCreateTableNullAttribute(SqlField field, DefaulNullable defaulNullable) { if (!field.Nullable) { StringBuilder.Append("NOT NULL"); } }
public static ITable <T> Query(IDataContext dataContext, string tableName, string databaseName, string schemaName, string statementHeader, string statementFooter, DefaulNullable defaulNullable) { var sqlTable = new SqlTable <T>(dataContext.MappingSchema); var sqlQuery = new SelectQuery { QueryType = QueryType.CreateTable }; if (tableName != null) { sqlTable.PhysicalName = tableName; } if (databaseName != null) { sqlTable.Database = databaseName; } if (schemaName != null) { sqlTable.Owner = schemaName; } sqlQuery.CreateTable.Table = sqlTable; sqlQuery.CreateTable.StatementHeader = statementHeader; sqlQuery.CreateTable.StatementFooter = statementFooter; sqlQuery.CreateTable.DefaulNullable = defaulNullable; var query = new Query <int>(dataContext, null) { Queries = { new QueryInfo { SelectQuery = sqlQuery, } } }; SetNonQueryQuery(query); query.GetElement(dataContext, Expression.Constant(null), null); ITable <T> table = new Table <T>(dataContext); if (tableName != null) { table = table.TableName(tableName); } if (databaseName != null) { table = table.DatabaseName(databaseName); } if (schemaName != null) { table = table.SchemaName(schemaName); } return(table); }
protected override void BuildCreateTableNullAttribute(SqlField field, DefaulNullable defaulNullable) { if (defaulNullable == DefaulNullable.Null && field.CanBeNull) { return; } if (defaulNullable == DefaulNullable.NotNull && !field.CanBeNull) { return; } StringBuilder.Append(field.CanBeNull ? " " : "NOT NULL"); }
public static ITable <T> CreateTable <T>([NotNull] this IDataContext dataContext, string tableName = null, string databaseName = null, string ownerName = null, string statementHeader = null, string statementFooter = null, DefaulNullable defaulNullable = DefaulNullable.None) { if (dataContext == null) { throw new ArgumentNullException("dataContext"); } return(Query <T> .CreateTable(DataContextInfo.Create(dataContext), tableName, databaseName, ownerName, statementHeader, statementFooter, defaulNullable)); }
/// <summary> /// Creates new table in database for mapping class <typeparamref name="T"/>. /// Information about table name, columns names and types is taken from mapping class. /// </summary> /// <typeparam name="T">Mapping class.</typeparam> /// <param name="dataContext">Database connection context.</param> /// <param name="tableName">Optional table name to override default table name, extracted from <typeparamref name="T"/> mapping.</param> /// <param name="databaseName">Optional database name, to override default database name. See <see cref="LinqExtensions.DatabaseName{T}(ITable{T}, string)"/> method for support information per provider.</param> /// <param name="schemaName">Optional schema/owner name, to override default name. See <see cref="LinqExtensions.SchemaName{T}(ITable{T}, string)"/> method for support information per provider.</param> /// <param name="statementHeader">Optional replacement for <c>"CREATE TABLE table_name"</c> header. Header is a template with <c>{0}</c> parameter for table name.</param> /// <param name="statementFooter">Optional SQL, appended to generated create table statement.</param> /// <param name="defaulNullable">Defines how columns nullability flag should be generated: /// <para> - <see cref="DefaulNullable.Null"/> - generate only <c>NOT NULL</c> for non-nullable fields. Missing nullability information treated as <c>NULL</c> by database.</para> /// <para> - <see cref="DefaulNullable.NotNull"/> - generate only <c>NULL</c> for nullable fields. Missing nullability information treated as <c>NOT NULL</c> by database.</para> /// <para> - <see cref="DefaulNullable.None"/> - explicitly generate <c>NULL</c> and <c>NOT NULL</c> for all columns.</para> /// Default value: <see cref="DefaulNullable.None"/>. /// </param> /// <returns>Created table as queryable source.</returns> public static ITable <T> CreateTable <T>([NotNull] this IDataContext dataContext, string tableName = null, string databaseName = null, string schemaName = null, string statementHeader = null, string statementFooter = null, DefaulNullable defaulNullable = DefaulNullable.None) { if (dataContext == null) { throw new ArgumentNullException(nameof(dataContext)); } return(QueryRunner.CreateTable <T> .Query(dataContext, tableName, databaseName, schemaName, statementHeader, statementFooter, defaulNullable)); }
/// <summary> /// Asynchronously creates new table in database for mapping class <typeparamref name="T"/>. /// Information about table name, columns names and types is taken from mapping class. /// </summary> /// <typeparam name="T">Mapping class.</typeparam> /// <param name="dataContext">Database connection context.</param> /// <param name="tableName">Optional table name to override default table name, extracted from <typeparamref name="T"/> mapping.</param> /// <param name="databaseName">Optional database name, to override default database name. See <see cref="LinqExtensions.DatabaseName{T}(ITable{T}, string)"/> method for support information per provider.</param> /// <param name="schemaName">Optional schema/owner name, to override default name. See <see cref="LinqExtensions.SchemaName{T}(ITable{T}, string)"/> method for support information per provider.</param> /// <param name="statementHeader">Optional replacement for <c>"CREATE TABLE table_name"</c> header. Header is a template with <c>{0}</c> parameter for table name.</param> /// <param name="statementFooter">Optional SQL, appended to generated create table statement.</param> /// <param name="defaulNullable">Defines how columns nullability flag should be generated: /// <para> - <see cref="DefaulNullable.Null"/> - generate only <c>NOT NULL</c> for non-nullable fields. Missing nullability information treated as <c>NULL</c> by database.</para> /// <para> - <see cref="DefaulNullable.NotNull"/> - generate only <c>NULL</c> for nullable fields. Missing nullability information treated as <c>NOT NULL</c> by database.</para> /// <para> - <see cref="DefaulNullable.None"/> - explicitly generate <c>NULL</c> and <c>NOT NULL</c> for all columns.</para> /// Default value: <see cref="DefaulNullable.None"/>. /// </param> /// <param name="token">Optional asynchronous operation cancellation token.</param> /// <returns>Created table as queryable source.</returns> public static Task <ITable <T> > CreateTableAsync <T>([NotNull] this IDataContext dataContext, string tableName = null, string databaseName = null, string schemaName = null, string statementHeader = null, string statementFooter = null, DefaulNullable defaulNullable = DefaulNullable.None, CancellationToken token = default) { if (dataContext == null) { throw new ArgumentNullException(nameof(dataContext)); } return(QueryRunner.CreateTable <T> .QueryAsync(dataContext, tableName, databaseName, schemaName, statementHeader, statementFooter, defaulNullable, token)); }
protected override void BuildCreateTableNullAttribute(SqlField field, DefaulNullable defaulNullable) { if (!field.CanBeNull) StringBuilder.Append("NOT NULL"); }
public static async Task <ITable <T> > QueryAsync(IDataContext dataContext, string tableName, string databaseName, string schemaName, string statementHeader, string statementFooter, DefaulNullable defaulNullable, CancellationToken token) { var sqlTable = new SqlTable <T>(dataContext.MappingSchema); var createTable = new SqlCreateTableStatement(); if (tableName != null) { sqlTable.PhysicalName = tableName; } if (databaseName != null) { sqlTable.Database = databaseName; } if (schemaName != null) { sqlTable.Owner = schemaName; } createTable.Table = sqlTable; createTable.StatementHeader = statementHeader; createTable.StatementFooter = statementFooter; createTable.DefaulNullable = defaulNullable; var query = new Query <int>(dataContext, null) { Queries = { new QueryInfo { Statement = createTable, } } }; SetNonQueryQuery(query); await query.GetElementAsync(dataContext, Expression.Constant(null), null, token); ITable <T> table = new Table <T>(dataContext); if (tableName != null) { table = table.TableName(tableName); } if (databaseName != null) { table = table.DatabaseName(databaseName); } if (schemaName != null) { table = table.SchemaName(schemaName); } return(table); }