diff --git a/models/Grammars/BaseGrammar.cfc b/models/Grammars/BaseGrammar.cfc index ac5f8070..3e11e59d 100644 --- a/models/Grammars/BaseGrammar.cfc +++ b/models/Grammars/BaseGrammar.cfc @@ -796,7 +796,7 @@ component displayname="Grammar" accessors="true" { generateNullConstraint( column ), generateUniqueConstraint( column, blueprint ), generateAutoIncrement( column, blueprint ), - generateDefault( column ), + generateDefault( column, blueprint ), generateComment( column, blueprint ) ], function( item ) { return item != ""; diff --git a/models/Grammars/MSSQLGrammar.cfc b/models/Grammars/MSSQLGrammar.cfc index 87d3c78f..637fb878 100644 --- a/models/Grammars/MSSQLGrammar.cfc +++ b/models/Grammars/MSSQLGrammar.cfc @@ -139,6 +139,10 @@ component extends="qb.models.Grammars.BaseGrammar" { return column.getAutoIncrement() ? "IDENTITY" : ""; } + function generateDefault( column, blueprint ) { + return column.getDefault() != "" ? "CONSTRAINT #wrapValue( "df_#blueprint.getTable()#_#column.getName()#" )# DEFAULT #column.getDefault()#" : ""; + } + function generateComment( column ) { return ""; } diff --git a/models/Schema/Blueprint.cfc b/models/Schema/Blueprint.cfc index 43a2b6f0..efd10905 100644 --- a/models/Schema/Blueprint.cfc +++ b/models/Schema/Blueprint.cfc @@ -293,6 +293,20 @@ component accessors="true" { return appendIndex( type = "unique", columns = columns, name = name ); } + /** + * Create a default constraint from a column. + * + * @columns The column that makes up the default constraint. + * @name The name of the default constraint. + * Default: A generated name consisting of the table name and column name. + * + * @returns The created TableIndex instance. + */ + function default( column, name ) { + arguments.name = isNull( name ) ? "df_#getTable()#_#column#" : arguments.name; + return createIndex( type = "default", columns = column, name = name ); + } + /*====================================== = Alter Commands = @@ -386,6 +400,12 @@ component accessors="true" { } function appendIndex() { + var newIndex = createIndex( argumentCollection = arguments ); + variables.indexes.append( newIndex ); + return newIndex; + } + + function createIndex() { var newIndex = new TableIndex( this ); var indexMetadata = getMetadata( newIndex ); var functionNames = indexMetadata.functions.map( function( func ) { @@ -396,7 +416,6 @@ component accessors="true" { invoke( newIndex, "set#arg#", { 1 = arguments[ arg ] } ); } } - variables.indexes.append( newIndex ); return newIndex; } diff --git a/tests/resources/AbstractSchemaBuilderSpec.cfc b/tests/resources/AbstractSchemaBuilderSpec.cfc index 556aa5e5..b35378d7 100644 --- a/tests/resources/AbstractSchemaBuilderSpec.cfc +++ b/tests/resources/AbstractSchemaBuilderSpec.cfc @@ -850,8 +850,6 @@ component extends="testbox.system.BaseSpec" { if ( ! isArray( statements ) ) { statements = [ statements ]; } - debug( statements ); - debug( expected ); expect( statements ).toBeArray(); expect( statements ).toHaveLength( arrayLen( expected ) ); for ( var i = 1; i <= expected.len(); i++ ) { diff --git a/tests/specs/Query/Abstract/QueryExecutionSpec.cfc b/tests/specs/Query/Abstract/QueryExecutionSpec.cfc index ca63f2c5..788978b9 100644 --- a/tests/specs/Query/Abstract/QueryExecutionSpec.cfc +++ b/tests/specs/Query/Abstract/QueryExecutionSpec.cfc @@ -123,7 +123,7 @@ component extends="testbox.system.BaseSpec" { var builder = getBuilder(); var expectedQuery = queryNew( "id,name", "integer,varchar", [ { id = 1, name = "foo" }, { id = 2, name = "test" } ] ); builder.$( "runQuery" ).$args( - sql = "SELECT * FROM ""users"" WHERE ""name"" = ? LIMIT 1", + sql = "SELECT * FROM ""users""", options = {} ).$results( expectedQuery ); diff --git a/tests/specs/Schema/MSSQLSchemaBuilderSpec.cfc b/tests/specs/Schema/MSSQLSchemaBuilderSpec.cfc index caea4843..f23e4384 100644 --- a/tests/specs/Schema/MSSQLSchemaBuilderSpec.cfc +++ b/tests/specs/Schema/MSSQLSchemaBuilderSpec.cfc @@ -9,7 +9,7 @@ component extends="tests.resources.AbstractSchemaBuilderSpec" { } function complicatedTable() { - return [ "CREATE TABLE [users] ([id] INTEGER NOT NULL IDENTITY, [username] NVARCHAR(255) NOT NULL, [first_name] NVARCHAR(255) NOT NULL, [last_name] NVARCHAR(255) NOT NULL, [password] NVARCHAR(100) NOT NULL, [country_id] INTEGER NOT NULL, [created_date] DATETIME2 NOT NULL DEFAULT CURRENT_TIMESTAMP, [modified_date] DATETIME2 NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT [pk_users_id] PRIMARY KEY ([id]), CONSTRAINT [fk_users_country_id] FOREIGN KEY ([country_id]) REFERENCES [countries] ([id]) ON UPDATE NO ACTION ON DELETE CASCADE)" ]; + return [ "CREATE TABLE [users] ([id] INTEGER NOT NULL IDENTITY, [username] NVARCHAR(255) NOT NULL, [first_name] NVARCHAR(255) NOT NULL, [last_name] NVARCHAR(255) NOT NULL, [password] NVARCHAR(100) NOT NULL, [country_id] INTEGER NOT NULL, [created_date] DATETIME2 NOT NULL CONSTRAINT [df_users_created_date] DEFAULT CURRENT_TIMESTAMP, [modified_date] DATETIME2 NOT NULL CONSTRAINT [df_users_modified_date] DEFAULT CURRENT_TIMESTAMP, CONSTRAINT [pk_users_id] PRIMARY KEY ([id]), CONSTRAINT [fk_users_country_id] FOREIGN KEY ([country_id]) REFERENCES [countries] ([id]) ON UPDATE NO ACTION ON DELETE CASCADE)" ]; } function bigIncrements() { @@ -231,7 +231,7 @@ component extends="tests.resources.AbstractSchemaBuilderSpec" { } function default() { - return [ "CREATE TABLE [users] ([active] NCHAR(1) NOT NULL DEFAULT 'Y')" ]; + return [ "CREATE TABLE [users] ([active] NCHAR(1) NOT NULL CONSTRAINT [df_users_active] DEFAULT 'Y')" ]; } function nullable() {