haxetink / tink_sql

SQL embedded into Haxe
MIT License
54 stars 17 forks source link

Id<T> fails to cast to Int in haxe 4.2.2 #144

Open serjek opened 2 years ago

serjek commented 2 years ago

Example below compiles just fine (apart from deprecation warnings) in haxe 4.1.5 but fails to compile in 4.2.2 with following error:

src/MainMinimal.hx:38: lines 38-43 : error: tink.sql.Id<Room> should be Int
src/MainMinimal.hx:38: lines 38-43 : ... have: tink.Promise<Array<{ id: tink.sql.Id<...> }>>
src/MainMinimal.hx:38: lines 38-43 : ... want: tink.Promise<Array<{ id: Int }>>

Minimal example:

package;
import tink.sql.drivers.MySql;
import tink.sql.Types;
using tink.CoreApi;

typedef User = {
    @:primary @:autoIncrement @:optional final id:Id<User>;
}

typedef Room = {
    @:primary @:autoIncrement @:optional final id:Id<Room>;
    final user:Id<User>;
}

typedef MyData = {
    final user:Int;
    final id:Int;
}

@:tables(User,Room)
class Db extends tink.sql.Database {}

class MainMinimal {

    public static function main() new MainMinimal();

    var db:Db;
    public function new() {
        var driver:MySql = new MySql({
            user: 'root',
            password: '',
            host: '127.0.0.1',
            port: 3306
        });
        db = new Db('test', driver);

        test().eager();
    }

    public function test():Promise<Array<MyData>>
        return db.Room.select({
                id: Room.id,
                user: Room.user
            })
            .where(Room.id > 10)
            .all();
}
-cp src
-main MainMinimal
-dce full

-lib hxnodejs
-lib tink_sql

-js minimal.js
kevinresol commented 2 years ago

Can you try adding from Int to Id?

serjek commented 2 years ago

It didn't help, as welll as adding @:transitive to Id