Как обработать недостающую возможность SQLite: disable triggers
?
У меня нет его, сохранил название триггеров для определенной таблицы.
Например, как я могу отбросить все триггеры?
Что Вы сделали бы?
Я написал очень простую функцию расширения, чтобы установить для логического значения значение true или false.
И функция для получения этого значения (GetAllTriggersOn ()).
С помощью этой функции я могу определить все свои триггеры, например:
CREATE TRIGGER tr_table1_update AFTER UPDATE ON TABLE1 WHEN GetAllTriggersOn()
BEGIN
-- ...
END
SQLite хранит информацию о схеме (мета) во встроенной таблице sqlite_master
.
Чтобы получить список доступных триггеров, используйте следующий запрос:
SELECT name FROM sqlite_master
WHERE type = 'trigger' -- AND tbl_name = 'a_table_name'
No. Боюсь, что нет.
Необходимо использовать динамический sql, чтобы использовать переменную для имени базы данных или столбца.
-121--4435061-Вы можете использовать этот тестовый код и сравнить результаты! Дио!
#include <vector>
#include <iostream>
#include <ctime>
using namespace std;;
struct AAA{
int n;
string str;
};
int main() {
const int BIG = 5000000;
vector <AAA> v;
for ( int i = 0; i < BIG; i++ ) {
AAA a = {i, "aaa"};
v.push_back( a );
}
clock_t now;
cout << "start" << endl;
int n = 0;
now = clock();
for(vector<AAA>::iterator it = v.begin(); it != v.end(); ++it) {
n += it->n;
}
cout << clock() - now << endl;
n = 0;
now = clock();
for(size_t i = 0; i < v.size(); ++i) {
n += v[i].n;
}
cout << clock() - now << endl;
getchar();
return n != 0;
}
-121--998075- Возможно, можно создать хранимые процедуры для их удаления и создания. Хорошо ли это для вас?