Skip to content
This repository has been archived by the owner on Mar 18, 2019. It is now read-only.

Latest commit

 

History

History
94 lines (66 loc) · 4.33 KB

README.md

File metadata and controls

94 lines (66 loc) · 4.33 KB

English | Русский


pgfc

golang package для вызова функций postgresql

GoCard GitHub Release GitHub code size in bytes GitHub license

pgfc - golang package для выполнения в Postgresql запросов вида SELECT * FROM function(...) в случае, когда список и сигнатуры функций заранее неизвестны. Проект имеет целью создание универсальной прослойки между прикладными (SQL) разработчиками и разработчиками фронтендов.

Статус проекта: Реализован концепт

Использование

Postgresql

В БД должны быть созданы функции (код из конфигурации 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

Golang

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