Beispiel #1
0
 std::string DeleteCommand::command() const {
     std::stringstream buf;
     buf<<"DELETE FROM "<<tablename();
     
     std::string e = exprStr();
     if (!e.empty()) {
         buf<<" "<<e;
     }
     
     return buf.str();
 }
Beispiel #2
0
void tst_QSqlDriver::record()
{
    QFETCH_GLOBAL(QString, dbName);
    QSqlDatabase db = QSqlDatabase::database(dbName);
    CHECK_DATABASE(db);

    QString tablename(qTableName("relTEST1", __FILE__));
    QStringList fields;
    fields << "id" << "name" << "title_key" << "another_title_key";

    //check we can get records using an unquoted mixed case table name
    QSqlRecord rec = db.driver()->record(tablename);
    QCOMPARE(rec.count(), 4);

    if (db.driverName().startsWith("QIBASE")|| db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2"))
        for(int i = 0; i < fields.count(); ++i)
            fields[i] = fields[i].toUpper();

    for (int i = 0; i < fields.count(); ++i)
        QCOMPARE(rec.fieldName(i), fields[i]);

    if (db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2"))
        tablename = tablename.toUpper();
    else if (db.driverName().startsWith("QPSQL"))
        tablename = tablename.toLower();

    if(!db.driverName().startsWith("QODBC") && !db.databaseName().contains("PostgreSql")) {
        //check we can get records using a properly quoted table name
        rec = db.driver()->record(db.driver()->escapeIdentifier(tablename,QSqlDriver::TableName));
        QCOMPARE(rec.count(), 4);
    }

    for (int i = 0; i < fields.count(); ++i)
        QCOMPARE(rec.fieldName(i), fields[i]);

    if( db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2"))
        tablename = tablename.toLower();
    else if (db.driverName().startsWith("QPSQL"))
        tablename = tablename.toUpper();

    //check that we can't get records using incorrect tablename casing that's been quoted
    rec = db.driver()->record(db.driver()->escapeIdentifier(tablename,QSqlDriver::TableName));
    if (tst_Databases::isMySQL(db)
      || db.driverName().startsWith("QSQLITE")
      || db.driverName().startsWith("QTDS")
      || tst_Databases::isSqlServer(db)
      || tst_Databases::isMSAccess(db))
        QCOMPARE(rec.count(), 4); //mysql, sqlite and tds will match
    else
        QCOMPARE(rec.count(), 0);

}
Beispiel #3
0
void tst_QSqlDriver::primaryIndex()
{
    QFETCH_GLOBAL(QString, dbName);
    QSqlDatabase db = QSqlDatabase::database(dbName);
    CHECK_DATABASE(db);

    QString tablename(qTableName("relTEST1", __FILE__));
    //check that we can get primary index using unquoted mixed case table name
    QSqlIndex index = db.driver()->primaryIndex(tablename);
    QCOMPARE(index.count(), 1);

    if( db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2"))
        QCOMPARE(index.fieldName(0), QString::fromLatin1("ID"));
    else
        QCOMPARE(index.fieldName(0), QString::fromLatin1("id"));


    //check that we can get the primary index using a quoted tablename
    if( db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2"))
        tablename = tablename.toUpper();
    else if (db.driverName().startsWith("QPSQL"))
        tablename = tablename.toLower();

    if(!db.driverName().startsWith("QODBC") && !db.databaseName().contains("PostgreSql")) {
        index = db.driver()->primaryIndex(db.driver()->escapeIdentifier(tablename, QSqlDriver::TableName));
        QCOMPARE(index.count(), 1);
    }
    if( db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2"))
        QCOMPARE(index.fieldName(0), QString::fromLatin1("ID"));
    else
        QCOMPARE(index.fieldName(0), QString::fromLatin1("id"));



    //check that we can not get the primary index using a quoted but incorrect table name casing
    if( db.driverName().startsWith("QIBASE") || db.driverName().startsWith("QOCI") || db.driverName().startsWith("QDB2"))
        tablename = tablename.toLower();
    else if (db.driverName().startsWith("QPSQL"))
        tablename = tablename.toUpper();

    index = db.driver()->primaryIndex(db.driver()->escapeIdentifier(tablename, QSqlDriver::TableName));
    if (tst_Databases::isMySQL(db)
      || db.driverName().startsWith("QSQLITE")
      || db.driverName().startsWith("QTDS")
      || tst_Databases::isSqlServer(db)
      || tst_Databases::isMSAccess(db))
        QCOMPARE(index.count(), 1); //mysql will always find the table name regardless of casing
    else
        QCOMPARE(index.count(), 0);
}
Beispiel #4
0
int ModApiMainMenu::l_get_table_index(lua_State *L)
{
	GUIEngine* engine = getGuiEngine(L);
	assert(engine != 0);

	std::wstring tablename(narrow_to_wide(luaL_checkstring(L, 1)));
	GUITable *table = engine->m_menu->getTable(tablename);
	s32 selection = table ? table->getSelected() : 0;

	if (selection >= 1)
		lua_pushinteger(L, selection);
	else
		lua_pushnil(L);
	return 1;
}
Beispiel #5
0
status_t
SaveRules(const char *path, BObjectList<FilerRule> *ruleList)
{
	BEntry entry("/boot/home/config/settings/FilerRules");
	if (entry.Exists())
		entry.Remove();
	
	CppSQLite3DB db;
	db.open("/boot/home/config/settings/FilerRules");
	
	// While we could use other means of obtaining table names, this table is also
	// used for maintaining the order of the rules, which must be preserved
	DBCommand(db,"create table RuleList (ruleid int primary key, name varchar);",
				"PrefsWindow::SaveRules");
	
	BString command;
	
	for (int32 i = 0; i < ruleList->CountItems(); i++)
	{
		FilerRule *rule = ruleList->ItemAt(i);
		
		// Test table:
		// 0) Entry type (test vs action)
		// 1) type
		// 2) mode
		// 3) value
		// 4) attribute type (if Attribute test)
		// 5) attribute type public name (short description)
		// 6) attribute public name (if Attribute test)
		
		BString tablename(EscapeIllegalCharacters(rule->GetDescription()));
		
		command = "create table ";
		command << tablename 
			<< "(entrytype varchar, testtype varchar, testmode varchar, testvalue varchar,
				attrtype varchar, attrtypename varchar, attrpublicname varchar);";
		DBCommand(db,command.String(), "PrefsWindow::SaveRules");
		
		command = "insert into RuleList values(";
		command << i << ",'" << tablename << "');";
		DBCommand(db,command.String(), "PrefsWindow::SaveRules");
		
		for (int32 j = 0; j < rule->CountTests(); j++)
		{
			BMessage *test = rule->TestAt(j);
			if (!test)
				continue;
			
			BString name,mode,value,mimeType,typeName, attrType, attrName;
			test->FindString("name",&name);
			test->FindString("mode",&mode);
			test->FindString("value",&value);
			test->FindString("mimetype",&mimeType);
			test->FindString("typename",&typeName);
			test->FindString("attrtype",&attrType);
			test->FindString("attrname",&attrName);
			
			command = "insert into ";
			command << tablename << " values('test', '" << EscapeIllegalCharacters(name.String()) 
					<< "', '" << EscapeIllegalCharacters(mode.String())
					<< "', '" << EscapeIllegalCharacters(value.String())
					<< "', '" << EscapeIllegalCharacters(mimeType.String())
					<< "', '" << EscapeIllegalCharacters(typeName.String())
					<< "', '" << EscapeIllegalCharacters(attrName.String())
					<< "');";
			
			DBCommand(db,command.String(),"PrefsWindow::SaveRules:save test");
		}
		
		for (int32 j = 0; j < rule->CountActions(); j++)
		{
			BMessage *action = rule->ActionAt(j);
			if (!action)
				continue;
			
			BString name,value;
			action->FindString("name",&name);
			action->FindString("value",&value);
			
			command = "insert into ";
			command << tablename << " values('action', '" << EscapeIllegalCharacters(name.String()) 
					<< "', '"
					<< "', '" << EscapeIllegalCharacters(value.String())
					<< "', '', '', '');";
			DBCommand(db,command.String(),"PrefsWindow::SaveRules:save action");
		}
	}
	
	
	db.close();
	
	return B_OK;
}