maplibre/martin

Allow overloaded functions (name+param combinations)

オープン

#803 opened on 2023/08/13

 (0 件のコメント) (0 件のリアクション) (0 人の担当者)Rust (377 件のフォーク)auto 404
confighelp wantedpgrust

Repository metrics

Stars
 (3,761 個のスター)
PR merge metrics
 (平均マージ 2d 16h) (30d で 78 merged PRs)

説明

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).

コントリビューターガイド