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