Skip to content

Commit

Permalink
Implement select methods
Browse files Browse the repository at this point in the history
  • Loading branch information
elpete committed Nov 28, 2016
1 parent fadb882 commit baa72a2
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 2 deletions.
4 changes: 4 additions & 0 deletions models/Query/Builder.cfc
Expand Up @@ -198,6 +198,10 @@ component displayname="Builder" {
return where( argumentCollection = arguments );
}

public Expression function raw( required string sql ) {
return new quick.models.Query.Expression( sql );
}

// Accessors

public boolean function getDistinct() {
Expand Down
11 changes: 11 additions & 0 deletions models/Query/Expression.cfc
@@ -0,0 +1,11 @@
component displayname="Expression" {

function init( required string sql ) {
variables.sql = arguments.sql;
}

function getSQL() {
return sql;
}

}
28 changes: 26 additions & 2 deletions models/Query/Grammars/Grammar.cfc
Expand Up @@ -23,11 +23,11 @@ component displayname="Grammar" implements="Quick.models.Query.Grammars.GrammarI

private string function compileColumns( required Quick.models.Query.Builder query, required array columns ) {
var select = query.getDistinct() ? "SELECT DISTINCT " : "SELECT ";
return select & arrayToList( columns );
return select & columns.map( wrapColumn ).toList( ", " );
}

private string function compileFrom( required Quick.models.Query.Builder query, required string from ) {
return "FROM " & from;
return "FROM " & wrapTable( from );
}

private string function compileJoins( required Quick.models.Query.Builder query, required array joins ) {
Expand Down Expand Up @@ -97,4 +97,28 @@ component displayname="Grammar" implements="Quick.models.Query.Grammars.GrammarI
return item != "";
} ), " " );
}

private string function wrapTable( required any table ) {
return table.listToArray( "." ).map( wrapValue ).toList( "." );
}

private string function wrapColumn( required any column ) {
if ( isInstanceOf( column, "quick.models.Query.Expression" ) ) {
return column.getSQL();
}
var alias = "";
if ( column.find( "as" ) ) {
alias = column.listToArray( " as ", false, true )[ 2 ];
column = column.listToArray( " as ", false, true )[ 1 ];
}
column = column.listToArray( "." ).map( wrapValue ).toList( "." );
return alias == "" ? column : column & " AS " & wrapValue( alias );
}

private string function wrapValue( required any value ) {
if ( value == "*" ) {
return value;
}
return """#value#""";
}
}

0 comments on commit baa72a2

Please sign in to comment.