Skip to content

Commit

Permalink
PRESIDECMS-2713 use faster Lucee 6 dbinfo when available
Browse files Browse the repository at this point in the history
  • Loading branch information
zspitzer committed Sep 21, 2023
1 parent 33b313f commit 21494b5
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 11 deletions.
23 changes: 19 additions & 4 deletions system/services/database/DbInfoService.cfc
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ component {

// CONSTRUCTOR
public any function init() {
variables.hasModernDbInfo = structKeyExists( getTagData( "CF", "DBINFO" ).attributes, "filter" ); // Lucee 6
return this;
}

Expand All @@ -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;
}

Expand Down
12 changes: 6 additions & 6 deletions system/services/presideObjects/SqlSchemaSynchronizer.cfc
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ component {
}
_syncForeignKeys( objects );

for( dsn in dsns ){
for( var dsn in dsns ){
_setDatabaseObjectVersion(
entityType = "db"
, entityName = "db"
Expand Down Expand Up @@ -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 = "";
Expand All @@ -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();
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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 );
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion system/services/presideObjects/SqlSchemaVersioning.cfc
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
3 changes: 3 additions & 0 deletions tests/server.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@
"port":"9999"
}
},
"app":{
"cfengine": "[email protected]+556"
},
"JVM":{
"heapSize":"2048",
"minHeapSize":"1024"
Expand Down

0 comments on commit 21494b5

Please sign in to comment.