#swift #grdb
#swift #grdb
Вопрос:
Мне нужно получить полный sql-запрос интерфейса запроса, чтобы сохранить их в пользовательских настройках по умолчанию, но я не смог найти эту функциональность
обновление: для получения полной строки запроса:
-
включая аргументы, которые были обрезаны sqlite для внедрения, вы не можете заменить эти аргументы вопросительным знаком вручную.
-
вы не можете получить реальное значение этих аргументов, потому что они являются частными
Ответ №1:
В trace
последней версии GRDB есть функция:
// Prints all SQL statements
var config = Configuration()
config.prepareDatabase { db in
db.trace { print($0) }
}
Комментарии:
1. Перейдите по ссылке в другом ответе, если вы не уверены, куда поместить приведенный выше код
Ответ №2:
Как мне распечатать запрос как SQL?В FAQ говорится:
Вы можете превратить свой запрос в экземпляр SQLRequest:
try dbQueue.read { db in let request = Wine .filter(Column("origin") == "Burgundy") .order(Column("price") let sqlRequest = try SQLRequest(db, request: request) print(sqlRequest.sql) // Prints SELECT * FROM wine WHERE origin = ? ORDER BY price print(sqlRequest.arguments) // Prints ["Burgundy"] }
Комментарии:
1. прежде всего, спасибо за ваш ответ. я знаю это, но для получения полной строки запроса, включающей аргументы, которые были обрезаны sqlite для внедрения, вы не можете заменить эти аргументы вопросительным знаком вручную. еще одним недостатком является то, что вы не можете достичь реального значения этих аргументов, потому что они являются частными
2. OK @nova. В следующий раз, когда вы будете задавать вопрос на SO, пожалуйста, убедитесь, что вы говорите то, что вы уже знаете, чтобы и вопрос, и ответы были лучше сфокусированы? Это поможет всем, а не только вам. Теперь ваш комментарий о чем-то другом. Я предлагаю вам задать другой вопрос или, если какая-то функция отсутствует, открыть выпуск Github.
3. Хороший момент. я обновлю вопрос, я не знал этого с того момента, когда задал вопрос.
Ответ №3:
Для более новых версий GRDB ответ другой.
взято из Как мне распечатать запрос как SQL?:
try dbQueue.read { db in
let request = Player.filter(Column("email") == "arthur@example.com")
let statement = try request.makePreparedRequest(db).statement
print(statement) // SELECT * FROM player WHERE email = ?
print(statement.arguments) // ["arthur@example.com"]
}