Отбросьте всю команду таблиц

R"(\bthis\b)" является исходным строковым литералом , а не литералом регулярного выражения, если вы об этом думаете. В C ++ нет литералов регулярных выражений, но std::regexp может быть сконструирован из массива символов или std::string.

Таким образом, вы можете просто сделать

string word = "this";
R"(\b)" + word + R"(\b)"

или, что эквивалентно используя простые старые строковые литералы

string word = "this";
"\\b" + word + "\\b"

Примечание: В обоих случаях результатом является std::string, потому что word является std::string. Это отличается от R"(\bword\b)", который представляет собой массив символов. На всякий случай разница имеет значение.

Слово предупреждения, хотя: содержание слова, вероятно, происходит извне программы. Вам нужно процитировать его, поскольку он может содержать символы, которые являются особыми в регулярных выражениях. В противном случае вы, вероятно, создаете уязвимость безопасности в своей программе. Вы должны быть в порядке для упражнений класса, которые никто, кроме вашего преподавателя, не будет смотреть, но лучше всего поместить в свой код строку, например

#warning "word" needs proper quoting to avoid security vulnerabilities

, если вы попытаетесь повторно использовать свои код через год, когда вы забыли об этой проблеме. Таким образом, компилятор вам напомнит.

78
задан Noah 14 February 2009 в 14:33
поделиться

4 ответа

rm db/development.sqlite3
34
ответ дан alamodey 6 November 2019 в 03:04
поделиться

Я не думаю, что можно отбросить все таблицы в одном хите, но можно сделать следующее для получения команд:

select 'drop table ' || name || ';' from sqlite_master
    where type = 'table';

вывод этого является сценарием, который отбросит таблицы для Вас. Для индексов просто замените таблицу индексом.

можно использовать другие пункты в эти where раздел для ограничения, какие таблицы или индексы выбраны (такой как" and name glob 'pax_*'" для тех, которые запускаются с "мира _").

Вы могли объединить создание этого сценария с выполнением его в простом ударе (или cmd.exe) сценарий, таким образом, существует только одна команда для выполнения.

, Если Вы не заботитесь о приблизительно никакой из информации в DB, я думаю, что можно просто удалить файл, в котором это хранится от жесткого диска - это, вероятно, быстрее. Я никогда не тестировал это, но я не вижу, почему это не работало бы.

75
ответ дан paxdiablo 6 November 2019 в 03:04
поделиться

В то время как это верно, что нет никакой команды DROP ALL TABLES, можно использовать следующий набор команд.

Примечание: Эти команды имеют потенциал для повреждения базы данных, поэтому удостоверьтесь, что у Вас есть резервное копирование

PRAGMA writable_schema = 1;
delete from sqlite_master where type in ('table', 'index', 'trigger');
PRAGMA writable_schema = 0;

, Вы затем хотите восстановить удаленное пространство с

VACUUM;

и хороший тест, чтобы удостовериться, что все в порядке

PRAGMA INTEGRITY_CHECK;
75
ответ дан Matt 6 November 2019 в 03:04
поделиться

После того как Вы отбросили все таблицы (и индексы исчезнут, когда таблица пойдет), затем нет ничего в базе данных SQLite насколько я знаю, хотя файл, кажется, не уменьшается (от быстрого теста, я просто сделал).

Настолько удаляющий файл, казалось бы, был бы самым быстрым - он должен просто быть воссоздан, когда Ваше приложение пытается получить доступ к файлу дб.

2
ответ дан Mike Woodhouse 6 November 2019 в 03:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: