English | Русский
golang package для вызова функций postgresql
pgfc - golang package для выполнения в Postgresql запросов вида SELECT * FROM function(...)
в случае, когда список и сигнатуры функций заранее неизвестны.
Проект имеет целью создание универсальной прослойки между прикладными (SQL) разработчиками и разработчиками фронтендов.
Статус проекта: Реализован концепт
В БД должны быть созданы функции (код из конфигурации pgfc):
IndexFunc string `long:"db_index" default:"index" description:"Available functions list"`
InDefFunc string `long:"db_indef" default:"func_args" description:"Argument definition function"`
OutDefFunc string `long:"db_outdef" default:"func_result" description:"Result row definition function"`
Эти функции используются для загрузки метаданных:
// SQLMethod is the SQL query for fetching method list via IndexFunc
// Results: err = rows.Scan(&r.Name, &r.Class, &r.Func, &r.Anno, &r.Sample, &r.Result, &r.IsRO, &r.IsSet, &r.IsStruct)
SQLMethod = "select code, nspname, proname, anno, sample, result, is_ro, is_set, is_struct from %s($1)"
// SQLInArgs is the SQL query for fetching method arguments definition via InDefFunc
// Results: err = rows.Scan(&r.Name, &r.Type, &r.Required, &r.Default, &r.Anno)
SQLInArgs = "select arg, type, required, def_val, anno from %s($1)"
// SQLOutArgs is the SQL query for fetching method results definition via OutDefFunc
// Results: err = rows.Scan(&r.Name, &r.Type, &r.Anno)
SQLOutArgs = "select arg, type, anno from %s($1)"
Пример реализации такого функционала - pomasql/rpc
db := pgfc.NewServer(dsn)
args := map[string]interface{}{
"arg1": "name",
"arg2": 1
}
rv, err := db.Call("method", args)
См. также: gin-pgfc.
TODO: example/simple.go
Наличие в БД функций для метаданных является вариантом ответов на следующие вопросы:
- как отличить служебную функцию от доступной извне?
- как, не меняя клиентов, изменить имя вызываемой извне функции?
- куда положить, для документации, комментарии к аргументам функций?
- куда положить, для документации, пример вызова функции?
- gin-pgfc - клей для gin-gonic
- apisite - фреймворк, использующий pgfc в шаблонах и внешних вызовах
- enfist - пример готового приложения
Лицензия MIT (MIT), см. LICENSE (неофициальный перевод, источник перевода, оригинал лицензии).
Copyright (c) 2018 Алексей Коврижкин lekovr+apisite@gmail.com