Формат pg-promise по умолчанию — не существует. Свойство равно null

Я хотел бы, чтобы функция formatting.formatValue преобразовывала undefined в null.

Но, похоже, нет способа установить функцию по умолчанию из initOptions, переданной pg-promise, поскольку pgFormatting является логическим значением, значение формата требует его в качестве аргумента. Но библиотека, похоже, не передает его для обычных запросов.

виталий-т написал

Но я не уверен, какую ценность это добавит, поскольку у вас нет доступа к параметрам форматирования из методов запроса.

И это правда. Но я просто хочу установить по умолчанию значение null для всех отсутствующих значений, форматируемых в запросы. Частичное не имеет значения, я не использую его?

Использование объединения, чтобы иметь «необязательные» значения в некоторых запросах, чтобы по умолчанию не устанавливать переменные в любом случае.

Пример:

UPDATE sometable SET value = COALESCE(${value}, value)

Как я могу перестать получать ошибку «Свойство не существует?

Я думаю, что мне нужен способ передать значение этим параметрам для всех вызовов формата.

if ('default' in options) {
    const d = options.default, value = typeof d === 'function' ? d.call(obj, v.name, obj) : d;
    return formatValue(value, v.fm, obj);
}

Связанная проблема, которая привела к созданию options.default. https://github.com/vitaly-t/pg-promise/issues/ 173

Я не могу переопределить функцию значения формата, поскольку она добавляется как ненастраиваемое свойство только для чтения.

Мне просто нужно стиснуть зубы и поместить переменные как нулевые везде, где я хочу, чтобы они были необязательными...


person Liam Mitchell    schedule 30.12.2017    source источник


Ответы (1)


Я просто хочу установить значение по умолчанию null для всех отсутствующих значений, форматируемых в запросы...

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

function format(query, values) {
    return pgp.as.format(query, values, {'default': null});
}

А для автоматически сгенерированных запросов в пространстве имен helpers вы должны предоставить значение для свойства def в соответствии с API Column.

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

Еще один подход — метод helpers.concat может потреблять параметры форматирования, так как реализует конкретный случай объединения запросов.

person vitaly-t    schedule 30.12.2017
comment
Вариант использования для запроса, в котором параметры могут иметь или не иметь установленное значение. Если установленное значение будет обновлено как есть, но неустановленное значение должно передать значение null, чтобы использовать текущее значение, которое находится в этой записи, из-за использования COALESCE(${value}, значение). Было бы неплохо иметь возможность установите его как параметр, чтобы эти методы запроса могли иметь поведение по умолчанию, не найденное для нулевого поведения. Почему вы можете считать, что это вообще не нужно? Мне кажется, что чего-то не хватает в методах запроса, которые можно сделать с помощью метода форматирования. Было бы странно вызывать метод форматирования дважды. - person Liam Mitchell; 05.01.2018
comment
@LiamMitchell На самом деле свойства могут отсутствовать только во время операций INSERT и UPDATE, для которых у вас есть методы в помощники. Во всех остальных случаях он особо не нужен. - person vitaly-t; 05.01.2018