Как я могу удалить все записи из таблицы с помощью squeryl?

3

Я рассмотрел способы использования squeryl для удаления всех записей из таблицы. Единственное, что я мог придумать, это

myTable.deleteWhere(r => r.id.isNotNull)  //id is the primary key

Это кажется странным и, возможно, неэффективным.

Каков самый чистый способ удалить все записи из таблицы при использовании squeryl?

  • 1
    Насчет эффективности - это может быть правдой, но зачем нам быстро удалять всю базу данных? Это кажется невозможным, чтобы быть узким местом.
  • 0
    @VasyaNovikov Ты прав. Я использую его для тестирования, поэтому хочу, чтобы он был быстрым, но, опять же, мне не нужно загружать данные для тестирования.
Теги:
squeryl

1 ответ

4
Лучший ответ

Предложение deleteWhere принимает любое логическое логическое значение, поэтому вы можете просто сказать:

myTable.deleteWhere(r => 1 === 1) 

Что должно выводить оператор:

DELETE FROM mytable WHERE 1 = 1

Если вы хотите автоматически исключить предложение where, вы можете попробовать:

myTable.deleteWhere(r => 1 === 1.inhibitWhen(true))

Что должно вообще подавлять предложение where.

Если вы ищете еще более эффективный метод, и ваша база данных поддерживает TRUNCATE или другую эквивалентную функцию, вы можете получить java.sql.Connection из org.squeryl.Session и выдать запрос непосредственно через JDBC. К сожалению, это потеряло бы некоторые из предложений безопасности Squeryl.

  • 0
    Спасибо за варианты, очень полезно. Странно, что нет deleteAll, или delete (EveryWhere), или что-то не так?
  • 0
    Да, есть несколько функций, которых я иногда удивляю, не существует. Тем не менее, он функционирует во всех системах баз данных - поэтому причина может иногда лежать. Поскольку обычно вы можете найти что-то, что работает или выполнить собственный SQL - я обычно могу обойти все, что отсутствует.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню