On Wed, Jun 08, 2016 at 08:25:27PM +0200, Alistair Grant wrote: > > asking the session to login results in the following: > > UDBCSQLite3Connection(Object)>>doesNotUnderstand: #queryEncoding > > PharoDatabaseAccessor>>encoding > > GlorpSession>>loginIfError: > > GlorpSession>>login > > GlorpBookDescriptorSystem class>>getSession > > UndefinedObject>>DoIt
Interesting. Meaning none of Glorp's ~900 tests sends #login to a session object directly...? Ok, GlorpDatabaseLoginResource>>setUp looks like it asks the accessor to login. Transcript show: self class name asString, ' setUp'; cr. super setUp. self login: self class defaultLogin. accessor := DatabaseAccessor forLogin: login. accessor login. Looking around using Finder, seems this is how Glorp's test suite does the login. Try the following. It works on my computer. :-) I don't have the example book descriptor, so I'm reusing the test suite's. | workingDir dbName login accessor session | workingDir := SmalltalkImage current imagePath asFileReference parent fullName, FileSystem disk delimiter asString. dbName := 'sodbxtestu.db'. login := Login new database: UDBCSQLite3Platform new; host: workingDir; port: ''; username: ''; password: ''; databaseName: dbName; yourself. PharoDatabaseAccessor DefaultDriver: GlorpSQLite3Driver. accessor := PharoDatabaseAccessor forLogin: login. accessor login. [ session := GlorpSession new. session system: (GlorpDemoDescriptorSystem forPlatform: login database). session accessor: accessor. session beginTransaction. session inUnitOfWorkDo: [ | table row | table := session system tableNamed: 'GR_ADDRESS'. row := DatabaseRow newForTable: table. row at: (table fieldNamed: 'ID') put: 1. row at: (table fieldNamed: 'STREET') put: 'Alpha'. row at: (table fieldNamed: 'HOUSE_NUM') put: '300'. session writeRow: row ]. session commitTransaction. ] ensure: [ accessor logout ] After running the test suite, sodbxtestu.db contains the test schema but has no data. After running the above snippet: sqlite> select * from GR_ADDRESS; ID|STREET|HOUSE_NUM 1|Alpha|300 sqlite> (The snippet is still low level, because it creates the DatabaseRow object explicitly.) Just for kicks, I ran the snippet a second time and got this: GlorpDatabaseWriteError: UNIQUE constraint failed: GR_ADDRESS.ID > UDBCSQLite3BaseConnection>>queryEncoding > ^#'utf-8' If #queryEncoding is a Glorp-specific thing, then from an architectural purity perspective I prefer to not have this in UDBCSQLiteBaseConnection which is intended to be a thin layer over the SQLite C API. Can you try the above method see if it works for you. Pierce