sqlc-dev / sqlc

Generate type-safe code from SQL
https://sqlc.dev
MIT License
13.54k stars 809 forks source link

Procedures in PSQL are not replaced #3587

Open DawnKosmos opened 2 months ago

DawnKosmos commented 2 months ago

Version

1.27.0

What happened?

While replacing a procedure in PSQL migration I noticed that SQLC generates the Procedures Struct using the old procedure parameter types somehow mixed with the new one, although the procedure is dropped in the code and re-created with a different schema.

Relevant log output

No response

Database schema

CREATE OR REPLACE PROCEDURE create_contract(
  p_location_id UUID,
  p_supplier_id UUID,
  p_contract_id UUID,
  p_account_id VARCHAR(31),
  p_country country_codes,
  p_has_medical_access BOOLEAN,
  p_organization_id UUID,
  p_group_id UUID,
  p_valid_from TIMESTAMP,
  p_valid_to TIMESTAMP,
  p_language VARCHAR(2),
  p_type VARCHAR(31),
  p_comment text
)
  LANGUAGE plpgsql
AS
$$
BEGIN
  INSERT INTO public.contracts (location_id,
                                supplier_id,
                                contract_id,
                                account_id,
                                country,
                                has_medical_access,
                                created_at,
                                updated_at,
                                deleted_at,
                                organization_id,
                                group_id,
                                valid_from,
                                valid_to,
                                language,
                                type,
                                comment)
  VALUES (p_location_id,
          p_supplier_id,
          p_contract_id,
          p_account_id,
          p_country,
          p_has_medical_access,
          now(),
          now(),
          null,
          p_organization_id,
          p_group_id,
          p_valid_from,
          p_valid_to,
          p_language,
          p_type,
          p_comment);
END;
$$;

SQL queries

-- name: CreateContract :exec
CALL create_contract(
  sqlc.arg(p_location_id),
  sqlc.arg(p_supplier_id),
  sqlc.arg(p_contract_id),
  sqlc.arg(p_account_id),
  sqlc.arg(p_country),
  sqlc.arg(p_has_medical_access),
  sqlc.arg(p_organization_id),
  sqlc.narg(group_id),
  sqlc.arg(p_valid_from),
  sqlc.arg(p_valid_to),
  sqlc.arg(p_language),
  sqlc.arg(p_type),
    sqlc.arg(p_comment)
);

Configuration

type CreateContractParams struct {
    PLocationID       uuid.UUID         `db:"p_location_id" json:"p_location_id"`
    PSupplierID       uuid.UUID         `db:"p_supplier_id" json:"p_supplier_id"`
    PContractID       uuid.UUID         `db:"p_contract_id" json:"p_contract_id"`
    PAccountID        string            `db:"p_account_id" json:"p_account_id"`
    PCountry          CountryCodes      `db:"p_country" json:"p_country"`
    PHasMedicalAccess bool              `db:"p_has_medical_access" json:"p_has_medical_access"`
    POrganizationID   bool             // TYPE SHOULD BE UUID
    GroupID           uuid.NullableUUID `db:"group_id" json:"group_id"`
    PValidFrom        bool              //TYPE SHOUDL BE pgtype.Timestamp
    PValidTo          pgtype.Timestamp  `db:"p_valid_to" json:"p_valid_to"`
    PLanguage         pgtype.Timestamp  // SHOULD BE TEXT
    PType             string            `db:"p_type" json:"p_type"`
    PComment          string            `db:"p_comment" json:"p_comment"`
}

Playground URL

No response

What operating system are you using?

macOS

What database engines are you using?

PostgreSQL

What type of code are you generating?

Go