Size: a a a

Сrystal Lang — русскоговорящее сообщество

2021 August 13

СД

Сергей Деревянко... in Сrystal Lang — русскоговорящее сообщество
Как правильно мапить результат запроса с БД, ну тесть
db.query_one("select name,age from contacts", as: {String, Int32})
Если name или age по факту в БД NULL, то у меня рухнит все приложение если не обернуть в exctption?
Или лучше сразу ожидать возможный nil
db.query_one("select name,age from contacts", as: {String?, Int32?})
и после везде делать чекеры .not_nil! | .nil?
Поделитесь, кто как делает плз
источник

AB

Alexander B🔮 in Сrystal Lang — русскоговорящее сообщество
Ну второй вариант конечно. У тебя же в базе могут быть поля NULL
источник

AB

Alexander B🔮 in Сrystal Lang — русскоговорящее сообщество
Если ты знаешь заранее что поле не может быть NULL то и не ставь вопросик (если NOT NULL в таблице)
источник

AB

Alexander B🔮 in Сrystal Lang — русскоговорящее сообщество
А вообще, если такие вопросы возникают - почему не пользуешься какими нибудь ORM?
Описал в модели все поля и не паришься над простыми выборками
источник

СД

Сергей Деревянко... in Сrystal Lang — русскоговорящее сообщество
В ORM по сути все так же, если ты в модели укажешь что например age может быть nil, и в базу залетят записи с нилом, а потом нужно изменить age на обязательный аргумент, то и в модели нужно поменять на обязательный, и как быть со старыми записями ? Или в модели не указывать, и городить свои доп валидации ?
источник

AB

Alexander B🔮 in Сrystal Lang — русскоговорящее сообщество
Если уж такая ситуация возникнет - просто миграцию пишешь и забиваешь какими нибудь значениями
источник

AB

Alexander B🔮 in Сrystal Lang — русскоговорящее сообщество
Да и по большей части у тебя будут редко такие ситуации же.
обычно знаешь какие поля не будут пустыми логически. Или при создании записи забивать дефолтом или в базе проставить DEFAULT
источник

AB

Alexander B🔮 in Сrystal Lang — русскоговорящее сообщество
Я бы не парился вообще. Типы указал, если может быть нулл - то делаешь в коде проверку if age
Если что то не так - упало, посмотрел почему упало и починил или базу или код
источник

СД

Сергей Деревянко... in Сrystal Lang — русскоговорящее сообщество
Ну значение по дефолту можно, но это костыль, тут более правильно нужно делать невозможность обновления строки в базе без нового обязательного аргумента, но на чтение это не должно влиять(имею ввиду значение по умолчанию)
источник

СД

Сергей Деревянко... in Сrystal Lang — русскоговорящее сообщество
В новых стартапах, измимения флоу происходят очень часто, и это штатная ситуация, когда менятся правила валидации и даже типы
источник

Jøhn Đøꝩsøn in Сrystal Lang — русскоговорящее сообщество
Интересно почему в кристалле решили не избавиться от null'а вообще.
источник

СД

Сергей Деревянко... in Сrystal Lang — русскоговорящее сообщество
и что бы было ? undefined ? )
источник

Jøhn Đøꝩsøn in Сrystal Lang — русскоговорящее сообщество
Option<T>
источник

СД

Сергей Деревянко... in Сrystal Lang — русскоговорящее сообщество
что то не знакомое для меня (
источник

f

foi in Сrystal Lang — русскоговорящее сообщество
как в расте типа что ли
источник

AB

Alexander B🔮 in Сrystal Lang — русскоговорящее сообщество
Работал в многих стартапах.
Если у тебя правильная архитектура и ты все заранее спроектировал - такие случаи как изменения типа поля встречаются редко. Если и встречаются - решаются новой колонкой или, что более правильно - версионированием апи и поднятием версии протокола на клиенте.
источник

AB

Alexander B🔮 in Сrystal Lang — русскоговорящее сообщество
Ну и миграциями, естественно
источник

G

Gabben in Сrystal Lang — русскоговорящее сообщество
nil это тот-же None
источник

СД

Сергей Деревянко... in Сrystal Lang — русскоговорящее сообщество
Согласен, но бывают очееееень интересные заказчики, которые любят зайти на прямую в базу, и чего то там поменять )) Не хотелось бы в таких кейсах терпеть крах всего приложения
источник

Jøhn Đøꝩsøn in Сrystal Lang — русскоговорящее сообщество
nil не существует на уровне типов.
источник