bool TestExtPdo::test_pdo_mysql() { CreateMySqlTestTable(); try { string source = "mysql:host="; string host = TEST_HOSTNAME; size_t pos = host.find(':'); if (pos != string::npos) { host.replace(pos, 1, ";port="); } source += host; source += ";dbname="; source += TEST_DATABASE; p_PDO dbh(NEWOBJ(c_PDO)()); dbh->t___construct(source.c_str(), TEST_USERNAME, TEST_PASSWORD, CREATE_MAP1(q_PDO$$ATTR_PERSISTENT, false)); Variant vstmt = dbh->t_prepare("select * from test"); c_PDOStatement *stmt = vstmt.toObject().getTyped<c_PDOStatement>(); VERIFY(stmt->t_execute()); Variant rs = stmt->t_fetch(q_PDO$$FETCH_ASSOC); VS(rs, CREATE_MAP2("id", "1", "name", "test")); rs = stmt->t_fetch(q_PDO$$FETCH_ASSOC); VS(rs, CREATE_MAP2("id", "2", "name", "test2")); } catch (Object &e) { VS(e, null); } return Count(true); }
logical pc_TopicFromOldStyle :: Setup_SDB_ValueList ( ) { PropertyHandle ref_dsc_class(GetDBHandle(),"ODS_Class",PI_Read); PropertyHandle sys_ident(GPH("sys_ident")); PropertyHandle V8("V8"); PropertyHandle sv; int32 indx0 = 0; logical term = NO; BEGINSEQ if ( !ref_dsc_class.Get(ExtractKey()) ) LEAVESEQ DBObjectHandle dbh(GetDBHandle()); PropertyHandle vl(dbh,"SDB_ValueList",PI_Write); sv = sys_ident + V8; if ( !vl.Provide(sv) ) ERROR pc_TopicFromOldStyle vlist(&vl); Setup_SDB_Resource(&ref_dsc_class); PH(&vl,values) pc_TopicFromOldStyle pc_values(&values); PH(&ref_dsc_class,val_descriptions); if ( !dict.IsValid() ) dict.Open(GetDBHandle()); PropertyHandle cs(dict,sys_ident.GetString(),PI_Read); while ( cs.Get(indx0++) ) { values.Add(*cs.GPH("string")); *values.GPH("__AUTOIDENT") = cs.GPH("value"); *values.GPH("type") = cs.GPH("type"); if ( val_descriptions.Get(*values.GPH("sys_ident")) ) pc_values.Setup_SDB_Resource(&val_descriptions); } RECOVER term = YES; ENDSEQ return(term); }
bool TestExtPdo::test_pdo_sqlite() { CreateSqliteTestTable(); try { string source = "sqlite:/tmp/foo.db"; p_PDO dbh(NEWOBJ(c_PDO)()); dbh->t___construct(source.c_str(), TEST_USERNAME, TEST_PASSWORD, CREATE_MAP1(q_PDO$$ATTR_PERSISTENT, false)); Variant vstmt = dbh->t_prepare("select * from foo"); c_PDOStatement *stmt = vstmt.toObject().getTyped<c_PDOStatement>(); VERIFY(stmt->t_execute()); Variant rs = stmt->t_fetch(q_PDO$$FETCH_ASSOC); VS(rs, CREATE_MAP1("bar", "ABC")); rs = stmt->t_fetch(q_PDO$$FETCH_ASSOC); VS(rs, CREATE_MAP1("bar", "DEF")); } catch (Object &e) { VS(e, null); } try { string source = "sqlite:/tmp/foo.db"; p_PDO dbh(NEWOBJ(c_PDO)()); dbh->t___construct(source.c_str(), TEST_USERNAME, TEST_PASSWORD, CREATE_MAP1(q_PDO$$ATTR_PERSISTENT, false)); Variant vstmt = dbh->t_query("select * from foo"); ArrayIter iter = vstmt.begin(); VERIFY(!iter.end()); VS(iter.first(), 0); VS(iter.second(), CREATE_MAP2("bar", "ABC", 0, "ABC")); iter.next(); VERIFY(!iter.end()); VS(iter.first(), 1); VS(iter.second(), CREATE_MAP2("bar", "DEF", 0, "DEF")); iter.next(); VERIFY(iter.end()); } catch (Object &e) { VS(e, null); } try { string source = "sqlite:/tmp/foo.db"; p_PDO dbh(NEWOBJ(c_PDO)()); dbh->t___construct(source.c_str(), TEST_USERNAME, TEST_PASSWORD, CREATE_MAP1(q_PDO$$ATTR_PERSISTENT, false)); dbh->t_query("CREATE TABLE IF NOT EXISTS foobar (id INT)"); dbh->t_query("INSERT INTO foobar (id) VALUES (1)"); Variant res = dbh->t_query("SELECT id FROM foobar LIMIT 1"); c_PDOStatement *stmt = res.toObject().getTyped<c_PDOStatement>(); Variant ret = stmt->t_fetch(); VS(ret["id"], "1"); } catch (Object &e) { VS(e, null); } CleanupSqliteTestTable(); return Count(true); }