diff --git a/models/Grammars/OracleGrammar.cfc b/models/Grammars/OracleGrammar.cfc index efcef544..f4f97f97 100644 --- a/models/Grammars/OracleGrammar.cfc +++ b/models/Grammars/OracleGrammar.cfc @@ -126,11 +126,7 @@ component extends="qb.models.Grammars.BaseGrammar" singleton { return "FROM DUAL"; } - var fullTable = arguments.tableName; - if ( query.getAlias() != "" ) { - fullTable &= " #query.getAlias()#"; - } - return "FROM " & wrapTable( fullTable ); + return "FROM " & wrapQueryTable( arguments.query ); } /** diff --git a/models/Query/QueryBuilder.cfc b/models/Query/QueryBuilder.cfc index 3a5879ae..534baa21 100644 --- a/models/Query/QueryBuilder.cfc +++ b/models/Query/QueryBuilder.cfc @@ -981,6 +981,7 @@ component displayname="QueryBuilder" accessors="true" extends="qb.models.Query.J // generate the derived table SQL this.fromRaw( getGrammar().wrapTable( "(#arguments.input.toSQL()#) AS #arguments.alias#" ) ); + variables.alias = arguments.alias; variables.grammarCompiledFrom = true; addBindings( arguments.input.getBindings(), "from" ); return this; diff --git a/tests/resources/querybuilder/AbstractQueryBuilderSourceSpec.cfc b/tests/resources/querybuilder/AbstractQueryBuilderSourceSpec.cfc index 451db0a3..50437d4b 100644 --- a/tests/resources/querybuilder/AbstractQueryBuilderSourceSpec.cfc +++ b/tests/resources/querybuilder/AbstractQueryBuilderSourceSpec.cfc @@ -50,6 +50,7 @@ component extends="tests.resources.querybuilder.AbstractQueryBuilderSubselectSpe .where( "age", ">=", "21" ); builder.fromSub( "u", derivedTable ); + expect( builder.getAlias() ).toBe( "u" ); }, fromDerivedTable() ); } ); @@ -60,6 +61,7 @@ component extends="tests.resources.querybuilder.AbstractQueryBuilderSubselectSpe .from( "users" ) .where( "age", ">=", "21" ); } ); + expect( builder.getAlias() ).toBe( "u" ); }, fromDerivedTable() ); } ); diff --git a/tests/specs/Query/Abstract/BuilderSelectSpec.cfc b/tests/specs/Query/Abstract/BuilderSelectSpec.cfc index 212e7514..6c97b701 100644 --- a/tests/specs/Query/Abstract/BuilderSelectSpec.cfc +++ b/tests/specs/Query/Abstract/BuilderSelectSpec.cfc @@ -315,6 +315,14 @@ component extends="testbox.system.BaseSpec" { } ); describe( "setGrammar()", function() { + it( "tracks a derived table alias", function() { + query.fromSub( "active_users", function( subquery ) { + subquery.from( "users" ); + } ); + + expect( query.getAlias() ).toBe( "active_users" ); + } ); + it( "rejects grammar changes after compiling a derived table", function() { query.fromSub( "active_users", function( subquery ) { subquery.from( "users" );