Hello!

This testing code:

| databaseFile login accessor sqlString |
        databaseFile := Smalltalk imageDirectory asFileReference / 
'play.sqlite'.
        login := Login new
                        database: SQLite3Platform new;
                        host: '';
                        port: '';
                        username: '';
                        password: '';
                        databaseName: databaseFile fullPath asZnUrl asString;
                        yourself.
        accessor := DatabaseAccessor forLogin: login.
        accessor login.
        sqlString := 'SELECT * FROM AGENT'.
        (accessor basicExecuteSQLString: sqlString) contents inspect.

fails (Pharo 6.1, GarageGlorp #stable loaded a week ago as a project dependency) with:

Error: Unable to resolve external type: sqlite3

FFICallout(Object)>>error:
FFICallout>>resolveType:
FFICallout>>typeName:pointerArity:
FFICallout>>argName:indirectIndex:type:ptrArity:
FFIFunctionParser>>parseArgument
FFIFunctionParser>>parseArguments
FFIFunctionParser>>parseNamedFunction:
FFICalloutMethodBuilder>>parseSignature:
FFICalloutMethodBuilder>>generate
FFICalloutMethodBuilder>>build:
FFICalloutAPI>>function:module:
GASqlite3FFI(Object)>>ffiCall:module:
GASqlite3FFI>>apiErrorMessage:
GASqlite3FFI>>signal:with:on:
GASqlite3FFI>>checkForOk:on:
GASqlite3FFI>>prepare:on:with:
GASqlite3Statement>>prepare
GASqlite3Driver>>prepare:
GASqlite3ResultSet>>prepareStatement:
GASqlite3ResultSet>>execute:withCollection:
GASqlite3ResultSet>>execute:with:on:
GASqlite3Driver>>execute:with:
GASqlite3Driver>>execute:
GAGlorpDriver>>basicExecuteSQLString:
PharoDatabaseAccessor>>basicExecuteSQLString:
UndefinedObject>>DoIt
OpalCompiler>>evaluate
[..snip..]

Problem seems to be that in FFICallout >> resolveType:, the line

binding := resolver ffiBindingOf: name asSymbol.

actually produces nil, resolver being GASqlite3FFI class. If looking at the class side of GaSqlite3FFI, there is no ffiBindingOf: at all; there is

nbBindingOf: aTypeName
        ^ TypeMap at: aTypeName ifAbsent: [ super nbBindingOf: aTypeName ]

though. If I copy near-mindlessly and add:

ffiBindingOf: aTypeName
        ^ TypeMap at: aTypeName ifAbsent: [ super ffiBindingOf: aTypeName ]

then the code above fails correctly with: 'no such table: AGENT'.

Am I missing some nb<->ffi bridge? Or is there a bug in Garage SQLite driver?

Herby

Reply via email to