int SM_Manager::Exec(const char *instr) { vector<string> argv; string cur; cout << instr << endl; for (int i = 0; ; i++) { if (instr[i] == ' ' || instr[i] == '(' || instr[i] == ')' || instr[i] == ',' || instr[i] == 0) { if (cur.length() > 0) { argv.push_back(cur); cur = ""; } if (instr[i] == 0){ break; } } else { cur = cur + instr[i]; } } if (argv.size() < 3) return -1; if (argv[0] == "CREATE" && argv[1] =="DATABASE") { CreateDb(argv[2].c_str()); return 0; } if (argv[0] == "DROP" && argv[1] == "DATABASE") { DropDb(argv[2].c_str()); return 0; } if (argv[0] == "USE" && argv[1] == "DATABASE") { CloseDb(); OpenDb(argv[2].c_str()); return 0; } if (argv[0] == "SHOW" && argv[1] == "DATABASE") { ShowDb(argv[2].c_str()); return 0; } if (argv[0] == "CREATE" && argv[1] == "TABLE") { string tablename = argv[2]; vector<AttrInfo> attrs; for (int i = 3; i < argv.size();) { AttrInfo attr; if (argv[i] == "PRIMARY" && argv[i + 1] == "KEY") { attr.primaryKey = true; i += 2; } cout << argv[i] << endl; strcpy(attr.attrName, argv[i].c_str()); i += 1; if (argv[i] == "int") { attr.attrType = MyINT; attr.attrLength = 4; i += 1; cout << "lala" << endl; } else if (argv[i] == "float") { attr.attrType = FLOAT; attr.attrLength = 4; i += 1; } else if (argv[i] == "char") { attr.attrType = STRING; attr.attrLength = atoi(argv[i + 1].c_str()); i += 2; } if (i + 1 < argv.size() && argv[i] == "NOT" && argv[i + 1] == "NULL") { attr.notNull = true; i += 2; } attrs.push_back(attr); } AttrInfo *x = new AttrInfo[attrs.size()]; for (int i = 0; i < attrs.size(); i++) x[i] = attrs[i]; CreateTable(tablename.c_str(), attrs.size(), x); delete x; return 0; } if (argv[0] == "DROP" && argv[1] == "TABLE") { DropTable(argv[2].c_str()); return 0; } if (argv[0] == "SHOW" && argv[1] == "TABLE") { ShowTable(argv[2].c_str()); return 0; } return 0; }
bool OpenDb(QString dbname,QString login,QString pwd,QString host) { QString admin_name; QString admin_pwd; QString sql; QSqlQuery *q; QString msg; MySqlLogin *mysql_login; // // Open Database // QSqlDatabase *db=QSqlDatabase::addDatabase(config->mysqlDbtype()); if(!db) { return false; } db->setDatabaseName(dbname); db->setUserName(login); db->setPassword(pwd); db->setHostName(host); if(!db->open()) { msg="Unable to access the Davit Database!\n\ Please enter a login for an account with\n\ administrative rights on the mySQL server,\n\ and we will try to get this straightened out."; mysql_login=new MySqlLogin(msg,&admin_name,&admin_pwd); if(mysql_login->exec()!=0) { delete mysql_login; db->removeDatabase(dbname); return false; } delete mysql_login; db->setUserName(admin_name); db->setPassword(admin_pwd); if(db->open()) { // Fixup DB Access Permsissions QMessageBox::warning(NULL,"Can't Connect", "Wrong access permissions for accessing mySQL!"); db->removeDatabase("mysql"); return false; } else { db->setDatabaseName("mysql"); if(!db->open()) { // mySQL is hosed -- scream and die. QMessageBox::warning(NULL,"Can't Connect", "Unable to connect to mySQL!"); db->removeDatabase("mysql"); return false; } else { // Create a new Davit Database q=new QSqlQuery(QString().sprintf("create database %s", (const char *)dbname)); if(!q->isActive()) { // Can't create DB. delete q; QMessageBox::warning(NULL,"Can't Create DB", "Unable to create a Davit Database!"); db->removeDatabase("mysql"); return false; } delete q; sql=QString().sprintf("insert into user set Host=\"localhost\",\ User=\"%s\",Password=PASSWORD(\"%s\")", (const char *)login,(const char *)pwd); q=new QSqlQuery(sql); delete q; sql=QString().sprintf("insert into user set Host=\"\",\ User=\"%s\",Password=PASSWORD(\"%s\")", (const char *)login,(const char *)pwd); q=new QSqlQuery(sql); delete q; sql=QString(). sprintf("insert into db set Host=\"%%\",Db=\"%s\",\ User=\"%s\",Select_priv=\"Y\",Insert_priv=\"Y\",Update_priv=\"Y\",\ Delete_priv=\"Y\",Create_priv=\"Y\",Drop_priv=\"Y\",\ Index_priv=\"Y\",Alter_priv=\"Y\"", (const char *)dbname,(const char *)login); q=new QSqlQuery(sql); delete q; q=new QSqlQuery("flush privileges"); delete q; db->close(); // Relinquish admin perms db->setDatabaseName(dbname); db->setUserName(login); db->setPassword(pwd); if(!db->open()) { // Can't open new database QMessageBox::warning(NULL,"Can't Connect", "Unable to connect to new Davit Database!"); db->removeDatabase(dbname); return false; } if(!CreateDb(login,pwd)) { // Can't create tables. QMessageBox::warning(NULL,"Can't Create", "Unable to create Davit Database!"); db->removeDatabase(dbname); return false; } db->close(); db->setDatabaseName(dbname); db->setUserName(login); db->setPassword(pwd); if(!db->open()) { QMessageBox::warning(NULL,"Can't Connect", "Unable to connect to Davit Database!"); db->removeDatabase(dbname); return false; } if(!InitDb(login,pwd)) { // Can't initialize tables. QMessageBox::warning(NULL,"Can't Initialize", "Unable to initialize Davit Database!"); db->removeDatabase(dbname); return false; } UpdateDb(DVT_VERSION_DATABASE); QMessageBox::information(NULL,"Created Database", "New Davit Database Created!"); return true; } } return false; } q=new QSqlQuery("select DB from VERSION"); if(!q->first()) { QMessageBox::warning(NULL,"Can't Access", "Unable to access Davit Database!"); db->removeDatabase(dbname); return false; } int ver=q->value(0).toInt(); delete q; if(ver<DVT_VERSION_DATABASE) { if(QMessageBox::warning(NULL,"Update Needed", "The Davit Database needs to be updated.\nContinue?", QMessageBox::Yes,QMessageBox::No)==QMessageBox::No) { db->removeDatabase(dbname); return false; } if(!UpdateDb(ver)) { QMessageBox::warning(NULL,"Can't Update", "Unable to update Davit Database!"); db->removeDatabase(dbname); return false; } msg=QString(). sprintf("The Davit Database has\nbeen updated to Version %d", DVT_VERSION_DATABASE); QMessageBox::information(NULL,"Database Updated",msg); } return true; }
CVoxSQLite::CVoxSQLite( const char* dbPathName ) { m_db.SetPathName( dbPathName ); CreateDb(); }
bool OpenDb(QString dbname,QString login,QString pwd, QString host,QString stationname,bool interactive) { // // Yeesh, this whole method really needs a rewrite! // They shoot horses, don't they?? // QString admin_name; QString admin_pwd; QString msg; QString str; QString sql; QSqlQuery *q; // // Open Database // QSqlDatabase *db=QSqlDatabase::addDatabase(admin_config->mysqlDriver()); if(!db) { return false; } db->setDatabaseName(dbname); db->setUserName(login); db->setPassword(pwd); db->setHostName(host); if(!db->open()) { RDKillDaemons(); PrintDbError(QObject::tr("Unable to open MySQL database connection."), interactive); } // // Identify DB // sql=QString("show tables"); q=new QSqlQuery(sql); if(q->first()) { delete q; sql=QString("select DB from VERSION"); q=new QSqlQuery(sql); if(q->first()) { if(q->value(0).toInt()!=RD_VERSION_DATABASE) { PrintDbError("Unsupported database version",interactive); } } else { PrintDbError("Database is corrupt",interactive); } } else { CreateDb(); InitDb(stationname); if(interactive) { QMessageBox::information(NULL,"RDAdmin - "+QObject::tr("DB Message"), QObject::tr("Created new Rivendell database.")); } } delete q; return true; }