CREATE OR REPLACE FUNCTION find_product(
_id UUID,
_gtin VARCHAR(13),
_store_id UUID,
_name VARCHAR(255),
_weight VARCHAR(255),
_price INTEGER,
_brand VARCHAR(255),
_category VARCHAR(255)
)
RETURNS TABLE (
id UUID,
store_id UUID,
name VARCHAR(255),
price INTEGER,
weight VARCHAR(255),
expiration_date DATE,
category VARCHAR(255),
image_url VARCHAR(255),
brand VARCHAR(255),
gtin VARCHAR(13)
) AS $$
BEGIN
RETURN QUERY EXECUTE format(
'SELECT id, store_id, name, price, weight, expiration_date, category, image_url, brand, gtin
FROM products
WHERE (%L IS NULL OR id = %L) AND
(%L IS NULL OR gtin = %L) AND
(%L IS NULL OR store_id = %L) AND
(%L IS NULL OR name = %L) AND
(%L IS NULL OR weight = %L) AND
(%L IS NULL OR price = %L) AND
(%L IS NULL OR brand = %L) AND
(%L IS NULL OR category = %L)
LIMIT 1',
_id, _id,
_gtin, _gtin,
_store_id, _store_id,
_name, _name,
_weight, _weight,
_price, _price,
_brand, _brand,
_category, _category
);
END;
$$ LANGUAGE plpgsql;
The params and the return type are being created empty in go
type SelectProductParams struct {
FindProduct interface{}
FindProduct_2 interface{}
FindProduct_3 interface{}
FindProduct_4 interface{}
FindProduct_5 interface{}
FindProduct_6 interface{}
FindProduct_7 interface{}
FindProduct_8 interface{}
}
type SelectProductRow struct {
}