Created
September 3, 2012 06:53
-
-
Save metametaclass/3607435 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
генерация документа, последовательность вызовов: | |
Запрос /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