Hi, I have been trying to get glorp using active record working in pharo 5. I have a descriptor class for it and the classes inherit from active Record. I describe the table as: tableForAnswer: aTable | vistorId questionId | (aTable createFieldNamed: 'id' type: platform serial) bePrimaryKey. questionId := aTable createFieldNamed: 'questionId' type: platform integer. vistorId := aTable createFieldNamed: 'vistorId' type: platform integer. aTable createFieldNamed: 'answer' type: platform text. aTable addForeignKeyFrom: vistorId to: ((self tableNamed: 'VISITORS') fieldNamed: 'ID') suffixExpression: 'MATCH SIMPLE ON UPDATE NO ACTION ON DELETE CASCADE'. aTable addForeignKeyFrom: questionId to: ((self tableNamed: 'QUESTIONS') fieldNamed: 'ID') suffixExpression: 'MATCH SIMPLE ON UPDATE NO ACTION ON DELETE CASCADE' the table in the DB was preexisting. when I do Answer findAll I get and error that it is expecting a number for the id field. in the PostgresSQLPlaform serial is defined thusly. serial "For postgresql, we use sequences, and explicitly get the values ourselves, so just tell the database that they're integers." ^self typeNamed: #serial ifAbsentPut: [GlorpSerialType new typeString: 'integer']. What the DB hands back is 'nextval('answers_id_seq'::regclass)' which seems correct if it is telling me that there exists a sequence for this field and that is the correct command to issue for the field. am I defining this table incorrectly? or should I bag using active Record. I kind of liked it when working in Visualworks because there were also tools that would read in and describe the tables and then tools to assit when you needed to migrate to another version and do the changes etc. FYI this is the query that is being run that fails. SELECT t1.table_name, t1.table_schema, t1.column_name, t1.is_nullable, t1.data_type, t1.column_default, t1.character_maximum_length, EXISTS (SELECT DISTINCT 'x' FROM ((INFORMATION_SCHEMA.table_constraints s1t1 INNER JOIN INFORMATION_SCHEMA.key_column_usage s1t3 ON ((s1t1.table_name = s1t3.table_name) AND ((s1t1.table_schema = s1t3.table_schema) AND (s1t1.constraint_name = s1t3.constraint_name)))) INNER JOIN INFORMATION_SCHEMA.columns s1t2 ON (((s1t3.column_name = s1t2.column_name) AND (s1t3.table_schema = s1t2.table_schema)) AND (s1t3.table_name = s1t2.table_name))) WHERE ((s1t1.constraint_type = 'PRIMARY KEY') AND ((s1t2.column_name = t1.column_name) AND (((s1t2.table_schema = t1.table_schema) AND (s1t2.table_name = t1.table_name)) AND ((s1t2.table_schema = t1.table_schema) AND (s1t2.table_name = t1.table_name)))))) FROM INFORMATION_SCHEMA.columns t1 WHERE ((t1.table_name = 'answers') AND (t1.table_schema = 'public')) it looks as though it is reading in the schema and is expecting and integer because we told it to in the serial method on the PostgesSQLPlatform. As much as I love diving into these frameworks to figure out the deep inner workings, I really need to be getting data in and out without a fuss. Should I follow the DBX example where the descriptor is orthogonal to the model and one does not subclass from active record? I also note that not all the glorp tests pass. I think the were rather minor fails like timezone issues or something. It took a while but the test created a number of tables in the DB. So again Have I done something Obtuse that I qught to be slapped for here? thanks |
Free forum by Nabble | Edit this page |