For an exercise with uFFi i am try an C-Connector for MariaDB like
Garage or UBDC
As in "Unified FFI Februar 12 2020" I made Helper-classes:
FFILibrary subclass: #MariaDBLibC
FFIOpaqueObject subclass: #MariaDBHandle
MariaDBHandle >> unixModuleName [
^ '/usr/lib/x86_64-linux-gnu/libmariadb.so'
]
and a class
Object subclass: #MariaDBDriver
instanceVariableNames: 'connectionHandle'
"Accessors"
MariaDBDriver >> connectionHandle [ ^ connectionHandle ]
MariaDBDriver >> connectionHandle: aHandle [ connectionHandle := aHandle ]
MariaDBDriver class >> ffiLibrary [ ^ MariaDBLibC ]
"API Methods"
MariaDBDriver >> clientInfo [ ^ self class clientInfo ]
MariaDBDriver class >> clientInfo [
^ self ffiCall: #(String mysql_get_client_info(void))
]
For a first simple Test I choosed the c-api-funtion:
���const char * mysql_get_client_info(void )���
In Playground I executed:
driver := MariaDBDriver fromConnectionString:
'
mariaDB://localhost:5432/sodbxtest?&user=sodbxtest&password=sodbxtest'.
driver clientInfo inspect.
And I get the expected result: String ���10.2.9���
But the second test with c-api-funtcion fails
���MYSQL * mysql_init(NULL)���
MariaDBDriver >> init [
| aNullHandle |
aNullHandle := ExternalAddress null.
self connectionHandle: (self class init: aNullHandle).
]
MariaDBDriver class >> init: aNullHandle [
^ self ffiCall: #(MariaDBHandle * mysql_init(ExternalAddress aNullHandle)).
]
In Playground I again executed:
driver := MariaDBDriver fromConnectionString:
'
mariaDB://localhost:5432/sodbxtest?&user=sodbxtest&password=sodbxtest'.
driver init inspect.
" A call to an external function failed"
Any ideas what is wrong??
Thanks
Georg