maplibre/martin

Allow overloaded functions (name+param combinations)

Ouverte

#803 ouverte le 13 août 2023

 (0 commentaire) (0 réaction) (0 personne assignée)Rust (377 forks)auto 404
confighelp wantedpgrust

Métriques du dépôt

Stars
 (3 761 étoiles)
Métriques de merge PR
 (Métriques PR en attente)

Description

PR https://github.com/maplibre/martin/pull/543 adds a few more unit tests:

"MixedCase".function_dup(int, int, int)
"MixedCase"."function_Dup"(int, int, int)
"MixedCase".function_dup(int, int, int, json)
"MixedCase".function_dup(int, int, int, jsonb)

Martin should be able to create these with de-duplicated names, e.g. function_dup.1, function_dup.2, etc.

Implementation notes

  • The complex part is that configuration must be able to support multiple argument types. Config spec may need to be expanded, and we would need to support function argument parsing. Parsing should also do some basic PostgeSQL type normalization like int -> int4 and bigint -> int8
postgres:
  functions:
    function_source_id:
      schema: "public"
      # Idea 1: more ergonomic, but harder to implement:
      function: "function_zxy_query(int4, int4, int4)"
      # Idea 2: less ergonomic but simpler
      function: function_zxy_query
      args: ["int4", "int4", "int4"]
  • fn query_available_function(...) -> InfoMap<InfoMap<(PgSqlInfo, FunctionInfo)>>, which is a HashMap<String, HashMap<String, (PgSqlInfo, FunctionInfo)>> - in other words a map of schema name to a map of function name (unique) to all the data about the given function. In order to support multiple names, it would have to be changed to something like this: InfoMap<InfoMap<HashMap<Vec<String>, (PgSqlInfo, FunctionInfo)>>> (list of arguments is used as a key to arguments).

Guide contributeur