Skip to content

Instantly share code, notes, and snippets.

@metametaclass
Created September 3, 2012 06:53
Show Gist options
  • Save metametaclass/3607435 to your computer and use it in GitHub Desktop.
Save metametaclass/3607435 to your computer and use it in GitHub Desktop.
генерация документа, последовательность вызовов:
Запрос /Generate/id-шаблона ; defroutes в FBRest.main
FBRest.document/generate-document ; просто транслятор вызова
FBRest.template/generate-document ; основная функция
FBRest.template/load-template ; загрузка шаблона и метаданных
FBRest.balans/tree3-template-get ; загрузка из БД записи шаблона
FBRest.balans/tree3-query-get ; три раза - строки, колонки, ячейки
FBRest.template/augment-metadata-db ;
FBRest.balans/calc-total-cells-and-elems ; итоговый документ - расчет суммарных ячеек
!!или!!
FBRest.balans/try-template-query-1 (:Cells template) ; обычный документ - генерация ячеек из запроса
FBRest.template/try-query-elements :Sections ; загрузка разделов
FBRest.balans/try-template-query-1 ; выполнение запроса и постобработки
FBRest.template/try-query-elements :Cols ; загрузка колонок
FBRest.balans/try-template-query-1
FBRest.template/try-query-elements :Rows ; загрузка строк
FBRest.balans/try-template-query-1
FBRest.balans/merge-sections-inners ; выстраивание структуры документа - колонки, строки, ячейки
; помещаются внутрь разделов (по ID раздела)
FBRest.template/convert-document ; конверсия полей документа в keywords
загрузка шаблона с клиента:
Запрос /Template
FBRest.template/get-template
FBRest.template/load-template
FBRest.template/tree3-template-get
FBRest.template/augment-metadata-db
FBRest.balans/convert-template
POST /Document ; сохранение нового документа
document/new-document
balans/check-term-invariant-fn ; проверка правильности периода в документе
balans/db-insert-new-document ; вставка нового документа
balans/check-duplicate ; проверка документа на дубликат (одинаковый вид+подразделение+пересечение периодов)
balans/insert-document ; вставка записи документа и возвращение ID
sql/insert-records :T3Versions ; новыая запись версии
balans/db-insert-sections ; вставка разделов
balans/db-insert-section ; вставка одного раздела
sql/insert-records :T3Sections ; вставка записи раздела
balans/db-insert-elements ; вставка элементов (строки-колонки)
balans/db-insert-cells ; вставка ячеек
balans/db-insert-cell ; вставка одной ячейки
cell-to-rec ; конверсия объект ячейки->запись для БД
sql/insert-records :T3Cells ; вставка записи ячейки в БД
detail-to-rec ; конверсия объект детализации ->запись для БД
sql/insert-record :T3CellDetails ; вставка записи детализации в БД
POST /Version ; сохранение новой версии
document/new-version
balans/check-term-invariant-fn ;
balans/db-insert-new-version ; вставка новой версии
balans/select-max-version
sql/insert-records :T3Versions
balans/db-insert-sections
PUT /Document ; сохранение последней версии документа
document/put-document
balans/check-term-invariant-fn ;
balans/db-put-document ; сохранение документа
balans/select-max-version
balans/db-put-version ; сохранение версии
balans/check-locked-version-status ; проверка на закрытость от изменения
select t3ver_status from T3Versions
select t3doc_status from T3Documents_UV
sql/update-values :T3Documents_UV ; изменение документа
balans/db-delete-sections ;удаление разделов и их вложенных частей
balans/db-insert-sections ;вставка разделов и внутренних частей
PUT /Version ; сохрание заданной версии
document/put-version
balans/check-term-invariant-fn ;
balans/db-put-version ; сохранение версии
Запросы, описанные в БД в таблице шаблонов или в метаданных, выполняются в функции balans/try-template-query-1:
(defn try-template-query-1
[q params concatf]
q -> ссылка на описание запроса
params -> параметры полученные с клиента (даты, подразделение, вид документа и проч)
concatf -> функция используемая для слияния нескольких результатов запросов в один результат.
По умолчанию (partial apply concat), т.е. конкатенация списка последовательностей в одну последовательность.
Описание запроса является хэш-мапом со следующими ключами:
:Query - обязательный. Функция, конвертирующая params в список из хэшмапов, каждый из которых описывает один запрос к БД,
его параметры и функцию пост-обработки результатов запроса.
:PostProcess - опциональный. При наличии - функция, получающая на вход список результаты отдельных запросов
(последовательность последовательностей) и функцию concatf. При отсутствии - concatf напрямую
применяется к списку результатов запросов (т.е. по умолчанию - объединяет это в одну последовательность результатов).
Хэш-мап - элемент списка, возвращаемый функцией :Query - содержит два ключа:
:SQL - вектор из текста SQL запроса и его параметров (то что подставляется на место ? в тексте, соответственно позиции).
Имеет такую структуру, т.к. именно она используется макросом clojure.java.jdbc/with-query-results,
непосредственно выполняющим запросы к БД. Параметры создаются из содержимого хэш-мапа params, получаемого в виде
параметра функции :Query
:Process - функция конверсии результата запроса (ленивая последовательность хэш-мапов записей) в интересующее нас
представление (разделы, элементы или ячейки). Результат этой функции и является элементом списка,
передаваемого в :PostProcess
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment