void prepareDataStructures() { const char* script[] = { "CREATE TABLE PLG$SRP (PLG$USER_NAME SEC$USER_NAME NOT NULL PRIMARY KEY, " "PLG$VERIFIER VARCHAR(128) CHARACTER SET OCTETS NOT NULL, " "PLG$SALT VARCHAR(32) CHARACTER SET OCTETS NOT NULL, " "PLG$COMMENT RDB$DESCRIPTION, PLG$FIRST SEC$NAME_PART, " "PLG$MIDDLE SEC$NAME_PART, PLG$LAST SEC$NAME_PART, " "PLG$ATTRIBUTES RDB$DESCRIPTION, " "PLG$ACTIVE BOOLEAN)" , "CREATE VIEW PLG$SRP_VIEW AS " "SELECT PLG$USER_NAME, PLG$VERIFIER, PLG$SALT, PLG$COMMENT, " " PLG$FIRST, PLG$MIDDLE, PLG$LAST, PLG$ATTRIBUTES, PLG$ACTIVE " "FROM PLG$SRP WHERE CURRENT_USER = '******' " " OR CURRENT_ROLE = '" ADMIN_ROLE "' OR CURRENT_USER = PLG$SRP.PLG$USER_NAME" , "GRANT ALL ON PLG$SRP to VIEW PLG$SRP_VIEW" , "GRANT SELECT ON PLG$SRP_VIEW to PUBLIC" , "GRANT UPDATE(PLG$VERIFIER, PLG$SALT, PLG$FIRST, PLG$MIDDLE, PLG$LAST, " " PLG$COMMENT, PLG$ATTRIBUTES) ON PLG$SRP_VIEW TO PUBLIC" , NULL }; Firebird::LocalStatus s; Firebird::ITransaction* ddlTran(att->startTransaction(&s, 0, NULL)); try { for (const char** sql = script; *sql; ++sql) { att->execute(&s, ddlTran, 0, *sql, SQL_DIALECT_V6, NULL, NULL, NULL, NULL); check(&s); } ddlTran->commit(&s); check(&s); } catch (const Firebird::Exception&) { if (ddlTran) { ddlTran->rollback(&s); } throw; } }
void prepareDataStructures() { const char* script[] = { "CREATE TABLE PLG$SRP (PLG$USER_NAME SEC$USER_NAME NOT NULL PRIMARY KEY, " "PLG$VERIFIER VARCHAR(128) CHARACTER SET OCTETS NOT NULL, " "PLG$SALT VARCHAR(32) CHARACTER SET OCTETS NOT NULL, " "PLG$COMMENT RDB$DESCRIPTION, PLG$FIRST SEC$NAME_PART, " "PLG$MIDDLE SEC$NAME_PART, PLG$LAST SEC$NAME_PART, " "PLG$ATTRIBUTES RDB$DESCRIPTION, " "PLG$ACTIVE BOOLEAN)" , "CREATE VIEW PLG$SRP_VIEW AS " "SELECT PLG$USER_NAME, PLG$VERIFIER, PLG$SALT, PLG$COMMENT, " " PLG$FIRST, PLG$MIDDLE, PLG$LAST, PLG$ATTRIBUTES, PLG$ACTIVE " "FROM PLG$SRP WHERE RDB$SYSTEM_PRIVILEGE(USER_MANAGEMENT) " " OR CURRENT_USER = PLG$SRP.PLG$USER_NAME" , "GRANT ALL ON PLG$SRP TO VIEW PLG$SRP_VIEW" , "GRANT SELECT ON PLG$SRP_VIEW TO PUBLIC" , "GRANT UPDATE(PLG$VERIFIER, PLG$SALT, PLG$FIRST, PLG$MIDDLE, PLG$LAST, " " PLG$COMMENT, PLG$ATTRIBUTES) ON PLG$SRP_VIEW TO PUBLIC" , "GRANT ALL ON PLG$SRP_VIEW TO SYSTEM PRIVILEGE USER_MANAGEMENT" , NULL }; Firebird::LocalStatus s; Firebird::CheckStatusWrapper statusWrapper(&s); Firebird::ITransaction* ddlTran(att->startTransaction(&statusWrapper, 0, NULL)); try { for (const char** s = script; *s; ++s) { const char* sql = *s; bool err = false; if (sql[0] == '*') { ++sql; err = true; } att->execute(&statusWrapper, ddlTran, 0, sql, SQL_DIALECT_V6, NULL, NULL, NULL, NULL); if (!err) check(&statusWrapper); } ddlTran->commit(&statusWrapper); check(&statusWrapper); } catch (const Firebird::Exception&) { if (ddlTran) { ddlTran->rollback(&statusWrapper); } throw; } }