postgresDriverValue function
Translates param into the typed representation expected by the PostgreSQL driver.
Implementation
Object? postgresDriverValue(SqlParam param) {
final native = param.value;
if (native is NativeSqlValue) {
return switch (native.type) {
PostgresValueType.inet => pg.TypedValue(
pg.Type.text,
native.value as String?,
),
PostgresValueType.textArray => pg.TypedValue(
pg.Type.textArray,
native.value as List<String>?,
),
PostgresValueType.integerArray => pg.TypedValue(
pg.Type.integerArray,
native.value as List<int>?,
),
};
}
final type = switch (param.type) {
SqlType.text => pg.Type.text,
SqlType.character => pg.Type.character,
SqlType.integer => pg.Type.integer,
SqlType.smallInteger => pg.Type.smallInteger,
SqlType.bigInteger => pg.Type.bigInteger,
SqlType.doublePrecision => pg.Type.double,
SqlType.numeric => pg.Type.numeric,
SqlType.boolean => pg.Type.boolean,
SqlType.timestamp => pg.Type.timestamp,
SqlType.timestamptz => pg.Type.timestampTz,
SqlType.date => pg.Type.date,
SqlType.time => pg.Type.time,
SqlType.interval => pg.Type.interval,
SqlType.json => pg.Type.json,
SqlType.jsonb => pg.Type.jsonb,
SqlType.uuid => pg.Type.uuid,
SqlType.byteArray => pg.Type.byteArray,
};
final value = param.value;
return pg.TypedValue(type, switch (param.type) {
SqlType.text || SqlType.character || SqlType.uuid => value as String?,
SqlType.integer ||
SqlType.smallInteger ||
SqlType.bigInteger => value as int?,
SqlType.doublePrecision => value as double?,
SqlType.boolean => value as bool?,
SqlType.timestamp || SqlType.date => value as DateTime?,
SqlType.timestamptz => (value as DateTime?)?.toUtc(),
SqlType.time => value as pg.Time?,
SqlType.interval => value as pg.Interval?,
SqlType.byteArray => switch (value) {
null => null,
Uint8List() => value,
List<int>() => Uint8List.fromList(value),
_ => throw TikalParameterException(
'bytea parameters must be a List<int>, got ${value.runtimeType}.',
),
},
SqlType.numeric || SqlType.json || SqlType.jsonb => value,
});
}