coldbox-modules / quick

A ColdBox ORM Engine
https://quick.ortusbooks.com
MIT License
23 stars 19 forks source link

Migrate from retrieveQuery to asQuery - object type returned from asQuery not accepted where object type returned from retrieveQuery is accepted. #226

Open davidAtInleague opened 1 year ago

davidAtInleague commented 1 year ago

quick 6.2.1

The following example demonstrates a pattern of using Quick to build some (arbitrarily complicated and reusable) where clause, and then using that clause to drive a QB whereIn.

The result of retrieveQuery has been (and remains) fine here, but using the result of asQuery throws an exception.


getInstance("QueryBuilder@qb")
    .from("some_other_table")
    // ok
    .whereIn("ID", getInstance("User").someFilterScope().retrieveQuery().reselect("ID") )

    // fails with:
    // Invalid call of the function [compileSelect],
    // first Argument [query] is of invalid type,
    // Cannot cast Object type [Component quick.models.QuickBuilder] to a value of type [QueryBuilder]
    .whereIn("ID", getInstance("User").someFilterScope().asQuery().reselect("ID") )
    .get()
elpete commented 1 year ago

Ah. I see why. You are passing a QuickBuilder instance into a QueryBuilder instance. It would work if they were both QuickBuilder instances.

I’m not sure how possible it will be to support passing in a QuickBuilder to a QueryBuilder. This seems like a place where retrieveQuery is probably the right option, but I’ll keep this issue open in case inspiration strikes.