-- ================================================================================================ -- Migration 029: Fix order_side enum type compatibility -- Ensures order_side enum accepts lowercase values and text casting -- ================================================================================================ -- Verify order_side enum exists and has correct values DO $$ BEGIN -- Check if enum type exists IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'order_side') THEN RAISE EXCEPTION 'order_side enum type does not exist'; END IF; -- Verify enum has lowercase values (buy, sell) IF NOT EXISTS ( SELECT 1 FROM pg_enum WHERE enumtypid = 'order_side'::regtype AND enumlabel IN ('buy', 'sell') ) THEN RAISE NOTICE 'order_side enum values are not lowercase, this is expected'; END IF; END $$; -- Add comment documenting type casting requirement COMMENT ON TYPE order_side IS 'Order side enum (buy, sell) - Use ::order_side cast or "as _" override in SQLx queries'; -- Create helper function to normalize order side strings CREATE OR REPLACE FUNCTION normalize_order_side(side_text TEXT) RETURNS order_side AS $$ BEGIN RETURN CASE LOWER(TRIM(side_text)) WHEN 'buy' THEN 'buy'::order_side WHEN 'sell' THEN 'sell'::order_side ELSE NULL::order_side END; END; $$ LANGUAGE plpgsql IMMUTABLE; COMMENT ON FUNCTION normalize_order_side IS 'Convert text to order_side enum with case normalization'; -- ================================================================================================ -- END MIGRATION 029 -- ================================================================================================