diff --git a/system/services/database/DbInfoService.cfc b/system/services/database/DbInfoService.cfc index c981432dd8..c39d24e030 100644 --- a/system/services/database/DbInfoService.cfc +++ b/system/services/database/DbInfoService.cfc @@ -7,6 +7,7 @@ component { // CONSTRUCTOR public any function init() { + variables.hasModernDbInfo = structKeyExists( getTagData( "CF", "DBINFO" ).attributes, "filter" ); // Lucee 6 return this; } @@ -21,17 +22,31 @@ component { public query function getTableInfo( required string tableName, required string dsn ) { var table = ""; + var attrCol = { + type="tables", + name="table", + pattern="#arguments.tableName#", + datasource="#arguments.dsn#" + } + if ( variables.hasModernDbInfo ){ + attrCol.filter = "TABLE"; // this is much faster + } - dbinfo type="tables" name="table" pattern="#arguments.tableName#" datasource="#arguments.dsn#"; + dbinfo attributeCollection=attrCol; return table; } - public query function getTableColumns( required string tableName, required string dsn ) { + public query function getTableColumns( required string tableName, required string dsn, boolean detail=false ) { var columns = ""; + var attrCol = { + type: ( variables.hasModernDbInfo && !detail ) ? "columns_minimal" : "columns", + name: "columns", + table: arguments.tableName, + datasource: arguments.dsn + } - dbinfo type="columns" name="columns" table=arguments.tableName datasource=arguments.dsn; - + dbinfo attributeCollection=attrCol; return columns; } diff --git a/system/services/presideObjects/SqlSchemaSynchronizer.cfc b/system/services/presideObjects/SqlSchemaSynchronizer.cfc index 702fdeb739..fa6b71795d 100644 --- a/system/services/presideObjects/SqlSchemaSynchronizer.cfc +++ b/system/services/presideObjects/SqlSchemaSynchronizer.cfc @@ -102,7 +102,7 @@ component { } _syncForeignKeys( objects ); - for( dsn in dsns ){ + for( var dsn in dsns ){ _setDatabaseObjectVersion( entityType = "db" , entityName = "db" @@ -167,7 +167,7 @@ component { ) { var adapter = _getAdapter( dsn = arguments.dsn ); var tableExists = _tableExists( tableName=arguments.tableName, dsn=arguments.dsn ); - var tableColumns = tableExists ? valueList( _getTableColumns( tableName=arguments.tableName, dsn=arguments.dsn ).COLUMN_NAME ) : ""; + var tableColumns = tableExists ? QueryColumnData( _getTableColumns( tableName=arguments.tableName, dsn=arguments.dsn ), "COLUMN_NAME" ) : []; var columnSql = ""; var colName = ""; var column = ""; @@ -188,7 +188,7 @@ component { for( colName in ListToArray( arguments.dbFieldList ) ) { colMeta = arguments.properties[ colName ]; - if( listFindNoCase( tableColumns, colName ) && _skipSync( colMeta ) ) { + if( _skipSync( colMeta ) && ArrayContainsNoCase( tableColumns, colName ) ) { continue; } column = sql.columns[ colName ] = StructNew(); @@ -346,7 +346,7 @@ component { , required boolean skipSync ) { - var columnsFromDb = _getTableColumns( tableName=arguments.tableName, dsn=arguments.dsn ); + var columnsFromDb = _getTableColumns( tableName=arguments.tableName, dsn=arguments.dsn, detail=true ); var indexesFromDb = _getTableIndexes( tableName=arguments.tableName, dsn=arguments.dsn ); var dbColumnNames = ValueList( columnsFromDb.column_name ); var colsSql = arguments.generatedSql.columns; @@ -538,9 +538,9 @@ component { for( keyName in keys ){ key = keys[ keyName ]; if ( key.fk_table eq arguments.foreignTableName and key.fk_column eq arguments.foreignColumnName ) { - sql = adapter.getDropForeignKeySql( tableName = key.fk_table, foreignKeyName = keyName ); + dropSql = adapter.getDropForeignKeySql( tableName = key.fk_table, foreignKeyName = keyName ); - _runSql( sql = sql, dsn = arguments.dsn ); + _runSql( sql = dropSql, dsn = arguments.dsn ); } } } diff --git a/system/services/presideObjects/SqlSchemaVersioning.cfc b/system/services/presideObjects/SqlSchemaVersioning.cfc index f4cd1f5eb8..2382a484ab 100644 --- a/system/services/presideObjects/SqlSchemaVersioning.cfc +++ b/system/services/presideObjects/SqlSchemaVersioning.cfc @@ -21,7 +21,7 @@ component singleton=true { var versionRecords = ""; var versionRecord = ""; - for( dsn in dsns ){ + for( dsn in arguments.dsns ){ _checkVersionsTableExistance( dsn = dsn ); versionRecords = _runSql( sql = "select entity_type, entity_name, parent_entity_name, version_hash from _preside_generated_entity_versions order by entity_type, parent_entity_name" diff --git a/tests/server.json b/tests/server.json index 47a5bf6c03..d9f931e14e 100644 --- a/tests/server.json +++ b/tests/server.json @@ -8,6 +8,9 @@ "port":"9999" } }, + "app":{ + "cfengine": "lucee@6.0.0-SNAPSHOT+556" + }, "JVM":{ "heapSize":"2048", "minHeapSize":"1024"