From 1bea29e1eaf31b351459eda4f1151147c62bb3ad Mon Sep 17 00:00:00 2001 From: ota-meshi Date: Sat, 21 Dec 2024 14:25:54 +0900 Subject: [PATCH 1/8] Use VitePress --- .github/workflows/ci.yml | 27 + .github/workflows/format.yml | 31 + .gitignore | 3 +- .prettierignore | 1 + .prettierrc | 4 + .vscode/settings.json | 14 + docs/404.html | 23 - docs/about/index.html | 55 - docs/advanced/index.html | 113 - docs/assets/css/0.styles.f0552284.css | 1 - docs/assets/img/cobertura.fa41cd2a.png | Bin 94862 -> 0 bytes docs/assets/img/erd.5706ef62.png | Bin 37089 -> 0 bytes .../img/html_coverage_report.a9aae4a3.png | Bin 161203 -> 0 bytes .../html_coverage_report_summary.210cec1a.png | Bin 24979 -> 0 bytes docs/assets/img/search.237d6f6a.svg | 1 - .../img/uroboroSQLformatter_logo.e177d254.png | Bin 23696 -> 0 bytes docs/assets/js/10.22b7d43c.js | 1 - docs/assets/js/11.4665ff3e.js | 1 - docs/assets/js/12.6188f08a.js | 1 - docs/assets/js/13.acec487d.js | 1 - docs/assets/js/14.be331bb2.js | 1 - docs/assets/js/15.59887967.js | 1 - docs/assets/js/16.9f524f2e.js | 1 - docs/assets/js/17.1725635b.js | 1 - docs/assets/js/18.87d8b0a6.js | 1 - docs/assets/js/19.4e6df05e.js | 1 - docs/assets/js/2.1c2c728d.js | 9 - docs/assets/js/20.72c3f69b.js | 1 - docs/assets/js/21.c4d6d3d3.js | 1 - docs/assets/js/22.e0bd7641.js | 1 - docs/assets/js/23.070897ad.js | 1 - docs/assets/js/24.407ffc8a.js | 1 - docs/assets/js/25.9a3cac1f.js | 1 - docs/assets/js/26.14e9e921.js | 1 - docs/assets/js/27.81102cb1.js | 1 - docs/assets/js/28.941c9a42.js | 1 - docs/assets/js/29.8096c2e9.js | 1 - docs/assets/js/3.534dd136.js | 1 - docs/assets/js/30.9f2c3224.js | 1 - docs/assets/js/31.0b4510c3.js | 1 - docs/assets/js/32.f111ce19.js | 1 - docs/assets/js/33.eb21ab3c.js | 3931 ----------------- docs/assets/js/34.92671a1d.js | 31 - docs/assets/js/4.5c7e912b.js | 1 - docs/assets/js/5.cf1e5692.js | 1 - docs/assets/js/6.09205619.js | 1 - docs/assets/js/7.b9204d54.js | 1 - docs/assets/js/8.2fa969e6.js | 1 - docs/assets/js/9.ee86939d.js | 1 - docs/assets/js/app.7438eacc.js | 14 - docs/background/el.html | 73 - docs/background/index.html | 242 - docs/basics/entity-api.html | 351 -- docs/basics/index.html | 94 - docs/basics/sql-file-api.html | 359 -- docs/basics/transaction.html | 158 - docs/configuration/connection-supplier.html | 81 - docs/configuration/dialect.html | 82 - docs/configuration/entity-handler.html | 96 - docs/configuration/index.html | 63 - docs/configuration/sql-agent-factory.html | 273 -- docs/configuration/sql-context-factory.html | 254 -- docs/configuration/sql-filter-manager.html | 82 - docs/configuration/sql-manager.html | 92 - docs/developer_guide/index.html | 70 - docs/developer_tools/index.html | 63 - docs/getting_started/entity-access.html | 133 - docs/getting_started/index.html | 156 - docs/getting_started/sql-file-access.html | 126 - docs/getting_started/sql-repl.html | 374 -- docs/index.html | 59 - docs/license/index.html | 71 - docs/why_uroborosql/index.html | 55 - package.json | 17 +- src/.vitepress/config.mjs | 201 + src/.vitepress/theme/index.mjs | 7 + src/.vitepress/theme/style.css | 68 + src/.vuepress/config.js | 115 - src/.vuepress/public/favicon.ico | Bin 1150 -> 0 bytes src/.vuepress/public/fonts/FontAwesome.otf | Bin 109688 -> 0 bytes .../public/fonts/fontawesome-webfont.eot | Bin 70807 -> 0 bytes .../public/fonts/fontawesome-webfont.svg | 655 --- .../public/fonts/fontawesome-webfont.ttf | Bin 142072 -> 0 bytes .../public/fonts/fontawesome-webfont.woff | Bin 83588 -> 0 bytes .../public/fonts/fontawesome-webfont.woff2 | Bin 66624 -> 0 bytes src/.vuepress/public/images/logo.png | Bin 95772 -> 0 bytes src/.vuepress/public/images/logo.svg | 14 - src/.vuepress/public/images/white_blank.png | Bin 1537 -> 0 bytes src/.vuepress/public/images/wp-index.jpg | Bin 136476 -> 0 bytes src/.vuepress/public/images/wp01.jpg | Bin 79395 -> 0 bytes src/.vuepress/public/images/wp02.jpg | Bin 57342 -> 0 bytes src/.vuepress/public/images/wp03.jpg | Bin 36552 -> 0 bytes src/.vuepress/public/images/wp04.jpg | Bin 44086 -> 0 bytes src/.vuepress/public/images/wp05.jpg | Bin 46841 -> 0 bytes src/.vuepress/public/images/wp06.jpg | Bin 96766 -> 0 bytes src/.vuepress/public/images/wp07.png | Bin 4741 -> 0 bytes .../sample/testReport/covertest/test01.html | 97 - .../testReport/covertest/test01_hash_1.html | 99 - .../sample/testReport/covertest/test02.html | 97 - .../sample/testReport/covertest/test03.html | 121 - .../testReport/example/select_test.html | 76 - .../sample/testReport/highlight.pack.js | 2 - .../public/sample/testReport/icon.png | Bin 26019 -> 0 bytes .../public/sample/testReport/index.html | 86 - .../sample/testReport/jquery-3.2.0.min.js | 4 - .../public/sample/testReport/sqlcov.js | 15 - .../sample/testReport/stupidtable.min.js | 4 - .../public/sample/testReport/style.css | 322 -- src/.vuepress/styles/index.styl | 9 - src/about/{README.md => index.md} | 17 +- src/advanced/{README.md => index.md} | 49 +- src/background/el.md | 143 +- src/background/{README.md => index.md} | 13 +- src/basics/entity-api.md | 97 +- src/basics/{README.md => index.md} | 55 +- src/basics/sql-file-api.md | 73 +- src/basics/transaction.md | 20 +- src/configuration/connection-supplier.md | 15 +- src/configuration/dialect.md | 19 +- src/configuration/entity-handler.md | 13 +- src/configuration/{README.md => index.md} | 14 +- src/configuration/sql-agent-factory.md | 21 +- src/configuration/sql-context-factory.md | 59 +- src/configuration/sql-filter-manager.md | 51 +- src/configuration/sql-manager.md | 61 +- src/developer_guide/{README.md => index.md} | 13 +- src/developer_tools/{README.md => index.md} | 13 +- src/getting_started/entity-access.md | 25 +- src/getting_started/{README.md => index.md} | 15 +- src/getting_started/sql-file-access.md | 37 +- src/getting_started/sql-repl.md | 47 +- src/{README.md => index.md} | 29 +- src/license/{README.md => index.md} | 13 +- {docs => src/public}/favicon.ico | Bin {docs => src/public}/fonts/FontAwesome.otf | Bin .../public}/fonts/fontawesome-webfont.eot | Bin .../public}/fonts/fontawesome-webfont.svg | 0 .../public}/fonts/fontawesome-webfont.ttf | Bin .../public}/fonts/fontawesome-webfont.woff | Bin .../public}/fonts/fontawesome-webfont.woff2 | Bin {docs => src/public}/images/logo.png | Bin {docs => src/public}/images/logo.svg | 0 {docs => src/public}/images/white_blank.png | Bin {docs => src/public}/images/wp-index.jpg | Bin {docs => src/public}/images/wp01.jpg | Bin {docs => src/public}/images/wp02.jpg | Bin {docs => src/public}/images/wp03.jpg | Bin {docs => src/public}/images/wp04.jpg | Bin {docs => src/public}/images/wp05.jpg | Bin {docs => src/public}/images/wp06.jpg | Bin {docs => src/public}/images/wp07.png | Bin .../sample/testReport/covertest/test01.html | 0 .../testReport/covertest/test01_hash_1.html | 0 .../sample/testReport/covertest/test02.html | 0 .../sample/testReport/covertest/test03.html | 0 .../testReport/example/select_test.html | 0 .../sample/testReport/highlight.pack.js | 0 .../public}/sample/testReport/icon.png | Bin .../public}/sample/testReport/index.html | 0 .../sample/testReport/jquery-3.2.0.min.js | 0 .../public}/sample/testReport/sqlcov.js | 0 .../sample/testReport/stupidtable.min.js | 0 .../public}/sample/testReport/style.css | 0 src/why_uroborosql/{README.md => index.md} | 13 +- 164 files changed, 864 insertions(+), 9765 deletions(-) create mode 100644 .github/workflows/ci.yml create mode 100644 .github/workflows/format.yml create mode 100644 .prettierignore create mode 100644 .prettierrc create mode 100644 .vscode/settings.json delete mode 100644 docs/404.html delete mode 100644 docs/about/index.html delete mode 100644 docs/advanced/index.html delete mode 100644 docs/assets/css/0.styles.f0552284.css delete mode 100644 docs/assets/img/cobertura.fa41cd2a.png delete mode 100644 docs/assets/img/erd.5706ef62.png delete mode 100644 docs/assets/img/html_coverage_report.a9aae4a3.png delete mode 100644 docs/assets/img/html_coverage_report_summary.210cec1a.png delete mode 100644 docs/assets/img/search.237d6f6a.svg delete mode 100644 docs/assets/img/uroboroSQLformatter_logo.e177d254.png delete mode 100644 docs/assets/js/10.22b7d43c.js delete mode 100644 docs/assets/js/11.4665ff3e.js delete mode 100644 docs/assets/js/12.6188f08a.js delete mode 100644 docs/assets/js/13.acec487d.js delete mode 100644 docs/assets/js/14.be331bb2.js delete mode 100644 docs/assets/js/15.59887967.js delete mode 100644 docs/assets/js/16.9f524f2e.js delete mode 100644 docs/assets/js/17.1725635b.js delete mode 100644 docs/assets/js/18.87d8b0a6.js delete mode 100644 docs/assets/js/19.4e6df05e.js delete mode 100644 docs/assets/js/2.1c2c728d.js delete mode 100644 docs/assets/js/20.72c3f69b.js delete mode 100644 docs/assets/js/21.c4d6d3d3.js delete mode 100644 docs/assets/js/22.e0bd7641.js delete mode 100644 docs/assets/js/23.070897ad.js delete mode 100644 docs/assets/js/24.407ffc8a.js delete mode 100644 docs/assets/js/25.9a3cac1f.js delete mode 100644 docs/assets/js/26.14e9e921.js delete mode 100644 docs/assets/js/27.81102cb1.js delete mode 100644 docs/assets/js/28.941c9a42.js delete mode 100644 docs/assets/js/29.8096c2e9.js delete mode 100644 docs/assets/js/3.534dd136.js delete mode 100644 docs/assets/js/30.9f2c3224.js delete mode 100644 docs/assets/js/31.0b4510c3.js delete mode 100644 docs/assets/js/32.f111ce19.js delete mode 100644 docs/assets/js/33.eb21ab3c.js delete mode 100644 docs/assets/js/34.92671a1d.js delete mode 100644 docs/assets/js/4.5c7e912b.js delete mode 100644 docs/assets/js/5.cf1e5692.js delete mode 100644 docs/assets/js/6.09205619.js delete mode 100644 docs/assets/js/7.b9204d54.js delete mode 100644 docs/assets/js/8.2fa969e6.js delete mode 100644 docs/assets/js/9.ee86939d.js delete mode 100644 docs/assets/js/app.7438eacc.js delete mode 100644 docs/background/el.html delete mode 100644 docs/background/index.html delete mode 100644 docs/basics/entity-api.html delete mode 100644 docs/basics/index.html delete mode 100644 docs/basics/sql-file-api.html delete mode 100644 docs/basics/transaction.html delete mode 100644 docs/configuration/connection-supplier.html delete mode 100644 docs/configuration/dialect.html delete mode 100644 docs/configuration/entity-handler.html delete mode 100644 docs/configuration/index.html delete mode 100644 docs/configuration/sql-agent-factory.html delete mode 100644 docs/configuration/sql-context-factory.html delete mode 100644 docs/configuration/sql-filter-manager.html delete mode 100644 docs/configuration/sql-manager.html delete mode 100644 docs/developer_guide/index.html delete mode 100644 docs/developer_tools/index.html delete mode 100644 docs/getting_started/entity-access.html delete mode 100644 docs/getting_started/index.html delete mode 100644 docs/getting_started/sql-file-access.html delete mode 100644 docs/getting_started/sql-repl.html delete mode 100644 docs/index.html delete mode 100644 docs/license/index.html delete mode 100644 docs/why_uroborosql/index.html create mode 100644 src/.vitepress/config.mjs create mode 100644 src/.vitepress/theme/index.mjs create mode 100644 src/.vitepress/theme/style.css delete mode 100644 src/.vuepress/config.js delete mode 100644 src/.vuepress/public/favicon.ico delete mode 100644 src/.vuepress/public/fonts/FontAwesome.otf delete mode 100644 src/.vuepress/public/fonts/fontawesome-webfont.eot delete mode 100644 src/.vuepress/public/fonts/fontawesome-webfont.svg delete mode 100644 src/.vuepress/public/fonts/fontawesome-webfont.ttf delete mode 100644 src/.vuepress/public/fonts/fontawesome-webfont.woff delete mode 100644 src/.vuepress/public/fonts/fontawesome-webfont.woff2 delete mode 100644 src/.vuepress/public/images/logo.png delete mode 100644 src/.vuepress/public/images/logo.svg delete mode 100644 src/.vuepress/public/images/white_blank.png delete mode 100644 src/.vuepress/public/images/wp-index.jpg delete mode 100644 src/.vuepress/public/images/wp01.jpg delete mode 100644 src/.vuepress/public/images/wp02.jpg delete mode 100644 src/.vuepress/public/images/wp03.jpg delete mode 100644 src/.vuepress/public/images/wp04.jpg delete mode 100644 src/.vuepress/public/images/wp05.jpg delete mode 100644 src/.vuepress/public/images/wp06.jpg delete mode 100644 src/.vuepress/public/images/wp07.png delete mode 100644 src/.vuepress/public/sample/testReport/covertest/test01.html delete mode 100644 src/.vuepress/public/sample/testReport/covertest/test01_hash_1.html delete mode 100644 src/.vuepress/public/sample/testReport/covertest/test02.html delete mode 100644 src/.vuepress/public/sample/testReport/covertest/test03.html delete mode 100644 src/.vuepress/public/sample/testReport/example/select_test.html delete mode 100644 src/.vuepress/public/sample/testReport/highlight.pack.js delete mode 100644 src/.vuepress/public/sample/testReport/icon.png delete mode 100644 src/.vuepress/public/sample/testReport/index.html delete mode 100644 src/.vuepress/public/sample/testReport/jquery-3.2.0.min.js delete mode 100644 src/.vuepress/public/sample/testReport/sqlcov.js delete mode 100644 src/.vuepress/public/sample/testReport/stupidtable.min.js delete mode 100644 src/.vuepress/public/sample/testReport/style.css delete mode 100644 src/.vuepress/styles/index.styl rename src/about/{README.md => index.md} (98%) rename src/advanced/{README.md => index.md} (87%) rename src/background/{README.md => index.md} (98%) rename src/basics/{README.md => index.md} (56%) rename src/configuration/{README.md => index.md} (95%) rename src/developer_guide/{README.md => index.md} (94%) rename src/developer_tools/{README.md => index.md} (81%) rename src/getting_started/{README.md => index.md} (98%) rename src/{README.md => index.md} (80%) rename src/license/{README.md => index.md} (88%) rename {docs => src/public}/favicon.ico (100%) rename {docs => src/public}/fonts/FontAwesome.otf (100%) rename {docs => src/public}/fonts/fontawesome-webfont.eot (100%) rename {docs => src/public}/fonts/fontawesome-webfont.svg (100%) rename {docs => src/public}/fonts/fontawesome-webfont.ttf (100%) rename {docs => src/public}/fonts/fontawesome-webfont.woff (100%) rename {docs => src/public}/fonts/fontawesome-webfont.woff2 (100%) rename {docs => src/public}/images/logo.png (100%) rename {docs => src/public}/images/logo.svg (100%) rename {docs => src/public}/images/white_blank.png (100%) rename {docs => src/public}/images/wp-index.jpg (100%) rename {docs => src/public}/images/wp01.jpg (100%) rename {docs => src/public}/images/wp02.jpg (100%) rename {docs => src/public}/images/wp03.jpg (100%) rename {docs => src/public}/images/wp04.jpg (100%) rename {docs => src/public}/images/wp05.jpg (100%) rename {docs => src/public}/images/wp06.jpg (100%) rename {docs => src/public}/images/wp07.png (100%) rename {docs => src/public}/sample/testReport/covertest/test01.html (100%) rename {docs => src/public}/sample/testReport/covertest/test01_hash_1.html (100%) rename {docs => src/public}/sample/testReport/covertest/test02.html (100%) rename {docs => src/public}/sample/testReport/covertest/test03.html (100%) rename {docs => src/public}/sample/testReport/example/select_test.html (100%) rename {docs => src/public}/sample/testReport/highlight.pack.js (100%) rename {docs => src/public}/sample/testReport/icon.png (100%) rename {docs => src/public}/sample/testReport/index.html (100%) rename {docs => src/public}/sample/testReport/jquery-3.2.0.min.js (100%) rename {docs => src/public}/sample/testReport/sqlcov.js (100%) rename {docs => src/public}/sample/testReport/stupidtable.min.js (100%) rename {docs => src/public}/sample/testReport/style.css (100%) rename src/why_uroborosql/{README.md => index.md} (96%) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..743e0cc --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,27 @@ +name: ci + +on: + push: + branches: [master] + pull_request: + branches: [master] + +jobs: + build-and-lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + - name: Install Packages + run: | + npm i -f + - name: Lint + run: | + # フォーマットをチェックします。 + # 失敗した場合は、npm run formatを実行するかしてください。 + # ローカル環境の構築が難しい場合は、GitHub Actions から Format ワークフローを起動すると解決するかもしれません。 + npm run lint + - name: Build + run: | + # ドキュメントをビルドしてリンク切れ等をチェックします。 + npm run build diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml new file mode 100644 index 0000000..96b70a2 --- /dev/null +++ b/.github/workflows/format.yml @@ -0,0 +1,31 @@ +name: 👔 Format + +on: + workflow_dispatch: null + +jobs: + format: + runs-on: ubuntu-latest + + steps: + - name: Checkout repo + uses: actions/checkout@v4 + - name: Setup node + uses: actions/setup-node@v4 + - name: Install deps + run: npm i -f + - name: Format + run: npm run format + - name: Commit + run: | + git config --local user.email "github-actions[bot]@users.noreply.github.com" + git config --local user.name "github-actions[bot]" + + git add . + if [ -z "$(git status --porcelain)" ]; then + echo "no formatting changed" + exit 0 + fi + git commit -m "chore: format" + git push + echo "pushed formatting changes https://github.com/$GITHUB_REPOSITORY/commit/$(git rev-parse HEAD)" diff --git a/.gitignore b/.gitignore index c2bffe8..12348fa 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ .DS_Store -.vscode Thumbs.db db.json *.log node_modules/ +/src/.vitepress/cache/ +/docs/ diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..27ef660 --- /dev/null +++ b/.prettierignore @@ -0,0 +1 @@ +src/public/sample/ \ No newline at end of file diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..222861c --- /dev/null +++ b/.prettierrc @@ -0,0 +1,4 @@ +{ + "tabWidth": 2, + "useTabs": false +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..579294b --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,14 @@ +{ + "[javascript]": { + "editor.formatOnSave": true, + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[css]": { + "editor.formatOnSave": true, + "editor.defaultFormatter": "esbenp.prettier-vscode" + }, + "[markdown]": { + "editor.formatOnSave": true, + "editor.defaultFormatter": "esbenp.prettier-vscode" + } +} \ No newline at end of file diff --git a/docs/404.html b/docs/404.html deleted file mode 100644 index f60a63a..0000000 --- a/docs/404.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - uroboroSQL - - - - - - - - - - - -

404

How did we get here?
- Take me home. -
- - - diff --git a/docs/about/index.html b/docs/about/index.html deleted file mode 100644 index ac84c05..0000000 --- a/docs/about/index.html +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - uroboroSQLについて | uroboroSQL - - - - - - - - - - - - - -

# uroboroSQLについて

# GitHub

https://github.com/future-architect/uroborosql (opens new window)

# リリースノート

バージョン リリース日 概要
v0.20.2 2020/10/29 バグフィックス
v0.20.1 2020/09/17 バグフィックス
v0.20.0 2020/08/25 バグフィックス
v0.19.0 2020/05/17 日付・時刻を文字列型のカラムで保持する場合のマッパーを追加 / 複数DB接続を考慮したAPIの改善 / InsertsTypeのデフォルトをBATCHへ変更
v0.18.2 2020/03/29 悲観的ロック例外時に、SQLExceptionの代わりに専用のPessimisticLockExceptionをスローするように変更
v0.17.1 2020/03/16 バグフィックス (v0.18.1 の修正を v0.17.0へバックポート)
v0.18.1 2020/03/15 バグフィックス
v0.18.0 2020/03/08 SqlAgent#savepointScopeメソッド追加 / SqlEntityQuery#selectメソッド, hintメソッド追加 / 式言語としてSpring Expression Language(SpEL)を利用可能に / バグフィックス
v0.17.0 2019/12/22 SqlAgent#truncateメソッドを追加
v0.16.0 2019/12/13 @VersionアノテーションでOptimisticLockSupplierを指定可能に / バグフィックス
v0.15.2 2019/12/13 バグフィックス
v0.15.1 2019/10/16 バグフィックス
v0.15.0 2019/10/11 SqlEntityUpdateによる条件指定の複数更新サポート / SqlAgent#updates, SqlAgent#updatesAndReturnの追加による一括更新追加 / バグフィックス
v0.14.0 2019/09/17 SqlEntityQueryで悲観ロックのサポート / SqlQuery#one,findOneの追加 / バグフィックス
v0.13.0 2019/04/26 REPLで使用しているjLineのバージョンを v2 から v3に変更。また依存関係をオプションに変更 / バグフィックス
v0.12.1 2019/04/12 バグフィックス
v0.12.0 2019/04/09 自動採番カラムを持つエンティティの挿入に対応 / エンティティによる検索で集約関数を提供 / バグフィックス
v0.11.1 2019/03/12 バグフィックス
v0.11.0 2019/03/11 エンティティによる検索で抽出条件の指定を可能に
v0.10.1 2019/02/07 SqlFluentにsqlIdとparam(String, Supplier)を追加 / バグフィックス
v0.10.0 2019/01/16 SqlAgent#insertsによる一括INSERT / バグフィックス
v0.9.0 2019/01/07 NioSqlManagerのファイル監視を設定可能に / バグフィックス
v0.8.2 2018/05/26 バグフィックス
v0.8.1 2018/04/26 バグフィックス
v0.8.0 2018/04/16 DialectによるDB製品対応 / CLOB/BLOB対応 / NioSqlMager追加 / etc.
v0.7.0 2018/03/10 バグフィックス
v0.6.1 2018/02/05 バグフィックス
v0.6.0 2018/01/31 自動パラメータバインド関数 API追加 / バグフィックス
v0.5.0 2017/12/13 Stream batch API追加 / SQL内の不要なカンマの除去
v0.4.0 2017/11/17 UroboroSQL ビルダーAPI追加 / CaseFormat初期値設定の追加 / etc.
v0.3.3 2017/10/31 バグフィックス
v0.3.2 2017/10/10 バグフィックス
v0.3.1 2017/10/02 バグフィックス
v0.3.0 2017/09/08 リファクタリング API
v0.2.0 2017/05/26 カバレッジレポート拡張 / SQL-REPL機能拡張 / ORMapper API 追加
v0.1.0 2017/03/09 初版リリース

See more info. Github releases (opens new window)

- - - diff --git a/docs/advanced/index.html b/docs/advanced/index.html deleted file mode 100644 index f3bf48d..0000000 --- a/docs/advanced/index.html +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - 高度な操作 | uroboroSQL - - - - - - - - - - - - - -

# 高度な操作

# SQLファイルの解決ルール

# 複数フォルダの指定

sqlフォルダはクラスパスから参照することが出来れば複数指定することが出来ます。

  • src/test/resources, src/main/resources の順にクラスパスに指定されている場合
src
-    ├─main
-    │   └─resources
-    │       └─sql
-    │           ├─department
-    │           │    ├─insert_department.sql
-    │           │    └─select_department.sql
-    │           └─employee
-    │                ├─insert_employee.sql
-    │                └─select_employee.sql
-    └─test
-        └─resources
-            └─sql
-                ├─department
-                │    ├─update_department.sql
-                │    └─delete_department.sql
-                └─employee
-                     ├─update_employee.sql
-                     └─select_employee.sql
-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

WARNING

SQLファイルのパスが重複している場合、クラスパス上で先にあるフォルダのSQLファイルが使用されます。

上記のフォルダ構成の場合、src/main/resources/sql/employee/select_employee.sqlsrc/test/resources/sql/employee/select_employee.sql がともに employee/select_employee として解決されますが、クラスパスとしてsrc/test/resourcesが先に指定されているため、src/test/resources/sql/employee/select_employee.sqlが使用されます。

# jarファイルの指定

SQLファイルはjarの中にリソースとして含めることもできます。
-その場合、リソースのルート直下のsqlフォルダをルートフォルダとした相対パスでSQLファイルを指定することができます。 -SQLファイルのルートフォルダ(初期値:sql)は変更することができます。
-変更方法の詳細は SQLファイルルートフォルダの設定 を参照してください。

# Dialectによるファイルパスの切り替え

NioSqlManagerImplSqlManagerとして指定した場合、Dialectによるファイルパスの切り替えが出来るようになります。 -詳しくはDB種類毎のファイルパス切り替えを参照してください。

# PostgreSQLのトランザクション内SQLエラー対応

PostgreSQLでは、1つのトランザクション内でSQLエラーが発生した場合、後続するSQL文はすべて無条件でエラーとなります。 -この状態はトランザクションに対してcommitもしくはrollbackを実行するまで続きます。

WARNING

エラーが発生している状態でcommitを実行しても実際にはrollbackされます

これはPostgreSQL固有の動作であり、通常は問題ない動作なのですが、テーブルロックエラーなどリトライ処理を行うケースで問題になります。 -(SQLのリトライについてはSQL実行のリトライを参照)
uroboroSQLではリトライ指定のあるSQL実行、かつ、PostgreSQL(より正確にはDialect#isRollbackToSavepointBeforeRetry()trueの場合)の場合にsavepointを使った部分ロールバックを行うことで -この問題に対応しています。
-具体的にはリトライ指定のあるSQL実行、かつ、PostgreSQLの場合はSQL実行の直前にリトライ用のsavepointを設定し、SQL実行が成功すればsavepointの解放、SQL実行が失敗した場合はリトライ用のsavepointまでロールバックを行います。

WARNING

リトライ指定のないSQL実行の場合はsavepointの設定は行われません。

リトライ指定のないSQLで上記と同様の動作を行う場合は以下のように実装してください。

agent.required(() -> { // トランザクション開始
-  agent.savepointScope(() -> {
-    // savepointScopeの開始
-    agent.update("example/insert_product")
-      .param("product_id", 1)
-      .count();
-  });
-  agent.savepointScope(() -> {
-    // 後続処理
-    int count = agent.update("department/insert_department")
-      .param("dept_no", 1)
-      .param("dept_name", "Sales")
-      .count();
-      ・・・
-  });
-});
-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# SQLカバレッジ ( uroborosql.sql.coverage )

これまでアプリケーション上の条件分岐はカバレッジツールを利用して網羅率を確認することができました。
-しかし、SQL文の条件分岐は実際にその分岐が通っているかどうかを確認する手段がなく、リリース後に初めて通った条件で不具合を発生させることがありました。
-この問題を解決するためにuroboroSQLでは、SQL文の条件分岐を集計してカバレッジレポートを行う機能を提供します。

SQLカバレッジはuroboroSQLを利用するアプリケーションの起動時オプションに

-Duroborosql.sql.coverage=true
-
1

を追加することで有効になります。
-SQLカバレッジを有効にするとアプリケーションが実行している間に実行されるSQLについて、カバレッジ情報が収集されます。
-カバレッジ情報の収集結果は標準ではtarget/coverage/sql-cover.xmlに出力されます。
-このファイルの場所や名前を変更したい場合は、起動時オプションに

-Duroborosql.sql.coverage.file=[出力ファイルパス]
-
1

を指定してください。

出力されたsql-cover.xmlをJenkinsのCobertura pluginなどのXMLレポートとして読み込むとSQLファイルのカバレッジレポートが参照できるようになります。

カバレッジレポート例

また0.2.0+より、uroboroSQLのみでHTMLレポートを出力することができるようになりました。
-起動時オプションに

-Duroborosql.sql.coverage=jp.co.future.uroborosql.coverage.reports.html.HtmlReportCoverageHandler
-
1

を指定することで本機能を利用することができます。

カバレッジ情報はデフォルトではtarget/coverage/sqlフォルダ配下に出力されます。
-出力先フォルダを変更した場合は、起動時オプションに

-Duroborosql.sql.coverage.dir=[出力フォルダパス]
-
1

を指定してください。

出力されたレポートのサンプルは下記を参照してください。

# サマリーページ

HTML Coverage Report Summary

# 詳細ページ

HTML Coverage Report

出力サンプル

# ログ出力

uroboroSQLではログ出力ライブラリとしてSLF4Jを使用しています。SLF4Jの詳細は公式のドキュメント (opens new window)を参照して下さい。
uroboroSQLで出力されるログ内容は以下表の通りです。

クラス名 TRACE DEBUG INFO WARN ERROR FATAL
AbstractAgent 変換前SQL 実行時SQL - - - -
DebugSqlFilter - パラメーター/
対象データ数/
実行結果
- - - -
IfNode - 評価式/
判定結果/
パラメーター
- - - -
Parameter - パラメーターの設定 - サブパラメーター値にNULLを設定 - -
SecretColumnSqlFilter - バッチ処理追加件数/
ストアドプロシージャ出力パラメーター
- - - -
SqlAgent ステートメントのクローズ 処理実行アナウンス/
リトライ実行アナウンス/
SQL実行時間
- - エラーメッセージ -
SqlContext - バッチ処理追加件数/
ストアドプロシージャ出力パラメーター
- - - -
SqlContextFactory - 定数パラメーター - 定数名の重複 エラーメッセージ -
SqlLoader SQL定義ファイルの読み込み完了 SQL定義ファイルの読み込み開始/読み込み中 - - デフォルトファイルパスの設定/
デフォルト拡張子/
空のSQLキャッシュの返却
-

# システムプロパティ

uroboroSQLではシステムプロパティを指定することで動作を変更することができます。

プロパティ名 説明 初期値
uroborosql.sql.coverage SQLカバレッジを出力するかどうかのフラグ。trueの場合はSQLカバレッジを出力します。
文字列としてjp.co.future.uroborosql.coverage.CoverageHandlerインタフェースの
実装クラスが設定された場合はそのクラスを利用してカバレッジの収集を行います。
なし
uroborosql.sql.coverage.file 指定されたPATH(ファイル)に SQLカバレッジのCobertura形式のxmlレポートを出力します。 ./target/coverage/sql-cover.xml
uroborosql.sql.coverage.dir 指定されたPATH(フォルダ)にSQLカバレッジのHTMLレポートを出力します。 ./target/coverage/sql
uroborosql.entity.cache.size Entityクラス情報のキャッシュサイズを指定します。
キャッシュサイズを超えるEntityクラスの読み込みがあった場合は古い情報から破棄されます。
30
- - - diff --git a/docs/assets/css/0.styles.f0552284.css b/docs/assets/css/0.styles.f0552284.css deleted file mode 100644 index 4fa2e7c..0000000 --- a/docs/assets/css/0.styles.f0552284.css +++ /dev/null @@ -1 +0,0 @@ -code[class*=language-],pre[class*=language-]{color:#ccc;background:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#2d2d2d}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.block-comment,.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#999}.token.punctuation{color:#ccc}.token.attr-name,.token.deleted,.token.namespace,.token.tag{color:#e2777a}.token.function-name{color:#6196cc}.token.boolean,.token.function,.token.number{color:#f08d49}.token.class-name,.token.constant,.token.property,.token.symbol{color:#f8c555}.token.atrule,.token.builtin,.token.important,.token.keyword,.token.selector{color:#cc99cd}.token.attr-value,.token.char,.token.regex,.token.string,.token.variable{color:#7ec699}.token.entity,.token.operator,.token.url{color:#67cdcc}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.inserted{color:green}.theme-default-content code{color:#476582;padding:.25rem .5rem;margin:0;font-size:.85em;background-color:rgba(27,31,35,.05);border-radius:3px}.theme-default-content code .token.deleted{color:#ec5975}.theme-default-content code .token.inserted{color:#3eaf7c}.theme-default-content pre,.theme-default-content pre[class*=language-]{line-height:1.4;padding:1.25rem 1.5rem;margin:.85rem 0;background-color:#282c34;border-radius:6px;overflow:auto}.theme-default-content pre[class*=language-] code,.theme-default-content pre code{color:#fff;padding:0;background-color:transparent;border-radius:0}div[class*=language-]{position:relative;background-color:#282c34;border-radius:6px}div[class*=language-] .highlight-lines{-webkit-user-select:none;-ms-user-select:none;user-select:none;padding-top:1.3rem;position:absolute;top:0;left:0;width:100%;line-height:1.4}div[class*=language-] .highlight-lines .highlighted{background-color:rgba(0,0,0,.66)}div[class*=language-] pre,div[class*=language-] pre[class*=language-]{background:transparent;position:relative;z-index:1}div[class*=language-]:before{position:absolute;z-index:3;top:.8em;right:1em;font-size:.75rem;color:hsla(0,0%,100%,.4)}div[class*=language-]:not(.line-numbers-mode) .line-numbers-wrapper{display:none}div[class*=language-].line-numbers-mode .highlight-lines .highlighted{position:relative}div[class*=language-].line-numbers-mode .highlight-lines .highlighted:before{content:" ";position:absolute;z-index:3;left:0;top:0;display:block;width:3.5rem;height:100%;background-color:rgba(0,0,0,.66)}div[class*=language-].line-numbers-mode pre{padding-left:4.5rem;vertical-align:middle}div[class*=language-].line-numbers-mode .line-numbers-wrapper{position:absolute;top:0;width:3.5rem;text-align:center;color:hsla(0,0%,100%,.3);padding:1.25rem 0;line-height:1.4}div[class*=language-].line-numbers-mode .line-numbers-wrapper br{-webkit-user-select:none;-ms-user-select:none;user-select:none}div[class*=language-].line-numbers-mode .line-numbers-wrapper .line-number{position:relative;z-index:4;-webkit-user-select:none;-ms-user-select:none;user-select:none;font-size:.85em}div[class*=language-].line-numbers-mode:after{content:"";position:absolute;z-index:2;top:0;left:0;width:3.5rem;height:100%;border-radius:6px 0 0 6px;border-right:1px solid rgba(0,0,0,.66);background-color:#282c34}div[class~=language-js]:before{content:"js"}div[class~=language-ts]:before{content:"ts"}div[class~=language-html]:before{content:"html"}div[class~=language-md]:before{content:"md"}div[class~=language-vue]:before{content:"vue"}div[class~=language-css]:before{content:"css"}div[class~=language-sass]:before{content:"sass"}div[class~=language-scss]:before{content:"scss"}div[class~=language-less]:before{content:"less"}div[class~=language-stylus]:before{content:"stylus"}div[class~=language-go]:before{content:"go"}div[class~=language-java]:before{content:"java"}div[class~=language-c]:before{content:"c"}div[class~=language-sh]:before{content:"sh"}div[class~=language-yaml]:before{content:"yaml"}div[class~=language-py]:before{content:"py"}div[class~=language-docker]:before{content:"docker"}div[class~=language-dockerfile]:before{content:"dockerfile"}div[class~=language-makefile]:before{content:"makefile"}div[class~=language-javascript]:before{content:"js"}div[class~=language-typescript]:before{content:"ts"}div[class~=language-markup]:before{content:"html"}div[class~=language-markdown]:before{content:"md"}div[class~=language-json]:before{content:"json"}div[class~=language-ruby]:before{content:"rb"}div[class~=language-python]:before{content:"py"}div[class~=language-bash]:before{content:"sh"}div[class~=language-php]:before{content:"php"}.custom-block .custom-block-title{font-weight:600;margin-bottom:-.4rem}.custom-block.danger,.custom-block.tip,.custom-block.warning{padding:.1rem 1.5rem;border-left-width:.5rem;border-left-style:solid;margin:1rem 0}.custom-block.tip{background-color:#f3f5f7;border-color:#42b983}.custom-block.warning{background-color:rgba(255,229,100,.3);border-color:#e7c000;color:#6b5900}.custom-block.warning .custom-block-title{color:#b29400}.custom-block.warning a{color:#2c3e50}.custom-block.danger{background-color:#ffe6e6;border-color:#c00;color:#4d0000}.custom-block.danger .custom-block-title{color:#900}.custom-block.danger a{color:#2c3e50}.custom-block.details{display:block;position:relative;border-radius:2px;margin:1.6em 0;padding:1.6em;background-color:#eee}.custom-block.details h4{margin-top:0}.custom-block.details figure:last-child,.custom-block.details p:last-child{margin-bottom:0;padding-bottom:0}.custom-block.details summary{outline:none;cursor:pointer}.arrow{display:inline-block;width:0;height:0}.arrow.up{border-bottom:6px solid #ccc}.arrow.down,.arrow.up{border-left:4px solid transparent;border-right:4px solid transparent}.arrow.down{border-top:6px solid #ccc}.arrow.right{border-left:6px solid #ccc}.arrow.left,.arrow.right{border-top:4px solid transparent;border-bottom:4px solid transparent}.arrow.left{border-right:6px solid #ccc}.theme-default-content:not(.custom){max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.theme-default-content:not(.custom){padding:2rem}}@media (max-width:419px){.theme-default-content:not(.custom){padding:1.5rem}}.table-of-contents .badge{vertical-align:middle}body,html{padding:0;margin:0;background-color:#fff}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:16px;color:#2c3e50}.page{padding-left:20rem}.navbar{z-index:20;right:0;height:3.6rem;background-color:#fff;box-sizing:border-box;border-bottom:1px solid #eaecef}.navbar,.sidebar-mask{position:fixed;top:0;left:0}.sidebar-mask{z-index:9;width:100vw;height:100vh;display:none}.sidebar{font-size:16px;background-color:#fff;width:20rem;position:fixed;z-index:10;margin:0;top:3.6rem;left:0;bottom:0;box-sizing:border-box;border-right:1px solid #eaecef;overflow-y:auto}.theme-default-content:not(.custom)>:first-child{margin-top:3.6rem}.theme-default-content:not(.custom) a:hover{text-decoration:underline}.theme-default-content:not(.custom) p.demo{padding:1rem 1.5rem;border:1px solid #ddd;border-radius:4px}.theme-default-content:not(.custom) img{max-width:100%}.theme-default-content.custom{padding:0;margin:0}.theme-default-content.custom img{max-width:100%}a{font-weight:500;text-decoration:none}a,p a code{color:#3eaf7c}p a code{font-weight:400}kbd{background:#eee;border:.15rem solid #ddd;border-bottom:.25rem solid #ddd;border-radius:.15rem;padding:0 .15em}blockquote{font-size:1rem;color:#999;border-left:.2rem solid #dfe2e5;margin:1rem 0;padding:.25rem 0 .25rem 1rem}blockquote>p{margin:0}ol,ul{padding-left:1.2em}strong{font-weight:600}h1,h2,h3,h4,h5,h6{font-weight:600;line-height:1.25}.theme-default-content:not(.custom)>h1,.theme-default-content:not(.custom)>h2,.theme-default-content:not(.custom)>h3,.theme-default-content:not(.custom)>h4,.theme-default-content:not(.custom)>h5,.theme-default-content:not(.custom)>h6{margin-top:-3.1rem;padding-top:4.6rem;margin-bottom:0}.theme-default-content:not(.custom)>h1:first-child,.theme-default-content:not(.custom)>h2:first-child,.theme-default-content:not(.custom)>h3:first-child,.theme-default-content:not(.custom)>h4:first-child,.theme-default-content:not(.custom)>h5:first-child,.theme-default-content:not(.custom)>h6:first-child{margin-top:-1.5rem;margin-bottom:1rem}.theme-default-content:not(.custom)>h1:first-child+.custom-block,.theme-default-content:not(.custom)>h1:first-child+p,.theme-default-content:not(.custom)>h1:first-child+pre,.theme-default-content:not(.custom)>h2:first-child+.custom-block,.theme-default-content:not(.custom)>h2:first-child+p,.theme-default-content:not(.custom)>h2:first-child+pre,.theme-default-content:not(.custom)>h3:first-child+.custom-block,.theme-default-content:not(.custom)>h3:first-child+p,.theme-default-content:not(.custom)>h3:first-child+pre,.theme-default-content:not(.custom)>h4:first-child+.custom-block,.theme-default-content:not(.custom)>h4:first-child+p,.theme-default-content:not(.custom)>h4:first-child+pre,.theme-default-content:not(.custom)>h5:first-child+.custom-block,.theme-default-content:not(.custom)>h5:first-child+p,.theme-default-content:not(.custom)>h5:first-child+pre,.theme-default-content:not(.custom)>h6:first-child+.custom-block,.theme-default-content:not(.custom)>h6:first-child+p,.theme-default-content:not(.custom)>h6:first-child+pre{margin-top:2rem}h1:focus .header-anchor,h1:hover .header-anchor,h2:focus .header-anchor,h2:hover .header-anchor,h3:focus .header-anchor,h3:hover .header-anchor,h4:focus .header-anchor,h4:hover .header-anchor,h5:focus .header-anchor,h5:hover .header-anchor,h6:focus .header-anchor,h6:hover .header-anchor{opacity:1}h1{font-size:2.2rem}h2{font-size:1.65rem;padding-bottom:.3rem;border-bottom:1px solid #eaecef}h3{font-size:1.35rem}a.header-anchor{font-size:.85em;float:left;margin-left:-.87em;padding-right:.23em;margin-top:.125em;opacity:0}a.header-anchor:focus,a.header-anchor:hover{text-decoration:none}.line-number,code,kbd{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}ol,p,ul{line-height:1.7}hr{border:0;border-top:1px solid #eaecef}table{border-collapse:collapse;margin:1rem 0;display:block;overflow-x:auto}tr{border-top:1px solid #dfe2e5}tr:nth-child(2n){background-color:#f6f8fa}td,th{border:1px solid #dfe2e5;padding:.6em 1em}.theme-container.sidebar-open .sidebar-mask{display:block}.theme-container.no-navbar .theme-default-content:not(.custom)>h1,.theme-container.no-navbar h2,.theme-container.no-navbar h3,.theme-container.no-navbar h4,.theme-container.no-navbar h5,.theme-container.no-navbar h6{margin-top:1.5rem;padding-top:0}.theme-container.no-navbar .sidebar{top:0}@media (min-width:720px){.theme-container.no-sidebar .sidebar{display:none}.theme-container.no-sidebar .page{padding-left:0}}@media (max-width:959px){.sidebar{font-size:15px;width:16.4rem}.page{padding-left:16.4rem}}@media (max-width:719px){.sidebar{top:0;padding-top:3.6rem;transform:translateX(-100%);transition:transform .2s ease}.page{padding-left:0}.theme-container.sidebar-open .sidebar{transform:translateX(0)}.theme-container.no-navbar .sidebar{padding-top:0}}@media (max-width:419px){h1{font-size:1.9rem}.theme-default-content div[class*=language-]{margin:.85rem -1.5rem;border-radius:0}}#app a.sidebar-link{font-size:15px}#app .page-edit,#app .page-nav,#app .theme-default-content:not(.custom){width:88%;max-width:1280px}#app .site-name{display:none}#nprogress{pointer-events:none}#nprogress .bar{background:#3eaf7c;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px #3eaf7c,0 0 5px #3eaf7c;opacity:1;transform:rotate(3deg) translateY(-4px)}#nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px}#nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border-color:#3eaf7c transparent transparent #3eaf7c;border-style:solid;border-width:2px;border-radius:50%;-webkit-animation:nprogress-spinner .4s linear infinite;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@-webkit-keyframes nprogress-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes nprogress-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.spinner[data-v-1bbcb91a]{width:40px;height:40px;margin:auto;-webkit-animation:sk-rotateplane-data-v-1bbcb91a 1.2s ease-in-out infinite;animation:sk-rotateplane-data-v-1bbcb91a 1.2s ease-in-out infinite}@-webkit-keyframes sk-rotateplane-data-v-1bbcb91a{0%{-webkit-transform:perspective(120px)}50%{-webkit-transform:perspective(120px) rotateY(180deg)}to{-webkit-transform:perspective(120px) rotateY(180deg) rotateX(180deg)}}@keyframes sk-rotateplane-data-v-1bbcb91a{0%{transform:perspective(120px) rotateX(0deg) rotateY(0deg);-webkit-transform:perspective(120px) rotateX(0deg) rotateY(0deg)}50%{transform:perspective(120px) rotateX(-180.1deg) rotateY(0deg);-webkit-transform:perspective(120px) rotateX(-180.1deg) rotateY(0deg)}to{transform:perspective(120px) rotateX(-180deg) rotateY(-179.9deg);-webkit-transform:perspective(120px) rotateX(-180deg) rotateY(-179.9deg)}}.icon.outbound{color:#aaa;display:inline-block;vertical-align:middle;position:relative;top:-1px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.home{padding:3.6rem 2rem 0;max-width:960px;margin:0 auto;display:block}.home .hero{text-align:center}.home .hero img{max-width:100%;max-height:280px;display:block;margin:3rem auto 1.5rem}.home .hero h1{font-size:3rem}.home .hero .action,.home .hero .description,.home .hero h1{margin:1.8rem auto}.home .hero .description{max-width:35rem;font-size:1.6rem;line-height:1.3;color:#6a8bad}.home .hero .action-button{display:inline-block;font-size:1.2rem;color:#fff;background-color:#3eaf7c;padding:.8rem 1.6rem;border-radius:4px;transition:background-color .1s ease;box-sizing:border-box;border-bottom:1px solid #389d70}.home .hero .action-button:hover{background-color:#4abf8a}.home .features{border-top:1px solid #eaecef;padding:1.2rem 0;margin-top:2.5rem;display:flex;flex-wrap:wrap;align-items:flex-start;align-content:stretch;justify-content:space-between}.home .feature{flex-grow:1;flex-basis:30%;max-width:30%}.home .feature h2{font-size:1.4rem;font-weight:500;border-bottom:none;padding-bottom:0;color:#3a5169}.home .feature p{color:#4e6e8e}.home .footer{padding:2.5rem;border-top:1px solid #eaecef;text-align:center;color:#4e6e8e}@media (max-width:719px){.home .features{flex-direction:column}.home .feature{max-width:100%;padding:0 2.5rem}}@media (max-width:419px){.home{padding-left:1.5rem;padding-right:1.5rem}.home .hero img{max-height:210px;margin:2rem auto 1.2rem}.home .hero h1{font-size:2rem}.home .hero .action,.home .hero .description,.home .hero h1{margin:1.2rem auto}.home .hero .description{font-size:1.2rem}.home .hero .action-button{font-size:1rem;padding:.6rem 1.2rem}.home .feature h2{font-size:1.25rem}}.search-box{display:inline-block;position:relative;margin-right:1rem}.search-box input{cursor:text;width:10rem;height:2rem;color:#4e6e8e;display:inline-block;border:1px solid #cfd4db;border-radius:2rem;font-size:.9rem;line-height:2rem;padding:0 .5rem 0 2rem;outline:none;transition:all .2s ease;background:#fff url(/uroborosql-doc/assets/img/search.237d6f6a.svg) .6rem .5rem no-repeat;background-size:1rem}.search-box input:focus{cursor:auto;border-color:#3eaf7c}.search-box .suggestions{background:#fff;min-width:500px;max-width:700px;position:absolute;top:2rem;border:1px solid #cfd4db;border-radius:6px;padding:.4rem;list-style-type:none;max-height:calc(100vh - 5.6rem);overflow:scroll}.search-box .suggestions.align-right{right:0}.search-box .suggestion{line-height:1.4;border-radius:4px;cursor:pointer;width:100%}.search-box .suggestion a{display:block;white-space:normal;color:#415b75;width:100%}.search-box .suggestion a .parent-page-title{color:#fff;font-weight:600;background-color:#3eaf7c;padding:5px}.search-box .suggestion a .suggestion-row{border-collapse:collapse;width:100%;display:table}.search-box .suggestion a .suggestion-row .page-title{width:35%;background:#f5f5f5;border:1px solid #eaecef;border-left:none;display:table-cell;text-align:right;padding:5px;font-weight:600}.search-box .suggestion a .suggestion-row .suggestion-content{font-weight:400;border:1px solid #eaecef;border-right:none;width:65%;display:table-cell;padding:5px}.search-box .suggestion a .suggestion-row .suggestion-content .highlight{background-color:#ff0;font-weight:700}.search-box .suggestion a .suggestion-row .suggestion-content .header{font-weight:600}.search-box .suggestion.focused{background-color:#f3f4f5}@media (max-width:959px){.search-box input{cursor:pointer;width:0;border-color:transparent;position:relative}.search-box input:focus{cursor:text;left:0;width:10rem}}@media (-ms-high-contrast:none){.search-box input{height:2rem}}@media (max-width:959px) and (min-width:719px){.search-box .suggestions{left:0}}@media (max-width:719px){.search-box{margin-right:0}.search-box input{left:1rem}.search-box .suggestions{right:0}}@media (max-width:419px){.search-box .suggestions{width:calc(100vw - 4rem)}.search-box input:focus{width:8rem}}.sidebar-button{cursor:pointer;display:none;width:1.25rem;height:1.25rem;position:absolute;padding:.6rem;top:.6rem;left:1rem}.sidebar-button .icon{display:block;width:1.25rem;height:1.25rem}@media (max-width:719px){.sidebar-button{display:block}}.dropdown-enter,.dropdown-leave-to{height:0!important}.dropdown-wrapper{cursor:pointer}.dropdown-wrapper .dropdown-title,.dropdown-wrapper .mobile-dropdown-title{display:block;font-size:.9rem;font-family:inherit;cursor:inherit;padding:inherit;line-height:1.4rem;background:transparent;border:none;font-weight:500;color:#2c3e50}.dropdown-wrapper .dropdown-title:hover,.dropdown-wrapper .mobile-dropdown-title:hover{border-color:transparent}.dropdown-wrapper .dropdown-title .arrow,.dropdown-wrapper .mobile-dropdown-title .arrow{vertical-align:middle;margin-top:-1px;margin-left:.4rem}.dropdown-wrapper .mobile-dropdown-title{display:none;font-weight:600}.dropdown-wrapper .mobile-dropdown-title font-size inherit:hover{color:#3eaf7c}.dropdown-wrapper .nav-dropdown .dropdown-item{color:inherit;line-height:1.7rem}.dropdown-wrapper .nav-dropdown .dropdown-item h4{margin:.45rem 0 0;border-top:1px solid #eee;padding:1rem 1.5rem .45rem 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper{padding:0;list-style:none}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper .dropdown-subitem{font-size:.9em}.dropdown-wrapper .nav-dropdown .dropdown-item a{display:block;line-height:1.7rem;position:relative;border-bottom:none;font-weight:400;margin-bottom:0;padding:0 1.5rem 0 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active,.dropdown-wrapper .nav-dropdown .dropdown-item a:hover{color:#3eaf7c}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{content:"";width:0;height:0;border-left:5px solid #3eaf7c;border-top:3px solid transparent;border-bottom:3px solid transparent;position:absolute;top:calc(50% - 2px);left:9px}.dropdown-wrapper .nav-dropdown .dropdown-item:first-child h4{margin-top:0;padding-top:0;border-top:0}@media (max-width:719px){.dropdown-wrapper.open .dropdown-title{margin-bottom:.5rem}.dropdown-wrapper .dropdown-title{display:none}.dropdown-wrapper .mobile-dropdown-title{display:block}.dropdown-wrapper .nav-dropdown{transition:height .1s ease-out;overflow:hidden}.dropdown-wrapper .nav-dropdown .dropdown-item h4{border-top:0;margin-top:0;padding-top:0}.dropdown-wrapper .nav-dropdown .dropdown-item>a,.dropdown-wrapper .nav-dropdown .dropdown-item h4{font-size:15px;line-height:2rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem{font-size:14px;padding-left:1rem}}@media (min-width:719px){.dropdown-wrapper{height:1.8rem}.dropdown-wrapper.open .nav-dropdown,.dropdown-wrapper:hover .nav-dropdown{display:block!important}.dropdown-wrapper.open:blur{display:none}.dropdown-wrapper .nav-dropdown{display:none;height:auto!important;box-sizing:border-box;max-height:calc(100vh - 2.7rem);overflow-y:auto;position:absolute;top:100%;right:0;background-color:#fff;padding:.6rem 0;border:1px solid;border-color:#ddd #ddd #ccc;text-align:left;border-radius:.25rem;white-space:nowrap;margin:0}}.nav-links{display:inline-block}.nav-links a{line-height:1.4rem;color:inherit}.nav-links a.router-link-active,.nav-links a:hover{color:#3eaf7c}.nav-links .nav-item{position:relative;display:inline-block;margin-left:1.5rem;line-height:2rem}.nav-links .nav-item:first-child{margin-left:0}.nav-links .repo-link{margin-left:1.5rem}@media (max-width:719px){.nav-links .nav-item,.nav-links .repo-link{margin-left:0}}@media (min-width:719px){.nav-links a.router-link-active,.nav-links a:hover{color:#2c3e50}.nav-item>a:not(.external).router-link-active,.nav-item>a:not(.external):hover{margin-bottom:-2px;border-bottom:2px solid #46bd87}}.navbar{padding:.7rem 1.5rem;line-height:2.2rem}.navbar a,.navbar img,.navbar span{display:inline-block}.navbar .logo{height:2.2rem;min-width:2.2rem;margin-right:.8rem;vertical-align:top}.navbar .site-name{font-size:1.3rem;font-weight:600;color:#2c3e50;position:relative}.navbar .links{padding-left:1.5rem;box-sizing:border-box;background-color:#fff;white-space:nowrap;font-size:.9rem;position:absolute;right:1.5rem;top:.7rem;display:flex}.navbar .links .search-box{flex:0 0 auto;vertical-align:top}@media (max-width:719px){.navbar{padding-left:4rem}.navbar .can-hide{display:none}.navbar .links{padding-left:1.5rem}.navbar .site-name{width:calc(100vw - 9.4rem);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}}.page-edit{max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.page-edit{padding:2rem}}@media (max-width:419px){.page-edit{padding:1.5rem}}.page-edit{padding-top:1rem;padding-bottom:1rem;overflow:auto}.page-edit .edit-link{display:inline-block}.page-edit .edit-link a{color:#4e6e8e;margin-right:.25rem}.page-edit .last-updated{float:right;font-size:.9em}.page-edit .last-updated .prefix{font-weight:500;color:#4e6e8e}.page-edit .last-updated .time{font-weight:400;color:#767676}@media (max-width:719px){.page-edit .edit-link{margin-bottom:.5rem}.page-edit .last-updated{font-size:.8em;float:none;text-align:left}}.page-nav{max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.page-nav{padding:2rem}}@media (max-width:419px){.page-nav{padding:1.5rem}}.page-nav{padding-top:1rem;padding-bottom:0}.page-nav .inner{min-height:2rem;margin-top:0;border-top:1px solid #eaecef;padding-top:1rem;overflow:auto}.page-nav .next{float:right}.page{padding-bottom:2rem;display:block}.sidebar-group .sidebar-group{padding-left:.5em}.sidebar-group:not(.collapsable) .sidebar-heading:not(.clickable){cursor:auto;color:inherit}.sidebar-group.is-sub-group{padding-left:0}.sidebar-group.is-sub-group>.sidebar-heading{font-size:.95em;line-height:1.4;font-weight:400;padding-left:2rem}.sidebar-group.is-sub-group>.sidebar-heading:not(.clickable){opacity:.5}.sidebar-group.is-sub-group>.sidebar-group-items{padding-left:1rem}.sidebar-group.is-sub-group>.sidebar-group-items>li>.sidebar-link{font-size:.95em;border-left:none}.sidebar-group.depth-2>.sidebar-heading{border-left:none}.sidebar-heading{color:#2c3e50;transition:color .15s ease;cursor:pointer;font-size:1.1em;font-weight:700;padding:.35rem 1.5rem .35rem 1.25rem;width:100%;box-sizing:border-box;margin:0;border-left:.25rem solid transparent}.sidebar-heading.open,.sidebar-heading:hover{color:inherit}.sidebar-heading .arrow{position:relative;top:-.12em;left:.5em}.sidebar-heading.clickable.active{font-weight:600;color:#3eaf7c;border-left-color:#3eaf7c}.sidebar-heading.clickable:hover{color:#3eaf7c}.sidebar-group-items{transition:height .1s ease-out;font-size:.95em;overflow:hidden}.sidebar .sidebar-sub-headers{padding-left:1rem;font-size:.95em}a.sidebar-link{font-size:1em;font-weight:400;display:inline-block;color:#2c3e50;border-left:.25rem solid transparent;padding:.35rem 1rem .35rem 1.25rem;line-height:1.4;width:100%;box-sizing:border-box}a.sidebar-link:hover{color:#3eaf7c}a.sidebar-link.active{font-weight:600;color:#3eaf7c;border-left-color:#3eaf7c}.sidebar-group a.sidebar-link{padding-left:2rem}.sidebar-sub-headers a.sidebar-link{padding-top:.25rem;padding-bottom:.25rem;border-left:none}.sidebar-sub-headers a.sidebar-link.active{font-weight:500}.sidebar ul{padding:0;margin:0;list-style-type:none}.sidebar a{display:inline-block}.sidebar .nav-links{display:none;border-bottom:1px solid #eaecef;padding:.5rem 0 .75rem}.sidebar .nav-links a{font-weight:600}.sidebar .nav-links .nav-item,.sidebar .nav-links .repo-link{display:block;line-height:1.25rem;font-size:1.1em;padding:.5rem 0 .5rem 1.5rem}.sidebar>.sidebar-links{padding:1.5rem 0}.sidebar>.sidebar-links>li>a.sidebar-link{font-size:1.1em;line-height:1.7;font-weight:700}.sidebar>.sidebar-links>li:not(:first-child){margin-top:.75rem}@media (max-width:719px){.sidebar .nav-links{display:block}.sidebar .nav-links .dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{top:calc(1rem - 2px)}.sidebar>.sidebar-links{padding:1rem 0}}.badge[data-v-15b7b770]{display:inline-block;font-size:14px;height:18px;line-height:18px;border-radius:3px;padding:0 6px;color:#fff}.badge.green[data-v-15b7b770],.badge.tip[data-v-15b7b770],.badge[data-v-15b7b770]{background-color:#42b983}.badge.error[data-v-15b7b770]{background-color:#da5961}.badge.warn[data-v-15b7b770],.badge.warning[data-v-15b7b770],.badge.yellow[data-v-15b7b770]{background-color:#e7c000}.badge+.badge[data-v-15b7b770]{margin-left:5px}.theme-code-block[data-v-6d04095e]{display:none}.theme-code-block__active[data-v-6d04095e]{display:block}.theme-code-block>pre[data-v-6d04095e]{background-color:orange}.theme-code-group__nav[data-v-32c2d7ed]{margin-bottom:-35px;background-color:#282c34;padding-bottom:22px;border-top-left-radius:6px;border-top-right-radius:6px;padding-left:10px;padding-top:10px}.theme-code-group__ul[data-v-32c2d7ed]{margin:auto 0;padding-left:0;display:inline-flex;list-style:none}.theme-code-group__nav-tab[data-v-32c2d7ed]{border:0;padding:5px;cursor:pointer;background-color:transparent;font-size:.85em;line-height:1.4;color:hsla(0,0%,100%,.9);font-weight:600}.theme-code-group__nav-tab-active[data-v-32c2d7ed]{border-bottom:1px solid #42b983}.pre-blank[data-v-32c2d7ed]{color:#42b983} \ No newline at end of file diff --git a/docs/assets/img/cobertura.fa41cd2a.png b/docs/assets/img/cobertura.fa41cd2a.png deleted file mode 100644 index 6837d33e9ee2fa6379aadbbc99f42746bd2274c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 94862 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 diff --git a/docs/assets/img/erd.5706ef62.png b/docs/assets/img/erd.5706ef62.png deleted file mode 100644 index fc1c876e460f100e223314c830b22798121f10e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 37089 zcmX6^19YTK(~WK0+Ss;j+t$W5HnyE?Y-?j@W83Bi6XT!v|8maY$?2zOs;0ZT?yXx< z%8F8maCmSaARve`(&DNhAYdZE_kJ*7z~_C!heF^BsH>`!C`jE5!8z~(!b(H|IHEBD z{=)X#;f;9Bs19Z%(!W;x7(L+XDMBU5q`V-oSK&y>0wm|9MH`wjx_l>_3 zudC(F)`TmS_h_3v&qTVp4v(C)v^XpZk5p8yD^wEOuUyv|9(OK81unNm+%revTQvg- zc+y1SswRdUDT_a1%XJqU)tYO*^{wC6uXc_72HHmqs<>|rZEcdJXQ7g{D%H#C5mYtx z^-hkCs<_z=t*xcHS}M42%xnVWNzxSv3dUzD^CzRDP-#W5g*5yOz!$tY$awVQ~iTg>jt_t<}{k!*+K_ngzU@_L=~I$SVJb zY*fVJY>2=&UUnWjOI-538yq^m&i-)rDjj~1+f(K=$~0e;V6DcNQi z@)oik{)EXnXdH>%b_Bglqka(!Yp{T!wQ-#5NtnzR{tU|qJ^>yE)J6L(8jR?uMp)pd zSe9F9X=(y(Q>IOm=ckpIOi~sH-bEAbk%9^qJ8i0l`xc}n`_3KatTUc%0`wM$n7O-q z+T?0OY7H&MdIi&R2%Ts$ zH-hCI(;{aUr7g;bZiGf(OM6Zr2fDJlYC|j!l9_0toDK9Z(9s)_g2E~-)$J}>`W^JY zSs#O8aj7!?W@MZfbcx+AR>zhkWNMRBp+%dkW=mDzB%9C`V^)gG0!{3Sdg}bQyu3^) z_{mlS)*Iw;@NIH31oaMWL#%M%($O+&7@H6qdII!p;)MB7=#YAZAT#MuKW>)SQq&#n z1~y4hv9%F3*a|a;%y%jXIx9kriHm9Sra6o=E;=G`f02i;w|Md~sEbv7YB4sGKYQ5(Exmsxntor;vaiv

gKc=r0a+{A|Pxj-PWZ*H2`4;?4gv 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 diff --git a/docs/assets/img/html_coverage_report.a9aae4a3.png b/docs/assets/img/html_coverage_report.a9aae4a3.png deleted file mode 100644 index c300cf4e7411ab8c73fc55545acbd6aa571a7ed1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 161203 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%0AJ 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%0Adls%ybykYHGSFXD#-iQ)Jw9K(?aBTxmb>#+k z^D|gF@(BHf&G9ZxD;V*)M1jiJA_Bz?eH|I#{^r>ue%Y1tNRW9v-kdh|?tBmJhi zz*^Zu0~?@5hlB|Jhq%5zpqv;z@fr6(h17x9b}7Y3?|zS*RmpwzHWhLA-LQ}a(XU

^8B_rBOt%@PDkOU(ivvXzI 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 WGF)I5tq97)M?pqKxGs6_!b=i diff --git a/docs/assets/img/html_coverage_report_summary.210cec1a.png b/docs/assets/img/html_coverage_report_summary.210cec1a.png deleted file mode 100644 index 4aaef3c098129c7e9df67eb46a350a14dc37c505..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24979 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

LuVj2Ff!-xUqo35v} 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 diff --git a/docs/assets/img/search.237d6f6a.svg b/docs/assets/img/search.237d6f6a.svg deleted file mode 100644 index 18ed22a..0000000 --- a/docs/assets/img/search.237d6f6a.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/docs/assets/img/uroboroSQLformatter_logo.e177d254.png b/docs/assets/img/uroboroSQLformatter_logo.e177d254.png deleted file mode 100644 index 4441178512ae76e79268fe7d17c6c1c8de4b51a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23696 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 DQL*(o diff --git a/docs/assets/js/10.22b7d43c.js b/docs/assets/js/10.22b7d43c.js deleted file mode 100644 index bb8886f..0000000 --- a/docs/assets/js/10.22b7d43c.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[10],{197:function(t,n,e){"use strict";e.r(n);var i={mounted(){e.e(33).then(e.t.bind(null,195,7)).then(t=>{t.initialize({startOnLoad:!0}),t.init()})}},a=e(3),l=Object(a.a)(i,(function(){var t=this.$createElement;return(this._self._c||t)("div",{staticClass:"mermaid"},[this._t("default")],2)}),[],!1,null,null,null);n.default=l.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/11.4665ff3e.js b/docs/assets/js/11.4665ff3e.js deleted file mode 100644 index e3ff0c3..0000000 --- a/docs/assets/js/11.4665ff3e.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[11],{207:function(t,r,e){"use strict";e.r(r);var s=e(3),o=Object(s.a)({},(function(){var t=this.$createElement,r=this._self._c||t;return r("ContentSlotsDistributor",{attrs:{"slot-key":this.$parent.slotKey}},[r("p",[r("img",{attrs:{src:"https://img.shields.io/github/stars/future-architect/uroborosql.svg?style=social&label=Stars",alt:"GitHub stars"}}),this._v(" "),r("a",{attrs:{href:"https://maven-badges.herokuapp.com/maven-central/jp.co.future/uroborosql",target:"_blank",rel:"noopener noreferrer"}},[r("img",{attrs:{src:"https://maven-badges.herokuapp.com/maven-central/jp.co.future/uroborosql/badge.svg?style=plastic",alt:"Maven Central"}}),r("OutboundLink")],1),this._v(" "),r("a",{attrs:{href:"https://www.javadoc.io/doc/jp.co.future/uroborosql",target:"_blank",rel:"noopener noreferrer"}},[r("img",{attrs:{src:"https://www.javadoc.io/badge/jp.co.future/uroborosql.svg",alt:"Javadocs"}}),r("OutboundLink")],1)])])}),[],!1,null,null,null);r.default=o.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/12.6188f08a.js b/docs/assets/js/12.6188f08a.js deleted file mode 100644 index 11b71c6..0000000 --- a/docs/assets/js/12.6188f08a.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[12],{208:function(t,e,l){"use strict";l.r(e);var a=l(3),v=Object(a.a)({},(function(){var t=this,e=t.$createElement,l=t._self._c||e;return l("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[l("h1",{attrs:{id:"uroborosqlについて"}},[l("a",{staticClass:"header-anchor",attrs:{href:"#uroborosqlについて"}},[t._v("#")]),t._v(" uroboroSQLについて")]),t._v(" "),l("h2",{attrs:{id:"github"}},[l("a",{staticClass:"header-anchor",attrs:{href:"#github"}},[t._v("#")]),t._v(" GitHub")]),t._v(" "),l("p",[l("a",{attrs:{href:"https://github.com/future-architect/uroborosql",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://github.com/future-architect/uroborosql"),l("OutboundLink")],1)]),t._v(" "),l("h2",{attrs:{id:"リリースノート"}},[l("a",{staticClass:"header-anchor",attrs:{href:"#リリースノート"}},[t._v("#")]),t._v(" リリースノート")]),t._v(" "),l("table",[l("thead",[l("tr",[l("th",{staticStyle:{"text-align":"center"}},[t._v("バージョン")]),t._v(" "),l("th",{staticStyle:{"text-align":"center"}},[t._v("リリース日")]),t._v(" "),l("th",{staticStyle:{"text-align":"left"}},[t._v("概要")])])]),t._v(" "),l("tbody",[l("tr",[l("td",{staticStyle:{"text-align":"center"}},[t._v("v0.20.2")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("2020/10/29")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("バグフィックス")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"center"}},[t._v("v0.20.1")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("2020/09/17")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("バグフィックス")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"center"}},[t._v("v0.20.0")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("2020/08/25")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("バグフィックス")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"center"}},[t._v("v0.19.0")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("2020/05/17")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("日付・時刻を文字列型のカラムで保持する場合のマッパーを追加 / 複数DB接続を考慮したAPIの改善 / InsertsTypeのデフォルトをBATCHへ変更")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"center"}},[t._v("v0.18.2")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("2020/03/29")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("悲観的ロック例外時に、SQLExceptionの代わりに専用のPessimisticLockExceptionをスローするように変更")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"center"}},[t._v("v0.17.1")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("2020/03/16")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("バグフィックス (v0.18.1 の修正を v0.17.0へバックポート)")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"center"}},[t._v("v0.18.1")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("2020/03/15")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("バグフィックス")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"center"}},[t._v("v0.18.0")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("2020/03/08")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("SqlAgent#savepointScopeメソッド追加 / SqlEntityQuery#selectメソッド, hintメソッド追加 / 式言語としてSpring Expression Language(SpEL)を利用可能に / バグフィックス")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"center"}},[t._v("v0.17.0")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("2019/12/22")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("SqlAgent#truncateメソッドを追加")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"center"}},[t._v("v0.16.0")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("2019/12/13")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("@VersionアノテーションでOptimisticLockSupplierを指定可能に / バグフィックス")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"center"}},[t._v("v0.15.2")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("2019/12/13")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("バグフィックス")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"center"}},[t._v("v0.15.1")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("2019/10/16")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("バグフィックス")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"center"}},[t._v("v0.15.0")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("2019/10/11")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("SqlEntityUpdateによる条件指定の複数更新サポート / SqlAgent#updates, SqlAgent#updatesAndReturnの追加による一括更新追加 / バグフィックス")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"center"}},[t._v("v0.14.0")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("2019/09/17")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("SqlEntityQueryで悲観ロックのサポート / SqlQuery#one,findOneの追加 / バグフィックス")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"center"}},[t._v("v0.13.0")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("2019/04/26")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("REPLで使用しているjLineのバージョンを v2 から v3に変更。また依存関係をオプションに変更 / バグフィックス")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"center"}},[t._v("v0.12.1")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("2019/04/12")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("バグフィックス")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"center"}},[t._v("v0.12.0")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("2019/04/09")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("自動採番カラムを持つエンティティの挿入に対応 / エンティティによる検索で集約関数を提供 / バグフィックス")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"center"}},[t._v("v0.11.1")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("2019/03/12")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("バグフィックス")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"center"}},[t._v("v0.11.0")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("2019/03/11")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("エンティティによる検索で抽出条件の指定を可能に")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"center"}},[t._v("v0.10.1")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("2019/02/07")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("SqlFluentにsqlIdとparam(String, Supplier)を追加 / バグフィックス")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"center"}},[t._v("v0.10.0")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("2019/01/16")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("SqlAgent#insertsによる一括INSERT / バグフィックス")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"center"}},[t._v("v0.9.0")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("2019/01/07")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("NioSqlManagerのファイル監視を設定可能に / バグフィックス")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"center"}},[t._v("v0.8.2")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("2018/05/26")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("バグフィックス")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"center"}},[t._v("v0.8.1")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("2018/04/26")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("バグフィックス")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"center"}},[t._v("v0.8.0")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("2018/04/16")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("DialectによるDB製品対応 / CLOB/BLOB対応 / NioSqlMager追加 / etc.")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"center"}},[t._v("v0.7.0")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("2018/03/10")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("バグフィックス")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"center"}},[t._v("v0.6.1")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("2018/02/05")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("バグフィックス")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"center"}},[t._v("v0.6.0")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("2018/01/31")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("自動パラメータバインド関数 API追加 / バグフィックス")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"center"}},[t._v("v0.5.0")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("2017/12/13")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("Stream batch API追加 / SQL内の不要なカンマの除去")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"center"}},[t._v("v0.4.0")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("2017/11/17")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("UroboroSQL ビルダーAPI追加 / CaseFormat初期値設定の追加 / etc.")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"center"}},[t._v("v0.3.3")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("2017/10/31")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("バグフィックス")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"center"}},[t._v("v0.3.2")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("2017/10/10")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("バグフィックス")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"center"}},[t._v("v0.3.1")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("2017/10/02")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("バグフィックス")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"center"}},[t._v("v0.3.0")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("2017/09/08")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("リファクタリング API")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"center"}},[t._v("v0.2.0")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("2017/05/26")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("カバレッジレポート拡張 / SQL-REPL機能拡張 / ORMapper API 追加")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"center"}},[t._v("v0.1.0")]),t._v(" "),l("td",{staticStyle:{"text-align":"center"}},[t._v("2017/03/09")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("初版リリース")])])])]),t._v(" "),l("p",[t._v("See more info. "),l("a",{attrs:{href:"https://github.com/future-architect/uroborosql/releases",target:"_blank",rel:"noopener noreferrer"}},[t._v("Github releases"),l("OutboundLink")],1)])])}),[],!1,null,null,null);e.default=v.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/13.acec487d.js b/docs/assets/js/13.acec487d.js deleted file mode 100644 index 5edee2a..0000000 --- a/docs/assets/js/13.acec487d.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[13],{202:function(s,a,t){"use strict";t.r(a);var e=t(3),n=Object(e.a)({},(function(){var s=this,a=s.$createElement,t=s._self._c||a;return t("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[t("h1",{attrs:{id:"_2waysql"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_2waysql"}},[s._v("#")]),s._v(" 2WaySQL")]),s._v(" "),t("p",[t("strong",[s._v("uroboroSQL")]),s._v("の基本操作について説明する前に"),t("strong",[s._v("uroboroSQL")]),s._v("を利用する上で必要になる項目について説明します。")]),s._v(" "),t("h2",{attrs:{id:"_2waysqlとは"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#_2waysqlとは"}},[s._v("#")]),s._v(" 2WaySQLとは")]),s._v(" "),t("p",[s._v("2WaySQLは普通のSQL文をファイルに保存したものです。そのままSQLクライアントツールで実行することもできますし、"),t("strong",[s._v("uroboroSQL")]),s._v("で読み込んで実行することも出来ます。"),t("br"),s._v("\n(2つの実行方法があることから"),t("strong",[s._v("2Way")]),s._v("SQLと呼ばれます)")]),s._v(" "),t("h2",{attrs:{id:"バインドパラメータ"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#バインドパラメータ"}},[s._v("#")]),s._v(" バインドパラメータ ("),t("code",[s._v("/* */")]),s._v(")")]),s._v(" "),t("p",[s._v("SQLにバインドするパラメータを "),t("code",[s._v("/*parameter name*/")]),s._v("の形式で指定することができます。")]),s._v(" "),t("div",{staticClass:"language-sql line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sql"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("select")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v("\n department\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("where")]),s._v("\n dept_no "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*dept_no*/")]),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("10")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("AND")]),s._v(" dept_name "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*dept_name*/")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Sales'")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br")])]),t("p",[s._v("上の例では、"),t("code",[s._v("/*dept_no*/")]),s._v(", "),t("code",[s._v("/*dept_name*/")]),s._v(" がバインドパラメータで、"),t("strong",[s._v("uroboroSQL")]),s._v("から実行される際はこの部分が"),t("code",[s._v("?")]),s._v("に置き換わり、後ろの"),t("code",[s._v("10")]),s._v("や"),t("code",[s._v("'Sales'")]),s._v("が削除されます。")]),s._v(" "),t("div",{staticClass:"language-sql line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sql"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("select")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v("\n department\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("where")]),s._v("\n dept_no "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" ?"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*dept_no*/")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("and")]),s._v(" dept_name "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" ?"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*dept_name*/")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br")])]),t("h3",{attrs:{id:"in句の利用方法"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#in句の利用方法"}},[s._v("#")]),s._v(" IN句の利用方法")]),s._v(" "),t("p",[s._v("List型の値をIN句のバインドパラメータとして指定することもできます。")]),s._v(" "),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[s._v("WARNING")]),s._v(" "),t("p",[s._v("IN句にバインドパラメータを指定する場合、バインドパラメータの後ろに"),t("code",[s._v("()")]),s._v("を記述する必要があります。")])]),s._v(" "),t("div",{staticClass:"language-sql line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sql"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("select")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v("\n employee emp\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("where")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*IF gender_list != null*/")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("and")]),s._v(" emp"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("gender "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("in")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*gender_list*/")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v("'M'")]),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*END*/")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br")])]),t("p",[s._v("上の例に"),t("code",[s._v("gender_list")]),s._v('として{"M", "F"}を指定すると以下のように変換されます。')]),s._v(" "),t("div",{staticClass:"language-sql line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sql"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("select")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v("\n employee emp\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("where")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*IF gender_list != null*/")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("and")]),s._v(" emp"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("gender "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("in")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("?"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" ?"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*gender_list*/")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*END*/")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br")])]),t("h3",{attrs:{id:"like句の利用方法"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#like句の利用方法"}},[s._v("#")]),s._v(" LIKE句の利用方法")]),s._v(" "),t("p",[s._v("LIKE句に対してバインドパラメータを使用する場合は、以下のように"),t("RouterLink",{attrs:{to:"/background/el.html#stringfunction-sf"}},[s._v("StringFunction")]),s._v("を使って記述してください。")],1),s._v(" "),t("div",{staticClass:"language-sql line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sql"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("select")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v("\n employee emp\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("where")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*IF first_name != null*/")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("and")]),s._v(" emp"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("first_name "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("like")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*SF.contains(first_name)*/")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v("''")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("escape")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*#ESC_CHAR*/")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v("'$'")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*END*/")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*IF last_name != null*/")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("and")]),s._v(" emp"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("last_name "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("like")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*SF.startsWith(last_name)*/")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v("''")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("escape")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*#ESC_CHAR*/")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v("'$'")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*END*/")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br")])]),t("p",[s._v("上の例で、バインドパラメータ "),t("code",[s._v("first_name")]),s._v("に"),t("code",[s._v("a")]),s._v(", "),t("code",[s._v("last_name")]),s._v("に"),t("code",[s._v("D")]),s._v("を指定した場合は以下のようになります。")]),s._v(" "),t("div",{staticClass:"language-sql line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sql"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("select")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v("\n employee emp\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("where")]),s._v("\n emp"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("first_name "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("like")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v("'%a%'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("escape")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v("'$'")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("and")]),s._v(" emp"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("last_name "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("like")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v("'D%'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("escape")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v("'$'")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*END*/")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br")])]),t("p",[s._v("上の例で、ワイルドカードを含む例としてバインドパラメータ "),t("code",[s._v("first_name")]),s._v("に"),t("code",[s._v("a%")]),s._v(", "),t("code",[s._v("last_name")]),s._v("に"),t("code",[s._v("D_")]),s._v("を指定した場合は以下のようになります。")]),s._v(" "),t("div",{staticClass:"language-sql line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sql"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("select")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v("\n employee emp\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("where")]),s._v("\n emp"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("first_name "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("like")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v("'%a$%%'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("escape")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v("'$'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("-- %がエスケープされる")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("and")]),s._v(" emp"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("last_name "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("like")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v("'D$_%'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("escape")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v("'$'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("-- _がエスケープされる")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*END*/")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br")])]),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),t("p",[s._v("ワイルドカード("),t("code",[s._v("%")]),s._v("や"),t("code",[s._v("_")]),s._v(")を含む文字列がバインドパラメータに指定された場合でも、"),t("RouterLink",{attrs:{to:"/background/el.html#stringfunction-sf"}},[s._v("StringFunction")]),s._v("を利用することで文字列のエスケープ処理が適切に行われます。")],1)]),s._v(" "),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[s._v("WARNING")]),s._v(" "),t("p",[s._v("エスケープキャラクタ(上記の例では"),t("code",[s._v("$")]),s._v(")はDB毎の設定("),t("RouterLink",{attrs:{to:"/configuration/dialect.html#dialect"}},[s._v("Dialect")]),s._v(")によって変わります。"),t("br"),s._v("\n現在の設定では、Oracleの場合は"),t("code",[s._v("\\")]),s._v(", その他のDBでは"),t("code",[s._v("$")]),s._v("となります。"),t("br"),s._v(" "),t("code",[s._v("\\")]),s._v("や"),t("code",[s._v("$")]),s._v("のかわりに"),t("code",[s._v("/*#ESC_CHAR*/")]),s._v("と記載することでDB毎の設定を気にせずにエスケープ文字を指定することができます。"),t("Badge",{attrs:{text:"0.14.0+",vertical:"middle"}})],1)]),s._v(" "),t("h2",{attrs:{id:"バインド出来るパラメータの型"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#バインド出来るパラメータの型"}},[s._v("#")]),s._v(" バインド出来るパラメータの型")]),s._v(" "),t("p",[s._v("バインドパラメータに指定できるJava型は以下になります。")]),s._v(" "),t("ul",[t("li",[s._v("プリミティブ型とそのラッパー型(ただし char と java.lang.Character は除く)")]),s._v(" "),t("li",[s._v("java.math.BigDecimal")]),s._v(" "),t("li",[s._v("java.math.BigInteger")]),s._v(" "),t("li",[s._v("java.lang.String")]),s._v(" "),t("li",[s._v("byte[]")]),s._v(" "),t("li",[s._v("java.sql.Date")]),s._v(" "),t("li",[s._v("java.sql.Time")]),s._v(" "),t("li",[s._v("java.sql.Timestamp")]),s._v(" "),t("li",[s._v("java.sql.Array")]),s._v(" "),t("li",[s._v("java.sql.Ref")]),s._v(" "),t("li",[s._v("java.sql.Blob")]),s._v(" "),t("li",[s._v("java.sql.Clob")]),s._v(" "),t("li",[s._v("java.sql.SQLXML")]),s._v(" "),t("li",[s._v("java.sql.Struct")]),s._v(" "),t("li",[s._v("列挙型(enum)")]),s._v(" "),t("li",[s._v("java.util.Date")]),s._v(" "),t("li",[s._v("java.util.Optional")]),s._v(" "),t("li",[s._v("java.util.OptionalInt")]),s._v(" "),t("li",[s._v("java.util.OptionalLong")]),s._v(" "),t("li",[s._v("java.util.OptionalDouble")]),s._v(" "),t("li",[s._v("java.time.LocalDateTime")]),s._v(" "),t("li",[s._v("java.time.OffsetDateTime")]),s._v(" "),t("li",[s._v("java.time.ZonedDateTime")]),s._v(" "),t("li",[s._v("java.time.LocalDate")]),s._v(" "),t("li",[s._v("java.time.LocalTime")]),s._v(" "),t("li",[s._v("java.time.OffsetTime")]),s._v(" "),t("li",[s._v("java.time.Year")]),s._v(" "),t("li",[s._v("java.time.YearMonth")]),s._v(" "),t("li",[s._v("java.time.MonthDay")]),s._v(" "),t("li",[s._v("java.time.Month")]),s._v(" "),t("li",[s._v("java.time.DayOfWeek")])]),s._v(" "),t("h2",{attrs:{id:"置換文字列"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#置換文字列"}},[s._v("#")]),s._v(" 置換文字列 ("),t("code",[s._v("/*$ */")]),s._v(" , "),t("code",[s._v("/*# */")]),s._v(")")]),s._v(" "),t("p",[s._v("置換文字列を使うとSQLを動的に変更することができます。")]),s._v(" "),t("p",[s._v("置換文字列は "),t("code",[s._v("/*$parameter name*/")]),s._v(" もしくは "),t("code",[s._v("/*#parameter name*/")]),s._v("と記述します。"),t("br"),s._v(" "),t("code",[s._v("/*#parameter name*/")]),s._v(" と記述した場合は、置換文字列の前後を"),t("code",[s._v("'")]),s._v("(シングルクォート)で囲みます。")]),s._v(" "),t("div",{staticClass:"language-sql line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sql"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("select")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*$table_name*/")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("where")]),s._v("\n gender "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*#gender*/")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br")])]),t("p",[s._v("上の例では、"),t("code",[s._v("table_name")]),s._v("や"),t("code",[s._v("gender")]),s._v("に設定した値でSQLが置換されます。")]),s._v(" "),t("ul",[t("li",[t("code",[s._v("table_name")]),s._v("に"),t("code",[s._v("employee")]),s._v(", "),t("code",[s._v("gender")]),s._v("に"),t("code",[s._v("M")]),s._v("を設定した場合")])]),s._v(" "),t("div",{staticClass:"language-sql line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sql"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("select")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" employee\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("where")]),s._v("\n gender "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v("'M'")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br")])]),t("p",[s._v("という風に置換されたSQLが実行されることになります。")]),s._v(" "),t("div",{staticClass:"custom-block danger"},[t("p",{staticClass:"custom-block-title"},[s._v("注意")]),s._v(" "),t("p",[s._v("置換文字列はSQLインジェクションなど脆弱性の原因となる可能性があります。十分に注意を払ったうえで利用してください")])]),s._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),t("p",[s._v("置換文字列はSQLインジェクションを防ぐため、変換の際にシングルクォート"),t("code",[s._v("'")]),s._v("を"),t("code",[s._v("''")]),s._v("にエスケープします")])]),s._v(" "),t("div",{staticClass:"custom-block warning"},[t("p",{staticClass:"custom-block-title"},[s._v("WARNING")]),s._v(" "),t("p",[s._v("置換文字列はバインドパラメータとしてではなく実行されるSQLを構築する時点で置換される点に注意してください。"),t("br"),s._v("\nデータベースによってはSQL文が動的に変わることで解析結果のキャッシュが適用されず、"),t("br"),s._v("\n解析処理が都度実行されることでCPUに負荷をかける可能性があります。")])]),s._v(" "),t("h2",{attrs:{id:"条件分岐-if-elif-else-end"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#条件分岐-if-elif-else-end"}},[s._v("#")]),s._v(" 条件分岐 ( "),t("code",[s._v("/*IF*/")]),s._v(", "),t("code",[s._v("/*ELIF*/")]),s._v(", "),t("code",[s._v("/*ELSE*/")]),s._v(", "),t("code",[s._v("/*END*/")]),s._v(" )")]),s._v(" "),t("p",[t("code",[s._v("/*IF*/")]),s._v(", "),t("code",[s._v("/*ELIF*/")]),s._v(", "),t("code",[s._v("/*ELSE*/")]),s._v(", "),t("code",[s._v("/*END*/")]),s._v(" を使用してSQLを動的に変更することができます。")]),s._v(" "),t("h3",{attrs:{id:"記述方法"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#記述方法"}},[s._v("#")]),s._v(" 記述方法")]),s._v(" "),t("div",{staticClass:"language-sql line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sql"}},[t("code",[t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*IF [評価式]*/")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("-- IFの評価式が真の場合に適用されるSQL")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*ELIF [評価式]*/")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("-- ELIFの評価式が真の場合に適用されるSQL")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*ELSE*/")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("-- IF,ELIFの評価式が偽の場合に適用されるSQL")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*END*/")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br")])]),t("p",[t("code",[s._v("/*IF*/")]),s._v(", "),t("code",[s._v("/*ELIF*/")]),s._v("の評価式として式言語を利用します。\n( 式言語の説明は"),t("RouterLink",{attrs:{to:"/background/el.html#式言語"}},[s._v("こちら")]),s._v(" )"),t("br"),s._v("\nまた、標準でSF関数("),t("em",[s._v("S")]),s._v("tring "),t("em",[s._v("F")]),s._v("unction)を使うことができます。")],1),s._v(" "),t("div",{staticClass:"language-sql line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sql"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("select")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v("\n employee emp\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("where")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*IF SF.isNotEmpty(birth_date_from) and SF.isNotEmpty(birth_date_to)*/")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("and")]),s._v(" emp"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("birth_date "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("between")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*birth_date_from*/")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v("'1990-01-01'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("and")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*birth_date_to*/")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v("'1999-12-31'")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*ELIF SF.isNotEmpty(birth_date_from)*/")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("and")]),s._v(" emp"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("birth_date "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*birth_date_from*/")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v("'1990-01-01'")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*ELIF SF.isNotEmpty(birth_date_to)*/")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("and")]),s._v(" emp"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("birth_date "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*birth_date_to*/")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v("'1999-12-31'")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*ELSE*/")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*END*/")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br"),t("span",{staticClass:"line-number"},[s._v("12")]),t("br"),t("span",{staticClass:"line-number"},[s._v("13")]),t("br")])]),t("p",[s._v("上の例ではIFの評価式として"),t("code",[s._v("SF.isNotEmpty()")]),s._v("を使用してバインドパラメータが"),t("code",[s._v("null")]),s._v("または"),t("code",[s._v('""')]),s._v("でないことを評価しています。")]),s._v(" "),t("p",[s._v("バインドパラメータとして"),t("code",[s._v("birth_date_from")]),s._v("に"),t("code",[s._v("2000-01-01")]),s._v(", "),t("code",[s._v("birth_date_to")]),s._v("に"),t("code",[s._v("2010-12-31")]),s._v("を指定した場合、生成されるSQLは以下のようになります。")]),s._v(" "),t("div",{staticClass:"language-sql line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sql"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("select")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v("\n employee emp\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("where")]),s._v("\n emp"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("birth_date "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("between")]),s._v(" ?"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*birth_date_from*/")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("and")]),s._v(" ?"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*birth_date_to*/")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br")])]),t("p",[s._v("最後にバインドパラメータが評価され、実行されるSQLが以下になります。")]),s._v(" "),t("div",{staticClass:"language-sql line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sql"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("select")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v("\n employee emp\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("where")]),s._v("\n emp"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("birth_date "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("between")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v("'2000-01-01'")]),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*birth_date_from*/")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("and")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token string"}},[s._v("'2010-12-31'")]),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*birth_date_to*/")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br")])]),t("p",[s._v("ここで"),t("code",[s._v("emp.birth_date")]),s._v("の前にあった"),t("code",[s._v("and")]),s._v("が消えていることに注目してください。")]),s._v(" "),t("div",{staticClass:"custom-block tip"},[t("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),t("p",[t("strong",[s._v("uroboroSQL")]),s._v("では動的SQLを生成する際、WHERE句の後ろに"),t("code",[s._v("and")]),s._v("や"),t("code",[s._v("or")]),s._v("が来る場合はそれを削除してSQL文として正しい状態にします")])]),s._v(" "),t("p",[s._v("ただし、上の加工前SQLのようにSQL文として不正な状態になってしまうのでSQLクライアントツールからは実行できないという欠点もあります。"),t("br"),s._v("\nこのようにSQL文として不正になることを防ぐために、WHERE句のあとに他に影響を与えない評価を入れる方法があります。")]),s._v(" "),t("div",{staticClass:"language-sql line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sql"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("select")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v("\n employee emp\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("where")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token number"}},[s._v("1")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// <-- 必ずtrueとなる評価を入れる")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*IF SF.isNotEmpty(birth_date_from) and SF.isNotEmpty(birth_date_to)*/")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("and")]),s._v(" emp"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("birth_date "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("between")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*birth_date_from*/")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v("'1990-01-01'")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("and")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*birth_date_to*/")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v("'1999-12-31'")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*ELIF SF.isNotEmpty(birth_date_from)*/")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("and")]),s._v(" emp"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("birth_date "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v(">=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*birth_date_from*/")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v("'1990-01-01'")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*ELIF SF.isNotEmpty(birth_date_to)*/")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("and")]),s._v(" emp"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("birth_date "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("<")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*birth_date_to*/")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v("'1999-12-31'")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*ELSE*/")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*END*/")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br"),t("span",{staticClass:"line-number"},[s._v("12")]),t("br"),t("span",{staticClass:"line-number"},[s._v("13")]),t("br"),t("span",{staticClass:"line-number"},[s._v("14")]),t("br")])]),t("h2",{attrs:{id:"範囲の有効化-begin-end"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#範囲の有効化-begin-end"}},[s._v("#")]),s._v(" 範囲の有効化 ( "),t("code",[s._v("/*BEGIN*/")]),s._v(", "),t("code",[s._v("/*END*/")]),s._v(" )")]),s._v(" "),t("p",[t("code",[s._v("/*BEGIN*/")]),s._v(", "),t("code",[s._v("/*END*/")]),s._v(" で囲まれた範囲は、その中の"),t("code",[s._v("/*IF*/")]),s._v(", "),t("code",[s._v("/*ELIF*/")]),s._v("のうち、どれか1つでも真(true)になった場合に出力されます。"),t("br"),s._v("\n範囲内の全ての評価式が偽(false)の場合、"),t("code",[s._v("/*BEGIN*/")]),s._v(", "),t("code",[s._v("/*END*/")]),s._v(" で囲まれた範囲は出力されません。")]),s._v(" "),t("div",{staticClass:"language-sql line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sql"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("select")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v("\n employee emp\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*BEGIN*/")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("where")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*IF SF.isNotEmpty(first_name)*/")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("and")]),s._v(" emp"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("first_name "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*first_name*/")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Bob'")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*END*/")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*IF SF.isNotEmpty(last_name)*/")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("and")]),s._v(" emp"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("last_name "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*last_name*/")]),t("span",{pre:!0,attrs:{class:"token string"}},[s._v("'Smith'")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*END*/")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*END*/")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br"),t("span",{staticClass:"line-number"},[s._v("12")]),t("br"),t("span",{staticClass:"line-number"},[s._v("13")]),t("br")])]),t("p",[s._v("上の例で、バインドパラメータ "),t("code",[s._v("first_name")]),s._v("に"),t("code",[s._v("Willson")]),s._v(", "),t("code",[s._v("last_name")]),s._v("に"),t("code",[s._v("null")]),s._v("を指定した場合は以下のようになります。")]),s._v(" "),t("div",{staticClass:"language-sql line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sql"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("select")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v("\n employee emp\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("where")]),s._v("\n emp"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("first_name "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" ?"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*first_name*/")]),s._v("\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br")])]),t("p",[s._v("バインドパラメータ "),t("code",[s._v("first_name")]),s._v(", "),t("code",[s._v("last_name")]),s._v("ともに"),t("code",[s._v("null")]),s._v("を指定した場合は以下のようになります。")]),s._v(" "),t("div",{staticClass:"language-sql line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sql"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("select")]),s._v("\n "),t("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v("\n employee emp\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br")])]),t("p",[t("code",[s._v("/*BEGIN*/")]),s._v(","),t("code",[s._v("/*END*/")]),s._v("で囲まれた"),t("code",[s._v("where")]),s._v("が出力されていないことがわかります。")]),s._v(" "),t("h2",{attrs:{id:"不要なカンマの除去"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#不要なカンマの除去"}},[s._v("#")]),s._v(" 不要なカンマの除去")]),s._v(" "),t("p",[s._v("IF分岐を使って動的なSQLを構築する場合、カンマの有無が問題になる場合があります。"),t("br"),s._v("\n以下のSQLを例として説明します。")]),s._v(" "),t("div",{staticClass:"language-sql line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sql"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("select")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*IF detail*/")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" first_name\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" last_name\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" birth_date\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" gender\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*END*/")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" emp_no\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v("\n employee emp\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("order")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("by")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*IF detail*/")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" birth_date\n"),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*END*/")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" emp_no\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br"),t("span",{staticClass:"line-number"},[s._v("12")]),t("br"),t("span",{staticClass:"line-number"},[s._v("13")]),t("br"),t("span",{staticClass:"line-number"},[s._v("14")]),t("br"),t("span",{staticClass:"line-number"},[s._v("15")]),t("br")])]),t("p",[s._v("ここでバインドパラメータ"),t("code",[s._v("detail")]),s._v("に"),t("code",[s._v("true")]),s._v("を指定した場合、生成されるSQLは以下になります。")]),s._v(" "),t("div",{staticClass:"language-sql line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sql"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("select")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" first_name\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" last_name\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" birth_date\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" gender\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" emp_no\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v("\n employee emp\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("order")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("by")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" birth_date\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" emp_no\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br")])]),t("p",[s._v("このSQLでは"),t("code",[s._v("select")]),s._v("の直後や"),t("code",[s._v("order by")]),s._v("の直後にカンマが出現しておりSQL文として不正であるため、SQLの実行に失敗します。"),t("br"),s._v("\nこれを避けるため"),t("strong",[s._v("uroboroSQL")]),s._v("では、生成後のSQLに含まれる不要なカンマを除去するようになっています。")]),s._v(" "),t("p",[s._v("実際に生成されるSQLは以下になります。")]),s._v(" "),t("div",{staticClass:"language-sql line-numbers-mode"},[t("pre",{pre:!0,attrs:{class:"language-sql"}},[t("code",[t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("select")]),s._v("\n first_name "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("-- 先頭のカンマが除去される")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" last_name\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" birth_date\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" gender\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" emp_no\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v("\n employee emp\n"),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("order")]),s._v(" "),t("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("by")]),s._v("\n birth_date "),t("span",{pre:!0,attrs:{class:"token comment"}},[s._v("-- 先頭のカンマが除去される")]),s._v("\n"),t("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" emp_no\n")])]),s._v(" "),t("div",{staticClass:"line-numbers-wrapper"},[t("span",{staticClass:"line-number"},[s._v("1")]),t("br"),t("span",{staticClass:"line-number"},[s._v("2")]),t("br"),t("span",{staticClass:"line-number"},[s._v("3")]),t("br"),t("span",{staticClass:"line-number"},[s._v("4")]),t("br"),t("span",{staticClass:"line-number"},[s._v("5")]),t("br"),t("span",{staticClass:"line-number"},[s._v("6")]),t("br"),t("span",{staticClass:"line-number"},[s._v("7")]),t("br"),t("span",{staticClass:"line-number"},[s._v("8")]),t("br"),t("span",{staticClass:"line-number"},[s._v("9")]),t("br"),t("span",{staticClass:"line-number"},[s._v("10")]),t("br"),t("span",{staticClass:"line-number"},[s._v("11")]),t("br")])]),t("p",[s._v("カンマが除去されるのは、以下の予約語の直後にカンマが出現した場合です(大文字小文字の区別無し)。")]),s._v(" "),t("ul",[t("li",[s._v("SELECT")]),s._v(" "),t("li",[s._v("ORDER BY")]),s._v(" "),t("li",[s._v("GROUP BY")]),s._v(" "),t("li",[s._v("(")]),s._v(" "),t("li",[s._v("SET")])])])}),[],!1,null,null,null);a.default=n.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/14.be331bb2.js b/docs/assets/js/14.be331bb2.js deleted file mode 100644 index 8d11ca5..0000000 --- a/docs/assets/js/14.be331bb2.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[14],{210:function(t,e,l){"use strict";l.r(e);var a=l(3),_=Object(a.a)({},(function(){var t=this,e=t.$createElement,l=t._self._c||e;return l("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[l("h1",{attrs:{id:"式言語"}},[l("a",{staticClass:"header-anchor",attrs:{href:"#式言語"}},[t._v("#")]),t._v(" 式言語")]),t._v(" "),l("p",[l("strong",[t._v("uroboroSQL")]),t._v("では、条件分岐に式言語を利用することができます。"),l("br"),t._v("\n利用可能な式言語は以下の2つになります。")]),t._v(" "),l("ul",[l("li",[l("a",{attrs:{href:"https://github.com/jkuhnert/ognl",target:"_blank",rel:"noopener noreferrer"}},[t._v("OGNL"),l("OutboundLink")],1)]),t._v(" "),l("li",[l("a",{attrs:{href:"https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#expressions",target:"_blank",rel:"noopener noreferrer"}},[t._v("Spring Expression Language(SpEL)"),l("OutboundLink")],1),t._v(" "),l("Badge",{attrs:{text:"0.18.0+"}})],1)]),t._v(" "),l("p",[t._v("利用する式言語の切替は依存関係ライブラリの指定により行ってください。"),l("br"),t._v("\n依存関係ライブラリの指定については"),l("RouterLink",{attrs:{to:"/getting_started/#ビルドツールの設定"}},[t._v("環境設定")]),t._v("を参照してください。")],1),t._v(" "),l("p",[t._v("条件分岐の評価式として使用する場合、評価結果が真偽値(true/false)になるように記述してください。")]),t._v(" "),l("h2",{attrs:{id:"ognl"}},[l("a",{staticClass:"header-anchor",attrs:{href:"#ognl"}},[t._v("#")]),t._v(" OGNL")]),t._v(" "),l("p",[t._v("以下に式言語としてOGNLを利用する場合の基本文法を提示します。"),l("br"),t._v("\nOGNL文法の詳細は"),l("a",{attrs:{href:"https://commons.apache.org/proper/commons-ognl/language-guide.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("こちら"),l("OutboundLink")],1),t._v("を参照してください。")]),t._v(" "),l("h3",{attrs:{id:"リテラル-ognl"}},[l("a",{staticClass:"header-anchor",attrs:{href:"#リテラル-ognl"}},[t._v("#")]),t._v(" リテラル(OGNL)")]),t._v(" "),l("p",[t._v("以下のリテラルが使用できます。")]),t._v(" "),l("ul",[l("li",[t._v("“a”(java.lang.String)")]),t._v(" "),l("li",[t._v("'a'(char)")]),t._v(" "),l("li",[t._v("1(int)")]),t._v(" "),l("li",[t._v("1L(long)")]),t._v(" "),l("li",[t._v("0.1F(float)")]),t._v(" "),l("li",[t._v("0.1D(double)")]),t._v(" "),l("li",[t._v("0.1B(java.math.BigDecimal)")]),t._v(" "),l("li",[t._v("1H(java.math.BigInteger)")]),t._v(" "),l("li",[t._v("true, false(Boolean)")]),t._v(" "),l("li",[t._v("null")])]),t._v(" "),l("h3",{attrs:{id:"演算子-ognl"}},[l("a",{staticClass:"header-anchor",attrs:{href:"#演算子-ognl"}},[t._v("#")]),t._v(" 演算子(OGNL)")]),t._v(" "),l("p",[t._v("以下の演算子が使用できます。")]),t._v(" "),l("h3",{attrs:{id:"算術演算子-ognl"}},[l("a",{staticClass:"header-anchor",attrs:{href:"#算術演算子-ognl"}},[t._v("#")]),t._v(" 算術演算子(OGNL)")]),t._v(" "),l("ul",[l("li",[t._v("e1 + e2 (足し算)")]),t._v(" "),l("li",[t._v("e1 - e2 (引き算)")]),t._v(" "),l("li",[t._v("e1 * e2 (掛け算)")]),t._v(" "),l("li",[t._v("e1 / e2 (割り算)")]),t._v(" "),l("li",[t._v("e1 % e2 (余り)")])]),t._v(" "),l("h3",{attrs:{id:"比較演算子-ognl"}},[l("a",{staticClass:"header-anchor",attrs:{href:"#比較演算子-ognl"}},[t._v("#")]),t._v(" 比較演算子(OGNL)")]),t._v(" "),l("ul",[l("li",[t._v("e1 eq e2, e1 == e2 (等しい)\n"),l("ul",[l("li",[t._v("e1・e2のいずれかがnullの場合、両方ともnullの時のみe1とe2は等しい")]),t._v(" "),l("li",[t._v("e1・e2が同じオブジェクトの場合、またはequals()メソッドにより等しいと判断される場合、e1とe2は等しい")]),t._v(" "),l("li",[t._v("e1・e2が数値の場合、倍精度浮動小数点数が等しい時のみe1とe2は等しい")]),t._v(" "),l("li",[t._v("その以外の場合、e1とe2は等しくない")])])]),t._v(" "),l("li",[t._v("e1 neq e2, e1 != e2 (等しくない)")]),t._v(" "),l("li",[t._v("e1 lt e2, e1 < e2 (小なり)")]),t._v(" "),l("li",[t._v("e1 lte e2, e1 <= e2 (小なりイコール)")]),t._v(" "),l("li",[t._v("e1 gt e2, e1 > e2 (大なり)")]),t._v(" "),l("li",[t._v("e1 gte e2, e1 >= e2 (大なりイコール)")])]),t._v(" "),l("h3",{attrs:{id:"論理演算子-ognl"}},[l("a",{staticClass:"header-anchor",attrs:{href:"#論理演算子-ognl"}},[t._v("#")]),t._v(" 論理演算子(OGNL)")]),t._v(" "),l("ul",[l("li",[t._v("e1 or e2, e1 || e2 (論理和)")]),t._v(" "),l("li",[t._v("e1 and e2, e1 && e2 (論理積)")]),t._v(" "),l("li",[t._v("not e, ! e (論理否定)")])]),t._v(" "),l("h3",{attrs:{id:"連結演算子-ognl"}},[l("a",{staticClass:"header-anchor",attrs:{href:"#連結演算子-ognl"}},[t._v("#")]),t._v(" 連結演算子(OGNL)")]),t._v(" "),l("ul",[l("li",[t._v("e1 + e2 (文字列連結)")])]),t._v(" "),l("h3",{attrs:{id:"メソッド・フィールドの呼び出し-ognl"}},[l("a",{staticClass:"header-anchor",attrs:{href:"#メソッド・フィールドの呼び出し-ognl"}},[t._v("#")]),t._v(" メソッド・フィールドの呼び出し(OGNL)")]),t._v(" "),l("p",[t._v("以下のようにメソッド・フィールドの呼び出しができます。")]),t._v(" "),l("ul",[l("li",[t._v("e.method(args) (メソッドの呼び出し)")]),t._v(" "),l("li",[t._v("e.property (フィールドの呼び出し)")])]),t._v(" "),l("h2",{attrs:{id:"spring-expression-language-spel"}},[l("a",{staticClass:"header-anchor",attrs:{href:"#spring-expression-language-spel"}},[t._v("#")]),t._v(" Spring Expression Language(SpEL)")]),t._v(" "),l("p",[t._v("以下に式言語としてSpring Expression Language(SpEL)を利用する場合の基本文法を提示します。"),l("br"),t._v("\nSpEL文法の詳細は"),l("a",{attrs:{href:"https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#expressions-language-ref",target:"_blank",rel:"noopener noreferrer"}},[t._v("こちら"),l("OutboundLink")],1),t._v("を参照してください。")]),t._v(" "),l("h3",{attrs:{id:"リテラル-spel"}},[l("a",{staticClass:"header-anchor",attrs:{href:"#リテラル-spel"}},[t._v("#")]),t._v(" リテラル(SpEL)")]),t._v(" "),l("p",[t._v("以下のリテラルが使用できます。")]),t._v(" "),l("ul",[l("li",[t._v("文字列はシングルクォートで囲む。シングルクォート自体を使用する場合はシングルクォートを2つ重ねる('')")]),t._v(" "),l("li",[t._v("数字や真偽値、nullはそのまま記述")])]),t._v(" "),l("h3",{attrs:{id:"演算子-spel"}},[l("a",{staticClass:"header-anchor",attrs:{href:"#演算子-spel"}},[t._v("#")]),t._v(" 演算子(SpEL)")]),t._v(" "),l("p",[t._v("以下の演算子が使用できます。")]),t._v(" "),l("h3",{attrs:{id:"算術演算子-spel"}},[l("a",{staticClass:"header-anchor",attrs:{href:"#算術演算子-spel"}},[t._v("#")]),t._v(" 算術演算子(SpEL)")]),t._v(" "),l("ul",[l("li",[t._v("e1 + e2 (足し算)")]),t._v(" "),l("li",[t._v("e1 - e2 (引き算)")]),t._v(" "),l("li",[t._v("e1 * e2 (掛け算)")]),t._v(" "),l("li",[t._v("e1 / e2, e1 div e2 (割り算)")]),t._v(" "),l("li",[t._v("e1 % e2, e1 mod e2 (余り)")])]),t._v(" "),l("h3",{attrs:{id:"比較演算子-spel"}},[l("a",{staticClass:"header-anchor",attrs:{href:"#比較演算子-spel"}},[t._v("#")]),t._v(" 比較演算子(SpEL)")]),t._v(" "),l("ul",[l("li",[t._v("e1 eq e2, e1 == e2 (等しい)\n"),l("ul",[l("li",[t._v("e1・e2のいずれかがnullの場合、両方ともnullの時のみe1とe2は等しい")]),t._v(" "),l("li",[t._v("e1・e2が同じオブジェクトの場合、またはequals()メソッドにより等しいと判断される場合、e1とe2は等しい")]),t._v(" "),l("li",[t._v("e1・e2が数値の場合、倍精度浮動小数点数が等しい時のみe1とe2は等しい")]),t._v(" "),l("li",[t._v("その以外の場合、e1とe2は等しくない")])])]),t._v(" "),l("li",[t._v("e1 ne e2, e1 != e2 (等しくない)")]),t._v(" "),l("li",[t._v("e1 lt e2, e1 < e2 (小なり)")]),t._v(" "),l("li",[t._v("e1 le e2, e1 <= e2 (小なりイコール)")]),t._v(" "),l("li",[t._v("e1 gt e2, e1 > e2 (大なり)")]),t._v(" "),l("li",[t._v("e1 ge e2, e1 >= e2 (大なりイコール)")])]),t._v(" "),l("h3",{attrs:{id:"論理演算子-spel"}},[l("a",{staticClass:"header-anchor",attrs:{href:"#論理演算子-spel"}},[t._v("#")]),t._v(" 論理演算子(SpEL)")]),t._v(" "),l("ul",[l("li",[t._v("e1 or e2 (論理和)")]),t._v(" "),l("li",[t._v("e1 and e2 (論理積)")]),t._v(" "),l("li",[t._v("not e, ! e (論理否定)")])]),t._v(" "),l("h3",{attrs:{id:"連結演算子-spel"}},[l("a",{staticClass:"header-anchor",attrs:{href:"#連結演算子-spel"}},[t._v("#")]),t._v(" 連結演算子(SpEL)")]),t._v(" "),l("ul",[l("li",[t._v("e1 + e2 (文字列連結)")])]),t._v(" "),l("h3",{attrs:{id:"その他の演算子-spel"}},[l("a",{staticClass:"header-anchor",attrs:{href:"#その他の演算子-spel"}},[t._v("#")]),t._v(" その他の演算子(SpEL)")]),t._v(" "),l("ul",[l("li",[t._v("instanceof (型判定)\n"),l("ul",[l("li",[t._v("ex) 'xyz' instanceof T(int) // false T() はタイプ(型)を表す")])])]),t._v(" "),l("li",[t._v("matches (正規表現)\n"),l("ul",[l("li",[t._v("ex) '5.00' matches '^[0-9]{2}$' // false")])])])]),t._v(" "),l("h3",{attrs:{id:"メソッド・フィールドの呼び出し-spel"}},[l("a",{staticClass:"header-anchor",attrs:{href:"#メソッド・フィールドの呼び出し-spel"}},[t._v("#")]),t._v(" メソッド・フィールドの呼び出し(SpEL)")]),t._v(" "),l("p",[t._v("以下のようにメソッド・フィールドの呼び出しができます。")]),t._v(" "),l("ul",[l("li",[t._v("e.method(args) (メソッドの呼び出し)")]),t._v(" "),l("li",[t._v("e.property (フィールドの呼び出し)")]),t._v(" "),l("li",[t._v("T(type).staticMethod(args) (staticメソッドの呼び出し)")])]),t._v(" "),l("h2",{attrs:{id:"stringfunction-sf"}},[l("a",{staticClass:"header-anchor",attrs:{href:"#stringfunction-sf"}},[t._v("#")]),t._v(" StringFunction(SF)")]),t._v(" "),l("p",[l("strong",[t._v("uroboroSQL")]),t._v("では評価式を利用する際、標準で"),l("code",[t._v("StringFunction")]),t._v("(SF)を使用することができます。\n評価式と合わせて"),l("code",[t._v("StringFunction")]),t._v("クラスのメソッドを呼び出すことができます。")]),t._v(" "),l("ul",[l("li",[t._v("評価式で使用する場合")])]),t._v(" "),l("div",{staticClass:"language-sql line-numbers-mode"},[l("pre",{pre:!0,attrs:{class:"language-sql"}},[l("code",[l("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*IF SF.isNotEmpty(emp_no)*/")]),t._v("\n "),l("span",{pre:!0,attrs:{class:"token comment"}},[t._v('-- emp_noが null または "" でない場合に処理される')]),t._v("\n"),l("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*END*/")]),t._v("\n")])]),t._v(" "),l("div",{staticClass:"line-numbers-wrapper"},[l("span",{staticClass:"line-number"},[t._v("1")]),l("br"),l("span",{staticClass:"line-number"},[t._v("2")]),l("br"),l("span",{staticClass:"line-number"},[t._v("3")]),l("br")])]),l("ul",[l("li",[t._v("バインドパラメータと合わせて使用する場合")])]),t._v(" "),l("div",{staticClass:"language-sql line-numbers-mode"},[l("pre",{pre:!0,attrs:{class:"language-sql"}},[l("code",[t._v("emp_name "),l("span",{pre:!0,attrs:{class:"token operator"}},[t._v("like")]),t._v(" "),l("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*SF.contains(emp_name)*/")]),l("span",{pre:!0,attrs:{class:"token string"}},[t._v("''")]),t._v(" "),l("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("escape")]),t._v(" "),l("span",{pre:!0,attrs:{class:"token string"}},[t._v("'$'")]),t._v("\n"),l("span",{pre:!0,attrs:{class:"token comment"}},[t._v("-- emp_name=Bobの場合、 emp_name like %Bob% escape '$' となる")]),t._v("\n")])]),t._v(" "),l("div",{staticClass:"line-numbers-wrapper"},[l("span",{staticClass:"line-number"},[t._v("1")]),l("br"),l("span",{staticClass:"line-number"},[t._v("2")]),l("br")])]),l("ul",[l("li",[l("code",[t._v("StringFunction")]),t._v("が提供するメソッドの一覧")])]),t._v(" "),l("table",[l("thead",[l("tr",[l("th",{staticStyle:{"text-align":"left"}},[t._v("メソッド名")]),t._v(" "),l("th",{staticStyle:{"text-align":"left"}},[t._v("戻り値")]),t._v(" "),l("th",{staticStyle:{"text-align":"left"}},[t._v("説明")])])]),t._v(" "),l("tbody",[l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("SF.isEmpty(String str)")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("booean")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("対象文字列が空文字であること判定する")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("SF.isNotEmpty(String str)")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("boolean")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("対象文字列が空文字でないことを判定する")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("SF.isBlank(String str)")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("boolean")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("対象文字列が空文字、もしくは空白であること判定する")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("SF.isNotBlank(String str)")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("boolean")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("対象文字列が空文字、もしくは空白でないこと判定する")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("SF.trim(String str)")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("String")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("文字列の前後の空白を除去する。nullを渡した場合は結果もnullとなる")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("SF.trimToEmpty(String str)")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("String")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("文字列の前後の空白を除去する。nullを渡した場合は空文字となる")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("SF.left(String str, int len)")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("String")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("文字列の先頭から指定した文字数の文字列を取得する")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("SF.right(String str, int len)")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("String")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("文字列の最後から指定した文字数の文字列を取得する")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("SF.mid(String str, int pos, int len)")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("String")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("文字列の指定した位置から指定した文字数の文字列を取得する")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("SF.rightPad(String str, int size)")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("String")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("文字列の末尾に空白を埋めて指定された長さにする")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("SF.rightPad(String str, int size, char padChar)")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("String")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("文字列の末尾に指定した埋め込み文字を埋めて指定された長さにする")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("SF.leftPad(String str, int size)")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("String")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("文字列の先頭に空白を埋めて指定された長さにする")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("SF.leftPad(String str, int size, char padChar)")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("String")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("文字列の先頭に指定した埋め込み文字を埋めて指定された長さにする")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("SF.split(String str)")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("String[]")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("文字列を空白で区切って配列に格納する。nullが入力された場合はnullを返す")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("SF.split(String str, char separatorChar)")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("String[]")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("文字列を指定した区切り文字で区切って配列に格納する。nullが入力された場合はnullを返す")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("SF.split(String str, String separatorChars, int max)")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("String[]")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("文字列を指定した区切り文字で区切って配列に格納する。nullが入力された場合はnullを返す")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("SF.capitalize(String str)")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("String")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("文字列の先頭文字を大文字にする")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("SF.uncapitalize(String str)")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("String")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("文字列の先頭を小文字にする")])]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("SF.startsWith(CharSequence text)")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("String")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("指定されたテキストで始まるLIKE句用の検索文字列を生成する。引数のテキストはエスケープ処理される "),l("Badge",{attrs:{text:"0.12.0+"}})],1)]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("SF.contains(CharSequence text)")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("String")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("指定されたテキストを含むLIKE句用の検索文字列を生成する。引数のテキストはエスケープ処理される "),l("Badge",{attrs:{text:"0.12.0+"}})],1)]),t._v(" "),l("tr",[l("td",{staticStyle:{"text-align":"left"}},[t._v("SF.endsWith(CharSequence text)")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("String")]),t._v(" "),l("td",{staticStyle:{"text-align":"left"}},[t._v("指定されたテキストで終わるLIKE句用の検索文字列を生成する。数のテキストはエスケープ処理される "),l("Badge",{attrs:{text:"0.12.0+"}})],1)])])])])}),[],!1,null,null,null);e.default=_.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/15.59887967.js b/docs/assets/js/15.59887967.js deleted file mode 100644 index 02f31ee..0000000 --- a/docs/assets/js/15.59887967.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[15],{212:function(t,a,s){"use strict";s.r(a);var e=s(3),n=Object(e.a)({},(function(){var t=this,a=t.$createElement,s=t._self._c||a;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"事前準備"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#事前準備"}},[t._v("#")]),t._v(" 事前準備")]),t._v(" "),s("p",[s("strong",[t._v("uroboroSQL")]),t._v("を利用した基本的なDB操作を説明します。")]),t._v(" "),s("h2",{attrs:{id:"db接続"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#db接続"}},[t._v("#")]),t._v(" DB接続")]),t._v(" "),s("p",[t._v("まず最初にSQLを実行するDBへの接続を行います。"),s("br"),t._v("\nDBに接続するためには"),s("code",[t._v("SqlConfig")]),t._v("インタフェースのインスタンスを生成する必要があります。")]),t._v(" "),s("p",[s("code",[t._v("SqlConfig")]),t._v("インスタンスは"),s("code",[t._v("UroboroSQL")]),t._v("クラスのビルダーメソッドを使用して生成します。")]),t._v(" "),s("div",{staticClass:"language-java line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-java"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// JDBC接続を行うSqlConfigの生成")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// SqlConfig config = UroboroSQL.builder(url, user, password).build();")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlConfig")]),t._v(" config "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("UroboroSQL")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("builder")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"jdbc:h2:mem:uroborosql"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"sa"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('""')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("build")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// DataSourceを使用したDB接続を行うSqlConfigの生成")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// SqlConfig config = UroboroSQL.builder(datasource).build();")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Context")]),t._v(" context "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("InitialContext")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DataSource")]),t._v(" dataSource "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" context"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("lookup")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"java:comp/env/jdbc/datasource"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlConfig")]),t._v(" config "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("UroboroSQL")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("builder")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("dataSource"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("build")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br"),s("span",{staticClass:"line-number"},[t._v("9")]),s("br"),s("span",{staticClass:"line-number"},[t._v("10")]),s("br")])]),s("p",[s("code",[t._v("UroboroSQL")]),t._v("クラスを使って"),s("code",[t._v("SqlConfig")]),t._v("インスタンスを生成する際、"),s("strong",[t._v("uroboroSQL")]),t._v("の挙動を変更する各種の設定も合わせて行うことができます。"),s("br"),t._v("\n設定の詳細については"),s("a",{attrs:{href:"../configuration"}},[t._v("設定")]),t._v("を参照してください。")]),t._v(" "),s("div",{staticClass:"custom-block warning"},[s("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),s("p",[s("code",[t._v("SqlConfig")]),t._v("インスタンスはアプリケーション内で接続先毎に1つ保持するようにしてください。\nSQL実行の都度生成すると、不要なインスタンスの生成やSQLロード処理が実行されます。")])]),t._v(" "),s("h2",{attrs:{id:"sqlagentインスタンスの取得"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#sqlagentインスタンスの取得"}},[t._v("#")]),t._v(" SqlAgentインスタンスの取得")]),t._v(" "),s("p",[t._v("次にすべての操作の基点となる"),s("code",[t._v("SqlAgent")]),t._v("インタフェースのインスタンスを取得します。")]),t._v(" "),s("div",{staticClass:"language-java line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-java"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlAgent")]),t._v(" agent "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" config"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("agent")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// この中でSQLの操作を行う")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br")])]),s("p",[t._v("SQLの操作はすべてこの"),s("code",[t._v("SqlAgent")]),t._v("インスタンスを使って行うことになります。")]),t._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),s("p",[s("code",[t._v("SqlAgent")]),t._v("インタフェースは"),s("code",[t._v("java.lang.AutoClosable")]),t._v("インタフェースを実装しており、"),s("code",[t._v("try-with-resources")]),t._v("で記述することで終了時に自動的にclose処理が呼び出され、中で保持しているConnectionやPreparedStatementなどのリソースオブジェクトも正しくクローズされます。")])]),t._v(" "),s("h2",{attrs:{id:"sqlファイルの配置"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#sqlファイルの配置"}},[t._v("#")]),t._v(" SQLファイルの配置")]),t._v(" "),s("p",[s("strong",[t._v("uroboroSQL")]),t._v("ではSQL文の書かれたファイルのパスを指定してSQLを実行することができます。"),s("br"),t._v("\nその際、SQLファイルはクラスパスから参照できる場所に配置されている必要があります。")]),t._v(" "),s("div",{staticClass:"language-md line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-md"}},[s("code",[t._v("src\n └─main\n └─resources\n └─sql\n ├─department\n │ ├─insert_department.sql\n │ └─select_department.sql\n └─employee\n ├─insert_employee.sql\n └─select_employee.sql\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br"),s("span",{staticClass:"line-number"},[t._v("9")]),s("br"),s("span",{staticClass:"line-number"},[t._v("10")]),s("br")])]),s("p",[t._v("上のようなフォルダ構成の場合で、"),s("code",[t._v("src/main/resources/")]),t._v("をクラスパスに指定すれば、\nその下の"),s("code",[t._v("sql")]),t._v("フォルダをルートフォルダとした相対パスでSQLファイルを指定することができます。")]),t._v(" "),s("div",{staticClass:"custom-block tip"},[s("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),s("p",[t._v("SQLファイルのルートフォルダ(初期値:"),s("code",[t._v("sql")]),t._v(")は変更することができます。"),s("br"),t._v("\n変更方法の詳細は "),s("RouterLink",{attrs:{to:"/configuration/sql-manager.html#sqlファイルルートフォルダの設定"}},[t._v("SQLファイルルートフォルダの設定")]),t._v(" を参照してください。")],1)]),t._v(" "),s("h3",{attrs:{id:"sql名"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#sql名"}},[t._v("#")]),t._v(" SQL名")]),t._v(" "),s("p",[t._v("SQLファイルの指定する際のファイルパスを"),s("code",[t._v("SQL名")]),t._v("といいます。"),s("br"),t._v("\n上記フォルダ構成の場合、それぞれのSQLファイルは以下のような"),s("code",[t._v("SQL名")]),t._v("となります。")]),t._v(" "),s("table",[s("thead",[s("tr",[s("th",{staticStyle:{"text-align":"left"}},[t._v("SQLファイルパス(SQLルートフォルダから)")]),t._v(" "),s("th",{staticStyle:{"text-align":"left"}},[t._v("SQL名")])])]),t._v(" "),s("tbody",[s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("department/insert_department.sql")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("department/insert_department")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("department/select_department.sql")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("department/select_department")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("employee/insert_employee.sql")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("employee/insert_employee")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("employee/select_employee.sql")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("employee/select_employee")])])])]),t._v(" "),s("p",[t._v("SQLファイルの配置は設定によりカスタマイズが可能です。SQLファイル配置のカスタマイズについては "),s("RouterLink",{attrs:{to:"/advanced/#sqlファイルの解決ルール"}},[t._v("SQLファイルの解決ルール")]),t._v(" を参照してください。")],1),t._v(" "),s("h3",{attrs:{id:"共通api"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#共通api"}},[t._v("#")]),t._v(" 共通API")]),t._v(" "),s("p",[t._v("検索("),s("a",{attrs:{href:"https://github.com/future-architect/uroborosql/blob/master/src/main/java/jp/co/future/uroborosql/fluent/SqlQuery.java",target:"_blank",rel:"noopener noreferrer"}},[t._v("SqlQuery"),s("OutboundLink")],1),t._v(")、更新("),s("a",{attrs:{href:"https://github.com/future-architect/uroborosql/blob/master/src/main/java/jp/co/future/uroborosql/fluent/SqlUpdate.java",target:"_blank",rel:"noopener noreferrer"}},[t._v("SqlUpdate"),s("OutboundLink")],1),t._v(")、バッチ更新("),s("a",{attrs:{href:"https://github.com/future-architect/uroborosql/blob/master/src/main/java/jp/co/future/uroborosql/fluent/SqlBatch.java",target:"_blank",rel:"noopener noreferrer"}},[t._v("SqlBatch"),s("OutboundLink")],1),t._v(")、ストアドプロシージャ実行("),s("a",{attrs:{href:"https://github.com/future-architect/uroborosql/blob/master/src/main/java/jp/co/future/uroborosql/fluent/Procedure.java",target:"_blank",rel:"noopener noreferrer"}},[t._v("Procedure"),s("OutboundLink")],1),t._v(")を行うクラスは、バインドパラメータや置換文字列の設定を行うためのAPI("),s("a",{attrs:{href:"https://github.com/future-architect/uroborosql/blob/master/src/main/java/jp/co/future/uroborosql/fluent/SqlFluent.java",target:"_blank",rel:"noopener noreferrer"}},[t._v("SqlFluent"),s("OutboundLink")],1),t._v(")を実装しています。")]),t._v(" "),s("p",[t._v("バインドパラメータや置換文字列の設定はこのAPIを利用して設定を行ってください。"),s("br"),t._v("\n流れるAPI(Fluent API)を採用しているため、値の設定は連続して行うことができるようになっています。")]),t._v(" "),s("p",[t._v("パラメータ設定例")]),t._v(" "),s("div",{staticClass:"language-java line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-java"}},[s("code",[s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Map")]),s("span",{pre:!0,attrs:{class:"token generics"}},[s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Object")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" department "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" agent"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"department/select_department"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("param")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"dept_no"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("param")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"dept_name"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"sales"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("first")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br")])]),s("table",[s("thead",[s("tr",[s("th",{staticStyle:{"text-align":"left"}},[t._v("主なメソッド")]),t._v(" "),s("th",{staticStyle:{"text-align":"left"}},[t._v("説明")])])]),t._v(" "),s("tbody",[s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v(" SqlFluent#param(String key, V value)")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("バインドパラメータや置換文字列として使用するキーと値のセットを設定する")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v(" SqlFluent#param(String key, Supplier supplier)")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("supplierの評価結果をキーの値としてパラメータに設定する "),s("Badge",{attrs:{text:"0.10.1+"}})],1)]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[s("s",[t._v(" SqlFluent#paramList(String key, V... value)")])]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("IN句のバインドパラメータに使用するキーと値のセットを設定する。"),s("br"),s("Badge",{attrs:{text:"0.14.0+"}}),t._v(" から非推奨。かわりに"),s("code",[t._v("param()")]),t._v("に"),s("code",[t._v("Arrays.asList()")]),t._v("もしくは"),s("code",[t._v("List.of()")]),t._v("を使って"),s("code",[t._v("List型")]),t._v("に詰めて設定してください")],1)]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("SqlFluent#paramMap(Map paramMap)")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("引数のMapのKey/Valueのセットをパラメータに設定する")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v(" SqlFluent#paramBean(V bean)")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("引数として渡されたbeanのフィールド名と値のセットをパラメータに設定する")])])])]),t._v(" "),s("p",[t._v("他にもパラメータの型に応じたパラメータ設定メソッドが提供されています。")])])}),[],!1,null,null,null);a.default=n.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/16.9f524f2e.js b/docs/assets/js/16.9f524f2e.js deleted file mode 100644 index a2cb223..0000000 --- a/docs/assets/js/16.9f524f2e.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[16],{217:function(t,s,a){"use strict";a.r(s);var n=a(3),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"daoインタフェース"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#daoインタフェース"}},[t._v("#")]),t._v(" DAOインタフェース")]),t._v(" "),a("p",[a("strong",[t._v("uroboroSQL")]),t._v("はDAO(Data Access Object)を用いた単一テーブルへのCRUDに対応しています。")]),t._v(" "),a("p",[t._v("下記のテーブルとそれに対応するエンティティクラスを例として説明します。")]),t._v(" "),a("div",{staticClass:"language-sql line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sql"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("-- MySQLの場合")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("create")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("table")]),t._v(" employee "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n emp_no number"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("6")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("not")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("null")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("auto_increment")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" first_name "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("varchar")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("20")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("not")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("null")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" last_name "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("varchar")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("20")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("not")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("null")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" birth_date "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("date")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("not")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("null")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" gender "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("char")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("not")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("null")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" lock_version number"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("not")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("null")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("constraint")]),t._v(" employee_PKC "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("primary")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("key")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("emp_no"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("-- Postgresqlの場合")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("create")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("table")]),t._v(" employee "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n emp_no "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("serial")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("not")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("null")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" first_name "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("varchar")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("20")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("not")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("null")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" last_name "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("varchar")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("20")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("not")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("null")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" birth_date "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("date")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("not")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("null")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" gender "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("char")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("not")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("null")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" lock_version number"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("not")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("null")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("constraint")]),t._v(" employee_PKC "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("primary")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("key")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("emp_no"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br")])]),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Employee")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("long")]),t._v(" empNo"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" firstName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" lastName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("LocalDate")]),t._v(" birthDate"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Gender")]),t._v(" gender"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("long")]),t._v(" lockVersion "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 中略 getter/setter")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br")])]),a("h2",{attrs:{id:"エンティティクラスの検索"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#エンティティクラスの検索"}},[t._v("#")]),t._v(" エンティティクラスの検索")]),t._v(" "),a("h3",{attrs:{id:"キーを指定した1件取得-sqlagent-find"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#キーを指定した1件取得-sqlagent-find"}},[t._v("#")]),t._v(" キーを指定した1件取得("),a("code",[t._v("SqlAgent#find")]),t._v(")")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("メソッド名")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("戻り値の型")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlAgent#find(Class, Object...)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Optional")])])])]),t._v(" "),a("p",[t._v("主キーを指定してエンティティを取得します。PKカラムの数と引数に指定するキーの数は合わせる必要があります。")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// emp_no = 1 のレコードをエンティティとして取得")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Optional")]),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Employee")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" employee "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("find")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Employee")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br")])]),a("h3",{attrs:{id:"条件指定検索-sqlagent-query"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#条件指定検索-sqlagent-query"}},[t._v("#")]),t._v(" 条件指定検索("),a("code",[t._v("SqlAgent#query")]),t._v(") "),a("Badge",{attrs:{text:"0.11.0+"}})],1),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("メソッド名")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("戻り値の型")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlAgent#query(Class)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlEntityQuery")])])])]),t._v(" "),a("p",[t._v("エンティティクラスを利用した検索を行うためのオブジェクト("),a("code",[t._v("SqlEntityQuery")]),t._v(")を取得します。"),a("br"),t._v(" "),a("code",[t._v("SqlEntityQuery")]),t._v("に対して抽出条件の指定を行い、抽出条件に該当するエンティティを取得します。")]),t._v(" "),a("hr"),t._v(" "),a("h3",{attrs:{id:"抽出条件の指定-sqlentityquery-equal-notequal-greaterthan-lessthan-greaterequal-lessequal-in-notin-like-startswith-endswith-contains-notlike-notstartswith-notendswith-notcontains-between-isnull-isnotnull-where"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#抽出条件の指定-sqlentityquery-equal-notequal-greaterthan-lessthan-greaterequal-lessequal-in-notin-like-startswith-endswith-contains-notlike-notstartswith-notendswith-notcontains-between-isnull-isnotnull-where"}},[t._v("#")]),t._v(" 抽出条件の指定("),a("code",[t._v("SqlEntityQuery#equal")]),t._v(" /"),a("code",[t._v("#notEqual")]),t._v(" /"),a("code",[t._v("#greaterThan")]),t._v(" /"),a("code",[t._v("#lessThan")]),t._v(" /"),a("code",[t._v("#greaterEqual")]),t._v(" /"),a("code",[t._v("#lessEqual")]),t._v(" /"),a("code",[t._v("#in")]),t._v(" /"),a("code",[t._v("#notIn")]),t._v(" /"),a("code",[t._v("#like")]),t._v(" /"),a("code",[t._v("#startsWith")]),t._v(" /"),a("code",[t._v("#endsWith")]),t._v(" /"),a("code",[t._v("#contains")]),t._v(" /"),a("code",[t._v("#notLike")]),t._v(" /"),a("code",[t._v("#notStartsWith")]),t._v(" /"),a("code",[t._v("#notEndsWith")]),t._v(" /"),a("code",[t._v("#notContains")]),t._v(" /"),a("code",[t._v("#between")]),t._v(" /"),a("code",[t._v("#isNull")]),t._v(" /"),a("code",[t._v("#isNotNull")]),t._v(" /"),a("code",[t._v("#where")]),t._v(")")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("抽出条件指定メソッド記述例")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("生成されるwhere句の条件式")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("補足説明")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v('equal("col", "value")')]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("col = 'value'")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}})]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v('notEqual("col", "value")')]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("col != 'value'")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}})]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v('greaterThan("col", 1)')]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("col > 1")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}})]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v('lessThan("col", 1)')]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("col < 1")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}})]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v('greaterEqual("col", 1)')]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("col >= 1")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}})]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v('lessEqual("col", 1)')]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("col <= 1")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}})]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v('in("col", "val1", "val2")')]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("col in ('val1', 'val2')")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}})]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v('in("col", List.of("val1", "val2"))')]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("col in ('val1', 'val2')")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}})]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v('notIn("col", "val1", "val2")')]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("col not in ('val1', 'val2')")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}})]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v('notIn("col", List.of("val1", "val2"))')]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("col not in ('val1', 'val2')")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}})]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v('like("col", "%val%")')]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("like '%val%'")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[a("code",[t._v("val")]),t._v("はエスケープされない")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v('startsWith("col", "val")')]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("like 'val%'")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[a("code",[t._v("val")]),t._v("はエスケープされる")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v('endsWith("col", "val")')]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("like '%val'")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[a("code",[t._v("val")]),t._v("はエスケープされる")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v('contains("col", "val")')]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("like '%val%'")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[a("code",[t._v("val")]),t._v("はエスケープされる")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v('notLike("col", "%val%")')]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("not like '%val%'")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[a("code",[t._v("val")]),t._v("はエスケープされない")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v('notStartsWith("col", "val")')]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("not like 'val%'")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[a("code",[t._v("val")]),t._v("はエスケープされる")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v('notEndsWith("col", "val")')]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("not like '%val'")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[a("code",[t._v("val")]),t._v("はエスケープされる")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v('notContains("col", "val")')]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("not like '%val%'")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[a("code",[t._v("val")]),t._v("はエスケープされる")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v('between("col", 1, 2)')]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("col between 1 and 2")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}})]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v('isNull("col")')]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("col is null")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}})]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v('isNotNull("col")')]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("col is not null")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}})]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v('where("col = 1 or col = 2")')]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("(col = 1 or col = 2)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("もし複数回"),a("code",[t._v("where()")]),t._v("が呼び出された場合は条件を "),a("code",[t._v("AND")]),t._v(" で結合する")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v('where("col = /*col1*/", "col1", 1)')]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("(col = 1/*col1*/)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("パラメータの指定(1件)付き")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v('where("col = /*col1*/ or col = /*col2*/", Map.of("col1", 1, "col2", 2))')]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("(col = 1/*col1*/ or col = 2/*col2*/)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("パラメータの指定(複数件)付き")])])])]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// emp_no = 1 のレコードをListで取得")]),t._v("\nagent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Employee")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("equal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"emp_no"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("collect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// emp_no = 10 又は 20 のレコードをListで取得")]),t._v("\nagent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Employee")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("in")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"emp_no"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("20")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("collect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// first_name like '%Bob%' のレコードをListで取得")]),t._v("\nagent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Employee")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("contains")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"first_name"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Bob"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("collect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// where句を直接記述(first_name = 'Bob' and last_name = 'Smith')した結果をListで取得")]),t._v("\nagent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Employee")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("where")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("\"first_name =''/*firstName*/\"")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"firstName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Bob"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("where")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("\"last_name = ''/*lastName*/\"")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"lastName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Smith"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("collect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br")])]),a("div",{staticClass:"custom-block danger"},[a("p",{staticClass:"custom-block-title"},[t._v("注意")]),t._v(" "),a("p",[a("code",[t._v("SqlEntityQuery")]),t._v("に対して抽出条件を指定する場合"),a("code",[t._v("param")]),t._v("メソッドは使用しないでください。\n"),a("code",[t._v("SqlEntityQuery#param()")]),t._v("には"),a("code",[t._v("@Deprecated")]),t._v("が付与されており、将来削除される予定です。")])]),t._v(" "),a("h3",{attrs:{id:"ソート順-sqlentityquery-asc-desc-や取得データの件数-limit-、開始位置-offset-、悲観ロック-forupdate-forupdatenowait-forupdatewait-の指定"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#ソート順-sqlentityquery-asc-desc-や取得データの件数-limit-、開始位置-offset-、悲観ロック-forupdate-forupdatenowait-forupdatewait-の指定"}},[t._v("#")]),t._v(" ソート順("),a("code",[t._v("SqlEntityQuery#asc")]),t._v(" /"),a("code",[t._v("#desc")]),t._v(")や取得データの件数("),a("code",[t._v("#limit")]),t._v(")、開始位置("),a("code",[t._v("#offset")]),t._v(")、悲観ロック("),a("code",[t._v("#forUpdate")]),t._v(" /"),a("code",[t._v("#forUpdateNoWait")]),t._v(" /"),a("code",[t._v("#forUpdateWait")]),t._v(")の指定 "),a("Badge",{attrs:{text:"0.11.0+"}})],1),t._v(" "),a("p",[a("code",[t._v("SqlEntityQuery")]),t._v("では抽出条件に加えて検索結果のソート順や取得件数の制限、開始位置の指定、明示的なロック指定が行えます。")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("条件指定メソッド記述例")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("生成されるSQL")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("補足説明")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v('asc("col1", "col2")')]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("order by col1 asc, col2 asc")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[a("code",[t._v("NULLS")]),t._v("が有効な場合は"),a("code",[t._v("NULLS LAST")]),t._v("が出力される")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v('asc("col1", Nulls.FIRST)')]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("order by col1 asc NULLS FIRST")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("複数回"),a("code",[t._v("asc()")]),t._v("が呼び出された場合は呼び出し順に並べる")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v('desc("col1", "col2")')]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("order by col1 desc, col2 desc")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[a("code",[t._v("NULLS")]),t._v("が有効な場合は"),a("code",[t._v("NULLS LAST")]),t._v("が出力される")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v('desc("col1", Nulls.FIRST)')]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("order by col1 desc NULLS FIRST")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("複数回"),a("code",[t._v("asc()")]),t._v("が呼び出された場合は呼び出し順に並べる")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("limit(10)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("LIMIT 10")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("接続しているDBで"),a("code",[t._v("limit")]),t._v("句が使用できない場合は"),a("code",[t._v("UroborosqlRuntimeException")]),t._v("がスローされる")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("offset(10)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("OFFSET 10")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("接続しているDBで"),a("code",[t._v("offset")]),t._v("句が使用できない場合は"),a("code",[t._v("UroborosqlRuntimeException")]),t._v("がスローされる")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("forUpdate()"),a("Badge",{attrs:{text:"0.14.0+",vertical:"middle"}})],1),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("FOR UPDATE")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("接続しているDBで"),a("code",[t._v("FOR UPDATE")]),t._v("句が使用できない場合は"),a("code",[t._v("UroborosqlRuntimeException")]),t._v("がスローされる")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("forUpdateNoWait()"),a("Badge",{attrs:{text:"0.14.0+",vertical:"middle"}})],1),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("FOR UPDATE NOWAIT")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("接続しているDBで"),a("code",[t._v("FOR UPDATE NOWAIT")]),t._v("句が使用できない場合は"),a("code",[t._v("UroborosqlRuntimeException")]),t._v("がスローされる")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("forUpdateWait()"),a("Badge",{attrs:{text:"0.14.0+",vertical:"middle"}})],1),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("FOR UPDATE WAIT 10")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("接続しているDBで"),a("code",[t._v("FOR UPDATE WAIT")]),t._v("句が使用できない場合は"),a("code",[t._v("UroborosqlRuntimeException")]),t._v("がスローされる")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("forUpdateWait(30)"),a("Badge",{attrs:{text:"0.14.0+",vertical:"middle"}})],1),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("FOR UPDATE WAIT 30")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("接続しているDBで"),a("code",[t._v("FOR UPDATE WAIT")]),t._v("句が使用できない場合は"),a("code",[t._v("UroborosqlRuntimeException")]),t._v("がスローされる")])])])]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// birth_dateの降順、first_nameの昇順でソートした結果を Listで取得")]),t._v("\nagent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Employee")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("desc")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"birth_date"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("asc")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"first_name"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("collect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// emp_no の昇順でソートした結果の3行目から5件取得")]),t._v("\nagent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Employee")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("asc")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"emp_no"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("offset")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("limit")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("5")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("collect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 明示的な行ロックを行う")]),t._v("\nagent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Employee")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("forUpdate")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("collect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br")])]),a("h3",{attrs:{id:"オプティマイザーヒントの指定-sqlentityquery-hint"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#オプティマイザーヒントの指定-sqlentityquery-hint"}},[t._v("#")]),t._v(" オプティマイザーヒントの指定("),a("code",[t._v("SqlEntityQuery#hint")]),t._v(") "),a("Badge",{attrs:{text:"0.18.0+"}})],1),t._v(" "),a("p",[a("code",[t._v("SqlEntityQuery#hint()")]),t._v("を使用することで、SQLに対してオプティマイザーヒントを指定することができます。")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlAgent")]),t._v(" agent "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("\nagent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("User")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("hint")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ORDERED"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("lessThan")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"age"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("30")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("collect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br")])]),a("p",[t._v("出力されるSQL(Oracleの場合)")]),t._v(" "),a("div",{staticClass:"language-sql line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sql"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("select")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*+ ORDERED */")]),t._v(" id"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" age"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("user")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("where")]),t._v(" age "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("30")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])]),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[t._v("注意")]),t._v(" "),a("p",[t._v("オプティマイザーヒントの指定は、利用するDBがオプティマイザーヒントをサポートしている場合に有効になります。"),a("br"),t._v("\nまた、指定可能なヒント句は利用するDBに依存します。")])]),t._v(" "),a("h3",{attrs:{id:"検索結果の取得-sqlentityqury-collect-first-one-select-stream"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#検索結果の取得-sqlentityqury-collect-first-one-select-stream"}},[t._v("#")]),t._v(" 検索結果の取得("),a("code",[t._v("SqlEntityQury#collect")]),t._v(" /"),a("code",[t._v("#first")]),t._v(" /"),a("code",[t._v("#one")]),t._v(" /"),a("code",[t._v("#select")]),t._v(" /"),a("code",[t._v("#stream")]),t._v(")")]),t._v(" "),a("p",[a("code",[t._v("SqlEntityQuery")]),t._v("から抽出条件に該当するエンティティを取得します。")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("メソッド")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("説明")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("collect()")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("検索結果をエンティティのリストとして取得する")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("first()")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("検索結果の先頭行を取得する")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("one()")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("検索結果の先頭行を取得する。検索結果が2件以上の場合"),a("code",[t._v("DataNonUniqueException")]),t._v("をスローする")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("Stream select(String col, Class type) "),a("Badge",{attrs:{text:"0.18.0+"}})],1),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("検索結果の指定したカラムの値を"),a("code",[t._v("java.util.stream.Stream")]),t._v("として取得する。")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("stream()")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("検索結果を"),a("code",[t._v("java.util.stream.Stream")]),t._v("として取得する")])])])]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Listで取得")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("List")]),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Enployee")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" employees "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Employee")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("collect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 検索結果の先頭行を取得")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Optional")]),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Enployee")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" employee "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Employee")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("first")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 検索結果(カラム値)の取得")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" employeeName "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Employee")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("equal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"employeeId"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("select")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"employeeName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("findFirst")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br")])]),a("h3",{attrs:{id:"集約関数-sqlentityquery-count-sum-sum-min-max-exists-notexists"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#集約関数-sqlentityquery-count-sum-sum-min-max-exists-notexists"}},[t._v("#")]),t._v(" 集約関数("),a("code",[t._v("SqlEntityQuery#count")]),t._v(" /"),a("code",[t._v("#sum")]),t._v(" /"),a("code",[t._v("#sum")]),t._v(" /"),a("code",[t._v("#min")]),t._v(" /"),a("code",[t._v("#max")]),t._v(" /"),a("code",[t._v("#exists")]),t._v(" /"),a("code",[t._v("#notExists")]),t._v(") "),a("Badge",{attrs:{text:"0.12.0+"}})],1),t._v(" "),a("p",[a("code",[t._v("SqlEntityQuery")]),t._v("ではエンティティを取得する他に結果の集計を行うこともできます。")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("メソッド")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("説明")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("count()")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("検索結果の件数を取得する")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("count(String col)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("検索結果のうち、引数で指定したカラムがNULLでない行の件数を取得する")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("sum(String col)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("検索結果のうち、引数で指定したカラムの合計値を取得する")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("min(String col)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("検索結果のうち、引数で指定したカラムの最小値を取得する")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("max(String col)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("検索結果のうち、引数で指定したカラムの最大値を取得する")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("exists(Runnable runnable)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("検索結果が1件以上ある場合に引数で渡した関数を実行する")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("notExists(Runnable runnable)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("検索結果が0件の場合に引数で渡した関数を実行する")])])])]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 検索結果の件数を取得")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("long")]),t._v(" count "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Employee")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("count")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 検索結果が1件以上の場合にログを出力する")]),t._v("\nagent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Employee")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("greaterThan")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"emp_no"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("exists")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("info")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Employee(emp_no > 10) exists."')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("集約関数を使用すると、検索結果からEntityオブジェクトを生成しないためメモリ効率が良くなります。\n以下2つの処理結果は同じですが、メモリの使い方が違います。")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// collect()を使用すると、検索結果がエンティティに変換されるためメモリを使用する")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("long")]),t._v(" count "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Employee")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("collect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("size")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// count()を使用すると件数のみ取得できる(エンティティは生成されない)")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("long")]),t._v(" count "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Employee")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("count")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br")])])]),t._v(" "),a("h2",{attrs:{id:"エンティティの挿入"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#エンティティの挿入"}},[t._v("#")]),t._v(" エンティティの挿入")]),t._v(" "),a("h3",{attrs:{id:"_1件の挿入-sqlagent-insert-insertandreturn"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_1件の挿入-sqlagent-insert-insertandreturn"}},[t._v("#")]),t._v(" 1件の挿入("),a("code",[t._v("SqlAgent#insert")]),t._v("/"),a("code",[t._v("#insertAndReturn")]),t._v(")")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("メソッド名")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("戻り値の型")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v(" SqlAgent#insert(E)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("int")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v(" SqlAgent#insertAndReturn(E) "),a("Badge",{attrs:{text:"0.15.0+"}})],1),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("E")])])])]),t._v(" "),a("p",[t._v("エンティティクラスのインスタンスを使って1レコードの挿入を行います。")]),t._v(" "),a("ul",[a("li",[a("a",{attrs:{href:"#id-generatedvalue-sequencegenerator"}},[t._v("@Id")]),t._v("アノテーションの指定があるフィールド")]),t._v(" "),a("li",[t._v("対するカラムが自動採番となっているフィールド")])]),t._v(" "),a("p",[t._v("の型がprimitive型の場合、もしくはフィールドの値が"),a("code",[t._v("null")]),t._v("の場合、カラムの値は挿入時に自動採番されます。"),a("br"),t._v("\nまた、挿入により採番された値がエンティティの該当フィールドにも設定されます。"),a("br"),t._v("\nフィールドに値を指定した場合は自動採番カラムであっても指定した値が挿入されます。")]),t._v(" "),a("p",[a("code",[t._v("AndReturn")]),t._v("が付くメソッドでは、挿入したエンティティオブジェクトを戻り値として取得できるため、\nエンティティの挿入に続けて処理を行う場合に便利です。")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Employee")]),t._v(" employee "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Employee")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\nemployee"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setFirstName")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Susan"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\nemployee"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setLastName")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Davis"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\nemployee"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setBirthDate")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("LocalDate")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("of")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1969")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\nemployee"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setGender")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Gender")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("FEMALE"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v('// MALE("M"), FEMALE("F"), OTHER("O")')]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 1件の挿入")]),t._v("\nagent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("insert")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("employee"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("System")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("println")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("employee"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getEmpNo")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 自動採番された値が出力される")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br")])]),a("h3",{attrs:{id:"複数件の挿入-sqlagent-inserts-insertsandreturn"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#複数件の挿入-sqlagent-inserts-insertsandreturn"}},[t._v("#")]),t._v(" 複数件の挿入("),a("code",[t._v("SqlAgent#inserts")]),t._v(" /"),a("code",[t._v("#insertsAndReturn")]),t._v(") "),a("Badge",{attrs:{text:"0.10.0+"}})],1),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("メソッド名")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("戻り値の型")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlAgent#inserts(Stream)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("int")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlAgent#inserts(Stream, InsertsType)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("int")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlAgent#inserts(Stream, InsertsCondition)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("int")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlAgent#inserts(Stream, InsertsCondition, InsertsType)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("int")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlAgent#insertsAndReturn(Stream) "),a("Badge",{attrs:{text:"0.15.0+"}})],1),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Stream")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlAgent#insertsAndReturn(Stream, InsertsType) "),a("Badge",{attrs:{text:"0.15.0+"}})],1),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Stream")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlAgent#insertsAndReturn(Stream, InsertsCondition) "),a("Badge",{attrs:{text:"0.15.0+"}})],1),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Stream")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlAgent#insertsAndReturn(Stream, InsertsCondition, InsertsType) "),a("Badge",{attrs:{text:"0.15.0+"}})],1),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Stream")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlAgent#inserts(Class, Stream)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("int")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlAgent#inserts(Class, Stream, InsertsType)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("int")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlAgent#inserts(Class, Stream, InsertsCondition)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("int")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlAgent#inserts(Class, Stream, InsertsCondition, InsertsType)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("int")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlAgent#insertsAndReturn(Class, Stream) "),a("Badge",{attrs:{text:"0.15.0+"}})],1),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Stream")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlAgent#insertsAndReturn(Class, Stream, InsertsType) "),a("Badge",{attrs:{text:"0.15.0+"}})],1),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Stream")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlAgent#insertsAndReturn(Class, Stream, InsertsCondition) "),a("Badge",{attrs:{text:"0.15.0+"}})],1),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Stream")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlAgent#insertsAndReturn(Class, Stream, InsertsCondition, InsertsType) "),a("Badge",{attrs:{text:"0.15.0+"}})],1),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Stream")])])])]),t._v(" "),a("p",[a("code",[t._v("java.util.stream.Stream")]),t._v("経由で渡される複数のエンティティインスタンスを挿入します。")]),t._v(" "),a("ul",[a("li",[a("a",{attrs:{href:"#id-generatedvalue-sequencegenerator"}},[t._v("@Id")]),t._v("アノテーションの指定があるフィールド")]),t._v(" "),a("li",[t._v("対するカラムが自動採番となっているフィールド")])]),t._v(" "),a("p",[t._v("の型がprimitive型の場合、もしくはフィールドの値が"),a("code",[t._v("null")]),t._v("の場合、カラムの値は挿入時に自動採番されます。"),a("br"),t._v("\nまた、挿入により採番された値がエンティティの該当フィールドにも設定されます。"),a("br"),t._v("\nフィールドに値を指定した場合は自動採番カラムであっても指定した値が挿入されます。")]),t._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[t._v("注意")]),t._v(" "),a("p",[t._v("複数件の挿入で生成されるSQLでは、行毎のフィールドの値の有無を変更することができません。"),a("br"),t._v("\n最初に挿入するエンティティで"),a("code",[t._v("@Id")]),t._v("の指定があるフィールドや自動採番カラムに対するフィールドに値を設定する場合は、\n2件目以降のエンティティにも必ず値を設定するようにしてください。"),a("br"),t._v("\nまた、最初に挿入するエンティティで"),a("code",[t._v("@Id")]),t._v("の指定があるフィールドや自動採番カラムに対するフィールドの値に"),a("code",[t._v("null")]),t._v("を設定する場合は、\n2件目以降のエンティティで値を設定していても無視されて自動採番されます。")])]),t._v(" "),a("p",[a("code",[t._v("AndReturn")]),t._v("が付くメソッドでは、挿入したエンティティオブジェクトの"),a("code",[t._v("java.util.stream.Stream")]),t._v("を戻り値として取得できるため、\nエンティティの挿入に続けて処理を行う場合に便利です。")]),t._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[t._v("注意")]),t._v(" "),a("p",[a("code",[t._v("AndReturn")]),t._v("の戻り値となる"),a("code",[t._v("Stream")]),t._v("を生成する際、挿入したエンティティを全件メモリ上に保持します。\n大量データの挿入を行うとOOMEが発生する場合があるので、"),a("code",[t._v("insertsAndReturn")]),t._v("を使用する場合は挿入する\nデータの件数に気をつけてください。件数が多い場合は一度"),a("code",[t._v("inserts")]),t._v("で挿入した後に、再度検索するといった方法を検討してください。")])]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 1件の挿入")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Department")]),t._v(" dept "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Department")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\ndept"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setDeptName")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"sales"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\nagent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("insert")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("dept"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 複数件の挿入(EmployeeとDeptEmpの挿入)")]),t._v("\nagent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("inserts")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("insertsAndReturn")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Employee")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("stream")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("map")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("e "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DepEmp")]),t._v(" deptEmp "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DeptEmp")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n deptEmp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setEmpNo")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("e"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getEmpNo")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n deptEmp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setDepNo")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("dept"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getDepNo")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" deptEmp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br")])]),a("h3",{attrs:{id:"挿入方法-insertstype-の指定"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#挿入方法-insertstype-の指定"}},[t._v("#")]),t._v(" 挿入方法(InsertsType)の指定")]),t._v(" "),a("p",[a("code",[t._v("InsertsType")]),t._v("を指定することで実行される挿入用のSQLを変更することが出来ます。")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("InsertsType")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("説明")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("BULK")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[a("code",[t._v("insert into ... values ( ... ), ( ... )")]),t._v("という風にvaluesに複数行の値を出力し一度に複数レコードを挿入する。"),a("br"),t._v("DBがこの記法をサポートしている場合に指定可能。DBが未サポートの場合、指定しても"),a("code",[t._v("BATCH")]),t._v("として実行される。")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("BATCH")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[a("code",[t._v("java.sql.PreparedStatement#executeBatch()")]),t._v("を使用したバッチSQL実行")])])])]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Stream")]),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Employee")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" employees "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Employee")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("stream")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("map")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("e "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v(" e"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setEmpNo")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("e"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getEmpNo")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1000")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 複数件の挿入(バッチ実行)")]),t._v("\nagent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("inserts")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("employees"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("InsertsType")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("BATCH"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[a("code",[t._v("InsertsType")]),t._v("は、"),a("RouterLink",{attrs:{to:"/configuration/sql-agent-factory.html#複数件挿入時の挿入方法の初期値設定"}},[t._v("初期値設定")]),t._v("が可能です。")],1)]),t._v(" "),a("h3",{attrs:{id:"挿入条件-insertscondition-の指定"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#挿入条件-insertscondition-の指定"}},[t._v("#")]),t._v(" 挿入条件(InsertsCondition)の指定")]),t._v(" "),a("p",[t._v("挿入用SQLの実行条件を指定します。"),a("br"),t._v(" "),a("code",[t._v("InsertsCondition#test(SqlContext ctx, int count, E entity)")]),t._v("の戻り値が"),a("code",[t._v("true")]),t._v("の場合に挿入用SQLを実行します。"),a("br"),t._v(" "),a("code",[t._v("InsertsCondition")]),t._v("はFunctionalInterfaceのためlambda式が利用できます。")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Stream")]),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Employee")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" employees "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Employee")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("stream")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("map")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("e "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v(" e"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setEmpNo")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("e"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getEmpNo")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1000")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 複数件の挿入(10件毎に挿入)")]),t._v("\nagent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("inserts")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("employees"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" count"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" entity"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v(" count "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br")])]),a("h2",{attrs:{id:"エンティティの更新"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#エンティティの更新"}},[t._v("#")]),t._v(" エンティティの更新")]),t._v(" "),a("h3",{attrs:{id:"_1件の更新-sqlagent-update-updateandreturn"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_1件の更新-sqlagent-update-updateandreturn"}},[t._v("#")]),t._v(" 1件の更新("),a("code",[t._v("SqlAgent#update")]),t._v(" /"),a("code",[t._v("#updateAndReturn")]),t._v(")")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("メソッド名")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("戻り値の型")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v(" SqlAgent#update(E)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("int")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v(" SqlAgent#updateAndReturn(E) "),a("Badge",{attrs:{text:"0.15.0+"}})],1),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("E")])])])]),t._v(" "),a("p",[t._v("エンティティクラスのインスタンスを使って1レコードの更新を行います。")]),t._v(" "),a("p",[t._v("レコード更新時、"),a("a",{attrs:{href:"#version"}},[t._v("@Version")]),t._v("アノテーションの指定があるフィールドに対するカラムはカウントアップされます。"),a("br"),t._v("\nまた、更新された値がエンティティの該当フィールドにも設定されます。")]),t._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[t._v("補足")]),t._v(" "),a("p",[t._v("エンティティクラスのインスタンスを使った1レコードの更新では、"),a("code",[t._v("@Id")]),t._v("を指定したフィールドに対するカラムや自動採番カラムは更新できません。"),a("br"),t._v(" "),a("code",[t._v("@Id")]),t._v("を指定したフィールドに対するカラムや自動採番カラムを更新する場合は、後述する"),a("a",{attrs:{href:"#%E6%9D%A1%E4%BB%B6%E6%8C%87%E5%AE%9A%E3%81%AB%E3%82%88%E3%82%8B%E8%A4%87%E6%95%B0%E4%BB%B6%E3%81%AE%E6%9B%B4%E6%96%B0-sqlagent-update"}},[t._v("条件指定による複数件の更新")]),t._v("を使用してください。")])]),t._v(" "),a("p",[a("code",[t._v("AndReturn")]),t._v("が付くメソッドでは、更新したエンティティオブジェクトを戻り値として取得できるため、\nエンティティの更新に続けて処理を行う場合に便利です。")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[t._v("agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("find")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Employee")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("ifPresent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("employee "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n employee"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setLastName")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Wilson"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("System")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("println")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("employee"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getLockVersion")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 1")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// エンティティの更新")]),t._v("\n agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("update")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("employee"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("System")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("println")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("employee"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getLockVersion")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 2")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br")])]),a("h3",{attrs:{id:"条件指定による複数件の更新-sqlagent-update"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#条件指定による複数件の更新-sqlagent-update"}},[t._v("#")]),t._v(" 条件指定による複数件の更新("),a("code",[t._v("SqlAgent#update")]),t._v(") "),a("Badge",{attrs:{text:"0.15.0+"}})],1),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("メソッド名")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("戻り値の型")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlAgent#update(Class)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlEntityUpdate")])])])]),t._v(" "),a("p",[t._v("更新対象のレコードを抽出する条件を指定して更新を行います。"),a("br"),t._v("\n抽出条件の指定方法は "),a("a",{attrs:{href:"#%E6%8A%BD%E5%87%BA%E6%9D%A1%E4%BB%B6%E3%81%AE%E6%8C%87%E5%AE%9A"}},[t._v("抽出条件の指定")]),t._v(" を参照してください。"),a("br"),t._v("\nまた、"),a("code",[t._v("set()")]),t._v("メソッドで更新対象のフィールドと値を指定することができます。")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// first_name に 'Bob' を含むエンティティの性別を更新")]),t._v("\nagent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("update")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Employee")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("contains")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"firstName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Bob"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("set")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"gender"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Gender")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("MALE"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("count")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br")])]),a("h3",{attrs:{id:"複数件の更新-sqlagent-updates-updatesandreturn"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#複数件の更新-sqlagent-updates-updatesandreturn"}},[t._v("#")]),t._v(" 複数件の更新("),a("code",[t._v("SqlAgent#updates")]),t._v(" /"),a("code",[t._v("#updatesAndReturn")]),t._v(") "),a("Badge",{attrs:{text:"0.15.0+"}})],1),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("メソッド名")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("戻り値の型")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlAgent#updates(Stream)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("int")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlAgent#updates(Stream, UpdatesCondition)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("int")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlAgent#updatesAndReturn(Stream)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Stream")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlAgent#updatesAndReturn(Stream, UpdatesCondition)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Stream")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlAgent#updates(Class, Stream)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("int")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlAgent#updates(Class, Stream, UpdatesCondition)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("int")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlAgent#updatesAndReturn(Class, Stream)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Stream")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlAgent#updatesAndReturn(Class, Stream, UpdatesCondition)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Stream")])])])]),t._v(" "),a("p",[a("code",[t._v("java.util.stream.Stream")]),t._v("経由で渡される複数のエンティティインスタンスを使って更新します。")]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[a("code",[t._v("inserts")]),t._v("と違い必ずバッチSQL実行になります。")])]),t._v(" "),a("p",[t._v("レコード更新時、"),a("a",{attrs:{href:"#version"}},[t._v("@Version")]),t._v("アノテーションの指定があるフィールドに対するカラムはカウントアップされます。"),a("br"),t._v("\nまた、更新された値がエンティティの該当フィールドにも設定されます。")]),t._v(" "),a("p",[a("code",[t._v("AndReturn")]),t._v("が付くメソッドでは、更新したエンティティオブジェクトの"),a("code",[t._v("java.util.stream.Stream")]),t._v("を戻り値として取得できるため、\nエンティティの更新に続けて処理を行う場合に便利です。")]),t._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),a("p",[a("code",[t._v("AndReturn")]),t._v("の戻り値となる"),a("code",[t._v("Stream")]),t._v("を生成する際、更新したエンティティを全件メモリ上に保持します。\n大量データの更新を行うとOOMEが発生する場合があるので、"),a("code",[t._v("updatesAndReturn")]),t._v("を使用する場合は更新する\nデータの件数に気をつけてください。件数が多い場合は一度"),a("code",[t._v("updates")]),t._v("で更新した後に、再度検索するといった方法を検討してください。")])]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 複数件の更新")]),t._v("\nagent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("updates")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Employee")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("stream")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("map")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("e "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n e"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setFirstName")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("e"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getFirstName")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"_new"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" e"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br")])]),a("h3",{attrs:{id:"更新条件-updatescondition-の指定"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#更新条件-updatescondition-の指定"}},[t._v("#")]),t._v(" 更新条件(UpdatesCondition)の指定")]),t._v(" "),a("p",[t._v("更新用SQLの実行条件を指定します。"),a("br"),t._v(" "),a("code",[t._v("UpdatesCondition#test(SqlContext ctx, int count, E entity)")]),t._v("の戻り値が"),a("code",[t._v("true")]),t._v("の場合に更新用SQLを実行します。"),a("br"),t._v(" "),a("code",[t._v("UpdatesCondition")]),t._v("はFunctionalInterfaceのためlambda式が利用できます。")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Stream")]),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Employee")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" employees "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Employee")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("stream")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("map")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("e "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n e"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setFirstName")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("e"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getFirstName")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"_new"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" e"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 複数件の更新(10件毎に挿入)")]),t._v("\nagent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("updates")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("employees"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" count"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" entity"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v(" count "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br")])]),a("h2",{attrs:{id:"エンティティの削除"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#エンティティの削除"}},[t._v("#")]),t._v(" エンティティの削除")]),t._v(" "),a("h3",{attrs:{id:"_1件の削除-sqlagent-delete-deleteandreturn"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_1件の削除-sqlagent-delete-deleteandreturn"}},[t._v("#")]),t._v(" 1件の削除("),a("code",[t._v("SqlAgent#delete")]),t._v(" /"),a("code",[t._v("#deleteAndReturn")]),t._v(")")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("メソッド名")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("戻り値の型")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v(" SqlAgent#delete(E)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("int")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v(" SqlAgent#deleteAndReturn(E) "),a("Badge",{attrs:{text:"0.15.0+"}})],1),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("E")])])])]),t._v(" "),a("p",[t._v("エンティティクラスのインスタンスを使って1レコードの削除を行います。")]),t._v(" "),a("p",[a("code",[t._v("AndReturn")]),t._v("が付くメソッドでは、削除したエンティティオブジェクトを戻り値として取得できるため、\nエンティティの削除に続けて処理を行う場合に便利です。")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[t._v("agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("find")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Employee")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("ifPresent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("employee "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// エンティティの削除")]),t._v("\n agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("delete")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("employee"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br")])]),a("h3",{attrs:{id:"pkを指定した複数件の削除-sqlagent-delete"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#pkを指定した複数件の削除-sqlagent-delete"}},[t._v("#")]),t._v(" PKを指定した複数件の削除("),a("code",[t._v("SqlAgent#delete")]),t._v(") "),a("Badge",{attrs:{text:"0.11.0+"}})],1),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("メソッド名")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("戻り値の型")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlAgent#delete(Class, Object...)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("int")])])])]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// PK(emp_no) = 1 or 2 のエンティティの削除")]),t._v("\nagent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("delete")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Employee")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br")])]),a("h3",{attrs:{id:"条件指定による複数件の削除-sqlagent-delete"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#条件指定による複数件の削除-sqlagent-delete"}},[t._v("#")]),t._v(" 条件指定による複数件の削除("),a("code",[t._v("SqlAgent#delete")]),t._v(") "),a("Badge",{attrs:{text:"0.11.0+"}})],1),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("メソッド名")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("戻り値の型")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlAgent#delete(Class)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlEntityDelete")])])])]),t._v(" "),a("p",[t._v("削除対象のレコードを抽出する条件を指定して削除を行います。"),a("br"),t._v("\n抽出条件の指定方法は "),a("a",{attrs:{href:"#%E6%8A%BD%E5%87%BA%E6%9D%A1%E4%BB%B6%E3%81%AE%E6%8C%87%E5%AE%9A"}},[t._v("抽出条件の指定")]),t._v(" を参照してください。")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// first_name = 'Bob' に該当するエンティティの削除")]),t._v("\nagent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("delete")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Employee")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("contains")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"firstName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Bob"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("count")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br")])]),a("h3",{attrs:{id:"全ての行を削除-sqlagent-truncate"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#全ての行を削除-sqlagent-truncate"}},[t._v("#")]),t._v(" 全ての行を削除("),a("code",[t._v("SqlAgent#truncate")]),t._v(") "),a("Badge",{attrs:{text:"0.17.0+"}})],1),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("メソッド名")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("戻り値の型")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlAgent#truncate(Class)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlAgent")])])])]),t._v(" "),a("p",[t._v("エンティティクラスとマッピングされているテーブルの全てのレコードを"),a("code",[t._v("TRUNCATE")]),t._v("文により削除します。\n一般的に大量レコードの削除は、"),a("code",[t._v("TRUNCATE")]),t._v("文による削除のほうが性能上有利ですが、DBMSによってはロールバックできませんので、注意してください。")]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("PostgreSQLは、"),a("code",[t._v("TRUNCATE")]),t._v("文のロールバック可能です。")])]),t._v(" "),a("p",[a("code",[t._v("SqlAgent#truncate")]),t._v("は、"),a("code",[t._v("SqlAgent")]),t._v("を戻り値として返すため、"),a("code",[t._v("SqlAgent#truncate")]),t._v("に続けて、"),a("code",[t._v("SqlAgent#inserts")]),t._v("をつなげることにより、\nテーブルの洗い替えを実装することが可能です。")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 全てのレコードを削除")]),t._v("\nagent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("truncate")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Employee")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// テーブルの洗い替え")]),t._v("\nagent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("truncate")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Employee")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("inserts")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("employees"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("stream")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br")])]),a("h2",{attrs:{id:"entityアノテーション"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#entityアノテーション"}},[t._v("#")]),t._v(" Entityアノテーション")]),t._v(" "),a("p",[t._v("DAOインタフェースで利用するエンティティクラスではテーブルとのマッピングやカラムの属性を指定するためにアノテーションを利用することができます。")]),t._v(" "),a("h3",{attrs:{id:"table"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#table"}},[t._v("#")]),t._v(" "),a("code",[t._v("@Table")])]),t._v(" "),a("p",[t._v("エンティティクラスに紐づけるテーブル名を指定します。"),a("br"),t._v("\nテーブル名と名前が一致しないエンティティクラスにマッピングしたい場合に利用します。")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("属性名")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("型")]),t._v(" "),a("th",{staticStyle:{"text-align":"center"}},[t._v("必須")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("説明")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("初期値")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("name")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("String")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("マッピングするテーブル名。指定しない場合はクラス名をスネークケースにしたテーブルとマッピングする")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("なし")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("schema")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("String")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("マッピングするテーブルの所属するスキーマ名")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("なし")])])])]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("jp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("co"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("future"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("uroborosql"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("mapping"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("annotations"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Table")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// name指定なし (departmentテーブルにマッピング)")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[t._v("@Table")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Department")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 以下略")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// name指定あり")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[t._v("@Table")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("name "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"employee"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CustomEmployee")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 以下略")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br")])]),a("h3",{attrs:{id:"column"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#column"}},[t._v("#")]),t._v(" "),a("code",[t._v("@Column")])]),t._v(" "),a("p",[t._v("フィールドに紐づけるカラム名を指定します。"),a("br"),t._v("\nカラム名と名前が一致しないフィールドにマッピングしたい場合に利用します。")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("属性名")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("型")]),t._v(" "),a("th",{staticStyle:{"text-align":"center"}},[t._v("必須")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("説明")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("初期値")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("name")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("String")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("〇")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("マッピングするカラム名")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("なし")])])])]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("jp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("co"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("future"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("uroborosql"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("mapping"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("annotations"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Table")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("jp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("co"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("future"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("uroborosql"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("mapping"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("annotations"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Column")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[t._v("@Table")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("name "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"employee"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Employee")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[t._v("@Column")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("name "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"emp_no"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("long")]),t._v(" employeeNo"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" firstName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 以下略")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br")])]),a("h3",{attrs:{id:"domain"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#domain"}},[t._v("#")]),t._v(" "),a("code",[t._v("@Domain")])]),t._v(" "),a("p",[t._v("独自に作成した型(ドメインクラス)のフィールドにカラムをマッピングする場合に指定します。")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("属性名")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("型")]),t._v(" "),a("th",{staticStyle:{"text-align":"center"}},[t._v("必須")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("説明")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("初期値")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("valueType")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Class")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("〇")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("ドメインクラスを生成するのに必要な値の型")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("なし")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("factoryMethod")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("String")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("ドメインクラスを生成・取得するメソッド名。指定しない場合はコンストラクタが呼び出される。")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v('""')])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("toJdbcMethod")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("String")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("JDBCが受け付けられる値に変換するメソッド名")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v('"getValue"')])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("nullable")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("boolean")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("null可かどうかの指定")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("false")])])])]),t._v(" "),a("p",[t._v("例")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("jp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("co"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("future"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("uroborosql"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("mapping"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("annotations"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Table")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("jp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("co"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("future"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("uroborosql"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("mapping"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("annotations"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Domain")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[t._v("@Domain")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("valueType "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" factoryMethod "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"of"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" toJdbcMethod "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"getName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" nullable "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("NameDomain")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("NameDomain")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("name "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("NameDomain")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("of")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("NameDomain")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getName")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[t._v("@Table")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Employee")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("long")]),t._v(" empNo"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("NameDomain")]),t._v(" firstName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 以下略")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br")])]),a("h3",{attrs:{id:"transient"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#transient"}},[t._v("#")]),t._v(" "),a("code",[t._v("@Transient")])]),t._v(" "),a("p",[t._v("フィールドとカラムのマッピング対象から除外します。")]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("例えば、エンタープライズシステムの設計でしばしば利用される最終登録日時や最終更新日時など、\nINSERT/UPDATEの対象から除外したいケースで利用します。")])]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("属性名")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("型")]),t._v(" "),a("th",{staticStyle:{"text-align":"center"}},[t._v("必須")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("説明")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("初期値")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("insert")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("boolean")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[a("code",[t._v("agent#insert()")]),t._v("実行時にフィールドを無視するかどうか。"),a("code",[t._v("true")]),t._v("の場合は無視する。")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("true")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("update")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("boolean")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[a("code",[t._v("agent#update()")]),t._v("実行時にフィールドを無視するかどうか。"),a("code",[t._v("true")]),t._v("の場合は無視する。")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("true")])])])]),t._v(" "),a("p",[t._v("例")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("jp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("co"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("future"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("uroborosql"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("mapping"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("annotations"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Table")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("jp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("co"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("future"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("uroborosql"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("mapping"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("annotations"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Transient")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[t._v("@Table")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Employee")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 途中略")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[t._v("@Transient")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" memo"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 常に無視")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[t._v("@Transient")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("insert "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" update "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("LocalDate")]),t._v(" creationDate"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// insert時は対象、update時は無視")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[t._v("@Transient")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("insert "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" update "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("LocalDate")]),t._v(" updateDate"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// insert時は無視、update時は対象")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 以下略")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br")])]),a("h3",{attrs:{id:"version"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#version"}},[t._v("#")]),t._v(" "),a("code",[t._v("@Version")])]),t._v(" "),a("p",[t._v("このアノテーションが付与されたフィールドは楽観ロック用のバージョン情報を保持するフィールドになります。"),a("br"),t._v("\nデフォルト("),a("code",[t._v("LockVersionOptimisticLockSupplier")]),t._v(")ではUPDATE時にはSET句で+1され、WHERE句の検索条件に追加されてSQLを実行し更新件数が0の場合には"),a("code",[t._v("OptimisticLockException")]),t._v("をスローします。")]),t._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),a("p",[a("code",[t._v("@Version")]),t._v("を付与するフィールドにマッピングされるDBカラムの型は数値型でなければなりません。")])]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("属性名")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("型")]),t._v(" "),a("th",{staticStyle:{"text-align":"center"}},[t._v("必須")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("説明")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("初期値")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("supplier"),a("Badge",{attrs:{text:"0.17.0+"}})],1),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("OptimisticLockSupplier")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("バージョン情報カラム")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("LockVersionOptimisticLockSupplier")])])])]),t._v(" "),a("h4",{attrs:{id:"サプライヤの種類"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#サプライヤの種類"}},[t._v("#")]),t._v(" サプライヤの種類")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",[t._v("サプライヤ型")]),t._v(" "),a("th",[t._v("概要")]),t._v(" "),a("th",[t._v("説明")])])]),t._v(" "),a("tbody",[a("tr",[a("td",[t._v("LockVersionOptimisticLockSupplier")]),t._v(" "),a("td",[t._v("ロックバージョン")]),t._v(" "),a("td",[t._v("UPDATEのSET句で"),a("code",[t._v("+1")]),t._v("がセットされます。")])]),t._v(" "),a("tr",[a("td",[t._v("CyclicLockVersionOptimisticLockSupplier")]),t._v(" "),a("td",[t._v("循環式ロックバージョン")]),t._v(" "),a("td",[t._v("UPDATEのSET句で"),a("code",[t._v("バージョン情報カラム名 % 数値カラムの最大値 + 1")]),t._v("がセットされます。")])]),t._v(" "),a("tr",[a("td",[t._v("TimestampOptimisticLockSupplier")]),t._v(" "),a("td",[t._v("タイムスタンプ")]),t._v(" "),a("td",[t._v("UPDATEのSET句でタイムスタンプ("),a("code",[t._v("System.currentTimeMillis()")]),t._v(")がセットされます。")])]),t._v(" "),a("tr",[a("td",[t._v("FieldIncrementOptimisticLockSupplier")]),t._v(" "),a("td",[t._v("フィールド値インクリメント")]),t._v(" "),a("td",[t._v("UPDATEのSET句で2WaySQLのバインド変数を利用して、"),a("code",[t._v("バージョン情報カラム名+1")]),t._v("がセットされます。")])])])]),t._v(" "),a("p",[t._v("例")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("jp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("co"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("future"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("uroborosql"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("mapping"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("annotations"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Table")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("jp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("co"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("future"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("uroborosql"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("mapping"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("annotations"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Version")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("jp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("co"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("future"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("uroborosql"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("mapping"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("TimestampOptimisticLockSupplier")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[t._v("@Table")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Employee")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("long")]),t._v(" empNo"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" firstName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" lastName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n  "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 途中略")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[t._v("@Version")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("supplier "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("TimestampOptimisticLockSupplier")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("long")]),t._v(" lockVersion "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 以下略")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br")])]),a("h3",{attrs:{id:"id-generatedvalue-sequencegenerator"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#id-generatedvalue-sequencegenerator"}},[t._v("#")]),t._v(" "),a("code",[t._v("@Id")]),t._v(" /"),a("code",[t._v("@GeneratedValue")]),t._v(" /"),a("code",[t._v("@SequenceGenerator")]),t._v(" "),a("Badge",{attrs:{text:"0.12.0+"}})],1),t._v(" "),a("p",[t._v("これらのアノテーションが付与されたフィールドは自動採番フィールドになります。"),a("br"),t._v(" "),a("code",[t._v("@Id")]),t._v("と"),a("code",[t._v("@GeneratedValue")]),t._v("は必ずセットでフィールドに付与する必要があります。"),a("br"),t._v(" "),a("code",[t._v("@GeneratedValue")]),t._v("のstrategy属性が"),a("code",[t._v("GenerationType.SEQUENCE")]),t._v("の場合に"),a("code",[t._v("@SequenceGenerator")]),t._v("を付与してシーケンスの生成方法を指定する必要があります。")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("アノテーション")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("説明")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("@Id")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("エンティティの主キーを識別するアノテーション")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("@GeneratedValue")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("主キーの値の生成戦略を指定するアノテーション")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("@SequenceGenerator")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("SEQUENCEによるID生成を設定するアノテーション")])])])]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("アノテーション")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("属性名")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("型")]),t._v(" "),a("th",{staticStyle:{"text-align":"center"}},[t._v("必須")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("説明")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("初期値")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("@Id")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("なし")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("-")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("-")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("-")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("@GeneratedValue")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("strategy")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("GenerationType")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("主キー生成戦略の型。"),a("code",[t._v("GenerationType.IDENTITY")]),t._v(", "),a("code",[t._v("GenerationType.SEQUENCE")]),t._v("のいずれかを指定")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("GenerationType.IDENTITY")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("@SequenceGenerator")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("sequence")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("String")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("〇")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("シーケンス名")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("なし")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("@SequenceGenerator")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("catalog")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("String")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("シーケンスが所属するカタログ名")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v('""')])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("@SequenceGenerator")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("schema")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("String")]),t._v(" "),a("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("シーケンスが所属するスキーマ名")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v('""')])])])]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("jp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("co"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("future"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("uroborosql"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("mapping"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("annotations"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Table")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("jp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("co"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("future"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("uroborosql"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("mapping"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("annotations"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Id")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("jp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("co"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("future"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("uroborosql"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("mapping"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("annotations"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("GeneratedValue")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("jp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("co"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("future"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("uroborosql"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("mapping"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("annotations"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SequenceGenerator")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[t._v("@Table")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Employee")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[t._v("@Id")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[t._v("@GeneratedValue")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("strategy "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("GenerationType")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("SEQUENCE"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[t._v("@SequenceGenerator")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("sequence "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'employee_emp_id_seq'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("long")]),t._v(" empNo"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" firstName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 以下略")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br")])])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/17.1725635b.js b/docs/assets/js/17.1725635b.js deleted file mode 100644 index b26b176..0000000 --- a/docs/assets/js/17.1725635b.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[17],{225:function(t,s,a){"use strict";a.r(s);var n=a(3),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"sqlファイルインタフェース"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#sqlファイルインタフェース"}},[t._v("#")]),t._v(" SQLファイルインタフェース")]),t._v(" "),a("h2",{attrs:{id:"sqlによる検索-sqlagent-query-querywith"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#sqlによる検索-sqlagent-query-querywith"}},[t._v("#")]),t._v(" SQLによる検索("),a("code",[t._v("SqlAgent#query")]),t._v(" /"),a("code",[t._v("#queryWith")]),t._v(")")]),t._v(" "),a("p",[t._v("SQLを検索する方法は2つあります。")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("利用メソッド")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("説明")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v('SqlAgent#query("[SQL名]")')]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[a("RouterLink",{attrs:{to:"/basics/#sql名"}},[t._v("SQL名")]),t._v("で説明した"),a("code",[t._v("SQL名")]),t._v("を指定")],1)]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v('SqlAgent#queryWith("[SQL文字列]")')]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[a("code",[t._v("SQL文字列")]),t._v("を直接指定")])])])]),t._v(" "),a("p",[t._v("上記2つのメソッドは検索を行うための"),a("code",[t._v("SqlQuery")]),t._v("インタフェースのインスタンスを返却します。")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// SQL名を指定")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlQuery")]),t._v(" query1 "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"employee/select_employee"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// SQL文字列を指定")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlQuery")]),t._v(" query2 "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("queryWith")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"select first_name, last_name where employee"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br")])]),a("h3",{attrs:{id:"検索結果の取得"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#検索結果の取得"}},[t._v("#")]),t._v(" 検索結果の取得")]),t._v(" "),a("p",[a("code",[t._v("SqlAgent")]),t._v("から取得した"),a("code",[t._v("SQLQuery")]),t._v("を使用していろいろな形式で検索結果を取得することが出来ます。"),a("br"),t._v("\n下記のSQLを例に説明します。")]),t._v(" "),a("div",{staticClass:"language-sql line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sql"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("-- department/select_department.sql")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("select")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* _SQL_ID_ */")]),t._v("\n dept"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("dept_no "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" dept_no\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" dept"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("dept_name "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" dept_name\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v("\n department dept\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("where")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*IF SF.isNotEmpty(dept_no)*/")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("and")]),t._v(" dept"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("dept_no "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*dept_no*/")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*END*/")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*IF SF.isNotEmpty(dept_name)*/")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("and")]),t._v(" dept"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("dept_name "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*dept_name*/")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'sample'")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*END*/")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br")])]),a("h3",{attrs:{id:"リスト取得-sqlquery-collect"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#リスト取得-sqlquery-collect"}},[t._v("#")]),t._v(" リスト取得("),a("code",[t._v("SqlQuery#collect")]),t._v(")")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("メソッド名")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("戻り値の型")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlQuery#collect()")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("List>")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlQuery#collect(CaseFormat)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("List>")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlQuery#collect(Class)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("List>")])])])]),t._v(" "),a("p",[t._v("検索結果をMapやエンティティクラスのListとして取得します。"),a("br"),t._v("\nMapには"),a("code",[t._v("キー:カラムラベル名")]),t._v("、"),a("code",[t._v("値:カラムの値")]),t._v("の形で1行分のデータが格納されます。")]),t._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),a("p",[a("code",[t._v("SqlQuery#collect()")]),t._v("では検索結果をすべてメモリ上に格納します。大量データの検索を行う場合は後述の"),a("code",[t._v("SqlQuery#strem()")]),t._v("の利用を検討してください。")])]),t._v(" "),a("p",[t._v("引数なし")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlAgent")]),t._v(" agent "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" config"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("agent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("List")]),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Map")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Object")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" departments "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("\n agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"department/select_department"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("collect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 結果(departments)")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"DEPT_NO"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"DEPT_NAME"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"sales"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"DEPT_NO"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"DEPT_NAME"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"export"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"DEPT_NO"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"DEPT_NAME"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"accounting"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"DEPT_NO"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"DEPT_NAME"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"personnel"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br")])]),a("p",[t._v("引数に"),a("code",[t._v("jp.co.future.uroborosql.utils.CaseFormat")]),t._v("を指定することで、Mapのキー名に対する書式を変更することができます。")]),t._v(" "),a("p",[a("code",[t._v("CaseFormat.CAMEL_CASE")]),t._v("指定")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlAgent")]),t._v(" agent "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" config"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("agent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("List")]),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Map")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Object")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" departments "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("\n agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"department/select_department"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("collect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CaseFormat")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("CAMEL_CASE"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v('// 結果(departments) のキーが"deptNo", "deptName"となる')]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"deptNo"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"deptName"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"sales"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"deptNo"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"deptName"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"export"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"deptNo"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"deptName"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"accounting"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"deptNo"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"deptName"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"personnel"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br")])]),a("p",[a("code",[t._v("CaseFormat")]),t._v("の指定がない場合はデフォルトの"),a("code",[t._v("CaseFormat")]),t._v("(初期設定では"),a("code",[t._v("UPPER_SNAKE_CASE")]),t._v(")で加工した値になります。"),a("br"),t._v("\nデフォルトの"),a("code",[t._v("CaseFormat")]),t._v("はSqlConfig生成時に変更することができます。\nデフォルト"),a("code",[t._v("CaseFormat")]),t._v("の設定の詳細は "),a("RouterLink",{attrs:{to:"/configuration/sql-agent-factory.html#caseformatの初期値設定"}},[t._v("CaseFormatの初期値設定")]),t._v(" を参照してください")],1),t._v(" "),a("p",[t._v("引数にエンティティクラスを指定すると、検索結果をMapの代わりにエンティティクラスのインスタンスのListで取得することができます。")]),t._v(" "),a("p",[t._v("エンティティクラス")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Entity that can be mapped to department table\n */")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Department")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("long")]),t._v(" deptNo"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" deptName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("long")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getDeptNo")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("deptNo"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setDeptNo")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("long")]),t._v(" deptNo"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("deptNo "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" deptNo"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getDeptName")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("deptName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setDeptName")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" deptName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("deptName "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" deptName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br")])]),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlAgent")]),t._v(" agent "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" config"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("agent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("List")]),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Department")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" departments "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("\n agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"department/select_department"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("collect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Department")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br")])]),a("h3",{attrs:{id:"先頭取得-sqlquery-first"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#先頭取得-sqlquery-first"}},[t._v("#")]),t._v(" 先頭取得("),a("code",[t._v("SqlQuery#first")]),t._v(")")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("メソッド名")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("戻り値の型")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlQuery#first()")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Map")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlQuery#first(CaseFormat)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Map")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlQuery#first(Class)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("T")])])])]),t._v(" "),a("p",[t._v("検索結果の1件目を取得します。"),a("br"),t._v("\n結果を取得できない(検索結果が0件)場合、"),a("code",[t._v("jp.co.future.uroborosql.exception.DataNotFoundException")]),t._v("をスローします。")]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("メモリ上には最大1件分のデータしか格納しないため、検索結果が大量になる場合でもメモリ使用量を気にせず呼び出すことができます。")])]),t._v(" "),a("p",[t._v("引数なし")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlAgent")]),t._v(" agent "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" config"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("agent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Map")]),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Object")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" department "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("\n agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"department/select_department"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("first")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("catch")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DataNotFoundException")]),t._v(" ex"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n ex"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("printStackTrace")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 結果(department)")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"DEPT_NO"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"DEPT_NAME"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"sales"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br")])]),a("p",[t._v("引数に"),a("code",[t._v("jp.co.future.uroborosql.utils.CaseFormat")]),t._v("を指定することで、Mapのキー名に対する書式を変更することができます。")]),t._v(" "),a("p",[a("code",[t._v("CaseFormat.CAMEL_CASE")]),t._v("指定")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlAgent")]),t._v(" agent "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" config"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("agent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Map")]),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Object")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" department "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("\n agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"department/select_department"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("first")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CaseFormat")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("CAMEL_CASE"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("catch")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DataNotFoundException")]),t._v(" ex"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n ex"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("printStackTrace")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 結果(department)")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"deptNo"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"deptName"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"sales"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br")])]),a("p",[t._v("引数にエンティティクラスを指定すると、検索結果をエンティティクラスのインスタンスの形で取得することができます。")]),t._v(" "),a("p",[t._v("エンティティクラス")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlAgent")]),t._v(" agent "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" config"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("agent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Department")]),t._v(" department "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("\n agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"department/select_department"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("first")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Department")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("catch")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DataNotFoundException")]),t._v(" ex"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n ex"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("printStackTrace")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br")])]),a("h3",{attrs:{id:"先頭取得-sqlquery-findfirst"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#先頭取得-sqlquery-findfirst"}},[t._v("#")]),t._v(" 先頭取得("),a("code",[t._v("SqlQuery#findFirst")]),t._v(")")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("メソッド名")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("戻り値の型")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlQuery#findFirst()")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Optional>")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlQuery#findFirst(CaseFormat)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Optional>")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlQuery#findFirst(Class)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Optional")])])])]),t._v(" "),a("p",[t._v("検索結果の1件目をOptionalの形式で取得します。"),a("br"),t._v("\nメモリ上には最大1件分のデータしか格納しないため、検索結果が大量になる場合でもメモリ使用量を気にせず呼び出すことができます。")]),t._v(" "),a("p",[t._v("引数なし")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlAgent")]),t._v(" agent "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" config"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("agent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Optional")]),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Map")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Object")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" department "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("\n agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"department/select_department"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("findFirst")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 結果(department)")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"DEPT_NO"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"DEPT_NAME"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"sales"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br")])]),a("p",[t._v("引数に"),a("code",[t._v("jp.co.future.uroborosql.utils.CaseFormat")]),t._v("を指定することで、Mapのキー名に対する書式を変更することができます。")]),t._v(" "),a("p",[a("code",[t._v("CaseFormat.CAMEL_CASE")]),t._v("指定")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlAgent")]),t._v(" agent "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" config"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("agent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Optional")]),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Map")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Object")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" department "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("\n agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"department/select_department"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("findFirst")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CaseFormat")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("CAMEL_CASE"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 結果(department)")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"deptNo"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"deptName"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"sales"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br")])]),a("p",[t._v("引数にエンティティクラスを指定すると、検索結果をエンティティクラスのインスタンスの形で取得することができます。")]),t._v(" "),a("p",[t._v("エンティティクラス")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlAgent")]),t._v(" agent "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" config"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("agent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Department")]),t._v(" department "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("\n agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"department/select_department"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("findFirst")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Department")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("orElse")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br")])]),a("h3",{attrs:{id:"先頭1件取得-sqlquery-one"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#先頭1件取得-sqlquery-one"}},[t._v("#")]),t._v(" 先頭1件取得("),a("code",[t._v("SqlQuery#one")]),t._v(")")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("メソッド名")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("戻り値の型")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlQuery#one()")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Map")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlQuery#one(CaseFormat)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Map")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlQuery#one(Class)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("T")])])])]),t._v(" "),a("p",[t._v("検索結果の1件目を取得します。"),a("a",{attrs:{href:"#%E5%85%88%E9%A0%AD%E5%8F%96%E5%BE%97%EF%BC%88sqlquery-first"}},[t._v("find()")]),t._v("と違い、実行するSQLで複数件の検索結果を返す場合は例外をスローします。"),a("br"),t._v("\n結果を取得できない(検索結果が0件)場合、"),a("code",[t._v("jp.co.future.uroborosql.exception.DataNotFoundException")]),t._v("をスローします。"),a("br"),t._v("\n検索結果が2件以上存在する場合、"),a("code",[t._v("jp.co.future.uroborosql.exception.DataNotUniqueException")]),t._v("をスローします。")]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("メモリ上には最大1件分のデータしか格納しないため、検索結果が大量になる場合でもメモリ使用量を気にせず呼び出すことができます。")])]),t._v(" "),a("p",[t._v("引数なし")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlAgent")]),t._v(" agent "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" config"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("agent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Map")]),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Object")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" department "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("\n agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"department/select_department"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("one")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("catch")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DataNotFoundException")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DataNotUniqueException")]),t._v(" ex"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n ex"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("printStackTrace")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 結果(department)")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"DEPT_NO"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"DEPT_NAME"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"sales"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br")])]),a("p",[t._v("引数に"),a("code",[t._v("jp.co.future.uroborosql.utils.CaseFormat")]),t._v("を指定することで、Mapのキー名に対する書式を変更することができます。")]),t._v(" "),a("p",[a("code",[t._v("CaseFormat.CAMEL_CASE")]),t._v("指定")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlAgent")]),t._v(" agent "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" config"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("agent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Map")]),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Object")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" department "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("\n agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"department/select_department"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("one")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CaseFormat")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("CAMEL_CASE"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("catch")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DataNotFoundException")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DataNotUniqueException")]),t._v(" ex"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n ex"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("printStackTrace")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 結果(department)")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"deptNo"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"deptName"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"sales"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br")])]),a("p",[t._v("引数にエンティティクラスを指定すると、検索結果をエンティティクラスのインスタンスの形で取得することができます。")]),t._v(" "),a("p",[t._v("エンティティクラス")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlAgent")]),t._v(" agent "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" config"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("agent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Department")]),t._v(" department "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("\n agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"department/select_department"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("one")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Department")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("catch")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DataNotFoundException")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DataNotUniqueException")]),t._v(" ex"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n ex"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("printStackTrace")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br")])]),a("h3",{attrs:{id:"先頭1件取得-sqlquery-findone"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#先頭1件取得-sqlquery-findone"}},[t._v("#")]),t._v(" 先頭1件取得("),a("code",[t._v("SqlQuery#findOne")]),t._v(")")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("メソッド名")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("戻り値の型")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlQuery#findOne()")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Optional>")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlQuery#findOne(CaseFormat)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Optional>")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlQuery#findOne(Class)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Optional")])])])]),t._v(" "),a("p",[t._v("検索結果の1件目をOptionalの形式で取得します。"),a("br"),t._v("\n検索結果が2件以上存在する場合、"),a("code",[t._v("jp.co.future.uroborosql.exception.DataNotUniqueException")]),t._v("をスローします。"),a("br"),t._v("\nメモリ上には最大1件分のデータしか格納しないため、検索結果が大量になる場合でもメモリ使用量を気にせず呼び出すことができます。")]),t._v(" "),a("p",[t._v("引数なし")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlAgent")]),t._v(" agent "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" config"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("agent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Optional")]),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Map")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Object")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" department "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("\n agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"department/select_department"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("findOne")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("catch")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DataNotUniqueException")]),t._v(" ex"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n ex"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("printStackTrace")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 結果(department)")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"DEPT_NO"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"DEPT_NAME"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"sales"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br")])]),a("p",[t._v("引数に"),a("code",[t._v("jp.co.future.uroborosql.utils.CaseFormat")]),t._v("を指定することで、Mapのキー名に対する書式を変更することができます。")]),t._v(" "),a("p",[a("code",[t._v("CaseFormat.CAMEL_CASE")]),t._v("指定")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlAgent")]),t._v(" agent "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" config"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("agent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Optional")]),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Map")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Object")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" department "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("\n agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"department/select_department"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("findOne")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CaseFormat")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("CAMEL_CASE"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("catch")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DataNotUniqueException")]),t._v(" ex"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n ex"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("printStackTrace")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 結果(department)")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"deptNo"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"deptName"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"sales"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br")])]),a("p",[t._v("引数にエンティティクラスを指定すると、検索結果をエンティティクラスのインスタンスの形で取得することができます。")]),t._v(" "),a("p",[t._v("エンティティクラス")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlAgent")]),t._v(" agent "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" config"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("agent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Department")]),t._v(" department "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("\n agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"department/select_department"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("findOne")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Department")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("orElse")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("catch")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DataNotUniqueException")]),t._v(" ex"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n ex"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("printStackTrace")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br")])]),a("h3",{attrs:{id:"stream取得-sqlquery-stream"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#stream取得-sqlquery-stream"}},[t._v("#")]),t._v(" Stream取得("),a("code",[t._v("SqlQuery#stream")]),t._v(")")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("メソッド名")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("戻り値の型")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlQuery#stream()")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Stream>")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlQuery#stream(CaseFormat)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Stream>")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlQuery#stream(Class)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Stream")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlQuery#stream(ResultSetConverter)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Stream")])])])]),t._v(" "),a("p",[t._v("検索結果を"),a("code",[t._v("java.util.stream.Stream")]),t._v("の形式で取得します。"),a("br"),t._v("\nStreamによる順次読み込みと終端操作までの遅延処理により、メモリ効率の良い操作が可能になります。")]),t._v(" "),a("p",[t._v("引数なし")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlAgent")]),t._v(" agent "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" config"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("agent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"department/select_department"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("stream")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("forEach")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("System")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("println")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 結果")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"DEPT_NO"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"DEPT_NAME"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"sales"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"DEPT_NO"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"DEPT_NAME"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"export"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"DEPT_NO"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"DEPT_NAME"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"accounting"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"DEPT_NO"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"DEPT_NAME"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"personnel"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br")])]),a("p",[t._v("引数に"),a("code",[t._v("jp.co.future.uroborosql.utils.CaseFormat")]),t._v("を指定することで、Mapのキー名に対する書式を変更することができます。")]),t._v(" "),a("p",[t._v("CaseFormat.PASCAL_CASE指定")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlAgent")]),t._v(" agent "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" config"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("agent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"department/select_department"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("stream")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CaseFormat")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("PASCAL_CASE"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("forEach")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("System")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("println")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 結果")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"DeptNo"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"DeptName"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"sales"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"DeptNo"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"DeptName"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"export"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"DeptNo"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"DeptName"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"accounting"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"DeptNo"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"DeptName"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"personnel"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br")])]),a("p",[t._v("引数にエンティティクラスを指定すると、検索結果をエンティティクラスのインスタンスの形で取得することができます。")]),t._v(" "),a("p",[t._v("エンティティクラス")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlAgent")]),t._v(" agent "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" config"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("agent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"department/select_department"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("stream")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Department")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("forEach")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("System")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("println")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br")])]),a("p",[a("code",[t._v("jp.co.future.uroborosql.converter.ResultSetConverter")]),t._v("インタフェースを実装したクラスを引数に渡すことで、検索結果により複雑な加工を行うことができます。"),a("br"),t._v(" "),a("code",[t._v("ResultSetConverter")]),t._v("は"),a("code",[t._v("FunctionInterface")]),t._v("として提供されているので、"),a("code",[t._v("lambda式")]),t._v("による記述も可能です。")]),t._v(" "),a("p",[t._v("ResultSetConverter指定(lambda式)")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlAgent")]),t._v(" agent "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" config"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("agent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// ResultSetConverterはlambda式で指定可能")]),t._v("\n agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"department/select_department"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("stream")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("rs "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Map")]),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Object")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" row "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("HashMap")]),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n row"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("put")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"deptNo"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" rs"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getObject")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"DEPT_NO"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n row"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("put")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"deptName"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" rs"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getObject")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"DEPT_NAME"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" row"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("forEach")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("System")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("println")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 結果")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"deptNo"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"deptName"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"sales"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"deptNo"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"deptName"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"export"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"deptNo"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"deptName"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"accounting"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"deptNo"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"deptName"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"personnel"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br")])]),a("div",{staticClass:"custom-block danger"},[a("p",{staticClass:"custom-block-title"},[t._v("注意")]),t._v(" "),a("p",[t._v("戻り値として取得されるStreamインスタンスは内部にResultSetリソースを保持しています。このResultSetはデータを最後まで読み込むか"),a("code",[t._v("Stream#close()")]),t._v("が呼ばれたタイミングでリソースのクローズを行います。(Stream生成時、Stream#onClose()にResultSetリソースの"),a("code",[t._v("closeHandler")]),t._v("を登録します)"),a("br"),t._v("\nそのため、取得したStreamで全データを扱う終端処理(collectなど)を行うか、try-with-resourcesの利用やStream#close()の明示的な呼び出しによるStreamのクローズを行わないとResultSetリソースがクローズされずカーソルのリークが発生します。")])]),t._v(" "),a("div",{staticClass:"custom-block danger"},[a("p",{staticClass:"custom-block-title"},[t._v("注意")]),t._v(" "),a("p",[t._v("取得したStreamのクローズより先にSqlAgentインスタンスがクローズ、または破棄された場合、Streamの内部に保持しているResultSetリソースもクローズされてしまい不正な動作となります。StreamインスタンスとそのStreamを生成したSqlAgentインスタンスの生存期間を合わせる、もしくはSqlAgentインスタンスの生存期間を長くしてください。")])]),t._v(" "),a("p",[t._v("Streamのクローズ")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlAgent")]),t._v(" agent "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" config"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("agent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Stream")]),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Map")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Object")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" stream "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"department/select_department"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("stream")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Stream#findFirst() はStream内のResultSetリソースをクローズしないので、try-with-resourcesでStreamをクローズする")]),t._v("\n stream"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("findFirst")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("ifPresent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("System")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("out"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("println")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br")])]),a("h3",{attrs:{id:"resultset取得-sqlquery-resultset"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#resultset取得-sqlquery-resultset"}},[t._v("#")]),t._v(" ResultSet取得("),a("code",[t._v("SqlQuery#resultSet")]),t._v(")")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("メソッド名")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("戻り値の型")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlQuery#resultSet()")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("ResulitSet")])])])]),t._v(" "),a("p",[t._v("検索結果を"),a("code",[t._v("java.sql.ResultSet")]),t._v("の形式で取得します。")]),t._v(" "),a("div",{staticClass:"custom-block danger"},[a("p",{staticClass:"custom-block-title"},[t._v("注意")]),t._v(" "),a("p",[t._v("ResultSetリソースのクローズは各自で行う必要があります。")])]),t._v(" "),a("div",{staticClass:"custom-block danger"},[a("p",{staticClass:"custom-block-title"},[t._v("注意")]),t._v(" "),a("p",[t._v("ResultSetリソースのクローズより先にSqlAgentインスタンスがクローズ、または破棄された場合、ResultSetリソースもクローズされてしまい不正な動作となります。ResultSetリソースとそのResultSetを生成したSqlAgentインスタンスの生存期間を合わせる、もしくはSqlAgentインスタンスの生存期間を長くしてください。")])]),t._v(" "),a("p",[t._v("このAPIは他のフレームワークとの連携など、"),a("code",[t._v("ResultSet")]),t._v("リソースの取得が必要なケースを想定して提供しています。")]),t._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),a("p",[a("code",[t._v("ResultSet")]),t._v("リソースの取得が必要でなければ、"),a("code",[t._v("ResultSet")]),t._v("リソースのクローズが管理されている他のAPIの利用を検討してください。")])]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlAgent")]),t._v(" agent "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" config"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("agent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ResultSet")]),t._v(" rs "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"department/select_department"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("resultSet")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// try-with-resourcesでResultSetをクローズする")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("while")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("rs"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("next")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// ResultSetからの値取得")]),t._v("\n ・・・\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br")])]),a("h2",{attrs:{id:"sqlによる更新-sqlagent-update-updatewith"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#sqlによる更新-sqlagent-update-updatewith"}},[t._v("#")]),t._v(" SQLによる更新("),a("code",[t._v("SqlAgent#update")]),t._v(" /"),a("code",[t._v("#updateWith")]),t._v(")")]),t._v(" "),a("p",[t._v("DB更新処理(登録/変更/削除)やDDLの実行も検索処理と同様"),a("code",[t._v("SQL名")]),t._v("を指定する場合と"),a("code",[t._v("SQL文字列")]),t._v("を指定する2つのAPIが提供されています。")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("利用メソッド")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("説明")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v('SqlAgent#update("[SQL名]")')]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[a("RouterLink",{attrs:{to:"/basics/#sql名"}},[t._v("SQL名")]),t._v("で説明した"),a("code",[t._v("SQL名")]),t._v("を指定")],1)]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v('SqlAgent#updateWith("[SQL文字列]")')]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[a("code",[t._v("SQL文字列")]),t._v("を直接指定")])])])]),t._v(" "),a("p",[t._v("上記2つのメソッドは更新を行うための"),a("code",[t._v("SqlUpdate")]),t._v("インタフェースのインスタンスを返却します。")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 1件挿入(SQL名指定)")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" count "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("update")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"department/insert_department"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("param")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"dept_no"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("param")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"dept_name"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Sales"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("count")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 更新(SQL文字列指定)")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" count "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("updateWith")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"update employee set first_name = /*first_name*/ where emp_no = /*emp_no*/"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("param")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"emp_no"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("param")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"first_name"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Bob"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("count")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br")])]),a("p",[t._v("department/insert_department.sql")]),t._v(" "),a("div",{staticClass:"language-sql line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sql"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("insert")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* _SQL_ID_ */")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("into")]),t._v("\n department\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n dept_name\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" lock_version\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("values")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*dept_name*/")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'sample'")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br")])]),a("p",[a("code",[t._v("SqlUpdate")]),t._v("インタフェースの主なAPIは以下になります。")]),t._v(" "),a("h3",{attrs:{id:"更新の実行-sqlupdate-count"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#更新の実行-sqlupdate-count"}},[t._v("#")]),t._v(" 更新の実行("),a("code",[t._v("SqlUpdate#count")]),t._v(")")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("メソッド名")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("戻り値の型")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlUpdate#count()")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("int")])])])]),t._v(" "),a("p",[t._v("更新処理を行い、登録、更新、削除を行った行数を返します。")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlAgent")]),t._v(" agent "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" config"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("agent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// insert")]),t._v("\n agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("update")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"department/insert_department"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("param")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"dept_no"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("param")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"dept_name"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"sales"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("count")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// update")]),t._v("\n agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("update")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"department/update_department"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("param")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"dept_no"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("param")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"dept_name"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"HR"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("count")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// delete")]),t._v("\n agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("update")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"department/delete_department"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("param")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"dept_no"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("count")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br")])]),a("h2",{attrs:{id:"sqlによるバッチ更新-sqlbatch-batch-batchwith"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#sqlによるバッチ更新-sqlbatch-batch-batchwith"}},[t._v("#")]),t._v(" SQLによるバッチ更新("),a("code",[t._v("SqlBatch#batch")]),t._v(" /"),a("code",[t._v("#batchWith")]),t._v(")")]),t._v(" "),a("p",[t._v("大量のデータを一括で更新する場合、通常の更新ではSQLが都度実行されるため処理速度が遅く問題になる場合があります。"),a("br"),t._v("\nこういったケースに対応するため、"),a("strong",[t._v("uroboroSQL")]),t._v("ではバッチ更新用のAPIを提供しています。")]),t._v(" "),a("p",[t._v("バッチ更新処理も他と同様"),a("code",[t._v("SQL名")]),t._v("を指定する場合と"),a("code",[t._v("SQL文字列")]),t._v("を直接記述する2つのAPIが提供されています。")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("利用メソッド")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("説明")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v('SqlAgent#batch("[SQL名]")')]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[a("RouterLink",{attrs:{to:"/basics/#sql名"}},[t._v("SQL名")]),t._v("で説明した"),a("code",[t._v("SQL名")]),t._v("を指定")],1)]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v('SqlAgent#batchWith("[SQL文字列]")')]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[a("code",[t._v("SQL文字列")]),t._v("を直接指定")])])])]),t._v(" "),a("p",[t._v("上記2つのメソッドはバッチ更新を行うための"),a("code",[t._v("SqlBatch")]),t._v("インタフェースのインスタンスを返却します。")]),t._v(" "),a("p",[a("code",[t._v("SqlBatch")]),t._v("インタフェースでは、"),a("code",[t._v("SqlFluent")]),t._v("インタフェースによるバインドパラメータの設定とは別に"),a("code",[t._v("java.util.stream.Stream")]),t._v("を用いたバッチパラメータの設定を行うAPIが提供されています。")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("メソッド")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("説明")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlBatch#paramStream(Stream>)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("バインドパラメータや置換文字列として使用するキーと値のセットを"),a("code",[t._v("java.util.stream.Stream")]),t._v("で設定する。"),a("Badge",{attrs:{text:"0.5.0+"}})],1)]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlBatch#paramStream(Stream)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("バインドパラメータや置換文字列として使用するエンティティクラスインスタンスを"),a("code",[t._v("java.util.stream.Stream")]),t._v("で設定する。"),a("Badge",{attrs:{text:"0.10.0+"}})],1)])])]),t._v(" "),a("h3",{attrs:{id:"バッチ更新の実行-sqlbatch-count"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#バッチ更新の実行-sqlbatch-count"}},[t._v("#")]),t._v(" バッチ更新の実行("),a("code",[t._v("SqlBatch#count")]),t._v(")")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("メソッド名")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("戻り値の型")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlBatch#count()")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("int")])])])]),t._v(" "),a("p",[t._v("バッチ更新処理を行い、登録、更新、削除を行った行数を返します。")]),t._v(" "),a("p",[t._v("バッチ更新")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// バッチ処理の実行")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" count "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("batch")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"department/insert_department"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 指定したファイルからMapのStreamを生成し、バッチ処理のパラメータとして指定する")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("paramStream")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getDataByFile")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Paths")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"data/department.tsv"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("count")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n・・・\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Stream")]),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Map")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Object")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getDataByFile")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Path")]),t._v(" filePath"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("List")]),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" lines "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Files")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("readAllLines")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("filePath"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" header "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" lines"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("split")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"\\\\t"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" lines"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("stream")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("skip")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("map")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("s "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v(" s"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("split")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"\\\\t"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("map")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("data "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IntStream")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("range")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" header"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("length"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Map")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Object")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("collect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("HashMap")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("row"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" i"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v(" row"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("put")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("header"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("i"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Map")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("putAll")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("catch")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("IOException")]),t._v(" e"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n e"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("printStackTrace")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("throw")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("UncheckedIOException")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("e"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br")])]),a("p",[t._v("data/department.tsv の内容")]),t._v(" "),a("div",{staticClass:"language-yaml line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-yaml"}},[a("code",[t._v("dept_no dept_name\n1 sales\n2 export\n3 accounting\n4 personnel\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br")])]),a("p",[a("code",[t._v("paramStream()")]),t._v("メソッドに"),a("code",[t._v("SqlQuery#stream()")]),t._v("の結果を指定することで疑似的に"),a("code",[t._v("SELECT-INSERT")]),t._v(" / "),a("code",[t._v("SELECT-UPDATE")]),t._v(" / "),a("code",[t._v("SELECT-DELETE")]),t._v("を行うことができます。"),a("br"),t._v("\nStream APIを利用することで検索結果の件数が多い場合でも、少ないメモリ使用量でバッチ処理を行うことができます。")]),t._v(" "),a("p",[t._v("SELECT-UPDATE")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" updateCount "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("batch")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"department/update_department"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("paramStream")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"department/select_department"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("stream")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CaseFormat")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("LOWER_SNAKE_CASE"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("map")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("e "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Map")]),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Object")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" ans "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("HashMap")]),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("e"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n ans"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("replaceAll")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("k"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" v"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v(" v "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("null")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" v"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("toString")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"_after"')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"after"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v('// 取得した検索結果の各行の値に "_after" を付与する')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" ans"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("count")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br")])]),a("h3",{attrs:{id:"バッチsql実行動作のカスタマイズ"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#バッチsql実行動作のカスタマイズ"}},[t._v("#")]),t._v(" バッチSQL実行動作のカスタマイズ")]),t._v(" "),a("p",[a("code",[t._v("SqlBatch")]),t._v("インタフェースにはバッチSQL実行時の動作を変更するためのAPIが提供されています。")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("メソッド")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("説明")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("デフォルト値")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("by(BiPredicate>)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("バッチSQLの実行条件を指定します。"),a("code",[t._v("BiPredicate")]),t._v("の結果がtrueの場合にバッチSQLを実行します。")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("1000件毎")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("batchWhen(BiConsumer)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("バッチSQLの実行タイミングで行う操作を指定します。")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("何もしない")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("errorWhen(TriConsumer)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("バッチSQLの実行時に例外が発生した時の動作を指定します。")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[a("code",[t._v("UroborosqlRuntimeException")]),t._v("をスローする")])])])]),t._v(" "),a("p",[t._v("これらのAPIを利用することでより柔軟なSQL実行が可能になります。")]),t._v(" "),a("p",[t._v("バッチSQL実行時動作のカスタマイズ例")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("List")]),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Map")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Object")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" inputData "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ArrayList")]),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 中略 入力データ作成")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlAgent")]),t._v(" agent "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" config"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("agent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("batch")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"department/insert_department"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("paramStream")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("inputData"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("stream")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("by")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" row"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("batchCount")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 10件毎にSQL実行")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("batchWhen")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v(" agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("commit")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// SQL実行が成功したらコミットする")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("errorWhen")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ex"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n log"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("error")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"error occured. ex:{}"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ex"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getMessage")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 例外が発生したらログ出力する")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("count")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br")])]),a("h2",{attrs:{id:"ストアドプロシージャの実行-sqlagent-proc-procwith"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#ストアドプロシージャの実行-sqlagent-proc-procwith"}},[t._v("#")]),t._v(" ストアドプロシージャの実行("),a("code",[t._v("SqlAgent#proc")]),t._v(" /"),a("code",[t._v("#procWith")]),t._v(")")]),t._v(" "),a("p",[a("strong",[t._v("uroboroSQL")]),t._v("では、SQLの検索/更新のほかDBが提供するストアドプロシージャの呼び出し用APIも提供しています。")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("利用メソッド")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("説明")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v('SqlAgent#proc("[SQL名]")')]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[a("RouterLink",{attrs:{to:"/basics/#sql名"}},[t._v("SQL名")]),t._v("で説明した"),a("code",[t._v("SQL名")]),t._v("を指定")],1)]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v('SqlAgent#procWith("[SQL文字列]")')]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[a("code",[t._v("SQL文字列")]),t._v("を直接指定")])])])]),t._v(" "),a("p",[t._v("上記2つのメソッドはストアドプロシージャの呼出を行うための"),a("code",[t._v("Procedure")]),t._v("インタフェースのインスタンスを返却します。")]),t._v(" "),a("h3",{attrs:{id:"procedureインタフェース"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#procedureインタフェース"}},[t._v("#")]),t._v(" "),a("code",[t._v("Procedure")]),t._v("インタフェース")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("メソッド名")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("戻り値の型")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("Procedure#call()")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Map")])])])]),t._v(" "),a("p",[a("code",[t._v("Procedure")]),t._v("インタフェースでは、ストアドプロシージャからの戻り値を取得するためのAPIが提供されています。")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("メソッド")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("説明")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("ProcedureFluent#outParam(String, int)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("ストアドプロシージャからの戻り値として受け取るパラメータを指定します"),a("br"),t._v("実行したストアドプロシージャ内で指定したキーに設定された値が、戻り値の"),a("code",[t._v("Map")]),t._v("に格納されて取得できます。第2引数で受け取る値の型をint型で指定します")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("ProcedureFluent#outParam(String, SQLType)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("ストアドプロシージャからの戻り値として受け取るパラメータを指定します"),a("br"),t._v("実行したストアドプロシージャ内で指定したキーに設定された値が、戻り値の"),a("code",[t._v("Map")]),t._v("に格納されて取得できます。第2引数で受け取る値の型をSQLType型で指定します")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("ProcedureFluent#inOutParam(String, int)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("ストアドプロシージャに渡し、かつ、戻り値として受け取るパラメータを指定します"),a("br"),t._v("実行したストアドプロシージャ内で指定したキーに設定された値が、戻り値の"),a("code",[t._v("Map")]),t._v("に格納されて取得できます。第2引数で受け取る値の型をint型で指定します")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("ProcedureFluent#inOutParam(String, SQLType)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("ストアドプロシージャに渡し、かつ、戻り値として受け取るパラメータを指定します"),a("br"),t._v("実行したストアドプロシージャ内で指定したキーに設定された値が、戻り値の"),a("code",[t._v("Map")]),t._v("に格納されて取得できます。第2引数で受け取る値の型をSQLType型で指定します")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("ProcedureFluent#inOutParamIfAbsent(String, int)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("ストアドプロシージャに渡し、かつ、戻り値として受け取るパラメータを指定します"),a("br"),t._v("指定したパラメータ名のパラメータが事前に登録されていない場合に値を追加します"),a("br"),t._v("実行したストアドプロシージャ内で指定したキーに設定された値が、戻り値の"),a("code",[t._v("Map")]),t._v("に格納されて取得できます。第2引数で受け取る値の型をint型で指定します")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("ProcedureFluent#inOutParamIfAbsent(String, SQLType)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("ストアドプロシージャに渡し、かつ、戻り値として受け取るパラメータを指定します"),a("br"),t._v("指定したパラメータ名のパラメータが事前に登録されていない場合に値を追加します"),a("br"),t._v("実行したストアドプロシージャ内で指定したキーに設定された値が、戻り値の"),a("code",[t._v("Map")]),t._v("に格納されて取得できます。第2引数で受け取る値の型をSQLType型で指定します")])])])]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Procedureインタフェースのインスタンスを取得")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Map")]),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Object")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" result "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("procWith")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"{call product_id_exist_check(/*product_id*/, /*check_out*/)}"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("param")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"product_id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("outParam")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"check_out"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("java"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("sql"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),t._v("JDBCType")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("NUMERIC"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("call")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// outParamメソッドで指定したパラメータの値(戻り値)を取得")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("BigDecimal")]),t._v(" checkOut "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("BigDecimal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("result"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("get")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"check_out"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br")])])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/18.87d8b0a6.js b/docs/assets/js/18.87d8b0a6.js deleted file mode 100644 index 4a9bd91..0000000 --- a/docs/assets/js/18.87d8b0a6.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[18],{213:function(t,s,n){"use strict";n.r(s);var a=n(3),e=Object(a.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("h1",{attrs:{id:"トランザクション"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#トランザクション"}},[t._v("#")]),t._v(" トランザクション")]),t._v(" "),n("p",[n("strong",[t._v("uroboroSQL")]),t._v("ではローカルトランザクションを提供します。"),n("br"),t._v("\nトランザクションを利用することで、エラー発生時でも一部のデータだけ登録を成功させるといった細かな制御ができるようになります。")]),t._v(" "),n("h2",{attrs:{id:"トランザクションの開始と終了-sqlagent-required-requirednew-notsupported"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#トランザクションの開始と終了-sqlagent-required-requirednew-notsupported"}},[t._v("#")]),t._v(" トランザクションの開始と終了 ( "),n("code",[t._v("SqlAgent#required")]),t._v(" /"),n("code",[t._v("#requiredNew")]),t._v(" /"),n("code",[t._v("#notSupported")]),t._v(" )")]),t._v(" "),n("p",[n("strong",[t._v("uroboroSQL")]),t._v("で提供するトランザクションのレベルは以下の3つです")]),t._v(" "),n("table",[n("thead",[n("tr",[n("th",{staticStyle:{"text-align":"left"}},[t._v("トランザクションタイプ")]),t._v(" "),n("th",{staticStyle:{"text-align":"left"}},[t._v("トランザクション有り")]),t._v(" "),n("th",{staticStyle:{"text-align":"left"}},[t._v("トランザクションなし")])])]),t._v(" "),n("tbody",[n("tr",[n("td",{staticStyle:{"text-align":"left"}},[t._v("required")]),t._v(" "),n("td",{staticStyle:{"text-align":"left"}},[t._v("トランザクション内で処理を実行")]),t._v(" "),n("td",{staticStyle:{"text-align":"left"}},[t._v("新たなトランザクションを開始して処理を実行")])]),t._v(" "),n("tr",[n("td",{staticStyle:{"text-align":"left"}},[t._v("requiresNew")]),t._v(" "),n("td",{staticStyle:{"text-align":"left"}},[t._v("既存のトランザクションを停止し、新たなトランザクションを開始して処理を実行。"),n("br"),t._v("トランザクションが終了すると停止していたトランザクションを再開させる")]),t._v(" "),n("td",{staticStyle:{"text-align":"left"}},[t._v("新たなトランザクションを開始して処理を実行")])]),t._v(" "),n("tr",[n("td",{staticStyle:{"text-align":"left"}},[t._v("notSupported")]),t._v(" "),n("td",{staticStyle:{"text-align":"left"}},[t._v("既存のトランザクションを停止し、トランザクション外で処理を実行。"),n("br"),t._v("処理が終了すると停止していたトランザクションを再開させる")]),t._v(" "),n("td",{staticStyle:{"text-align":"left"}},[t._v("トランザクション外で処理を実行")])])])]),t._v(" "),n("p",[n("code",[t._v("SqlAgent")]),t._v("インタフェースにトランザクションタイプに応じたメソッドが提供されており、そのメソッドを呼び出すことでトランザクションの開始と終了を制御します。")]),t._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[t._v("agent"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("required")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// トランザクション開始")]),t._v("\n agent"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("updateWith")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"insert into employee (emp_no) values (/*emp_no*/1001)"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("param")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"emp_no"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("count")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n agent"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("requiresNew")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 新しい トランザクション開始")]),t._v("\n agent"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("updateWith")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("\"insert into department (dept_no, dept_name) values (/*dept_no*/1111, /*dept_name*/'Sales')\"")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("param")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"dept_no"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("param")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"dept_name"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"export"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("count")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 新しい トランザクション終了 commit")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// トランザクション終了 commit")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br")])]),n("div",{staticClass:"custom-block tip"},[n("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),n("p",[t._v("設定によりDB更新処理の実行をトランザクション内で行うことを強制することができます。詳しくは\n"),n("RouterLink",{attrs:{to:"/configuration/sql-agent-factory.html#db更新処理をトランザクション内のみに強制"}},[t._v("DB更新処理をトランザクション内のみに強制")]),t._v("を参照してください。")],1)]),t._v(" "),n("h2",{attrs:{id:"コミットとロールバック-sqlagent-commit-setrollbackonly"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#コミットとロールバック-sqlagent-commit-setrollbackonly"}},[t._v("#")]),t._v(" コミットとロールバック ( "),n("code",[t._v("SqlAgent#commit")]),t._v(" /"),n("code",[t._v("#setRollbackOnly")]),t._v(" )")]),t._v(" "),n("p",[t._v("トランザクションのlambda式が正常に終了すればトランザクションはコミットされます。"),n("br"),t._v("\nトランザクションのlambda式が例外をスローした場合はトランザクションをロールバックします。"),n("br"),t._v("\n明示的にコミットを行う場合は"),n("code",[t._v("SqlAgent#commit()")]),t._v("を呼び出します。"),n("br"),t._v("\n例外をスローせずに明示的にロールバックを行う場合は"),n("code",[t._v("SqlAgent#setRollbackOnly()")]),t._v("を呼び出します。")]),t._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[t._v("agent"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("required")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// トランザクション開始")]),t._v("\n agent"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("updateWith")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"insert into employee (emp_no) values (/*emp_no*/1001)"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("param")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"emp_no"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("count")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 新しい トランザクション開始")]),t._v("\n agent"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("requiresNew")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n agent"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("updateWith")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("\"insert into department (dept_no, dept_name) values (/*dept_no*/1, /*dept_name*/'')\"")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("param")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"dept_no"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("param")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"dept_name"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Production"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("count")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 明示的なcommit")]),t._v("\n agent"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("commit")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n agent"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("updateWith")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("\"insert into department (dept_no, dept_name) values (/*dept_no*/1, /*dept_name*/'')\"")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("param")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"dept_no"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("param")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"dept_name"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"export"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("count")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 明示的なrollback")]),t._v("\n agent"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("setRollbackOnly")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 新しい トランザクション終了")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// トランザクション終了 commit")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br"),n("span",{staticClass:"line-number"},[t._v("20")]),n("br"),n("span",{staticClass:"line-number"},[t._v("21")]),n("br"),n("span",{staticClass:"line-number"},[t._v("22")]),n("br"),n("span",{staticClass:"line-number"},[t._v("23")]),n("br"),n("span",{staticClass:"line-number"},[t._v("24")]),n("br"),n("span",{staticClass:"line-number"},[t._v("25")]),n("br")])]),n("h2",{attrs:{id:"セーブポイント-sqlagent-setsavepoint-rollback-releasesavepoint"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#セーブポイント-sqlagent-setsavepoint-rollback-releasesavepoint"}},[t._v("#")]),t._v(" セーブポイント ( "),n("code",[t._v("SqlAgent#setSavepoint")]),t._v(" /"),n("code",[t._v("#rollback")]),t._v(" /"),n("code",[t._v("#releaseSavepoint")]),t._v(")")]),t._v(" "),n("p",[t._v("トランザクション内にセーブポイントを設けることで、トランザクション内の特定の操作のみ取り消すといった細かな制御ができます。")]),t._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[t._v("agent"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("required")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// トランザクション開始")]),t._v("\n agent"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("update")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"employee/insert_employee"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("param")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"emp_no"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1001")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("count")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// セーブポイント(名前:sp)の設定")]),t._v("\n agent"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("setSavepoint")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"sp"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n agent"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("update")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"employee/insert_employee"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("param")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"emp_no"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1002")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("count")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("assertThat")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("agent"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"employee/select_employee"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("collect")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("size")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 最後のinsertを取消(セーブポイント(名前:sp)までロールバック)")]),t._v("\n agent"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("rollback")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"sp"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("assertThat")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("agent"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"employee/select_employee"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("collect")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("size")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br")])]),n("h3",{attrs:{id:"セーブポイントスコープ-sqlagent-savepointscope"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#セーブポイントスコープ-sqlagent-savepointscope"}},[t._v("#")]),t._v(" セーブポイントスコープ("),n("code",[t._v("SqlAgent#savepointScope")]),t._v(") "),n("Badge",{attrs:{text:"0.18.0+"}})],1),t._v(" "),n("p",[n("code",[t._v("SqlAgent#savepointScope()")]),t._v(" を使用して、より確実にsavepointの制御を行うことができます。")]),t._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// SqlAgent#savepoint()を使ったsavepointの実装")]),t._v("\nagent"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("required")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// トランザクション開始")]),t._v("\n agent"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("update")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"employee/insert_employee"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("param")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"emp_no"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1001")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("count")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// セーブポイントスコープの開始")]),t._v("\n agent"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("savepointScope")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n agent"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("update")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"employee/insert_employee"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("param")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"emp_no"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1002")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("count")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("assertThat")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("agent"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"employee/select_employee"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("collect")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("size")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// savepointScope内の処理を取り消す場合は例外をスローする")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("throw")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("UroborosqlRuntimeException")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("assertThat")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("agent"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"employee/select_employee"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("collect")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("size")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br"),n("span",{staticClass:"line-number"},[t._v("16")]),n("br"),n("span",{staticClass:"line-number"},[t._v("17")]),n("br"),n("span",{staticClass:"line-number"},[t._v("18")]),n("br"),n("span",{staticClass:"line-number"},[t._v("19")]),n("br")])]),n("div",{staticClass:"custom-block tip"},[n("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),n("p",[t._v("PostgreSQLについては、自動的にセーブポイントを利用したトランザクションの部分ロールバックに対応しています。\n詳細は、"),n("RouterLink",{attrs:{to:"/advanced/#postgresqlのトランザクション内sqlエラー対応"}},[t._v("PostgreSQLのトランザクション内SQLエラー対応")]),t._v("を参照してください。")],1)]),t._v(" "),n("h2",{attrs:{id:"エラーハンドリング-uroborosqlsqlexception"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#エラーハンドリング-uroborosqlsqlexception"}},[t._v("#")]),t._v(" エラーハンドリング ( "),n("code",[t._v("UroborosqlSQLException")]),t._v(" )")]),t._v(" "),n("p",[n("strong",[t._v("uroboroSQL")]),t._v("からSQLを実行した際にSQLExceptionがスローされると、\nそのSQLExceptionを内部に保持する"),n("code",[t._v("UroborosqlSQLException")]),t._v("が呼び出し元に返却されます。"),n("br"),t._v(" "),n("code",[t._v("UroborosqlSQLException")]),t._v("は"),n("code",[t._v("java.lang.RuntimeException")]),t._v("を継承しているため明示的なキャッチは不要です。")]),t._v(" "),n("p",[t._v("呼出元のアプリケーションで明示的にエラーハンドリングを行う場合は、try-catchで"),n("code",[t._v("UroborosqlSQLException")]),t._v("をキャッチすることで、\n例外発生時の挙動を制御することができます。")]),t._v(" "),n("p",[t._v("エラーハンドリングの例")]),t._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlConfig")]),t._v(" config "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("UroboroSQL")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("builder")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("build")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlAgent")]),t._v(" agent "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" config"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("agent")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// INSERT文の実行")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// insert into product (product_id) values (/*product_id*/0);")]),t._v("\n agent"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("update")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"example/insert_product"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("param")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"product_id"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("count")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("catch")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("UroborosqlSQLException")]),t._v(" ex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// SQLExceptionが発生した際に行う処理を実装")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("throw")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Exception")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"exception occured. ex="')]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" ex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("getCause")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("getMessage")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" ex"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br")])])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/19.4e6df05e.js b/docs/assets/js/19.4e6df05e.js deleted file mode 100644 index 75a4d8a..0000000 --- a/docs/assets/js/19.4e6df05e.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{204:function(t,e,a){"use strict";a.r(e);var n=a(3),l=Object(n.a)({},(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"sqlconfigの生成"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#sqlconfigの生成"}},[t._v("#")]),t._v(" SqlConfigの生成")]),t._v(" "),a("p",[a("strong",[t._v("uroboroSQL")]),t._v("ではSqlConfigを生成するタイミングで各種の設定を行うことによりライブラリの動作や実行されるSQLを変更することができます。")]),t._v(" "),a("p",[t._v("シンプルな設定")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// create SqlConfig H2DBのメモリDBに接続する")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlConfig")]),t._v(" config "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("UroboroSQL")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("builder")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"jdbc:h2:mem:test;DB_CLOSE_DELAY=-1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"sa"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('""')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("build")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br")])]),a("p",[a("code",[t._v("UroboroSQL")]),t._v("ビルダー取得API("),a("code",[t._v("UroboroSQL.UroboroSQLBuilder")]),t._v(")")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("メソッド名")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("説明")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("builder()")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("DB接続設定を行っていないビルダーを取得")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("builder(Connection conn)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("引数で指定したコネクションでDB接続するビルダーを取得")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("builder(DataSource dataSource)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("引数で指定したデータソースを使ってDB接続するビルダーを取得")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("builder(String url, String user, String password)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("引数で指定したDB接続情報を元にDB接続するビルダーを取得")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("builder(String url, String user, String password, String schema)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("引数で指定したDB接続情報を元にDB接続するビルダーを取得")])])])]),t._v(" "),a("p",[t._v("上記APIで取得した"),a("code",[t._v("UroboroSQL.UroboroSQLBuilder")]),t._v("に対して下記の設定クラスを設定することで、設定変更ができます。")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("設定するクラス")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("説明")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[a("RouterLink",{attrs:{to:"/configuration/connection-supplier.html#connectionsupplier"}},[t._v("ConnectionSupplier")])],1),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("JDBCコネクション提供クラス")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[a("RouterLink",{attrs:{to:"/configuration/sql-context-factory.html#sqlcontextfactory"}},[t._v("SqlContextFactory")])],1),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("SQLコンテキスト生成クラス")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[a("RouterLink",{attrs:{to:"/configuration/sql-agent-factory.html#sqlagentfactory"}},[t._v("SqlAgentFactory")])],1),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("SQL実行クラス("),a("code",[t._v("SqlAgent")]),t._v(")生成クラス")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[a("RouterLink",{attrs:{to:"/configuration/sql-manager.html#sqlmanager"}},[t._v("SqlManager")])],1),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("SQLファイル管理クラス")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[a("RouterLink",{attrs:{to:"/configuration/sql-filter-manager.html#sqlfiltermanager"}},[t._v("SqlFilterManager")])],1),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("SQLフィルター管理クラス")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[a("RouterLink",{attrs:{to:"/configuration/entity-handler.html#entityhandler"}},[t._v("EntityHandler")])],1),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("エンティティ処理クラス")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[a("RouterLink",{attrs:{to:"/configuration/dialect.html#dialect"}},[t._v("Dialect")])],1),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Database方言を表すクラス")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[a("a",{attrs:{href:"https://docs.oracle.com/javase/jp/8/docs/api/java/time/Clock.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("Clock"),a("OutboundLink")],1)]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("タイムゾーンを使用して現在の時点、日付および時間へのアクセスを提供するクロック")])])])])])}),[],!1,null,null,null);e.default=l.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/2.1c2c728d.js b/docs/assets/js/2.1c2c728d.js deleted file mode 100644 index d5cfcc4..0000000 --- a/docs/assets/js/2.1c2c728d.js +++ /dev/null @@ -1,9 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[2],{150:function(t,n,e){"use strict";e.d(n,"d",(function(){return r})),e.d(n,"a",(function(){return o})),e.d(n,"i",(function(){return u})),e.d(n,"f",(function(){return s})),e.d(n,"g",(function(){return c})),e.d(n,"h",(function(){return l})),e.d(n,"b",(function(){return f})),e.d(n,"e",(function(){return h})),e.d(n,"k",(function(){return d})),e.d(n,"l",(function(){return p})),e.d(n,"c",(function(){return g})),e.d(n,"j",(function(){return _}));const r=/#.*$/,i=/\.(md|html)$/,o=/\/$/,u=/^[a-z]+:/i;function a(t){return decodeURI(t).replace(r,"").replace(i,"")}function s(t){return u.test(t)}function c(t){return/^mailto:/.test(t)}function l(t){return/^tel:/.test(t)}function f(t){if(s(t))return t;const n=t.match(r),e=n?n[0]:"",i=a(t);return o.test(i)?t:i+".html"+e}function h(t,n){const e=decodeURIComponent(t.hash),i=function(t){const n=t.match(r);if(n)return n[0]}(n);if(i&&e!==i)return!1;return a(t.path)===a(n)}function d(t,n,e){if(s(n))return{type:"external",path:n};e&&(n=function(t,n,e){const r=t.charAt(0);if("/"===r)return t;if("?"===r||"#"===r)return n+t;const i=n.split("/");e&&i[i.length-1]||i.pop();const o=t.replace(/^\//,"").split("/");for(let t=0;tfunction t(n,e,r,i=1){if("string"==typeof n)return d(e,n,r);if(Array.isArray(n))return Object.assign(d(e,n[0],r),{title:n[1]});{const o=n.children||[];return 0===o.length&&n.path?Object.assign(d(e,n.path,r),{title:n.title}):{type:"group",path:n.path,title:n.title,sidebarDepth:n.sidebarDepth,initialOpenGroupIndex:n.initialOpenGroupIndex,children:o.map(n=>t(n,e,r,i+1)),collapsable:!1!==n.collapsable}}}(t,i,e)):[]}return[]}function v(t){const n=g(t.headers||[]);return[{type:"group",collapsable:!1,title:t.title,path:null,children:n.map(n=>({type:"auto",title:n.title,basePath:t.path,path:t.path+"#"+n.slug,children:n.children||[]}))}]}function g(t){let n;return(t=t.map(t=>Object.assign({},t))).forEach(t=>{2===t.level?n=t:n&&(n.children||(n.children=[])).push(t)}),t.filter(t=>2===t.level)}function _(t){return Object.assign(t,{type:t.items&&t.items.length?"links":"link"})}},151:function(t,n,e){},152:function(t,n,e){},153:function(t,n,e){},154:function(t,n,e){},155:function(t,n,e){},156:function(t,n,e){},157:function(t,n,e){},158:function(t,n){t.exports=function(t){return null==t}},159:function(t,n,e){},160:function(t,n,e){},161:function(t,n,e){},162:function(t,n,e){},163:function(t,n,e){},164:function(t,n,e){},168:function(t,n,e){"use strict";e.r(n);var r=e(150),i={name:"SidebarGroup",components:{DropdownTransition:e(169).a},props:["item","open","collapsable","depth"],beforeCreate(){this.$options.components.SidebarLinks=e(168).default},methods:{isActive:r.e}},o=(e(183),e(3)),u=Object(o.a)(i,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("section",{staticClass:"sidebar-group",class:[{collapsable:t.collapsable,"is-sub-group":0!==t.depth},"depth-"+t.depth]},[t.item.path?e("RouterLink",{staticClass:"sidebar-heading clickable",class:{open:t.open,active:t.isActive(t.$route,t.item.path)},attrs:{to:t.item.path},nativeOn:{click:function(n){return t.$emit("toggle")}}},[e("span",[t._v(t._s(t.item.title))]),t._v(" "),t.collapsable?e("span",{staticClass:"arrow",class:t.open?"down":"right"}):t._e()]):e("p",{staticClass:"sidebar-heading",class:{open:t.open},on:{click:function(n){return t.$emit("toggle")}}},[e("span",[t._v(t._s(t.item.title))]),t._v(" "),t.collapsable?e("span",{staticClass:"arrow",class:t.open?"down":"right"}):t._e()]),t._v(" "),e("DropdownTransition",[t.open||!t.collapsable?e("SidebarLinks",{staticClass:"sidebar-group-items",attrs:{items:t.item.children,"sidebar-depth":t.item.sidebarDepth,"initial-open-group-index":t.item.initialOpenGroupIndex,depth:t.depth+1}}):t._e()],1)],1)}),[],!1,null,null,null).exports;function a(t,n,e,r,i){const o={props:{to:n,activeClass:"",exactActiveClass:""},class:{active:r,"sidebar-link":!0}};return i>2&&(o.style={"padding-left":i+"rem"}),t("RouterLink",o,e)}function s(t,n,e,i,o,u=1){return!n||u>o?null:t("ul",{class:"sidebar-sub-headers"},n.map(n=>{const c=Object(r.e)(i,e+"#"+n.slug);return t("li",{class:"sidebar-sub-header"},[a(t,e+"#"+n.slug,n.title,c,n.level-1),s(t,n.children,e,i,o,u+1)])}))}var c={functional:!0,props:["item","sidebarDepth"],render(t,{parent:{$page:n,$site:e,$route:i,$themeConfig:o,$themeLocaleConfig:u},props:{item:c,sidebarDepth:l}}){const f=Object(r.e)(i,c.path),h="auto"===c.type?f||c.children.some(t=>Object(r.e)(i,c.basePath+"#"+t.slug)):f,d="external"===c.type?function(t,n,e){return t("a",{attrs:{href:n,target:"_blank",rel:"noopener noreferrer"},class:{"sidebar-link":!0}},[e,t("OutboundLink")])}(t,c.path,c.title||c.path):a(t,c.path,c.title||c.path,h),p=[n.frontmatter.sidebarDepth,l,u.sidebarDepth,o.sidebarDepth,1].find(t=>void 0!==t),v=u.displayAllHeaders||o.displayAllHeaders;if("auto"===c.type)return[d,s(t,c.children,c.basePath,i,p)];if((h||v)&&c.headers&&!r.d.test(c.path)){return[d,s(t,Object(r.c)(c.headers),c.path,i,p)]}return d}};e(184);function l(t,n){return"group"===n.type&&n.children.some(n=>"group"===n.type?l(t,n):"page"===n.type&&Object(r.e)(t,n.path))}var f={name:"SidebarLinks",components:{SidebarGroup:u,SidebarLink:Object(o.a)(c,void 0,void 0,!1,null,null,null).exports},props:["items","depth","sidebarDepth","initialOpenGroupIndex"],data(){return{openGroupIndex:this.initialOpenGroupIndex||0}},watch:{$route(){this.refreshIndex()}},created(){this.refreshIndex()},methods:{refreshIndex(){const t=function(t,n){for(let e=0;e-1&&(this.openGroupIndex=t)},toggleGroup(t){this.openGroupIndex=t===this.openGroupIndex?-1:t},isActive(t){return Object(r.e)(this.$route,t.regularPath)}}},h=Object(o.a)(f,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return t.items.length?e("ul",{staticClass:"sidebar-links"},t._l(t.items,(function(n,r){return e("li",{key:r},["group"===n.type?e("SidebarGroup",{attrs:{item:n,open:r===t.openGroupIndex,collapsable:n.collapsable||n.collapsible,depth:t.depth},on:{toggle:function(n){return t.toggleGroup(r)}}}):e("SidebarLink",{attrs:{"sidebar-depth":t.sidebarDepth,item:n}})],1)})),0):t._e()}),[],!1,null,null,null);n.default=h.exports},169:function(t,n,e){"use strict";var r={name:"DropdownTransition",methods:{setHeight(t){t.style.height=t.scrollHeight+"px"},unsetHeight(t){t.style.height=""}}},i=(e(175),e(3)),o=Object(i.a)(r,(function(){var t=this.$createElement;return(this._self._c||t)("transition",{attrs:{name:"dropdown"},on:{enter:this.setHeight,"after-enter":this.unsetHeight,"before-leave":this.setHeight}},[this._t("default")],2)}),[],!1,null,null,null);n.a=o.exports},170:function(t,n,e){"use strict";e(151)},171:function(t,n,e){"use strict";!function(n,e,r){let i;(i=r.define)&&i.amd?i([],(function(){return e})):(i=r.modules)?i["FlexSearch".toLowerCase()]=e:t.exports=e}(0,function t(n){function e(t,n){const e=n?n.id:t&&t.id;this.id=e||0===e?e:$++,this.init(t,n),u(this,"index",(function(){return this.a?Object.keys(this.a.index[this.a.keys[0]].c):Object.keys(this.c)})),u(this,"length",(function(){return this.index.length}))}function r(t,n,e,r){return this.u!==this.g&&(this.o=this.o.concat(e),this.u++,r&&this.o.length>=r&&(this.u=this.g),this.u===this.g&&(this.cache&&this.j.set(n,this.o),this.F&&this.F(this.o))),this}function i(t,n){const e=t.length,r=m(n),i=[];for(let o=0,u=0;o=u&&((t=(t=t[a-(i+.5>>0)])[e]||(t[e]=[]))[t.length]=r),i)}function l(t,n){if(t){const e=Object.keys(t);for(let r=0,i=e.length;r(t=t.length-n.length)?1:t?-1:0}function d(t,n){return(t=t[E])<(n=n[E])?-1:t>n?1:0}function p(t,n){const e=E.length;for(let r=0;rn?1:0}function v(t,n,e){return t?{page:t,next:n?""+n:null,result:e}:e}function g(t,n,e,r,i,o,u){let a,s=[];if(!0===e){e="0";var c=""}else c=e&&e.split(":");const l=t.length;if(1u&&(c=0),a=(c=c||0)+n,a=this.m.length&&(this.C=0),this.m[this.C].postMessage({add:!0,id:t,content:n}),this.c[u]=""+this.C,e&&e(),this;if(!o){if(this.async&&"function"!=typeof importScripts){let i=this;return u=new Promise((function(e){setTimeout((function(){i.add(t,n,null,r,!0),i=null,e()}))})),e?(u.then(e),this):u}if(e)return this.add(t,n,null,r,!0),e(),this}if(!(n=this.encode(n)).length)return this;o=m(e=this.f)?e(n):n.split(this.split),this.filter&&(o=i(o,this.filter));const d=k();d._ctx=k();const p=o.length,v=this.threshold,g=this.depth,_=this.b,y=this.i,b=this.D;for(let n=0;nh;e--)c(y,d,f=a.substring(h,e),t,n,l,v,_-1)}break;default:if(s=c(y,d,a,t,1,l,v,_-1),g&&1=v)for(s=d._ctx[a]||(d._ctx[a]=k()),a=this.h[a]||(this.h[a]=x(_-(v||0))),0>(l=n-g)&&(l=0),(f=n+g+1)>p&&(f=p);li;e--)r=o[e-1],o[e]=r,n[r]=e;o[i]=t,n[t]=i}}}return n},t}();return e}(function(){const t={},n="undefined"!=typeof Blob&&"undefined"!=typeof URL&&URL.createObjectURL;return function(e,r,i,o,u){return i=n?URL.createObjectURL(new Blob(["("+i.toString()+")()"],{type:"text/javascript"})):e+".min.js",t[e+="-"+r]||(t[e]=[]),t[e][u]=new Worker(i),t[e][u].onmessage=o,t[e][u]}}()),this)},172:function(t,n,e){(function(t){var r; -/** - * @license - * Lodash - * Copyright OpenJS Foundation and other contributors - * Released under MIT license - * Based on Underscore.js 1.8.3 - * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - */(function(){var i="Expected a function",o="__lodash_placeholder__",u=[["ary",128],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",32],["partialRight",64],["rearg",256]],a="[object Arguments]",s="[object Array]",c="[object Boolean]",l="[object Date]",f="[object Error]",h="[object Function]",d="[object GeneratorFunction]",p="[object Map]",v="[object Number]",g="[object Object]",_="[object RegExp]",y="[object Set]",m="[object String]",b="[object Symbol]",w="[object WeakMap]",x="[object ArrayBuffer]",k="[object DataView]",C="[object Float32Array]",L="[object Float64Array]",j="[object Int8Array]",O="[object Int16Array]",S="[object Int32Array]",$="[object Uint8Array]",A="[object Uint16Array]",I="[object Uint32Array]",E=/\b__p \+= '';/g,T=/\b(__p \+=) '' \+/g,R=/(__e\(.*?\)|\b__t\)) \+\n'';/g,z=/&(?:amp|lt|gt|quot|#39);/g,P=/[&<>"']/g,N=RegExp(z.source),D=RegExp(P.source),U=/<%-([\s\S]+?)%>/g,W=/<%([\s\S]+?)%>/g,B=/<%=([\s\S]+?)%>/g,M=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,q=/^\w*$/,F=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,H=/[\\^$.*+?()[\]{}|]/g,G=RegExp(H.source),V=/^\s+|\s+$/g,Z=/^\s+/,K=/\s+$/,J=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,Y=/\{\n\/\* \[wrapped with (.+)\] \*/,X=/,? & /,Q=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,tt=/\\(\\)?/g,nt=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,et=/\w*$/,rt=/^[-+]0x[0-9a-f]+$/i,it=/^0b[01]+$/i,ot=/^\[object .+?Constructor\]$/,ut=/^0o[0-7]+$/i,at=/^(?:0|[1-9]\d*)$/,st=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,ct=/($^)/,lt=/['\n\r\u2028\u2029\\]/g,ft="\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff",ht="\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",dt="[\\ud800-\\udfff]",pt="["+ht+"]",vt="["+ft+"]",gt="\\d+",_t="[\\u2700-\\u27bf]",yt="[a-z\\xdf-\\xf6\\xf8-\\xff]",mt="[^\\ud800-\\udfff"+ht+gt+"\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde]",bt="\\ud83c[\\udffb-\\udfff]",wt="[^\\ud800-\\udfff]",xt="(?:\\ud83c[\\udde6-\\uddff]){2}",kt="[\\ud800-\\udbff][\\udc00-\\udfff]",Ct="[A-Z\\xc0-\\xd6\\xd8-\\xde]",Lt="(?:"+yt+"|"+mt+")",jt="(?:"+Ct+"|"+mt+")",Ot="(?:"+vt+"|"+bt+")"+"?",St="[\\ufe0e\\ufe0f]?"+Ot+("(?:\\u200d(?:"+[wt,xt,kt].join("|")+")[\\ufe0e\\ufe0f]?"+Ot+")*"),$t="(?:"+[_t,xt,kt].join("|")+")"+St,At="(?:"+[wt+vt+"?",vt,xt,kt,dt].join("|")+")",It=RegExp("['’]","g"),Et=RegExp(vt,"g"),Tt=RegExp(bt+"(?="+bt+")|"+At+St,"g"),Rt=RegExp([Ct+"?"+yt+"+(?:['’](?:d|ll|m|re|s|t|ve))?(?="+[pt,Ct,"$"].join("|")+")",jt+"+(?:['’](?:D|LL|M|RE|S|T|VE))?(?="+[pt,Ct+Lt,"$"].join("|")+")",Ct+"?"+Lt+"+(?:['’](?:d|ll|m|re|s|t|ve))?",Ct+"+(?:['’](?:D|LL|M|RE|S|T|VE))?","\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])","\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",gt,$t].join("|"),"g"),zt=RegExp("[\\u200d\\ud800-\\udfff"+ft+"\\ufe0e\\ufe0f]"),Pt=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Nt=["Array","Buffer","DataView","Date","Error","Float32Array","Float64Array","Function","Int8Array","Int16Array","Int32Array","Map","Math","Object","Promise","RegExp","Set","String","Symbol","TypeError","Uint8Array","Uint8ClampedArray","Uint16Array","Uint32Array","WeakMap","_","clearTimeout","isFinite","parseInt","setTimeout"],Dt=-1,Ut={};Ut[C]=Ut[L]=Ut[j]=Ut[O]=Ut[S]=Ut[$]=Ut["[object Uint8ClampedArray]"]=Ut[A]=Ut[I]=!0,Ut[a]=Ut[s]=Ut[x]=Ut[c]=Ut[k]=Ut[l]=Ut[f]=Ut[h]=Ut[p]=Ut[v]=Ut[g]=Ut[_]=Ut[y]=Ut[m]=Ut[w]=!1;var Wt={};Wt[a]=Wt[s]=Wt[x]=Wt[k]=Wt[c]=Wt[l]=Wt[C]=Wt[L]=Wt[j]=Wt[O]=Wt[S]=Wt[p]=Wt[v]=Wt[g]=Wt[_]=Wt[y]=Wt[m]=Wt[b]=Wt[$]=Wt["[object Uint8ClampedArray]"]=Wt[A]=Wt[I]=!0,Wt[f]=Wt[h]=Wt[w]=!1;var Bt={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Mt=parseFloat,qt=parseInt,Ft="object"==typeof global&&global&&global.Object===Object&&global,Ht="object"==typeof self&&self&&self.Object===Object&&self,Gt=Ft||Ht||Function("return this")(),Vt=n&&!n.nodeType&&n,Zt=Vt&&"object"==typeof t&&t&&!t.nodeType&&t,Kt=Zt&&Zt.exports===Vt,Jt=Kt&&Ft.process,Yt=function(){try{var t=Zt&&Zt.require&&Zt.require("util").types;return t||Jt&&Jt.binding&&Jt.binding("util")}catch(t){}}(),Xt=Yt&&Yt.isArrayBuffer,Qt=Yt&&Yt.isDate,tn=Yt&&Yt.isMap,nn=Yt&&Yt.isRegExp,en=Yt&&Yt.isSet,rn=Yt&&Yt.isTypedArray;function on(t,n,e){switch(e.length){case 0:return t.call(n);case 1:return t.call(n,e[0]);case 2:return t.call(n,e[0],e[1]);case 3:return t.call(n,e[0],e[1],e[2])}return t.apply(n,e)}function un(t,n,e,r){for(var i=-1,o=null==t?0:t.length;++i-1}function hn(t,n,e){for(var r=-1,i=null==t?0:t.length;++r-1;);return e}function Rn(t,n){for(var e=t.length;e--&&wn(n,t[e],0)>-1;);return e}function zn(t,n){for(var e=t.length,r=0;e--;)t[e]===n&&++r;return r}var Pn=jn({"À":"A","Á":"A","Â":"A","Ã":"A","Ä":"A","Å":"A","à":"a","á":"a","â":"a","ã":"a","ä":"a","å":"a","Ç":"C","ç":"c","Ð":"D","ð":"d","È":"E","É":"E","Ê":"E","Ë":"E","è":"e","é":"e","ê":"e","ë":"e","Ì":"I","Í":"I","Î":"I","Ï":"I","ì":"i","í":"i","î":"i","ï":"i","Ñ":"N","ñ":"n","Ò":"O","Ó":"O","Ô":"O","Õ":"O","Ö":"O","Ø":"O","ò":"o","ó":"o","ô":"o","õ":"o","ö":"o","ø":"o","Ù":"U","Ú":"U","Û":"U","Ü":"U","ù":"u","ú":"u","û":"u","ü":"u","Ý":"Y","ý":"y","ÿ":"y","Æ":"Ae","æ":"ae","Þ":"Th","þ":"th","ß":"ss","Ā":"A","Ă":"A","Ą":"A","ā":"a","ă":"a","ą":"a","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","ć":"c","ĉ":"c","ċ":"c","č":"c","Ď":"D","Đ":"D","ď":"d","đ":"d","Ē":"E","Ĕ":"E","Ė":"E","Ę":"E","Ě":"E","ē":"e","ĕ":"e","ė":"e","ę":"e","ě":"e","Ĝ":"G","Ğ":"G","Ġ":"G","Ģ":"G","ĝ":"g","ğ":"g","ġ":"g","ģ":"g","Ĥ":"H","Ħ":"H","ĥ":"h","ħ":"h","Ĩ":"I","Ī":"I","Ĭ":"I","Į":"I","İ":"I","ĩ":"i","ī":"i","ĭ":"i","į":"i","ı":"i","Ĵ":"J","ĵ":"j","Ķ":"K","ķ":"k","ĸ":"k","Ĺ":"L","Ļ":"L","Ľ":"L","Ŀ":"L","Ł":"L","ĺ":"l","ļ":"l","ľ":"l","ŀ":"l","ł":"l","Ń":"N","Ņ":"N","Ň":"N","Ŋ":"N","ń":"n","ņ":"n","ň":"n","ŋ":"n","Ō":"O","Ŏ":"O","Ő":"O","ō":"o","ŏ":"o","ő":"o","Ŕ":"R","Ŗ":"R","Ř":"R","ŕ":"r","ŗ":"r","ř":"r","Ś":"S","Ŝ":"S","Ş":"S","Š":"S","ś":"s","ŝ":"s","ş":"s","š":"s","Ţ":"T","Ť":"T","Ŧ":"T","ţ":"t","ť":"t","ŧ":"t","Ũ":"U","Ū":"U","Ŭ":"U","Ů":"U","Ű":"U","Ų":"U","ũ":"u","ū":"u","ŭ":"u","ů":"u","ű":"u","ų":"u","Ŵ":"W","ŵ":"w","Ŷ":"Y","ŷ":"y","Ÿ":"Y","Ź":"Z","Ż":"Z","Ž":"Z","ź":"z","ż":"z","ž":"z","IJ":"IJ","ij":"ij","Œ":"Oe","œ":"oe","ʼn":"'n","ſ":"s"}),Nn=jn({"&":"&","<":"<",">":">",'"':""","'":"'"});function Dn(t){return"\\"+Bt[t]}function Un(t){return zt.test(t)}function Wn(t){var n=-1,e=Array(t.size);return t.forEach((function(t,r){e[++n]=[r,t]})),e}function Bn(t,n){return function(e){return t(n(e))}}function Mn(t,n){for(var e=-1,r=t.length,i=0,u=[];++e",""":'"',"'":"'"});var Zn=function t(n){var e,r=(n=null==n?Gt:Zn.defaults(Gt.Object(),n,Zn.pick(Gt,Nt))).Array,ft=n.Date,ht=n.Error,dt=n.Function,pt=n.Math,vt=n.Object,gt=n.RegExp,_t=n.String,yt=n.TypeError,mt=r.prototype,bt=dt.prototype,wt=vt.prototype,xt=n["__core-js_shared__"],kt=bt.toString,Ct=wt.hasOwnProperty,Lt=0,jt=(e=/[^.]+$/.exec(xt&&xt.keys&&xt.keys.IE_PROTO||""))?"Symbol(src)_1."+e:"",Ot=wt.toString,St=kt.call(vt),$t=Gt._,At=gt("^"+kt.call(Ct).replace(H,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),Tt=Kt?n.Buffer:void 0,zt=n.Symbol,Bt=n.Uint8Array,Ft=Tt?Tt.allocUnsafe:void 0,Ht=Bn(vt.getPrototypeOf,vt),Vt=vt.create,Zt=wt.propertyIsEnumerable,Jt=mt.splice,Yt=zt?zt.isConcatSpreadable:void 0,yn=zt?zt.iterator:void 0,jn=zt?zt.toStringTag:void 0,Kn=function(){try{var t=Qi(vt,"defineProperty");return t({},"",{}),t}catch(t){}}(),Jn=n.clearTimeout!==Gt.clearTimeout&&n.clearTimeout,Yn=ft&&ft.now!==Gt.Date.now&&ft.now,Xn=n.setTimeout!==Gt.setTimeout&&n.setTimeout,Qn=pt.ceil,te=pt.floor,ne=vt.getOwnPropertySymbols,ee=Tt?Tt.isBuffer:void 0,re=n.isFinite,ie=mt.join,oe=Bn(vt.keys,vt),ue=pt.max,ae=pt.min,se=ft.now,ce=n.parseInt,le=pt.random,fe=mt.reverse,he=Qi(n,"DataView"),de=Qi(n,"Map"),pe=Qi(n,"Promise"),ve=Qi(n,"Set"),ge=Qi(n,"WeakMap"),_e=Qi(vt,"create"),ye=ge&&new ge,me={},be=Oo(he),we=Oo(de),xe=Oo(pe),ke=Oo(ve),Ce=Oo(ge),Le=zt?zt.prototype:void 0,je=Le?Le.valueOf:void 0,Oe=Le?Le.toString:void 0;function Se(t){if(Fu(t)&&!Tu(t)&&!(t instanceof Ee)){if(t instanceof Ie)return t;if(Ct.call(t,"__wrapped__"))return So(t)}return new Ie(t)}var $e=function(){function t(){}return function(n){if(!qu(n))return{};if(Vt)return Vt(n);t.prototype=n;var e=new t;return t.prototype=void 0,e}}();function Ae(){}function Ie(t,n){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!n,this.__index__=0,this.__values__=void 0}function Ee(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=4294967295,this.__views__=[]}function Te(t){var n=-1,e=null==t?0:t.length;for(this.clear();++n=n?t:n)),t}function Je(t,n,e,r,i,o){var u,s=1&n,f=2&n,w=4&n;if(e&&(u=i?e(t,r,i,o):e(t)),void 0!==u)return u;if(!qu(t))return t;var E=Tu(t);if(E){if(u=function(t){var n=t.length,e=new t.constructor(n);n&&"string"==typeof t[0]&&Ct.call(t,"index")&&(e.index=t.index,e.input=t.input);return e}(t),!s)return _i(t,u)}else{var T=eo(t),R=T==h||T==d;if(Nu(t))return fi(t,s);if(T==g||T==a||R&&!i){if(u=f||R?{}:io(t),!s)return f?function(t,n){return yi(t,no(t),n)}(t,function(t,n){return t&&yi(n,wa(n),t)}(u,t)):function(t,n){return yi(t,to(t),n)}(t,Ge(u,t))}else{if(!Wt[T])return i?t:{};u=function(t,n,e){var r=t.constructor;switch(n){case x:return hi(t);case c:case l:return new r(+t);case k:return function(t,n){var e=n?hi(t.buffer):t.buffer;return new t.constructor(e,t.byteOffset,t.byteLength)}(t,e);case C:case L:case j:case O:case S:case $:case"[object Uint8ClampedArray]":case A:case I:return di(t,e);case p:return new r;case v:case m:return new r(t);case _:return function(t){var n=new t.constructor(t.source,et.exec(t));return n.lastIndex=t.lastIndex,n}(t);case y:return new r;case b:return i=t,je?vt(je.call(i)):{}}var i}(t,T,s)}}o||(o=new Ne);var z=o.get(t);if(z)return z;o.set(t,u),Ku(t)?t.forEach((function(r){u.add(Je(r,n,e,r,t,o))})):Hu(t)&&t.forEach((function(r,i){u.set(i,Je(r,n,e,i,t,o))}));var P=E?void 0:(w?f?Gi:Hi:f?wa:ba)(t);return an(P||t,(function(r,i){P&&(r=t[i=r]),qe(u,i,Je(r,n,e,i,t,o))})),u}function Ye(t,n,e){var r=e.length;if(null==t)return!r;for(t=vt(t);r--;){var i=e[r],o=n[i],u=t[i];if(void 0===u&&!(i in t)||!o(u))return!1}return!0}function Xe(t,n,e){if("function"!=typeof t)throw new yt(i);return bo((function(){t.apply(void 0,e)}),n)}function Qe(t,n,e,r){var i=-1,o=fn,u=!0,a=t.length,s=[],c=n.length;if(!a)return s;e&&(n=dn(n,An(e))),r?(o=hn,u=!1):n.length>=200&&(o=En,u=!1,n=new Pe(n));t:for(;++i-1},Re.prototype.set=function(t,n){var e=this.__data__,r=Fe(e,t);return r<0?(++this.size,e.push([t,n])):e[r][1]=n,this},ze.prototype.clear=function(){this.size=0,this.__data__={hash:new Te,map:new(de||Re),string:new Te}},ze.prototype.delete=function(t){var n=Yi(this,t).delete(t);return this.size-=n?1:0,n},ze.prototype.get=function(t){return Yi(this,t).get(t)},ze.prototype.has=function(t){return Yi(this,t).has(t)},ze.prototype.set=function(t,n){var e=Yi(this,t),r=e.size;return e.set(t,n),this.size+=e.size==r?0:1,this},Pe.prototype.add=Pe.prototype.push=function(t){return this.__data__.set(t,"__lodash_hash_undefined__"),this},Pe.prototype.has=function(t){return this.__data__.has(t)},Ne.prototype.clear=function(){this.__data__=new Re,this.size=0},Ne.prototype.delete=function(t){var n=this.__data__,e=n.delete(t);return this.size=n.size,e},Ne.prototype.get=function(t){return this.__data__.get(t)},Ne.prototype.has=function(t){return this.__data__.has(t)},Ne.prototype.set=function(t,n){var e=this.__data__;if(e instanceof Re){var r=e.__data__;if(!de||r.length<199)return r.push([t,n]),this.size=++e.size,this;e=this.__data__=new ze(r)}return e.set(t,n),this.size=e.size,this};var tr=wi(sr),nr=wi(cr,!0);function er(t,n){var e=!0;return tr(t,(function(t,r,i){return e=!!n(t,r,i)})),e}function rr(t,n,e){for(var r=-1,i=t.length;++r0&&e(a)?n>1?or(a,n-1,e,r,i):pn(i,a):r||(i[i.length]=a)}return i}var ur=xi(),ar=xi(!0);function sr(t,n){return t&&ur(t,n,ba)}function cr(t,n){return t&&ar(t,n,ba)}function lr(t,n){return ln(n,(function(n){return Wu(t[n])}))}function fr(t,n){for(var e=0,r=(n=ai(n,t)).length;null!=t&&en}function vr(t,n){return null!=t&&Ct.call(t,n)}function gr(t,n){return null!=t&&n in vt(t)}function _r(t,n,e){for(var i=e?hn:fn,o=t[0].length,u=t.length,a=u,s=r(u),c=1/0,l=[];a--;){var f=t[a];a&&n&&(f=dn(f,An(n))),c=ae(f.length,c),s[a]=!e&&(n||o>=120&&f.length>=120)?new Pe(a&&f):void 0}f=t[0];var h=-1,d=s[0];t:for(;++h=a)return s;var c=e[r];return s*("desc"==c?-1:1)}}return t.index-n.index}(t,n,e)}))}function Tr(t,n,e){for(var r=-1,i=n.length,o={};++r-1;)a!==t&&Jt.call(a,s,1),Jt.call(t,s,1);return t}function zr(t,n){for(var e=t?n.length:0,r=e-1;e--;){var i=n[e];if(e==r||i!==o){var o=i;uo(i)?Jt.call(t,i,1):Qr(t,i)}}return t}function Pr(t,n){return t+te(le()*(n-t+1))}function Nr(t,n){var e="";if(!t||n<1||n>9007199254740991)return e;do{n%2&&(e+=t),(n=te(n/2))&&(t+=t)}while(n);return e}function Dr(t,n){return wo(vo(t,n,Ga),t+"")}function Ur(t){return Ue($a(t))}function Wr(t,n){var e=$a(t);return Co(e,Ke(n,0,e.length))}function Br(t,n,e,r){if(!qu(t))return t;for(var i=-1,o=(n=ai(n,t)).length,u=o-1,a=t;null!=a&&++io?0:o+n),(e=e>o?o:e)<0&&(e+=o),o=n>e?0:e-n>>>0,n>>>=0;for(var u=r(o);++i>>1,u=t[o];null!==u&&!Yu(u)&&(e?u<=n:u=200){var c=n?null:Ni(t);if(c)return qn(c);u=!1,i=En,s=new Pe}else s=n?[]:a;t:for(;++r=r?t:Hr(t,n,e)}var li=Jn||function(t){return Gt.clearTimeout(t)};function fi(t,n){if(n)return t.slice();var e=t.length,r=Ft?Ft(e):new t.constructor(e);return t.copy(r),r}function hi(t){var n=new t.constructor(t.byteLength);return new Bt(n).set(new Bt(t)),n}function di(t,n){var e=n?hi(t.buffer):t.buffer;return new t.constructor(e,t.byteOffset,t.length)}function pi(t,n){if(t!==n){var e=void 0!==t,r=null===t,i=t==t,o=Yu(t),u=void 0!==n,a=null===n,s=n==n,c=Yu(n);if(!a&&!c&&!o&&t>n||o&&u&&s&&!a&&!c||r&&u&&s||!e&&s||!i)return 1;if(!r&&!o&&!c&&t1?e[i-1]:void 0,u=i>2?e[2]:void 0;for(o=t.length>3&&"function"==typeof o?(i--,o):void 0,u&&ao(e[0],e[1],u)&&(o=i<3?void 0:o,i=1),n=vt(n);++r-1?i[o?n[u]:u]:void 0}}function Oi(t){return Fi((function(n){var e=n.length,r=e,o=Ie.prototype.thru;for(t&&n.reverse();r--;){var u=n[r];if("function"!=typeof u)throw new yt(i);if(o&&!a&&"wrapper"==Zi(u))var a=new Ie([],!0)}for(r=a?r:e;++r1&&m.reverse(),f&&ca))return!1;var c=o.get(t),l=o.get(n);if(c&&l)return c==n&&l==t;var f=-1,h=!0,d=2&e?new Pe:void 0;for(o.set(t,n),o.set(n,t);++f-1&&t%1==0&&t1?"& ":"")+n[r],n=n.join(e>2?", ":" "),t.replace(J,"{\n/* [wrapped with "+n+"] */\n")}(r,function(t,n){return an(u,(function(e){var r="_."+e[0];n&e[1]&&!fn(t,r)&&t.push(r)})),t.sort()}(function(t){var n=t.match(Y);return n?n[1].split(X):[]}(r),e)))}function ko(t){var n=0,e=0;return function(){var r=se(),i=16-(r-e);if(e=r,i>0){if(++n>=800)return arguments[0]}else n=0;return t.apply(void 0,arguments)}}function Co(t,n){var e=-1,r=t.length,i=r-1;for(n=void 0===n?r:n;++e1?t[n-1]:void 0;return e="function"==typeof e?(t.pop(),e):void 0,Zo(t,e)}));function nu(t){var n=Se(t);return n.__chain__=!0,n}function eu(t,n){return n(t)}var ru=Fi((function(t){var n=t.length,e=n?t[0]:0,r=this.__wrapped__,i=function(n){return Ze(n,t)};return!(n>1||this.__actions__.length)&&r instanceof Ee&&uo(e)?((r=r.slice(e,+e+(n?1:0))).__actions__.push({func:eu,args:[i],thisArg:void 0}),new Ie(r,this.__chain__).thru((function(t){return n&&!t.length&&t.push(void 0),t}))):this.thru(i)}));var iu=mi((function(t,n,e){Ct.call(t,e)?++t[e]:Ve(t,e,1)}));var ou=ji(Eo),uu=ji(To);function au(t,n){return(Tu(t)?an:tr)(t,Ji(n,3))}function su(t,n){return(Tu(t)?sn:nr)(t,Ji(n,3))}var cu=mi((function(t,n,e){Ct.call(t,e)?t[e].push(n):Ve(t,e,[n])}));var lu=Dr((function(t,n,e){var i=-1,o="function"==typeof n,u=zu(t)?r(t.length):[];return tr(t,(function(t){u[++i]=o?on(n,t,e):yr(t,n,e)})),u})),fu=mi((function(t,n,e){Ve(t,e,n)}));function hu(t,n){return(Tu(t)?dn:Or)(t,Ji(n,3))}var du=mi((function(t,n,e){t[e?0:1].push(n)}),(function(){return[[],[]]}));var pu=Dr((function(t,n){if(null==t)return[];var e=n.length;return e>1&&ao(t,n[0],n[1])?n=[]:e>2&&ao(n[0],n[1],n[2])&&(n=[n[0]]),Er(t,or(n,1),[])})),vu=Yn||function(){return Gt.Date.now()};function gu(t,n,e){return n=e?void 0:n,Ui(t,128,void 0,void 0,void 0,void 0,n=t&&null==n?t.length:n)}function _u(t,n){var e;if("function"!=typeof n)throw new yt(i);return t=ra(t),function(){return--t>0&&(e=n.apply(this,arguments)),t<=1&&(n=void 0),e}}var yu=Dr((function(t,n,e){var r=1;if(e.length){var i=Mn(e,Ki(yu));r|=32}return Ui(t,r,n,e,i)})),mu=Dr((function(t,n,e){var r=3;if(e.length){var i=Mn(e,Ki(mu));r|=32}return Ui(n,r,t,e,i)}));function bu(t,n,e){var r,o,u,a,s,c,l=0,f=!1,h=!1,d=!0;if("function"!=typeof t)throw new yt(i);function p(n){var e=r,i=o;return r=o=void 0,l=n,a=t.apply(i,e)}function v(t){return l=t,s=bo(_,n),f?p(t):a}function g(t){var e=t-c;return void 0===c||e>=n||e<0||h&&t-l>=u}function _(){var t=vu();if(g(t))return y(t);s=bo(_,function(t){var e=n-(t-c);return h?ae(e,u-(t-l)):e}(t))}function y(t){return s=void 0,d&&r?p(t):(r=o=void 0,a)}function m(){var t=vu(),e=g(t);if(r=arguments,o=this,c=t,e){if(void 0===s)return v(c);if(h)return li(s),s=bo(_,n),p(c)}return void 0===s&&(s=bo(_,n)),a}return n=oa(n)||0,qu(e)&&(f=!!e.leading,u=(h="maxWait"in e)?ue(oa(e.maxWait)||0,n):u,d="trailing"in e?!!e.trailing:d),m.cancel=function(){void 0!==s&&li(s),l=0,r=c=o=s=void 0},m.flush=function(){return void 0===s?a:y(vu())},m}var wu=Dr((function(t,n){return Xe(t,1,n)})),xu=Dr((function(t,n,e){return Xe(t,oa(n)||0,e)}));function ku(t,n){if("function"!=typeof t||null!=n&&"function"!=typeof n)throw new yt(i);var e=function(){var r=arguments,i=n?n.apply(this,r):r[0],o=e.cache;if(o.has(i))return o.get(i);var u=t.apply(this,r);return e.cache=o.set(i,u)||o,u};return e.cache=new(ku.Cache||ze),e}function Cu(t){if("function"!=typeof t)throw new yt(i);return function(){var n=arguments;switch(n.length){case 0:return!t.call(this);case 1:return!t.call(this,n[0]);case 2:return!t.call(this,n[0],n[1]);case 3:return!t.call(this,n[0],n[1],n[2])}return!t.apply(this,n)}}ku.Cache=ze;var Lu=si((function(t,n){var e=(n=1==n.length&&Tu(n[0])?dn(n[0],An(Ji())):dn(or(n,1),An(Ji()))).length;return Dr((function(r){for(var i=-1,o=ae(r.length,e);++i=n})),Eu=mr(function(){return arguments}())?mr:function(t){return Fu(t)&&Ct.call(t,"callee")&&!Zt.call(t,"callee")},Tu=r.isArray,Ru=Xt?An(Xt):function(t){return Fu(t)&&dr(t)==x};function zu(t){return null!=t&&Mu(t.length)&&!Wu(t)}function Pu(t){return Fu(t)&&zu(t)}var Nu=ee||os,Du=Qt?An(Qt):function(t){return Fu(t)&&dr(t)==l};function Uu(t){if(!Fu(t))return!1;var n=dr(t);return n==f||"[object DOMException]"==n||"string"==typeof t.message&&"string"==typeof t.name&&!Vu(t)}function Wu(t){if(!qu(t))return!1;var n=dr(t);return n==h||n==d||"[object AsyncFunction]"==n||"[object Proxy]"==n}function Bu(t){return"number"==typeof t&&t==ra(t)}function Mu(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=9007199254740991}function qu(t){var n=typeof t;return null!=t&&("object"==n||"function"==n)}function Fu(t){return null!=t&&"object"==typeof t}var Hu=tn?An(tn):function(t){return Fu(t)&&eo(t)==p};function Gu(t){return"number"==typeof t||Fu(t)&&dr(t)==v}function Vu(t){if(!Fu(t)||dr(t)!=g)return!1;var n=Ht(t);if(null===n)return!0;var e=Ct.call(n,"constructor")&&n.constructor;return"function"==typeof e&&e instanceof e&&kt.call(e)==St}var Zu=nn?An(nn):function(t){return Fu(t)&&dr(t)==_};var Ku=en?An(en):function(t){return Fu(t)&&eo(t)==y};function Ju(t){return"string"==typeof t||!Tu(t)&&Fu(t)&&dr(t)==m}function Yu(t){return"symbol"==typeof t||Fu(t)&&dr(t)==b}var Xu=rn?An(rn):function(t){return Fu(t)&&Mu(t.length)&&!!Ut[dr(t)]};var Qu=Ri(jr),ta=Ri((function(t,n){return t<=n}));function na(t){if(!t)return[];if(zu(t))return Ju(t)?Gn(t):_i(t);if(yn&&t[yn])return function(t){for(var n,e=[];!(n=t.next()).done;)e.push(n.value);return e}(t[yn]());var n=eo(t);return(n==p?Wn:n==y?qn:$a)(t)}function ea(t){return t?(t=oa(t))===1/0||t===-1/0?17976931348623157e292*(t<0?-1:1):t==t?t:0:0===t?t:0}function ra(t){var n=ea(t),e=n%1;return n==n?e?n-e:n:0}function ia(t){return t?Ke(ra(t),0,4294967295):0}function oa(t){if("number"==typeof t)return t;if(Yu(t))return NaN;if(qu(t)){var n="function"==typeof t.valueOf?t.valueOf():t;t=qu(n)?n+"":n}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(V,"");var e=it.test(t);return e||ut.test(t)?qt(t.slice(2),e?2:8):rt.test(t)?NaN:+t}function ua(t){return yi(t,wa(t))}function aa(t){return null==t?"":Yr(t)}var sa=bi((function(t,n){if(fo(n)||zu(n))yi(n,ba(n),t);else for(var e in n)Ct.call(n,e)&&qe(t,e,n[e])})),ca=bi((function(t,n){yi(n,wa(n),t)})),la=bi((function(t,n,e,r){yi(n,wa(n),t,r)})),fa=bi((function(t,n,e,r){yi(n,ba(n),t,r)})),ha=Fi(Ze);var da=Dr((function(t,n){t=vt(t);var e=-1,r=n.length,i=r>2?n[2]:void 0;for(i&&ao(n[0],n[1],i)&&(r=1);++e1),n})),yi(t,Gi(t),e),r&&(e=Je(e,7,Mi));for(var i=n.length;i--;)Qr(e,n[i]);return e}));var La=Fi((function(t,n){return null==t?{}:function(t,n){return Tr(t,n,(function(n,e){return ga(t,e)}))}(t,n)}));function ja(t,n){if(null==t)return{};var e=dn(Gi(t),(function(t){return[t]}));return n=Ji(n),Tr(t,e,(function(t,e){return n(t,e[0])}))}var Oa=Di(ba),Sa=Di(wa);function $a(t){return null==t?[]:In(t,ba(t))}var Aa=Ci((function(t,n,e){return n=n.toLowerCase(),t+(e?Ia(n):n)}));function Ia(t){return Ua(aa(t).toLowerCase())}function Ea(t){return(t=aa(t))&&t.replace(st,Pn).replace(Et,"")}var Ta=Ci((function(t,n,e){return t+(e?"-":"")+n.toLowerCase()})),Ra=Ci((function(t,n,e){return t+(e?" ":"")+n.toLowerCase()})),za=ki("toLowerCase");var Pa=Ci((function(t,n,e){return t+(e?"_":"")+n.toLowerCase()}));var Na=Ci((function(t,n,e){return t+(e?" ":"")+Ua(n)}));var Da=Ci((function(t,n,e){return t+(e?" ":"")+n.toUpperCase()})),Ua=ki("toUpperCase");function Wa(t,n,e){return t=aa(t),void 0===(n=e?void 0:n)?function(t){return Pt.test(t)}(t)?function(t){return t.match(Rt)||[]}(t):function(t){return t.match(Q)||[]}(t):t.match(n)||[]}var Ba=Dr((function(t,n){try{return on(t,void 0,n)}catch(t){return Uu(t)?t:new ht(t)}})),Ma=Fi((function(t,n){return an(n,(function(n){n=jo(n),Ve(t,n,yu(t[n],t))})),t}));function qa(t){return function(){return t}}var Fa=Oi(),Ha=Oi(!0);function Ga(t){return t}function Va(t){return kr("function"==typeof t?t:Je(t,1))}var Za=Dr((function(t,n){return function(e){return yr(e,t,n)}})),Ka=Dr((function(t,n){return function(e){return yr(t,e,n)}}));function Ja(t,n,e){var r=ba(n),i=lr(n,r);null!=e||qu(n)&&(i.length||!r.length)||(e=n,n=t,t=this,i=lr(n,ba(n)));var o=!(qu(e)&&"chain"in e&&!e.chain),u=Wu(t);return an(i,(function(e){var r=n[e];t[e]=r,u&&(t.prototype[e]=function(){var n=this.__chain__;if(o||n){var e=t(this.__wrapped__),i=e.__actions__=_i(this.__actions__);return i.push({func:r,args:arguments,thisArg:t}),e.__chain__=n,e}return r.apply(t,pn([this.value()],arguments))})})),t}function Ya(){}var Xa=Ii(dn),Qa=Ii(cn),ts=Ii(_n);function ns(t){return so(t)?Ln(jo(t)):function(t){return function(n){return fr(n,t)}}(t)}var es=Ti(),rs=Ti(!0);function is(){return[]}function os(){return!1}var us=Ai((function(t,n){return t+n}),0),as=Pi("ceil"),ss=Ai((function(t,n){return t/n}),1),cs=Pi("floor");var ls,fs=Ai((function(t,n){return t*n}),1),hs=Pi("round"),ds=Ai((function(t,n){return t-n}),0);return Se.after=function(t,n){if("function"!=typeof n)throw new yt(i);return t=ra(t),function(){if(--t<1)return n.apply(this,arguments)}},Se.ary=gu,Se.assign=sa,Se.assignIn=ca,Se.assignInWith=la,Se.assignWith=fa,Se.at=ha,Se.before=_u,Se.bind=yu,Se.bindAll=Ma,Se.bindKey=mu,Se.castArray=function(){if(!arguments.length)return[];var t=arguments[0];return Tu(t)?t:[t]},Se.chain=nu,Se.chunk=function(t,n,e){n=(e?ao(t,n,e):void 0===n)?1:ue(ra(n),0);var i=null==t?0:t.length;if(!i||n<1)return[];for(var o=0,u=0,a=r(Qn(i/n));oi?0:i+e),(r=void 0===r||r>i?i:ra(r))<0&&(r+=i),r=e>r?0:ia(r);e>>0)?(t=aa(t))&&("string"==typeof n||null!=n&&!Zu(n))&&!(n=Yr(n))&&Un(t)?ci(Gn(t),0,e):t.split(n,e):[]},Se.spread=function(t,n){if("function"!=typeof t)throw new yt(i);return n=null==n?0:ue(ra(n),0),Dr((function(e){var r=e[n],i=ci(e,0,n);return r&&pn(i,r),on(t,this,i)}))},Se.tail=function(t){var n=null==t?0:t.length;return n?Hr(t,1,n):[]},Se.take=function(t,n,e){return t&&t.length?Hr(t,0,(n=e||void 0===n?1:ra(n))<0?0:n):[]},Se.takeRight=function(t,n,e){var r=null==t?0:t.length;return r?Hr(t,(n=r-(n=e||void 0===n?1:ra(n)))<0?0:n,r):[]},Se.takeRightWhile=function(t,n){return t&&t.length?ni(t,Ji(n,3),!1,!0):[]},Se.takeWhile=function(t,n){return t&&t.length?ni(t,Ji(n,3)):[]},Se.tap=function(t,n){return n(t),t},Se.throttle=function(t,n,e){var r=!0,o=!0;if("function"!=typeof t)throw new yt(i);return qu(e)&&(r="leading"in e?!!e.leading:r,o="trailing"in e?!!e.trailing:o),bu(t,n,{leading:r,maxWait:n,trailing:o})},Se.thru=eu,Se.toArray=na,Se.toPairs=Oa,Se.toPairsIn=Sa,Se.toPath=function(t){return Tu(t)?dn(t,jo):Yu(t)?[t]:_i(Lo(aa(t)))},Se.toPlainObject=ua,Se.transform=function(t,n,e){var r=Tu(t),i=r||Nu(t)||Xu(t);if(n=Ji(n,4),null==e){var o=t&&t.constructor;e=i?r?new o:[]:qu(t)&&Wu(o)?$e(Ht(t)):{}}return(i?an:sr)(t,(function(t,r,i){return n(e,t,r,i)})),e},Se.unary=function(t){return gu(t,1)},Se.union=Fo,Se.unionBy=Ho,Se.unionWith=Go,Se.uniq=function(t){return t&&t.length?Xr(t):[]},Se.uniqBy=function(t,n){return t&&t.length?Xr(t,Ji(n,2)):[]},Se.uniqWith=function(t,n){return n="function"==typeof n?n:void 0,t&&t.length?Xr(t,void 0,n):[]},Se.unset=function(t,n){return null==t||Qr(t,n)},Se.unzip=Vo,Se.unzipWith=Zo,Se.update=function(t,n,e){return null==t?t:ti(t,n,ui(e))},Se.updateWith=function(t,n,e,r){return r="function"==typeof r?r:void 0,null==t?t:ti(t,n,ui(e),r)},Se.values=$a,Se.valuesIn=function(t){return null==t?[]:In(t,wa(t))},Se.without=Ko,Se.words=Wa,Se.wrap=function(t,n){return ju(ui(n),t)},Se.xor=Jo,Se.xorBy=Yo,Se.xorWith=Xo,Se.zip=Qo,Se.zipObject=function(t,n){return ii(t||[],n||[],qe)},Se.zipObjectDeep=function(t,n){return ii(t||[],n||[],Br)},Se.zipWith=tu,Se.entries=Oa,Se.entriesIn=Sa,Se.extend=ca,Se.extendWith=la,Ja(Se,Se),Se.add=us,Se.attempt=Ba,Se.camelCase=Aa,Se.capitalize=Ia,Se.ceil=as,Se.clamp=function(t,n,e){return void 0===e&&(e=n,n=void 0),void 0!==e&&(e=(e=oa(e))==e?e:0),void 0!==n&&(n=(n=oa(n))==n?n:0),Ke(oa(t),n,e)},Se.clone=function(t){return Je(t,4)},Se.cloneDeep=function(t){return Je(t,5)},Se.cloneDeepWith=function(t,n){return Je(t,5,n="function"==typeof n?n:void 0)},Se.cloneWith=function(t,n){return Je(t,4,n="function"==typeof n?n:void 0)},Se.conformsTo=function(t,n){return null==n||Ye(t,n,ba(n))},Se.deburr=Ea,Se.defaultTo=function(t,n){return null==t||t!=t?n:t},Se.divide=ss,Se.endsWith=function(t,n,e){t=aa(t),n=Yr(n);var r=t.length,i=e=void 0===e?r:Ke(ra(e),0,r);return(e-=n.length)>=0&&t.slice(e,i)==n},Se.eq=$u,Se.escape=function(t){return(t=aa(t))&&D.test(t)?t.replace(P,Nn):t},Se.escapeRegExp=function(t){return(t=aa(t))&&G.test(t)?t.replace(H,"\\$&"):t},Se.every=function(t,n,e){var r=Tu(t)?cn:er;return e&&ao(t,n,e)&&(n=void 0),r(t,Ji(n,3))},Se.find=ou,Se.findIndex=Eo,Se.findKey=function(t,n){return mn(t,Ji(n,3),sr)},Se.findLast=uu,Se.findLastIndex=To,Se.findLastKey=function(t,n){return mn(t,Ji(n,3),cr)},Se.floor=cs,Se.forEach=au,Se.forEachRight=su,Se.forIn=function(t,n){return null==t?t:ur(t,Ji(n,3),wa)},Se.forInRight=function(t,n){return null==t?t:ar(t,Ji(n,3),wa)},Se.forOwn=function(t,n){return t&&sr(t,Ji(n,3))},Se.forOwnRight=function(t,n){return t&&cr(t,Ji(n,3))},Se.get=va,Se.gt=Au,Se.gte=Iu,Se.has=function(t,n){return null!=t&&ro(t,n,vr)},Se.hasIn=ga,Se.head=zo,Se.identity=Ga,Se.includes=function(t,n,e,r){t=zu(t)?t:$a(t),e=e&&!r?ra(e):0;var i=t.length;return e<0&&(e=ue(i+e,0)),Ju(t)?e<=i&&t.indexOf(n,e)>-1:!!i&&wn(t,n,e)>-1},Se.indexOf=function(t,n,e){var r=null==t?0:t.length;if(!r)return-1;var i=null==e?0:ra(e);return i<0&&(i=ue(r+i,0)),wn(t,n,i)},Se.inRange=function(t,n,e){return n=ea(n),void 0===e?(e=n,n=0):e=ea(e),function(t,n,e){return t>=ae(n,e)&&t=-9007199254740991&&t<=9007199254740991},Se.isSet=Ku,Se.isString=Ju,Se.isSymbol=Yu,Se.isTypedArray=Xu,Se.isUndefined=function(t){return void 0===t},Se.isWeakMap=function(t){return Fu(t)&&eo(t)==w},Se.isWeakSet=function(t){return Fu(t)&&"[object WeakSet]"==dr(t)},Se.join=function(t,n){return null==t?"":ie.call(t,n)},Se.kebabCase=Ta,Se.last=Uo,Se.lastIndexOf=function(t,n,e){var r=null==t?0:t.length;if(!r)return-1;var i=r;return void 0!==e&&(i=(i=ra(e))<0?ue(r+i,0):ae(i,r-1)),n==n?function(t,n,e){for(var r=e+1;r--;)if(t[r]===n)return r;return r}(t,n,i):bn(t,kn,i,!0)},Se.lowerCase=Ra,Se.lowerFirst=za,Se.lt=Qu,Se.lte=ta,Se.max=function(t){return t&&t.length?rr(t,Ga,pr):void 0},Se.maxBy=function(t,n){return t&&t.length?rr(t,Ji(n,2),pr):void 0},Se.mean=function(t){return Cn(t,Ga)},Se.meanBy=function(t,n){return Cn(t,Ji(n,2))},Se.min=function(t){return t&&t.length?rr(t,Ga,jr):void 0},Se.minBy=function(t,n){return t&&t.length?rr(t,Ji(n,2),jr):void 0},Se.stubArray=is,Se.stubFalse=os,Se.stubObject=function(){return{}},Se.stubString=function(){return""},Se.stubTrue=function(){return!0},Se.multiply=fs,Se.nth=function(t,n){return t&&t.length?Ir(t,ra(n)):void 0},Se.noConflict=function(){return Gt._===this&&(Gt._=$t),this},Se.noop=Ya,Se.now=vu,Se.pad=function(t,n,e){t=aa(t);var r=(n=ra(n))?Hn(t):0;if(!n||r>=n)return t;var i=(n-r)/2;return Ei(te(i),e)+t+Ei(Qn(i),e)},Se.padEnd=function(t,n,e){t=aa(t);var r=(n=ra(n))?Hn(t):0;return n&&rn){var r=t;t=n,n=r}if(e||t%1||n%1){var i=le();return ae(t+i*(n-t+Mt("1e-"+((i+"").length-1))),n)}return Pr(t,n)},Se.reduce=function(t,n,e){var r=Tu(t)?vn:On,i=arguments.length<3;return r(t,Ji(n,4),e,i,tr)},Se.reduceRight=function(t,n,e){var r=Tu(t)?gn:On,i=arguments.length<3;return r(t,Ji(n,4),e,i,nr)},Se.repeat=function(t,n,e){return n=(e?ao(t,n,e):void 0===n)?1:ra(n),Nr(aa(t),n)},Se.replace=function(){var t=arguments,n=aa(t[0]);return t.length<3?n:n.replace(t[1],t[2])},Se.result=function(t,n,e){var r=-1,i=(n=ai(n,t)).length;for(i||(i=1,t=void 0);++r9007199254740991)return[];var e=4294967295,r=ae(t,4294967295);t-=4294967295;for(var i=$n(r,n=Ji(n));++e=o)return t;var a=e-Hn(r);if(a<1)return r;var s=u?ci(u,0,a).join(""):t.slice(0,a);if(void 0===i)return s+r;if(u&&(a+=s.length-a),Zu(i)){if(t.slice(a).search(i)){var c,l=s;for(i.global||(i=gt(i.source,aa(et.exec(i))+"g")),i.lastIndex=0;c=i.exec(l);)var f=c.index;s=s.slice(0,void 0===f?a:f)}}else if(t.indexOf(Yr(i),a)!=a){var h=s.lastIndexOf(i);h>-1&&(s=s.slice(0,h))}return s+r},Se.unescape=function(t){return(t=aa(t))&&N.test(t)?t.replace(z,Vn):t},Se.uniqueId=function(t){var n=++Lt;return aa(t)+n},Se.upperCase=Da,Se.upperFirst=Ua,Se.each=au,Se.eachRight=su,Se.first=zo,Ja(Se,(ls={},sr(Se,(function(t,n){Ct.call(Se.prototype,n)||(ls[n]=t)})),ls),{chain:!1}),Se.VERSION="4.17.20",an(["bind","bindKey","curry","curryRight","partial","partialRight"],(function(t){Se[t].placeholder=Se})),an(["drop","take"],(function(t,n){Ee.prototype[t]=function(e){e=void 0===e?1:ue(ra(e),0);var r=this.__filtered__&&!n?new Ee(this):this.clone();return r.__filtered__?r.__takeCount__=ae(e,r.__takeCount__):r.__views__.push({size:ae(e,4294967295),type:t+(r.__dir__<0?"Right":"")}),r},Ee.prototype[t+"Right"]=function(n){return this.reverse()[t](n).reverse()}})),an(["filter","map","takeWhile"],(function(t,n){var e=n+1,r=1==e||3==e;Ee.prototype[t]=function(t){var n=this.clone();return n.__iteratees__.push({iteratee:Ji(t,3),type:e}),n.__filtered__=n.__filtered__||r,n}})),an(["head","last"],(function(t,n){var e="take"+(n?"Right":"");Ee.prototype[t]=function(){return this[e](1).value()[0]}})),an(["initial","tail"],(function(t,n){var e="drop"+(n?"":"Right");Ee.prototype[t]=function(){return this.__filtered__?new Ee(this):this[e](1)}})),Ee.prototype.compact=function(){return this.filter(Ga)},Ee.prototype.find=function(t){return this.filter(t).head()},Ee.prototype.findLast=function(t){return this.reverse().find(t)},Ee.prototype.invokeMap=Dr((function(t,n){return"function"==typeof t?new Ee(this):this.map((function(e){return yr(e,t,n)}))})),Ee.prototype.reject=function(t){return this.filter(Cu(Ji(t)))},Ee.prototype.slice=function(t,n){t=ra(t);var e=this;return e.__filtered__&&(t>0||n<0)?new Ee(e):(t<0?e=e.takeRight(-t):t&&(e=e.drop(t)),void 0!==n&&(e=(n=ra(n))<0?e.dropRight(-n):e.take(n-t)),e)},Ee.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},Ee.prototype.toArray=function(){return this.take(4294967295)},sr(Ee.prototype,(function(t,n){var e=/^(?:filter|find|map|reject)|While$/.test(n),r=/^(?:head|last)$/.test(n),i=Se[r?"take"+("last"==n?"Right":""):n],o=r||/^find/.test(n);i&&(Se.prototype[n]=function(){var n=this.__wrapped__,u=r?[1]:arguments,a=n instanceof Ee,s=u[0],c=a||Tu(n),l=function(t){var n=i.apply(Se,pn([t],u));return r&&f?n[0]:n};c&&e&&"function"==typeof s&&1!=s.length&&(a=c=!1);var f=this.__chain__,h=!!this.__actions__.length,d=o&&!f,p=a&&!h;if(!o&&c){n=p?n:new Ee(this);var v=t.apply(n,u);return v.__actions__.push({func:eu,args:[l],thisArg:void 0}),new Ie(v,f)}return d&&p?t.apply(this,u):(v=this.thru(l),d?r?v.value()[0]:v.value():v)})})),an(["pop","push","shift","sort","splice","unshift"],(function(t){var n=mt[t],e=/^(?:push|sort|unshift)$/.test(t)?"tap":"thru",r=/^(?:pop|shift)$/.test(t);Se.prototype[t]=function(){var t=arguments;if(r&&!this.__chain__){var i=this.value();return n.apply(Tu(i)?i:[],t)}return this[e]((function(e){return n.apply(Tu(e)?e:[],t)}))}})),sr(Ee.prototype,(function(t,n){var e=Se[n];if(e){var r=e.name+"";Ct.call(me,r)||(me[r]=[]),me[r].push({name:n,func:e})}})),me[Si(void 0,2).name]=[{name:"wrapper",func:void 0}],Ee.prototype.clone=function(){var t=new Ee(this.__wrapped__);return t.__actions__=_i(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=_i(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=_i(this.__views__),t},Ee.prototype.reverse=function(){if(this.__filtered__){var t=new Ee(this);t.__dir__=-1,t.__filtered__=!0}else(t=this.clone()).__dir__*=-1;return t},Ee.prototype.value=function(){var t=this.__wrapped__.value(),n=this.__dir__,e=Tu(t),r=n<0,i=e?t.length:0,o=function(t,n,e){var r=-1,i=e.length;for(;++r=this.__values__.length;return{done:t,value:t?void 0:this.__values__[this.__index__++]}},Se.prototype.plant=function(t){for(var n,e=this;e instanceof Ae;){var r=So(e);r.__index__=0,r.__values__=void 0,n?i.__wrapped__=r:n=r;var i=r;e=e.__wrapped__}return i.__wrapped__=t,n},Se.prototype.reverse=function(){var t=this.__wrapped__;if(t instanceof Ee){var n=t;return this.__actions__.length&&(n=new Ee(this)),(n=n.reverse()).__actions__.push({func:eu,args:[qo],thisArg:void 0}),new Ie(n,this.__chain__)}return this.thru(qo)},Se.prototype.toJSON=Se.prototype.valueOf=Se.prototype.value=function(){return ei(this.__wrapped__,this.__actions__)},Se.prototype.first=Se.prototype.head,yn&&(Se.prototype[yn]=function(){return this}),Se}();Gt._=Zn,void 0===(r=function(){return Zn}.call(n,e,n,t))||(t.exports=r)}).call(this)}).call(this,e(22)(t))},173:function(t,n,e){"use strict";e(152)},174:function(t,n,e){"use strict";e(153)},175:function(t,n,e){"use strict";e(154)},176:function(t,n,e){"use strict";e(155)},177:function(t,n,e){"use strict";e(156)},178:function(t,n,e){"use strict";e(157)},179:function(t,n,e){"use strict";e(159)},180:function(t,n,e){var r=e(5),i=e(0),o=e(4);t.exports=function(t){return"string"==typeof t||!i(t)&&o(t)&&"[object String]"==r(t)}},181:function(t,n,e){"use strict";e(160)},182:function(t,n,e){"use strict";e(161)},183:function(t,n,e){"use strict";e(162)},184:function(t,n,e){"use strict";e(163)},185:function(t,n,e){"use strict";e(164)},196:function(t,n,e){"use strict";e.r(n);var r=e(150),i={name:"NavLink",props:{item:{required:!0}},computed:{link(){return Object(r.b)(this.item.link)},exact(){return this.$site.locales?Object.keys(this.$site.locales).some(t=>t===this.link):"/"===this.link},isNonHttpURI(){return Object(r.g)(this.link)||Object(r.h)(this.link)},isBlankTarget(){return"_blank"===this.target},isInternal(){return!Object(r.f)(this.link)&&!this.isBlankTarget},target(){return this.isNonHttpURI?null:this.item.target?this.item.target:Object(r.f)(this.link)?"_blank":""},rel(){return this.isNonHttpURI||!1===this.item.rel?null:this.item.rel?this.item.rel:this.isBlankTarget?"noopener noreferrer":null}},methods:{focusoutAction(){this.$emit("focusout")}}},o=e(3),u=Object(o.a)(i,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return t.isInternal?e("RouterLink",{staticClass:"nav-link",attrs:{to:t.link,exact:t.exact},nativeOn:{focusout:function(n){return t.focusoutAction(n)}}},[t._v("\n "+t._s(t.item.text)+"\n")]):e("a",{staticClass:"nav-link external",attrs:{href:t.link,target:t.target,rel:t.rel},on:{focusout:t.focusoutAction}},[t._v("\n "+t._s(t.item.text)+"\n "),t.isBlankTarget?e("OutboundLink"):t._e()],1)}),[],!1,null,null,null).exports,a={name:"Home",components:{NavLink:u},computed:{data(){return this.$page.frontmatter},actionLink(){return{link:this.data.actionLink,text:this.data.actionText}}}},s=(e(170),Object(o.a)(a,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("main",{staticClass:"home",attrs:{"aria-labelledby":null!==t.data.heroText?"main-title":null}},[e("header",{staticClass:"hero"},[t.data.heroImage?e("img",{attrs:{src:t.$withBase(t.data.heroImage),alt:t.data.heroAlt||"hero"}}):t._e(),t._v(" "),null!==t.data.heroText?e("h1",{attrs:{id:"main-title"}},[t._v("\n "+t._s(t.data.heroText||t.$title||"Hello")+"\n ")]):t._e(),t._v(" "),null!==t.data.tagline?e("p",{staticClass:"description"},[t._v("\n "+t._s(t.data.tagline||t.$description||"Welcome to your VuePress site")+"\n ")]):t._e(),t._v(" "),t.data.actionText&&t.data.actionLink?e("p",{staticClass:"action"},[e("NavLink",{staticClass:"action-button",attrs:{item:t.actionLink}})],1):t._e()]),t._v(" "),t.data.features&&t.data.features.length?e("div",{staticClass:"features"},t._l(t.data.features,(function(n,r){return e("div",{key:r,staticClass:"feature"},[e("h2",[t._v(t._s(n.title))]),t._v(" "),e("p",[t._v(t._s(n.details))])])})),0):t._e(),t._v(" "),e("Content",{staticClass:"theme-default-content custom"}),t._v(" "),t.data.footer?e("div",{staticClass:"footer"},[t._v("\n "+t._s(t.data.footer)+"\n ")]):t._e()],1)}),[],!1,null,null,null).exports),c=e(171),l=e.n(c),f=e(172),h=e.n(f);let d=null,p=null,v=null,g=null;const _=/[\u3131-\u314e|\u314f-\u3163|\uac00-\ud7a3]|[\u4E00-\u9FCC\u3400-\u4DB5\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA1F\uFA21\uFA23\uFA24\uFA27-\uFA29]|[\ud840-\ud868][\udc00-\udfff]|\ud869[\udc00-\uded6\udf00-\udfff]|[\ud86a-\ud86c][\udc00-\udfff]|\ud86d[\udc00-\udf34\udf40-\udfff]|\ud86e[\udc00-\udc1d]|[\u3041-\u3096]|[\u30A1-\u30FA]/giu;var y={buildIndex(t){const n=t.filter(t=>!t.frontmatter||!1!==t.frontmatter.search),e={encode:"simple",tokenize:"forward",async:!0,doc:{id:"key",field:["title","headersStr","content"]}};d=new l.a(e),d.add(n);const r=n.filter(t=>t.charsets.cyrillic),i=n.filter(t=>t.charsets.cjk);r.length&&(p=new l.a({...e,encode:"icase",split:/\s+/,tokenize:"forward"}),p.add(r)),i.length&&(v=new l.a({...e,encode:!1,tokenize:function(t){const n=[];let e=null;do{e=_.exec(t),e&&n.push(e[0])}while(e);return n}}),v.add(i)),g=h.a.keyBy(n,"path")},async match(t,n,e=7){const r=[{field:"title",query:t,limit:e,boost:10},{field:"headersStr",query:t,limit:e,boost:7},{field:"content",query:t,limit:e}],i=await d.search(r),o=p?await p.search(r):[],u=v?await v.search(r):[],a=h.a.uniqBy([...i,...o,...u],"path").map(e=>({...e,parentPageTitle:m(e),...b(e,L(t),n)})),s=h.a.groupBy(a,"parentPageTitle");return h.a.values(s).map(t=>t.map((t,n)=>0===n?t:{...t,parentPageTitle:null})).flat()},normalizeString:L};function m(t){const n=t.path.split("/");let e="/";n[1]&&(e=`/${n[1]}/`);return(g[e]||t).title}function b(t,n,e){const r=function(t,n,e){const r=e.map(n=>x(t,n)||k(t,n)).filter(t=>t);if(0===r.length)return null;if(r.every(t=>null!=t.headerIndex))return x(t,n)||r[0];return k(t,n)||r.find(t=>null==t.headerIndex)}(t,n.toLowerCase(),e);if(!r)return{...w(t),slug:"",contentStr:null};if(null!=r.headerIndex)return{...w(t,r.headerIndex,r),slug:"#"+t.headers[r.headerIndex].slug,contentStr:null};let i=h.a.findLastIndex(t.headers||[],t=>null!=t.charIndex&&t.charIndext.level===e.level-1,n-1))&&(n=null)}const i=r.map(t=>t.title).join(" > "),o=r.slice(0,-1),u=h.a.sum(o.map(t=>(t.title||"").length))+3*o.length;return{headingStr:i,headingHighlight:e&&null!=e.headerIndex&&[e.charIndex+u,e.termLength]}}function x(t,n){if(!t.headers)return null;for(let e=0;e=u.length)return{contentStr:u,contentHighlight:s};const c=h.a.round((120-r)/2),l=Math.max(a-c,0),f=Math.min(l+120,u.length);let d=u.slice(l,f);return s[0]=s[0]-l,l>0&&(d="..."+d,s[0]=s[0]+3),f({query:"",focused:!1,focusIndex:0,placeholder:void 0,suggestions:null,canSubmit:!1}),computed:{queryTerms(){if(!this.query)return[];return y.normalizeString(this.query).split(/[^\p{L}\p{N}_]+/iu).filter(t=>t)},showSuggestions(){return this.focused&&this.suggestions&&this.suggestions.length},alignRight(){return(this.$site.themeConfig.nav||[]).length+(this.$site.repo?1:0)<=2}},watch:{query(){this.getSuggestions()}},mounted(){y.buildIndex(this.$site.pages),this.placeholder=this.$site.themeConfig.searchPlaceholder||"",document.addEventListener("keydown",this.onHotkey);const t=this.urlParams();if(t){const n=t.get("query");n&&(this.query=decodeURI(n),this.focused=!0)}},beforeDestroy(){document.removeEventListener("keydown",this.onHotkey)},methods:{async getSuggestions(){if(!this.query||!this.queryTerms.length)return void(this.suggestions=[]);let t=await y.match(this.query,this.queryTerms,this.$site.themeConfig.searchMaxSuggestions||5);j.processSuggestions&&(t=await j.processSuggestions(t,this.query,this.queryTerms)),this.suggestions=t.map(t=>({...t,headingDisplay:O(t.headingStr,t.headingHighlight),contentDisplay:O(t.contentStr,t.contentHighlight)}))},getPageLocalePath(t){for(const n in this.$site.locales||{})if("/"!==n&&0===t.path.indexOf(n))return n;return"/"},isSearchable(t){let n=null;return null===n||(n=Array.isArray(n)?n:new Array(n),n.filter(n=>t.path.match(n)).length>0)},onHotkey(t){t.srcElement===document.body&&["s","/"].includes(t.key)&&(this.$refs.input.focus(),t.preventDefault())},onUp(){this.showSuggestions&&(this.focusIndex>0?this.focusIndex--:this.focusIndex=this.suggestions.length-1)},onDown(){this.showSuggestions&&(this.focusIndexwindow.location.search?new URLSearchParams(window.location.search):null,highlightWord(t){const n=new RegExp("("+this.query+")","gim");return t.replace(n,'$1')}}},$=(e(173),Object(o.a)(S,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"search-box"},[e("input",{ref:"input",class:{focused:t.focused},attrs:{"aria-label":"Search",placeholder:t.placeholder,autocomplete:"off",spellcheck:"false"},domProps:{value:t.query},on:{input:function(n){t.query=n.target.value},focus:function(n){t.focused=!0},blur:function(n){t.focused=!1},keyup:[function(n){return!n.type.indexOf("key")&&t._k(n.keyCode,"enter",13,n.key,"Enter")?null:t.go(t.focusIndex)},function(n){return!n.type.indexOf("key")&&t._k(n.keyCode,"up",38,n.key,["Up","ArrowUp"])?null:t.onUp(n)},function(n){return!n.type.indexOf("key")&&t._k(n.keyCode,"down",40,n.key,["Down","ArrowDown"])?null:t.onDown(n)}],keypress:t.onPress}}),t._v(" "),t.showSuggestions?e("ul",{staticClass:"suggestions",class:{"align-right":t.alignRight},on:{mouseleave:t.unfocus}},t._l(t.suggestions,(function(n,r){return e("li",{key:r,staticClass:"suggestion",class:{focused:r===t.focusIndex},on:{mousedown:function(n){return t.goOnClick(r)},mouseenter:function(n){return t.focus(r)}}},[e("a",{attrs:{href:n.path+n.slug},on:{click:function(t){t.preventDefault()}}},[n.parentPageTitle?e("div",{staticClass:"parent-page-title",domProps:{innerHTML:t._s(n.parentPageTitle)}}):t._e(),t._v(" "),e("div",{staticClass:"suggestion-row"},[e("div",{staticClass:"page-title"},[t._v(t._s(n.title||n.path))]),t._v(" "),e("div",{staticClass:"suggestion-content"},[n.headingStr?e("div",{staticClass:"header",domProps:{innerHTML:t._s(t.highlightWord(n.headingStr))}}):t._e(),t._v(" "),n.contentStr?e("div",{domProps:{innerHTML:t._s(t.highlightWord(n.contentStr))}}):t._e()])])])])})),0):t._e()])}),[],!1,null,null,null).exports),A=(e(174),Object(o.a)({},(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"sidebar-button",on:{click:function(n){return t.$emit("toggle-sidebar")}}},[e("svg",{staticClass:"icon",attrs:{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",role:"img",viewBox:"0 0 448 512"}},[e("path",{attrs:{fill:"currentColor",d:"M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"}})])])}),[],!1,null,null,null).exports),I=e(169),E=e(48),T=e.n(E),R={name:"DropdownLink",components:{NavLink:u,DropdownTransition:I.a},props:{item:{required:!0}},data:()=>({open:!1}),computed:{dropdownAriaLabel(){return this.item.ariaLabel||this.item.text}},watch:{$route(){this.open=!1}},methods:{setOpen(t){this.open=t},isLastItemOfArray:(t,n)=>T()(n)===t,handleDropdown(){0===event.detail&&this.setOpen(!this.open)}}},z=(e(176),{name:"NavLinks",components:{NavLink:u,DropdownLink:Object(o.a)(R,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"dropdown-wrapper",class:{open:t.open}},[e("button",{staticClass:"dropdown-title",attrs:{type:"button","aria-label":t.dropdownAriaLabel},on:{click:t.handleDropdown}},[e("span",{staticClass:"title"},[t._v(t._s(t.item.text))]),t._v(" "),e("span",{staticClass:"arrow down"})]),t._v(" "),e("button",{staticClass:"mobile-dropdown-title",attrs:{type:"button","aria-label":t.dropdownAriaLabel},on:{click:function(n){return t.setOpen(!t.open)}}},[e("span",{staticClass:"title"},[t._v(t._s(t.item.text))]),t._v(" "),e("span",{staticClass:"arrow",class:t.open?"down":"right"})]),t._v(" "),e("DropdownTransition",[e("ul",{directives:[{name:"show",rawName:"v-show",value:t.open,expression:"open"}],staticClass:"nav-dropdown"},t._l(t.item.items,(function(n,r){return e("li",{key:n.link||r,staticClass:"dropdown-item"},["links"===n.type?e("h4",[t._v("\n "+t._s(n.text)+"\n ")]):t._e(),t._v(" "),"links"===n.type?e("ul",{staticClass:"dropdown-subitem-wrapper"},t._l(n.items,(function(r){return e("li",{key:r.link,staticClass:"dropdown-subitem"},[e("NavLink",{attrs:{item:r},on:{focusout:function(e){t.isLastItemOfArray(r,n.items)&&t.isLastItemOfArray(n,t.item.items)&&t.setOpen(!1)}}})],1)})),0):e("NavLink",{attrs:{item:n},on:{focusout:function(e){t.isLastItemOfArray(n,t.item.items)&&t.setOpen(!1)}}})],1)})),0)])],1)}),[],!1,null,null,null).exports},computed:{userNav(){return this.$themeLocaleConfig.nav||this.$site.themeConfig.nav||[]},nav(){const{locales:t}=this.$site;if(t&&Object.keys(t).length>1){const n=this.$page.path,e=this.$router.options.routes,r=this.$site.themeConfig.locales||{},i={text:this.$themeLocaleConfig.selectText||"Languages",ariaLabel:this.$themeLocaleConfig.ariaLabel||"Select language",items:Object.keys(t).map(i=>{const o=t[i],u=r[i]&&r[i].label||o.lang;let a;return o.lang===this.$lang?a=n:(a=n.replace(this.$localeConfig.path,i),e.some(t=>t.path===a)||(a=i)),{text:u,link:a}})};return[...this.userNav,i]}return this.userNav},userLinks(){return(this.nav||[]).map(t=>Object.assign(Object(r.j)(t),{items:(t.items||[]).map(r.j)}))},repoLink(){const{repo:t}=this.$site.themeConfig;return t?/^https?:/.test(t)?t:"https://github.com/"+t:null},repoLabel(){if(!this.repoLink)return;if(this.$site.themeConfig.repoLabel)return this.$site.themeConfig.repoLabel;const t=this.repoLink.match(/^https?:\/\/[^/]+/)[0],n=["GitHub","GitLab","Bitbucket"];for(let e=0;e({linksWrapMaxWidth:null}),computed:{algolia(){return this.$themeLocaleConfig.algolia||this.$site.themeConfig.algolia||{}},isAlgoliaSearch(){return this.algolia&&this.algolia.apiKey&&this.algolia.indexName}},mounted(){const t=parseInt(N(this.$el,"paddingLeft"))+parseInt(N(this.$el,"paddingRight")),n=()=>{document.documentElement.clientWidth<719?this.linksWrapMaxWidth=null:this.linksWrapMaxWidth=this.$el.offsetWidth-t-(this.$refs.siteName&&this.$refs.siteName.offsetWidth||0)};n(),window.addEventListener("resize",n,!1)}},U=(e(178),Object(o.a)(D,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("header",{staticClass:"navbar"},[e("SidebarButton",{on:{"toggle-sidebar":function(n){return t.$emit("toggle-sidebar")}}}),t._v(" "),e("RouterLink",{staticClass:"home-link",attrs:{to:t.$localePath}},[t.$site.themeConfig.logo?e("img",{staticClass:"logo",attrs:{src:t.$withBase(t.$site.themeConfig.logo),alt:t.$siteTitle}}):t._e(),t._v(" "),t.$siteTitle?e("span",{ref:"siteName",staticClass:"site-name",class:{"can-hide":t.$site.themeConfig.logo}},[t._v(t._s(t.$siteTitle))]):t._e()]),t._v(" "),e("div",{staticClass:"links",style:t.linksWrapMaxWidth?{"max-width":t.linksWrapMaxWidth+"px"}:{}},[t.isAlgoliaSearch?e("AlgoliaSearchBox",{attrs:{options:t.algolia}}):!1!==t.$site.themeConfig.search&&!1!==t.$page.frontmatter.search?e("SearchBox"):t._e(),t._v(" "),e("NavLinks",{staticClass:"can-hide"})],1)],1)}),[],!1,null,null,null).exports),W=e(158),B=e.n(W),M={name:"PageEdit",computed:{lastUpdated(){return this.$page.lastUpdated},lastUpdatedText(){return"string"==typeof this.$themeLocaleConfig.lastUpdated?this.$themeLocaleConfig.lastUpdated:"string"==typeof this.$site.themeConfig.lastUpdated?this.$site.themeConfig.lastUpdated:"Last Updated"},editLink(){const t=B()(this.$page.frontmatter.editLink)?this.$site.themeConfig.editLinks:this.$page.frontmatter.editLink,{repo:n,docsDir:e="",docsBranch:r="master",docsRepo:i=n}=this.$site.themeConfig;return t&&i&&this.$page.relativePath?this.createEditLink(n,i,e,r,this.$page.relativePath):null},editLinkText(){return this.$themeLocaleConfig.editLinkText||this.$site.themeConfig.editLinkText||"Edit this page"}},methods:{createEditLink(t,n,e,i,o){if(/bitbucket.org/.test(n)){return n.replace(r.a,"")+"/src"+`/${i}/`+(e?e.replace(r.a,"")+"/":"")+o+`?mode=edit&spa=0&at=${i}&fileviewer=file-view-default`}if(/gitlab.com/.test(n)){return n.replace(r.a,"")+"/-/edit"+`/${i}/`+(e?e.replace(r.a,"")+"/":"")+o}return(r.i.test(n)?n:"https://github.com/"+n).replace(r.a,"")+"/edit"+`/${i}/`+(e?e.replace(r.a,"")+"/":"")+o}}},q=(e(179),Object(o.a)(M,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("footer",{staticClass:"page-edit"},[t.editLink?e("div",{staticClass:"edit-link"},[e("a",{attrs:{href:t.editLink,target:"_blank",rel:"noopener noreferrer"}},[t._v(t._s(t.editLinkText))]),t._v(" "),e("OutboundLink")],1):t._e(),t._v(" "),t.lastUpdated?e("div",{staticClass:"last-updated"},[e("span",{staticClass:"prefix"},[t._v(t._s(t.lastUpdatedText)+":")]),t._v(" "),e("span",{staticClass:"time"},[t._v(t._s(t.lastUpdated))])]):t._e()])}),[],!1,null,null,null).exports),F=e(180),H=e.n(F),G={name:"PageNav",props:["sidebarItems"],computed:{prev(){return Z(V.PREV,this)},next(){return Z(V.NEXT,this)}}};const V={NEXT:{resolveLink:function(t,n){return K(t,n,1)},getThemeLinkConfig:({nextLinks:t})=>t,getPageLinkConfig:({frontmatter:t})=>t.next},PREV:{resolveLink:function(t,n){return K(t,n,-1)},getThemeLinkConfig:({prevLinks:t})=>t,getPageLinkConfig:({frontmatter:t})=>t.prev}};function Z(t,{$themeConfig:n,$page:e,$route:i,$site:o,sidebarItems:u}){const{resolveLink:a,getThemeLinkConfig:s,getPageLinkConfig:c}=t,l=s(n),f=c(e),h=B()(f)?l:f;return!1===h?void 0:H()(h)?Object(r.k)(o.pages,h,i.path):a(e,u)}function K(t,n,e){const r=[];!function t(n,e){for(let r=0,i=n.length;r({isSidebarOpen:!1}),computed:{shouldShowNavbar(){const{themeConfig:t}=this.$site,{frontmatter:n}=this.$page;return!1!==n.navbar&&!1!==t.navbar&&(this.$title||t.logo||t.repo||t.nav||this.$themeLocaleConfig.nav)},shouldShowSidebar(){const{frontmatter:t}=this.$page;return!t.home&&!1!==t.sidebar&&this.sidebarItems.length},sidebarItems(){return Object(r.l)(this.$page,this.$page.regularPath,this.$site,this.$localePath)},pageClasses(){const t=this.$page.frontmatter.pageClass;return[{"no-navbar":!this.shouldShowNavbar,"sidebar-open":this.isSidebarOpen,"no-sidebar":!this.shouldShowSidebar},t]}},mounted(){this.$router.afterEach(()=>{this.isSidebarOpen=!1})},methods:{toggleSidebar(t){this.isSidebarOpen="boolean"==typeof t?t:!this.isSidebarOpen,this.$emit("toggle-sidebar",this.isSidebarOpen)},onTouchStart(t){this.touchStart={x:t.changedTouches[0].clientX,y:t.changedTouches[0].clientY}},onTouchEnd(t){const n=t.changedTouches[0].clientX-this.touchStart.x,e=t.changedTouches[0].clientY-this.touchStart.y;Math.abs(n)>Math.abs(e)&&Math.abs(n)>40&&(n>0&&this.touchStart.x<=80?this.toggleSidebar(!0):this.toggleSidebar(!1))}}}),nt=Object(o.a)(tt,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"theme-container",class:t.pageClasses,on:{touchstart:t.onTouchStart,touchend:t.onTouchEnd}},[t.shouldShowNavbar?e("Navbar",{on:{"toggle-sidebar":t.toggleSidebar}}):t._e(),t._v(" "),e("div",{staticClass:"sidebar-mask",on:{click:function(n){return t.toggleSidebar(!1)}}}),t._v(" "),e("Sidebar",{attrs:{items:t.sidebarItems},on:{"toggle-sidebar":t.toggleSidebar},scopedSlots:t._u([{key:"top",fn:function(){return[t._t("sidebar-top")]},proxy:!0},{key:"bottom",fn:function(){return[t._t("sidebar-bottom")]},proxy:!0}],null,!0)}),t._v(" "),t.$page.frontmatter.home?e("Home"):e("Page",{attrs:{"sidebar-items":t.sidebarItems},scopedSlots:t._u([{key:"top",fn:function(){return[t._t("page-top")]},proxy:!0},{key:"bottom",fn:function(){return[t._t("page-bottom")]},proxy:!0}],null,!0)})],1)}),[],!1,null,null,null);n.default=nt.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/20.72c3f69b.js b/docs/assets/js/20.72c3f69b.js deleted file mode 100644 index 07f805b..0000000 --- a/docs/assets/js/20.72c3f69b.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[20],{203:function(t,n,a){"use strict";a.r(n);var s=a(3),e=Object(s.a)({},(function(){var t=this,n=t.$createElement,a=t._self._c||n;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"connectionsupplier"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#connectionsupplier"}},[t._v("#")]),t._v(" ConnectionSupplier")]),t._v(" "),a("p",[t._v("DB接続を行う際のコネクションを提供するクラスです。\n標準で以下のクラスが提供されているので用途に応じて使い分けてください。")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("クラス名")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("説明")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("DefaultConnectionSupplierImpl")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("コンストラクタで受け取ったコネクションを返すだけのコネクション供給クラス")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("JdbcConnectionSupplierImpl")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("JDBCドライバーマネージャを使用したコネクション提供クラス")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("DataSourceConnectionSupplierImpl")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("データソースを使用したコネクション提供クラス")])])])]),t._v(" "),a("p",[t._v("また、"),a("a",{attrs:{href:"https://github.com/future-architect/uroborosql/blob/master/src/main/java/jp/co/future/uroborosql/connection/ConnectionSupplier.java",target:"_blank",rel:"noopener noreferrer"}},[t._v("ConnectionSupplier"),a("OutboundLink")],1),t._v("インタフェースを実装した独自のJDBCコネクション提供クラスを利用することもできます。")]),t._v(" "),a("h2",{attrs:{id:"connectioncontext"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#connectioncontext"}},[t._v("#")]),t._v(" ConnectionContext "),a("Badge",{attrs:{text:"0.19.0+"}})],1),t._v(" "),a("p",[t._v("動的に"),a("code",[t._v("SqlAgent")]),t._v("の接続先を切り替える場合は、"),a("code",[t._v("SqlConfig#agent(ConnectionContext)")]),t._v("メソッドを使用します。")]),t._v(" "),a("p",[a("code",[t._v("ConnectionContext")]),t._v("は、"),a("code",[t._v("ConnectionContextBuilder")]),t._v("の下記メソッドを利用して、インスタンスを生成します。")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("戻り値")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("メソッド名")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("説明")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("DataSourceConnectionContext")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("dataSource()")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("DataSourceConnectionContext を生成する.")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("DataSourceConnectionContext")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("dataSource(String dataSourceName)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("DataSourceConnectionContext を生成する.")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("JdbcConnectionContext")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("jdbc(String url)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("JdbcConnectionContext を生成する.")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("JdbcConnectionContext")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("jdbc(String url, String user, String password)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("JdbcConnectionContext を生成する.")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("JdbcConnectionContext")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("jdbc(String url, String user, String password, String schema)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("JdbcConnectionContext を生成する.")])])])]),t._v(" "),a("h3",{attrs:{id:"実装例"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#実装例"}},[t._v("#")]),t._v(" 実装例")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlConfig")]),t._v(" config "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("UroboroSQL")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("builder")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setConnectionSupplier")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("JdbcConnectionSupplier")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"jdbc:h2:mem:mainConnection"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"sa"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"sa"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("build")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlAgent")]),t._v(" agent "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" config"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("agent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// using jdbc:h2:mem:mainConnection")]),t._v("\n agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("required")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//-------------------------------------------------------")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlAgent")]),t._v(" agent "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" config"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("agent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ConnectionContextBuilder")]),t._v("\n\t\t\t\t"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("jdbc")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"jdbc:h2:mem:subConnection"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"sa"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"sa"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// usingjdbc:h2:mem:subConnection")]),t._v("\n agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("required")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br")])])])}),[],!1,null,null,null);n.default=e.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/21.c4d6d3d3.js b/docs/assets/js/21.c4d6d3d3.js deleted file mode 100644 index a2ee823..0000000 --- a/docs/assets/js/21.c4d6d3d3.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[21],{206:function(t,e,a){"use strict";a.r(e);var l=a(3),s=Object(l.a)({},(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"dialect"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#dialect"}},[t._v("#")]),t._v(" Dialect")]),t._v(" "),a("p",[t._v("複数のDBを対象とするアプリケーションを作成する場合、DB毎のSQL文法の差異を吸収するため\nアプリケーションで対象DBを判定し実行するSQLファイルを切り替える、といった対応が必要になります。\n"),a("strong",[t._v("uroboroSQL")]),t._v("では、こういったDB毎のSQL文法の差異に対応するため、"),a("code",[t._v("Dialect")]),t._v("という仕組みを提供しています。"),a("br"),t._v(" "),a("code",[t._v("Dialect")]),t._v("は接続したDBから取得できる情報を元に自動で判別される為、通常は変更する必要はありません。")]),t._v(" "),a("p",[t._v("現在、標準で以下のDBに対するDialectが提供されています。")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("DB名")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("Dialect")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("H2 DB")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[a("a",{attrs:{href:"https://github.com/future-architect/uroborosql/blob/master/src/main/java/jp/co/future/uroborosql/dialect/H2Dialect.java",target:"_blank",rel:"noopener noreferrer"}},[t._v("H2Dialect"),a("OutboundLink")],1)])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("Microsoft SQL Server")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[a("a",{attrs:{href:"https://github.com/future-architect/uroborosql/blob/master/src/main/java/jp/co/future/uroborosql/dialect/MsSqlDialect.java",target:"_blank",rel:"noopener noreferrer"}},[t._v("MsSqlDialect"),a("OutboundLink")],1)])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("MySQL")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[a("a",{attrs:{href:"https://github.com/future-architect/uroborosql/blob/master/src/main/java/jp/co/future/uroborosql/dialect/MySqlDialect.java",target:"_blank",rel:"noopener noreferrer"}},[t._v("MySqlDialect"),a("OutboundLink")],1)])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("Oracle10g以下")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[a("a",{attrs:{href:"https://github.com/future-architect/uroborosql/blob/master/src/main/java/jp/co/future/uroborosql/dialect/Oracle10Dialect.java",target:"_blank",rel:"noopener noreferrer"}},[t._v("Oracle10Dialect"),a("OutboundLink")],1)])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("Oracle11g")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[a("a",{attrs:{href:"https://github.com/future-architect/uroborosql/blob/master/src/main/java/jp/co/future/uroborosql/dialect/Oracle11Dialect.java",target:"_blank",rel:"noopener noreferrer"}},[t._v("Oracle11Dialect"),a("OutboundLink")],1)])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("Oracle12c以上")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[a("a",{attrs:{href:"https://github.com/future-architect/uroborosql/blob/master/src/main/java/jp/co/future/uroborosql/dialect/Oracle12Dialect.java",target:"_blank",rel:"noopener noreferrer"}},[t._v("Oracle12Dialect"),a("OutboundLink")],1)])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("Postgresql")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[a("a",{attrs:{href:"https://github.com/future-architect/uroborosql/blob/master/src/main/java/jp/co/future/uroborosql/dialect/PostgresqlDialect.java",target:"_blank",rel:"noopener noreferrer"}},[t._v("PostgresqlDialect"),a("OutboundLink")],1)])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("その他")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[a("a",{attrs:{href:"https://github.com/future-architect/uroborosql/blob/master/src/main/java/jp/co/future/uroborosql/dialect/DefaultDialect.java",target:"_blank",rel:"noopener noreferrer"}},[t._v("DefaultDialect"),a("OutboundLink")],1)])])])]),t._v(" "),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),a("p",[t._v("該当するDBが見つからない場合は"),a("code",[t._v("DefaultDialect")]),t._v("が適用されます")])]),t._v(" "),a("h2",{attrs:{id:"カスタムdialectの登録"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#カスタムdialectの登録"}},[t._v("#")]),t._v(" カスタムDialectの登録")]),t._v(" "),a("p",[t._v("標準でサポートしている上記のDB以外に接続し、"),a("code",[t._v("DefaultDialect")]),t._v("と違う動作をさせたい場合は、対象のDBに対する"),a("code",[t._v("Dialect")]),t._v("クラスを作成して"),a("strong",[t._v("uroboroSQL")]),t._v("に登録する必要があります。")]),t._v(" "),a("p",[a("code",[t._v("Dialect")]),t._v("の登録には、Javaの "),a("a",{attrs:{href:"https://docs.oracle.com/javase/jp/8/docs/api/java/util/ServiceLoader.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("java.util.ServiceLoader"),a("OutboundLink")],1),t._v("を利用します。")]),t._v(" "),a("p",[t._v("最初に対象のDB(ここではSQLiteとする)に対する"),a("code",[t._v("Dialect")]),t._v("クラスを作成します。")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("package")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("foo"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("bar"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("dialect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqliteDialect")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("AbstractDialect")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * コンストラクタ\n */")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqliteDialect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("super")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[t._v("@Override")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getDatabaseName")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"SQLite"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 対象DBの製品名を特定するための文字列を返す")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// supportsXXXメソッド、isXXXメソッド、getXXXメソッドを必要に応じて実装")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br")])]),a("p",[a("code",[t._v("Dialect")]),t._v("インタフェースで提供すべきメソッドは以下になります。")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("メソッド名")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("戻り値")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("説明")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("supportsBulkInsert()")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("boolean")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[a("code",[t._v("BULK INSERT")]),t._v("をサポートするかどうか")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("supportsLimitClause()")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("boolean")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[a("code",[t._v("LIMIT")]),t._v("句をサポートするかどうか")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("supportsOptimizerHints() "),a("Badge",{attrs:{text:"0.18.0+"}})],1),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("boolean")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("オプティマイザーヒントをサポートするかどうか")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("supportsNullValuesOrdering()")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("boolean")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[a("code",[t._v("SELECT")]),t._v("句の"),a("code",[t._v("ORDER BY")]),t._v("でNULL値の順序を指定できるか(NULLS FIRST/LAST)")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("supportsIdentity()")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("boolean")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("データベースのIDカラムを使用したID自動採番をサポートしているか")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("supportsSequence()")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("boolean")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("データベースのシーケンスを使用したID自動採番をサポートしているか")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("supportsForUpdate()")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("boolean")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("明示的な行ロックをサポートしているか")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("supportsForUpdateNoWait()")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("boolean")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("明示的な行ロック(待機なし)をサポートしているか")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("supportsForUpdateWait()")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("boolean")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("明示的な行ロック(待機あり)をサポートしているか")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("isRemoveTerminator()")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("boolean")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("実行するSQLに記述されている終端文字("),a("code",[t._v(";")]),t._v(")を削除するかどうか")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("isRollbackToSavepointBeforeRetry()")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("boolean")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("リトライする前に設定したSavepointまでロールバックするかどうか")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("getSequenceNextValSql(String sequenceName)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("String")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("シーケンスを取得するためのSQL文を取得する")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("getLimitClause(long limit, long offset)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("String")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[a("code",[t._v("LIMIT")]),t._v("句(と"),a("code",[t._v("OFFSET")]),t._v("句)を取得する")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("escapeLikePattern(CharSequence pattern)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("String")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[a("code",[t._v("LIKE")]),t._v("演算子のパターン文字列をエスケープする")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("getJavaType(JDBCType jdbcType, String jdbcTypeName)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("JavaType")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("引数で渡ってきたJavaTypeを変換したJavaTypeを取得する。(DB固有のJava型変換を行う場合に実装)")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("getJavaType(int jdbcType, String jdbcTypeName)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("JavaType")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("引数で渡ってきたJavaTypeを変換したJavaTypeを取得する。(DB固有のJava型変換を行う場合に実装)")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("getDatabaseName()")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("String")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("データベースを判別するための文字列を取得する")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("getDatabaseType()")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("String")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("データベースの種別を表す名前を取得する")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("getEscapeChar()")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("char")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[a("code",[t._v("LIKE")]),t._v("句で指定するエスケープキャラクタを取得する")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("addForUpdateClause(StringBuilder sql, ForUpdateType forUpdateType, int waitSeconds)")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("StringBuilder")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[a("code",[t._v("FOR UPDATE")]),t._v("句の文字列をSQLに追加する")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("addOptimizerHints(StringBuilder sql, List hints) "),a("Badge",{attrs:{text:"0.18.0+"}})],1),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("StringBuilder")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("引数で渡したSQLにオプティマイザーヒントを付与する")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("getModLiteral(final String dividend, final String divisor) "),a("Badge",{attrs:{text:"0.17.0+"}})],1),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("StringBuilder")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("乗除を行うためのSQL文字列を取得する")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("getPessimisticLockingErrorCodes() "),a("Badge",{attrs:{text:"0.18.2+"}})],1),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Set")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("悲観ロックのErrorCode もしくは SqlStateを取得する")])])])]),t._v(" "),a("p",[a("code",[t._v("Dialect")]),t._v("インタフェースのデフォルト実装や"),a("code",[t._v("AbstractDialect")]),t._v("クラスを参考に、上記のメソッドのうち変更が必要なメソッドの実装を行ってください。")]),t._v(" "),a("p",[t._v("次に"),a("strong",[t._v("uroboroSQL")]),t._v("を利用するアプリケーションのクラスパス上に以下のファイル名のファイルを作成します。")]),t._v(" "),a("div",{staticClass:"language-md line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-md"}},[a("code",[t._v("META-INF\n └─services\n └─jp.co.future.uroborosql.dialect.Dialect\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br")])]),a("p",[t._v("最後に作成した"),a("code",[t._v("jp.co.future.uroborosql.dialect.Dialect")]),t._v("ファイルの中に作成した"),a("code",[t._v("Dialect")]),t._v("のクラス名(FQDN名)を記述します。")]),t._v(" "),a("div",{staticClass:"language-md line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-md"}},[a("code",[t._v("foo.bar.dialect.SqliteDialect\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])]),a("p",[t._v("アプリケーションで"),a("code",[t._v("jp.co.future.uroborosql.dialect.Dialect")]),t._v("が"),a("code",[t._v("ServiceLoader")]),t._v("経由で読み込まれれば登録した"),a("code",[t._v("SqliteDialect")]),t._v("が利用可能になります。")])])}),[],!1,null,null,null);e.default=s.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/22.e0bd7641.js b/docs/assets/js/22.e0bd7641.js deleted file mode 100644 index c817371..0000000 --- a/docs/assets/js/22.e0bd7641.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[22],{214:function(t,s,a){"use strict";a.r(s);var n=a(3),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"entityhandler"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#entityhandler"}},[t._v("#")]),t._v(" EntityHandler")]),t._v(" "),a("p",[a("code",[t._v("EntityHandler")]),t._v("はDAOインタフェースを利用したDB操作を行う際に実行するSQLの生成を制御するためのクラスです。"),a("br"),t._v("\nアプリケーションの要件によって"),a("a",{attrs:{href:"https://github.com/future-architect/uroborosql/blob/master/src/main/java/jp/co/future/uroborosql/mapping/EntityHandler.java",target:"_blank",rel:"noopener noreferrer"}},[t._v("EntityHandler"),a("OutboundLink")],1),t._v("インタフェースや"),a("a",{attrs:{href:"https://github.com/future-architect/uroborosql/blob/master/src/main/java/jp/co/future/uroborosql/mapping/DefaultEntityHandler.java",target:"_blank",rel:"noopener noreferrer"}},[t._v("DefaultEntityHandler"),a("OutboundLink")],1),t._v("クラスを継承した独自のEntityHandlerを指定することが出来ます。")]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("EntityHandlerはDAOインタフェース利用時のみに有効な手段ですが、SQLファイルインタフェースにおいても自動でバインドする場合は、"),a("RouterLink",{attrs:{to:"/configuration/sql-context-factory.html#自動パラメータバインド関数の設定"}},[t._v("自動パラメータバインド関数の設定")]),t._v("を参照してください。")],1)]),t._v(" "),a("p",[a("code",[t._v("EntityHandler")]),t._v("拡張例")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CustomEntityHandler")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DefaultEntityHandler")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("implements")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("EntityHandler")]),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Object")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[t._v("@Override")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setInsertParams")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlContext")]),t._v(" context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Object")]),t._v(" entity"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setEntityModelInsertParams")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("EntityModel")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" entity"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// entityがEntityModel型を継承している場合")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("super")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setInsertParams")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" entity"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[t._v("@Override")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setUpdateParams")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlContext")]),t._v(" context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Object")]),t._v(" entity"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setEntityModelUpdateParams")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("EntityModel")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" entity"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// entityがEntityModel型を継承している場合")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("super")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setUpdateParams")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" entity"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[t._v("@Override")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setBulkInsertParams")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlContext")]),t._v(" context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Object")]),t._v(" entity"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" entityIndex"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setEntityModelInsertParams")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("EntityModel")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" entity"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// entityがEntityModel型を継承している場合")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("super")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setBulkInsertParams")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" entity"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" entityIndex"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setEntityModelInsertParams")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("EntityModel")]),t._v(" model"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ZonedDateTime")]),t._v(" now "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ZonedDateTime")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("now")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n model"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setCreatedAt")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("now"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n model"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setUpdatedAt")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("now"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setEntityModelUpdateParams")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("EntityModel")]),t._v(" model"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n model"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setUpdatedAt")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ZonedDateTime")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("now")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br")])]),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// create SqlConfig")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlConfig")]),t._v(" config "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("UroboroSQL")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("builder")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// EntityHandlerの設定")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setEntityHandler")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CustomEntityHandler")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("build")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br")])])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/23.070897ad.js b/docs/assets/js/23.070897ad.js deleted file mode 100644 index a67b565..0000000 --- a/docs/assets/js/23.070897ad.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[23],{205:function(t,s,a){"use strict";a.r(s);var n=a(3),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"sqlagentfactory"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#sqlagentfactory"}},[t._v("#")]),t._v(" SqlAgentFactory")]),t._v(" "),a("p",[t._v("SQL実行を行うクラスである"),a("code",[t._v("SqlAgent")]),t._v("を生成するファクトリクラスです。SQL実行時の挙動を変更するための初期値の設定が行えます。")]),t._v(" "),a("p",[t._v("設定例")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlConfig")]),t._v(" config "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("UroboroSQL")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("builder")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// SqlAgentFactoryの設定")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setSqlAgentFactory")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlAgentFactoryImpl")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// JDBCフェッチサイズ")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setFetchSize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1000")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Statementオブジェクトの検索タイムアウト時間(s)")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setQueryTimeout")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 例外発生時のログ出力を行うかどうか")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setOutputExceptionLog")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// SQL_IDの置換文字列")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setSqlIdKeyName")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"_SQL_ID_"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 検索結果を格納するMapのキー変換に使用するCaseFormatの初期値")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setDefaultMapKeyCaseFormat")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CaseFormat")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("UPPER_SNAKE_CASE"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 複数件挿入時の挿入方法の初期値")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setDefaultInsertsType")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("InsertsType")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("BULK"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// アプリケーション全体のリトライ設定")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// SQLエラーコードが54,30006のいずれか(Oracleのリソース・ビジー)の場合")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setSqlRetryCodeList")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Arrays")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("asList")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"54"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"30006"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 最大リトライ回数")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setDefaultMaxRetryCount")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// リトライ間隔")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setDefaultSqlRetryWaitTime")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// トランザクション内での更新を強制するかどうか")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setForceUpdateWithinTransaction")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 明示的な行ロック時の待機時間(s)デフォルト値")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setDefaultForUpdateWaitSeconds")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("build")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br")])]),a("h2",{attrs:{id:"フェッチサイズと検索タイムアウト設定-sqlagentfactory-setfetchsize-setquerytimeout"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#フェッチサイズと検索タイムアウト設定-sqlagentfactory-setfetchsize-setquerytimeout"}},[t._v("#")]),t._v(" フェッチサイズと検索タイムアウト設定 ( "),a("code",[t._v("SqlAgentFactory#setFetchSize")]),t._v(" /"),a("code",[t._v("#setQueryTimeout")]),t._v(" )")]),t._v(" "),a("p",[a("code",[t._v("SqlAgent")]),t._v("で検索処理を行う際、データベースから一度に取得する行数("),a("code",[t._v("fetchSize")]),t._v(")や\n検索タイムアウト時間(秒)("),a("code",[t._v("queryTimeout")]),t._v(")の初期値を指定することが出来ます。\n指定しない場合"),a("code",[t._v("fetchSize")]),t._v(", "),a("code",[t._v("queryTimeout")]),t._v("ともに"),a("code",[t._v("-1")]),t._v("が設定されます。")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlConfig")]),t._v(" config "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("UroboroSQL")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("builder")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// SqlAgentFactoryの設定")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setSqlAgentFactory")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlAgentFactoryImpl")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// JDBCフェッチサイズ")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setFetchSize")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1000")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// Statementオブジェクトの検索タイムアウト時間(s)")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setQueryTimeout")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("build")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br")])]),a("div",{staticClass:"custom-block warning"},[a("p",{staticClass:"custom-block-title"},[t._v("補足")]),t._v(" "),a("p",[a("code",[t._v("fetchSize")]),t._v("は、"),a("a",{attrs:{href:"https://docs.oracle.com/javase/jp/8/docs/api/java/sql/Statement.html#setFetchSize-int-",target:"_blank",rel:"noopener noreferrer"}},[t._v("Statement.setFetchSize"),a("OutboundLink")],1),t._v("に渡される値で、パフォーマンスに影響します。"),a("br"),t._v("\nJDBCクライアント(uroborosqlを使用しているJavaアプリケーション)ではDBサーバ側で実行されたSELECTの結果セットをfetchサイズで指定された行数ずつ分割して取得します。\nそのため結果行数に対して"),a("code",[t._v("fetchSize")]),t._v("が小さいと、JDBCクライアント <-> DBサーバ間の通信回数が増大してパフォーマンスに悪影響を及ぼします。"),a("br"),t._v("\n(例:select結果が10,000件、fetchSizeが100の場合、JDBCクライアント⇔DBサーバ間の通信は10,000÷100 = 100回行われる)")])]),t._v(" "),a("div",{staticClass:"custom-block danger"},[a("p",{staticClass:"custom-block-title"},[t._v("注意")]),t._v(" "),a("p",[a("code",[t._v("fetchSize")]),t._v("はcollect/foreachメソッドで返却される結果セットの行数を制限する設定ではありません。")])]),t._v(" "),a("h2",{attrs:{id:"例外発生時のログ出力を行うかどうかを設定-sqlagentfactory-setoutputexceptionlog"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#例外発生時のログ出力を行うかどうかを設定-sqlagentfactory-setoutputexceptionlog"}},[t._v("#")]),t._v(" 例外発生時のログ出力を行うかどうかを設定 ( "),a("code",[t._v("SqlAgentFactory#setOutputExceptionLog")]),t._v(" )")]),t._v(" "),a("p",[t._v("SQL実行時にSQL例外が発生した場合に、発生した例外と実行したSQLの詳細情報を出力するかどうかを指定できます。\n指定しない場合"),a("code",[t._v("false")]),t._v("になります。")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlConfig")]),t._v(" config "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("UroboroSQL")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("builder")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// SqlAgentFactoryの設定")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setSqlAgentFactory")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlAgentFactoryImpl")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 例外発生時のログ出力を行うかどうか")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setOutputExceptionLog")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("build")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br")])]),a("h2",{attrs:{id:"sql-idの置換文字列設定-sqlagentfactory-setsqlidkeyname"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#sql-idの置換文字列設定-sqlagentfactory-setsqlidkeyname"}},[t._v("#")]),t._v(" SQL_IDの置換文字列設定 ( "),a("code",[t._v("SqlAgentFactory#setSqlIdKeyName")]),t._v(" )")]),t._v(" "),a("p",[t._v("SQL文に特定の置換文字列をSQLコメントとして記述することで、SQL実行時に実行したSQLの元となるSQLファイルを特定するための\n情報(SQL_ID)を埋め込むことが出来ます。SQL_IDを埋め込むことでSQLログやDBのSQL履歴で実行されたSQLの元となるファイルを\n特定しやすくなります。"),a("br"),t._v("\n必要に応じてこの置換文字列は変更することが出来ます。\n指定しない場合"),a("code",[t._v("_SQL_ID_")]),t._v("になります。")]),t._v(" "),a("p",[t._v("設定例")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlConfig")]),t._v(" config "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("UroboroSQL")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("builder")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// SqlAgentFactoryの設定")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setSqlAgentFactory")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlAgentFactoryImpl")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// SQL_IDの置換文字列")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setSqlIdKeyName")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"_SQL_ID_"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("build")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br")])]),a("p",[t._v("department/select_department.sql")]),t._v(" "),a("div",{staticClass:"language-sql line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sql"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("select")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* _SQL_ID_ */")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("-- _SQL_ID_ がSQLファイルを特定するための情報の埋め込み先となる")]),t._v("\n dept"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("dept_no "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" dept_no\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" dept"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("dept_name "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" dept_name\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" dept"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("lock_version "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" lock_version\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v("\n department dept\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*BEGIN*/")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("where")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*IF SF.isNotEmpty(deptNo)*/")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("and")]),t._v(" dept"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("dept_no "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*deptNo*/")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*END*/")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*IF SF.isNotEmpty(deptName)*/")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("and")]),t._v(" dept"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("dept_name "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*deptName*/")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'sample'")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*END*/")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*END*/")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br")])]),a("p",[t._v("SQL実行処理")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[t._v("agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"department/select_department"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("param")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"deptNo"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("collect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br")])]),a("p",[t._v("実行されるSQL")]),t._v(" "),a("div",{staticClass:"language-sql line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sql"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("select")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* department/select_department */")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("-- _SQL_ID_ にSQL名(department/select_department)が設定される")]),t._v("\n dept"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("dept_no "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" dept_no\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" dept"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("dept_name "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" dept_name\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" dept"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("lock_version "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" lock_version\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v("\n department dept\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("where")]),t._v("\n dept"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("dept_no "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*deptNo*/")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br")])]),a("h2",{attrs:{id:"caseformatの初期値設定-sqlagentfactory-setdefaultmapkeycaseformat"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#caseformatの初期値設定-sqlagentfactory-setdefaultmapkeycaseformat"}},[t._v("#")]),t._v(" CaseFormatの初期値設定 ( "),a("code",[t._v("SqlAgentFactory#setDefaultMapKeyCaseFormat")]),t._v(" )")]),t._v(" "),a("p",[t._v("SQLによる検索で、以下のメソッドを使用して"),a("code",[t._v("List>")]),t._v("や"),a("code",[t._v("Map")]),t._v("を取得する際、\n取得したMapのキー名に対する書式の初期値を指定することが出来ます。\n指定しない場合"),a("code",[t._v("CaseFormat.UPPER_SNAKE_CASE")]),t._v("になります。")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("対象メソッド")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("戻り値の型")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlQuery#collect()")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("List>")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlQuery#findFirst()")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Optional>")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlQuery#first()")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Map")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlQuery#stream()")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("Stream>")])])])]),t._v(" "),a("p",[t._v("指定しない場合(初期設定:"),a("code",[t._v("CaseFormat.UPPER_SNAKE_CASE")]),t._v(")")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[t._v("agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"department/select_department"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("collect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 結果(departments) キーがUPPER_SNAKE_CASEとなっている")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"DEPT_NO"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"DEPT_NAME"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"sales"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"DEPT_NO"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"DEPT_NAME"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"export"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"DEPT_NO"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"DEPT_NAME"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"accounting"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"DEPT_NO"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"DEPT_NAME"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"personnel"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br")])]),a("p",[a("code",[t._v("CaseFormat.CAMEL_CASE")]),t._v("を初期値として設定")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlConfig")]),t._v(" config "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("UroboroSQL")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("builder")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// SqlAgentFactoryの設定")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setSqlAgentFactory")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlAgentFactoryImpl")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 検索結果を格納するMapのキー変換に使用するCaseFormatの初期値")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setDefaultMapKeyCaseFormat")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CaseFormat")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("CAMEL_CASE"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("build")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br")])]),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[t._v("agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"department/select_department"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("collect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 結果(departments) キーがCAMEL_CASEとなっている")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"deptNo"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"deptName"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"sales"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"deptNo"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"deptName"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"export"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"deptNo"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"deptName"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"accounting"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"deptNo"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"deptName"')]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"personnel"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br")])]),a("h2",{attrs:{id:"複数件挿入時の挿入方法の初期値設定-sqlagentfactory-setdefaultinsertstype"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#複数件挿入時の挿入方法の初期値設定-sqlagentfactory-setdefaultinsertstype"}},[t._v("#")]),t._v(" 複数件挿入時の挿入方法の初期値設定 ( "),a("code",[t._v("SqlAgentFactory#setDefaultInsertsType")]),t._v(" )")]),t._v(" "),a("p",[a("code",[t._v("SqlAgent#inserts()")]),t._v("メソッドで使用する"),a("RouterLink",{attrs:{to:"/basics/entity-api.html#挿入方法(insertstype)の指定"}},[t._v("InsertsType")]),t._v("の初期値を設定することが出来ます。\n指定しない場合"),a("code",[t._v("InsertsType.BULK")]),t._v("になります。")],1),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlConfig")]),t._v(" config "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("UroboroSQL")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("builder")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// SqlAgentFactoryの設定")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setSqlAgentFactory")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlAgentFactoryImpl")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 複数件挿入時の挿入方法の初期値")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setDefaultInsertsType")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("InsertsType")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("BULK"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("build")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br")])]),a("h2",{attrs:{id:"sql実行のリトライ-sqlagentfactory-setsqlretrycodelist-setdefaultmaxretrycount-setdefaultsqlretrywaittime"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#sql実行のリトライ-sqlagentfactory-setsqlretrycodelist-setdefaultmaxretrycount-setdefaultsqlretrywaittime"}},[t._v("#")]),t._v(" SQL実行のリトライ ( "),a("code",[t._v("SqlAgentFactory#setSqlRetryCodeList")]),t._v(" /"),a("code",[t._v("#setDefaultMaxRetryCount")]),t._v(" /"),a("code",[t._v("#setDefaultSqlRetryWaitTime")]),t._v(" )")]),t._v(" "),a("p",[t._v("SQLを実行した際、タイミングによって発生する例外(テーブルロックエラーなど)の場合はリトライを行い、\nできるだけ正常に処理を終了させたい場合があります。"),a("br"),t._v("\n通常、このようなケースでは以下のような実装を行います。")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" MAX_RETRY_COUNT "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// MAX_RETRY_COUNT はアプリケーションで定義された最大リトライ回数の定数とする")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlConfig")]),t._v(" config "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("UroboroSQL")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("builder")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("build")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" retryCount "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlAgent")]),t._v(" agent "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" config"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("agent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// INSERT文の実行")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// insert into product (product_id) values (/*product_id*/0);")]),t._v("\n agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("update")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"example/insert_product"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("param")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"product_id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("count")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("break")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("catch")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("UroborosqlSQLException")]),t._v(" ex"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// SQLExceptionが発生した際に行う処理を実装")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" errorCode "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" ex"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getErrorCode")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("errorCode "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("30006")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("||")]),t._v(" errorCode "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("54")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// リソース・ビジー(Oracleの場合)")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// リトライ対象エラーコードの場合はリトライカウントをカウントアップしてリトライする")]),t._v("\n retryCount"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("retryCount "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" MAX_RETRY_COUNT"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 最大リトライ回数に達した場合は例外をスローする")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("throw")]),t._v(" ex"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 10ms 待機")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Thread")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("sleep")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("catch")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("InterruptedException")]),t._v(" iex"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// do nothing")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("else")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// リトライ対象エラーコード以外はすぐに例外をスローする")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("throw")]),t._v(" ex"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br")])]),a("p",[t._v("しかし、上記のようなリトライ処理を個々の実装で行うと、\n実装漏れや実装ミス、実装方法の差異(for()の代わりにwhile()を使用するなど)により不具合が発生しやすくなります。"),a("br"),t._v(" "),a("strong",[t._v("uroboroSQL")]),t._v("では、アプリケーション全体のリトライ設定と、全体設定より優先される個別処理でのリトライ用APIの\n2種類のAPIを提供することで、より簡潔で確実なリトライ処理が行えるよう工夫されています。"),a("br"),t._v("\nアプリケーション全体のリトライ設定は"),a("code",[t._v("SqlAgentFactory")]),t._v("生成時に行います。")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlConfig")]),t._v(" config "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("UroboroSQL")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("builder")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// SqlAgentFactoryの設定")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setSqlAgentFactory")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlAgentFactoryImpl")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// アプリケーション全体のリトライ設定")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// SQLエラーコードが54,30006のいずれか(Oracleのリソース・ビジー)の場合")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setSqlRetryCodeList")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Arrays")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("asList")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"54"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"30006"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 最大リトライ回数(3回)リトライ")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setDefaultMaxRetryCount")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// リトライ間隔10ms待機")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setDefaultSqlRetryWaitTime")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("build")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br")])]),a("p",[t._v("リトライAPIを用いた実装は次のようになります。")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// アプリケーション全体のリトライ設定に従ってリトライを行う。(個別のリトライ指定なし)")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlAgent")]),t._v(" agent "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" config"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("agent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// INSERT文の実行")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// insert into product (product_id) values (/*product_id*/0);")]),t._v("\n agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("update")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"example/insert_product"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("param")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"product_id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("count")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 個別にリトライ設定を上書きする(retry()を利用)")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlAgent")]),t._v(" agent "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" config"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("agent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// INSERT文の実行")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// insert into product (product_id) values (/*product_id*/0);")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// リトライ対象エラーコードの場合、5回のリトライを20ms間隔で行う")]),t._v("\n agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("update")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"example/insert_product"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("param")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"product_id"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("retry")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("5")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("20")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("count")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br")])]),a("h2",{attrs:{id:"db更新処理をトランザクション内のみに強制-sqlagentfactory-setforceupdatewithintransaction"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#db更新処理をトランザクション内のみに強制-sqlagentfactory-setforceupdatewithintransaction"}},[t._v("#")]),t._v(" DB更新処理をトランザクション内のみに強制 ( "),a("code",[t._v("SqlAgentFactory#setForceUpdateWithinTransaction")]),t._v(" ) "),a("Badge",{attrs:{text:"0.14.0+"}})],1),t._v(" "),a("p",[t._v("複数のDB更新処理をまとめて行う際、途中で例外が発生するとDBデータが不整合な状態になる場合があります。このようなデータ不整合を防ぐためには"),a("RouterLink",{attrs:{to:"/transaction.html#トランザクション"}},[t._v("トランザクション")]),t._v("を利用します。"),a("br"),t._v("\nしかし、通常の設定ではトランザクションを開始しない状態でもDB更新処理を行うことが可能になっているため不具合に気付きにくいという問題があります。"),a("br"),t._v(" "),a("strong",[t._v("uroboroSQL")]),t._v("ではトランザクションを開始していない状態でDB更新処理が行なわれた場合に例外をスローするオプションを提供しています。このオプションを使用することでDBデータの整合性を維持しやすくなります。")],1),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlConfig")]),t._v(" config "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("UroboroSQL")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("builder")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// SqlAgentFactoryの設定")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setSqlAgentFactory")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlAgentFactoryImpl")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// トランザクション内での更新を強制するかどうか")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setForceUpdateWithinTransaction")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("build")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br")])]),a("p",[a("code",[t._v("SqlAgentFactory#setForceUpdateWithinTransaction()")]),t._v("に"),a("code",[t._v("true")]),t._v("を指定することでトランザクションを開始していない状態でDB更新処理が行なわれた場合に"),a("code",[t._v("UroborosqlTransactionException")]),t._v("がスローされます。")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[t._v("agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("required")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// トランザクション開始")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// トランザクション内でのDB更新なのでOK")]),t._v("\n agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("updateWith")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"insert into employee (emp_no) values (/*emp_no*/1001)"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("param")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"emp_no"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("count")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// トランザクション終了")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// トランザクション外でのDB更新なので UroborosqlTransactionException がスローされる")]),t._v("\nagent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("updateWith")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("\"insert into department (dept_no, dept_name) values (/*dept_no*/1111, /*dept_name*/'Sales')\"")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("param")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"dept_no"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("param")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"dept_name"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"export"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("count")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br")])]),a("h2",{attrs:{id:"明示的な行ロック時の待機時間-s-のデフォルト値設定-sqlagentfactory-setdefaultforupdatewaitseconds"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#明示的な行ロック時の待機時間-s-のデフォルト値設定-sqlagentfactory-setdefaultforupdatewaitseconds"}},[t._v("#")]),t._v(" 明示的な行ロック時の待機時間(s)のデフォルト値設定 ( "),a("code",[t._v("SqlAgentFactory#setDefaultForUpdateWaitSeconds")]),t._v(" ) "),a("Badge",{attrs:{text:"0.14.0+"}})],1),t._v(" "),a("p",[a("code",[t._v("SqlEntityQuery#forUpdateWait()")]),t._v("による明示的な行ロックをおこなう際の待機時間を指定することができます。")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlConfig")]),t._v(" config "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("UroboroSQL")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("builder")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// SqlAgentFactoryの設定")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setSqlAgentFactory")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlAgentFactoryImpl")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 明示的な行ロック時の待機時間(s)デフォルト値")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setDefaultForUpdateWaitSeconds")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("build")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br")])]),a("p",[t._v("待機時間の初期値を設定することで"),a("code",[t._v("SqlEntityQuery#forUpdateWait()")]),t._v("を発行する際に適用され、\n待機時間を都度指定する必要がなくなります。"),a("br"),t._v(" "),a("code",[t._v("SqlEntityQuery#forUpdateWait(int)")]),t._v("を使って個別に待機時間を指定した場合は個別設定が優先されます。")])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/24.407ffc8a.js b/docs/assets/js/24.407ffc8a.js deleted file mode 100644 index c6dd473..0000000 --- a/docs/assets/js/24.407ffc8a.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[24],{221:function(s,t,a){"use strict";a.r(t);var n=a(3),e=Object(n.a)({},(function(){var s=this,t=s.$createElement,a=s._self._c||t;return a("ContentSlotsDistributor",{attrs:{"slot-key":s.$parent.slotKey}},[a("h1",{attrs:{id:"sqlcontextfactory"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#sqlcontextfactory"}},[s._v("#")]),s._v(" SqlContextFactory")]),s._v(" "),a("p",[s._v("SQL構造を表現するクラスである"),a("code",[s._v("SqlContext")]),s._v("を生成するファクトリクラスです。生成されるSQLの挙動を変更するための設定が行えます。")]),s._v(" "),a("p",[s._v("設定例")]),s._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// create SqlConfig")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("SqlConfig")]),s._v(" config "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("UroboroSQL")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("builder")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// SqlContextFactoryの設定")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("setSqlContextFactory")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("SqlContextFactoryImpl")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 定数クラス設定の追加")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("setConstantClassNames")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Arrays")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("asList")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("TypeConstants")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getName")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 列挙型パッケージ設定の追加")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("setEnumConstantPackageNames")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Arrays")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("asList")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Gender")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getPackage")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getName")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 定数パラメータのプレフィックス指定(初期値 : CLS_)")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("setConstParamPrefix")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"CLS_"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// query用自動パラメータバインド関数の登録")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("addQueryAutoParameterBinder")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("->")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("paramIfAbsent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"current_flg"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// update/batch/procedure用自動パラメータバインド関数の登録")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("addUpdateAutoParameterBinder")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("->")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("paramIfAbsent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"ins_datetime"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("LocalDateTime")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("now")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("addUpdateAutoParameterBinder")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("->")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("paramIfAbsent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"upd_datetime"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("LocalDateTime")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("now")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// パラメータ変換クラスの登録")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("addBindParamMapper")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("CustomBindParamMapper")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// ResultSetTypeの初期値")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE, java.sql.ResultSet.TYPE_SCROLL_SENSITIVE のいづれか")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("setDefaultResultSetType")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ResultSet")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("TYPE_FORWARD_ONLY"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// ResultSetConcurrencyの初期値")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// java.sql.ResultSet.CONCUR_READ_ONLY, java.sql.ResultSet.CONCUR_UPDATABLE のいづれか")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("setDefaultResultSetConcurrency")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ResultSet")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("CONCUR_READ_ONLY"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("build")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br")])]),a("h2",{attrs:{id:"区分値定数や列挙型の利用-sqlcontextfactory-setconstantclassnames-setenumconstantpackagenames"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#区分値定数や列挙型の利用-sqlcontextfactory-setconstantclassnames-setenumconstantpackagenames"}},[s._v("#")]),s._v(" 区分値定数や列挙型の利用 ( "),a("code",[s._v("SqlContextFactory#setConstantClassNames")]),s._v(" /"),a("code",[s._v("#setEnumConstantPackageNames")]),s._v(")")]),s._v(" "),a("p",[s._v("これまでSQLの開発では、区分値や定数値などの固定値がマジックナンバーとしてSQL文内に埋め込まれていました。"),a("br"),s._v("\nしかしマジックナンバーの記述は可読性が悪く仕様変更時の影響調査が困難なため不具合の温床となっていました。")]),s._v(" "),a("p",[s._v("例")]),s._v(" "),a("div",{staticClass:"language-sql line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sql"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("select")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" employee\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("where")]),s._v(" emp_typ "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'05'")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("-- 05:従業員 <-- 従業員の区分が変わったらどうする?")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br")])]),a("p",[a("strong",[s._v("uroboroSQL")]),s._v("はエンタープライズ分野での開発に利用されてきた経験から、SQL文の中でマジックナンバーの代わりに定数や列挙型を利用するための仕組みを提供しています。")]),s._v(" "),a("p",[s._v("区分値定数/列挙型を利用するためには"),a("code",[s._v("SqlContextFactory")]),s._v("に以下の設定を追加します。")]),s._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// create SqlConfig")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("SqlConfig")]),s._v(" config "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("UroboroSQL")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("builder")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// SqlContextFactoryの設定")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("setSqlContextFactory")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("SqlContextFactoryImpl")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 定数クラス設定の追加")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("setConstantClassNames")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Arrays")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("asList")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("TypeConstants")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getName")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 列挙型パッケージ設定の追加")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("setEnumConstantPackageNames")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Arrays")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("asList")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Gender")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getPackage")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("getName")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// 定数パラメータのプレフィックス指定(初期値 : CLS_)")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("setConstParamPrefix")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"CLS_"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("build")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br")])]),a("p",[s._v("定数クラス : TypeConstants.javaの実装例")]),s._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/**\n * 区分値定数クラス\n */")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("final")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("TypeConstants")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("TypeConstants")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/** 区分種別:口座種別区分 区分種別番号:0035 */")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("static")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("final")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" ACCOUNT_TYP "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"0035"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/** 区分種別:口座種別区分 区分値:普通 区分値番号:1 */")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("static")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("final")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" ACCOUNT_TYP_SAVING "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/** 区分種別:口座種別区分 区分値:当座 区分値番号:2 */")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("static")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("final")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" ACCOUNT_TYP_CHECKING "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"2"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/** 区分種別:口座種別区分 区分値:定期 区分値番号:3 */")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("static")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("final")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" ACCOUNT_TYP_FIXED_DEPOSIT "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"3"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/** 区分種別:実行区分 区分種別番号:0052 */")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("static")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("final")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" ISSUE_TYP "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"0052"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/** 区分種別:実行区分 区分値:未実行 区分値番号:1 */")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("static")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("final")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" ISSUE_TYP_UNISSUED "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/** 区分種別:実行区分 区分値:実行済 区分値番号:2 */")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("static")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("final")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" ISSUE_TYP_OUTSTANDING "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"2"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/**\n * システム定数\n */")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("final")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Consts")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Consts")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("static")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("final")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("CommonValue")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("CommonValue")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/** 業務日付(オンライン) */")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("static")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("final")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" ONLINE_DATE "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/** 業務日付(バッチ) */")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("static")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("final")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" BATCH_DATE "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"2"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/** SQL上でのフラグ表現(TRUE=1) */")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("static")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("final")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" FLAG_ON "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/** SQL上でのフラグ表現(FALSE=0) */")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("static")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("final")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" FLAG_OFF "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/** 日付ALL0 */")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("static")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("final")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" ZERO_DATE "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"00000000"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/** 日付最小値 */")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("static")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("final")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" MIN_DATE "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"19000101"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/** 日付最大値 */")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("static")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("final")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" MAX_DATE "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"99991231"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br"),a("span",{staticClass:"line-number"},[s._v("25")]),a("br"),a("span",{staticClass:"line-number"},[s._v("26")]),a("br"),a("span",{staticClass:"line-number"},[s._v("27")]),a("br"),a("span",{staticClass:"line-number"},[s._v("28")]),a("br"),a("span",{staticClass:"line-number"},[s._v("29")]),a("br"),a("span",{staticClass:"line-number"},[s._v("30")]),a("br"),a("span",{staticClass:"line-number"},[s._v("31")]),a("br"),a("span",{staticClass:"line-number"},[s._v("32")]),a("br"),a("span",{staticClass:"line-number"},[s._v("33")]),a("br"),a("span",{staticClass:"line-number"},[s._v("34")]),a("br"),a("span",{staticClass:"line-number"},[s._v("35")]),a("br"),a("span",{staticClass:"line-number"},[s._v("36")]),a("br"),a("span",{staticClass:"line-number"},[s._v("37")]),a("br"),a("span",{staticClass:"line-number"},[s._v("38")]),a("br"),a("span",{staticClass:"line-number"},[s._v("39")]),a("br"),a("span",{staticClass:"line-number"},[s._v("40")]),a("br"),a("span",{staticClass:"line-number"},[s._v("41")]),a("br"),a("span",{staticClass:"line-number"},[s._v("42")]),a("br"),a("span",{staticClass:"line-number"},[s._v("43")]),a("br"),a("span",{staticClass:"line-number"},[s._v("44")]),a("br"),a("span",{staticClass:"line-number"},[s._v("45")]),a("br"),a("span",{staticClass:"line-number"},[s._v("46")]),a("br"),a("span",{staticClass:"line-number"},[s._v("47")]),a("br"),a("span",{staticClass:"line-number"},[s._v("48")]),a("br"),a("span",{staticClass:"line-number"},[s._v("49")]),a("br")])]),a("p",[s._v("列挙型 : Gender.javaの実装例")]),s._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/**\n * 性別を表す列挙型\n */")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("enum")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Gender")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("MALE")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"M"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("FEMALE")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"F"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("OTHER")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"O"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("final")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" label"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Gender")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" label"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("label "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" label"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[s._v("@Override")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toString")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" label"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br")])]),a("p",[s._v("このように区分値定数や列挙型を定数パラメータとして登録しておくことで、SQL文の中で定数名が利用できるようになります。")]),s._v(" "),a("p",[s._v("定数パラメータを利用する場合、以下の命名ルールに従ってパラメータを指定します。")]),s._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[s._v("パターン")]),s._v(" "),a("th",{staticStyle:{"text-align":"left"}},[s._v("書式")])])]),s._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[s._v("定数")]),s._v(" "),a("td",{staticStyle:{"text-align":"left"}},[s._v("[定数パラメータプレフィックス][定数フィールド名大文字]")])]),s._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[s._v("定数(Innerクラスがある場合)")]),s._v(" "),a("td",{staticStyle:{"text-align":"left"}},[s._v("[定数パラメータプレフィックス][Innerクラス名大文字スネークケース]_[Innerクラス内定数フィールド名大文字]")])]),s._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[s._v("列挙型")]),s._v(" "),a("td",{staticStyle:{"text-align":"left"}},[s._v("[定数パラメータプレフィックス][列挙型名大文字]_[列挙子名大文字]")])])])]),s._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),a("p",[s._v("※定数パラメータプレフィックスの初期値は "),a("code",[s._v("CLS_")]),s._v("となっています。"),a("br"),s._v(" "),a("code",[s._v("SqlContextFactory#setConstParamPrefix()")]),s._v("で変更することが可能です。")])]),s._v(" "),a("p",[s._v("実際に使用する際はSQL文の中で置換文字列として以下のように指定します")]),s._v(" "),a("ul",[a("li",[s._v("/*#[定数パラメータプレフィックス][定数フィールド名大文字]*/")]),s._v(" "),a("li",[s._v("/*#[定数パラメータプレフィックス][Innerクラス名大文字スネークケース]_[Innerクラス内定数フィールド名大文字]*/")]),s._v(" "),a("li",[s._v("/*#[定数パラメータプレフィックス][列挙型名大文字]_[列挙子名大文字]*/")])]),s._v(" "),a("p",[s._v("または")]),s._v(" "),a("ul",[a("li",[s._v("/*$[定数パラメータプレフィックス][定数フィールド名大文字]*/")]),s._v(" "),a("li",[s._v("/*$[定数パラメータプレフィックス][Innerクラス名大文字スネークケース]_[Innerクラス内定数フィールド名大文字]*/")]),s._v(" "),a("li",[s._v("/*$[定数パラメータプレフィックス][列挙型名大文字]_[列挙子名大文字]*/")])]),s._v(" "),a("p",[s._v("という風に使用します。")]),s._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),a("p",[s._v("定数や列挙型の値は固定値なので生成されるSQLは毎回同じ値になり、SQL文解析処理によるCPU負荷を考慮する必要はありません。")])]),s._v(" "),a("p",[s._v("区分の例")]),s._v(" "),a("div",{staticClass:"language-sql line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sql"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("select")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("*")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v(" account\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("where")]),s._v(" account_typ "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*#CLS_ACCOUNT_TYP_SAVING*/")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'1'")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("-- 1:普通口座")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br")])]),a("p",[s._v("定数の例")]),s._v(" "),a("div",{staticClass:"language-sql line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sql"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("select")]),s._v("\n emp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("emp_no "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("as")]),s._v(" emp_no\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" emp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("first_name "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("as")]),s._v(" first_name\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" emp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("last_name "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("as")]),s._v(" last_name\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" emp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("birth_date "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("as")]),s._v(" birth_date\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" emp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("gender "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("as")]),s._v(" gender\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v("\n employee emp\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("where")]),s._v("\n emp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("birth_date "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("!=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*#CLS_COMMON_VALUE_ZERO_DATE*/")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'00000000'")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("-- 定数パラメータの指定")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br")])]),a("p",[s._v("列挙型の例")]),s._v(" "),a("div",{staticClass:"language-sql line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sql"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("select")]),s._v("\n emp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("emp_no "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("as")]),s._v(" emp_no\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" emp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("first_name "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("as")]),s._v(" first_name\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" emp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("last_name "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("as")]),s._v(" last_name\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" emp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("birth_date "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("as")]),s._v(" birth_date\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" emp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("gender "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("as")]),s._v(" gender\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("from")]),s._v("\n employee emp\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("where")]),s._v("\n emp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("gender "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("/*#CLS_GENDER_FEMALE*/")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v("'F'")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("-- 列挙型定数パラメータの指定")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br")])]),a("h2",{attrs:{id:"自動パラメータバインド関数の設定-sqlcontextfactory-addqueryautoparameterbinder-addupdateautoparameterbinder"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#自動パラメータバインド関数の設定-sqlcontextfactory-addqueryautoparameterbinder-addupdateautoparameterbinder"}},[s._v("#")]),s._v(" 自動パラメータバインド関数の設定 ( "),a("code",[s._v("SqlContextFactory#addQueryAutoParameterBinder")]),s._v(" /"),a("code",[s._v("#addUpdateAutoParameterBinder")]),s._v(" ) "),a("Badge",{attrs:{text:"0.6.1+"}})],1),s._v(" "),a("p",[s._v("アプリケーションで使用する各テーブルに共通項目(登録日時、更新日時など)が定義されている場合、\nINSERT文やUPDATE文を実行する際には毎回これらの共通項目に対するパラメータを指定する必要が出てきます。"),a("br"),s._v("\nこのような共通項目へのパラメータ設定を個別に行うと実装が煩雑になり、\nどうしても実装漏れや記述ミスにより正しく値が設定されない、といったことが起こります。")]),s._v(" "),a("p",[a("strong",[s._v("uroboroSQL")]),s._v("ではこのような共通項目に対して自動的にパラメータをバインドする仕組みを提供しています。"),a("br"),s._v("\n自動パラメータバインド関数を設定することで、SQLの実行のたびに自動パラメータバインド関数が呼び出され、\n関数内で指定したパラメータがSQLにバインドされることになります。")]),s._v(" "),a("p",[s._v("設定例")]),s._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("SqlConfig")]),s._v(" config "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("UroboroSQL")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("builder")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// SqlContextFactoryの設定")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("setSqlContextFactory")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("SqlContextFactoryImpl")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// query用自動パラメータバインド関数の登録")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("addQueryAutoParameterBinder")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("->")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("paramIfAbsent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"current_flg"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[s._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// update/batch/procedure用自動パラメータバインド関数の登録")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("addUpdateAutoParameterBinder")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("->")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("paramIfAbsent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"ins_datetime"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("LocalDateTime")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("now")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("addUpdateAutoParameterBinder")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),s._v("ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("->")]),s._v(" ctx"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("paramIfAbsent")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"upd_datetime"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("LocalDateTime")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("now")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("build")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br")])]),a("p",[s._v("自動パラメータバインド関数は"),a("code",[s._v("SqlContext")]),s._v("を引数に受け取るので、関数内でパラメータの設定を行ってください。")]),s._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[s._v("TIP")]),s._v(" "),a("p",[s._v("関数の評価は、SQL生成処理(SQL文内の"),a("code",[s._v("/*IF*/")]),s._v("や"),a("code",[s._v("/*BEGIN*/")]),s._v("、"),a("code",[s._v("/*parameter_name*/")]),s._v("の評価)の直前に行われます。")])]),s._v(" "),a("h2",{attrs:{id:"バインドパラメータ変換クラスの設定-sqlcontextfactory-addbindparammapper"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#バインドパラメータ変換クラスの設定-sqlcontextfactory-addbindparammapper"}},[s._v("#")]),s._v(" バインドパラメータ変換クラスの設定 ( "),a("code",[s._v("SqlContextFactory#addBindParamMapper")]),s._v(" ) "),a("Badge",{attrs:{text:"0.6.1+"}})],1),s._v(" "),a("p",[s._v("SQLを実行する際、独自に作成したクラスをバインドしたい場合があります。\nそういったケースに対応できるよう"),a("strong",[s._v("uroboroSQL")]),s._v("ではバインドパラメータをJDBCが受け入れられる型に変換するためのクラスを\n設定することが出来ます。")]),s._v(" "),a("p",[s._v("バインドパラメータ変換クラスの例")]),s._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// Nameクラスに対するバインドパラメータ変換クラス")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("CustomBindParamMapper")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("implements")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("BindParameterMapper")]),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Name")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(">")])]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[s._v("@Override")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Object")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toJdbc")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Name")]),s._v(" original"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Connection")]),s._v(" connection"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("BindParameterMapperManager")]),s._v(" parameterMapperManager"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" original"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toString")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// バインドパラメータに設定するドメインクラス")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("class")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Name")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("final")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" firstName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("private")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("final")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" lastName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Name")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" firstName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" lastName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("firstName "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" firstName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("lastName "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" lastName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n\n "),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[s._v("@Override")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("public")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("String")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("toString")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("{")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("return")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("firstName "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('" "')]),s._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("+")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("lastName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("}")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br"),a("span",{staticClass:"line-number"},[s._v("13")]),a("br"),a("span",{staticClass:"line-number"},[s._v("14")]),a("br"),a("span",{staticClass:"line-number"},[s._v("15")]),a("br"),a("span",{staticClass:"line-number"},[s._v("16")]),a("br"),a("span",{staticClass:"line-number"},[s._v("17")]),a("br"),a("span",{staticClass:"line-number"},[s._v("18")]),a("br"),a("span",{staticClass:"line-number"},[s._v("19")]),a("br"),a("span",{staticClass:"line-number"},[s._v("20")]),a("br"),a("span",{staticClass:"line-number"},[s._v("21")]),a("br"),a("span",{staticClass:"line-number"},[s._v("22")]),a("br"),a("span",{staticClass:"line-number"},[s._v("23")]),a("br"),a("span",{staticClass:"line-number"},[s._v("24")]),a("br")])]),a("p",[a("code",[s._v("SqlContextFactory")]),s._v("の設定")]),s._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// create SqlConfig")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("SqlConfig")]),s._v(" config "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("UroboroSQL")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("builder")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// SqlContextFactoryの設定")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("setSqlContextFactory")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("SqlContextFactoryImpl")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// パラメータ変換クラスの登録")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("addBindParamMapper")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("CustomBindParamMapper")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("build")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br")])]),a("p",[s._v("バインドパラメータ設定例")]),s._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Name")]),s._v(" name "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("Name")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Bob"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"Smith"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\nagent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("update")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"insert_user"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("param")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[s._v('"name"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(",")]),s._v(" name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("count")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br")])]),a("h2",{attrs:{id:"java-sql-resultsetの挙動設定"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#java-sql-resultsetの挙動設定"}},[s._v("#")]),s._v(" java.sql.ResultSetの挙動設定 "),a("Badge",{attrs:{text:"0.14.0+"}})],1),s._v(" "),a("p",[s._v("検索SQLの発行で取得する"),a("code",[s._v("java.util.ResultSet")]),s._v("の挙動を変更することができます。")]),s._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// create SqlConfig")]),s._v("\n"),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("SqlConfig")]),s._v(" config "),a("span",{pre:!0,attrs:{class:"token operator"}},[s._v("=")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("UroboroSQL")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("builder")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// SqlContextFactoryの設定")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("setSqlContextFactory")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[s._v("new")]),s._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("SqlContextFactoryImpl")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// ResultSetTypeの初期値")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE, java.sql.ResultSet.TYPE_SCROLL_SENSITIVE のいづれか")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("setDefaultResultSetType")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ResultSet")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("TYPE_FORWARD_ONLY"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// ResultSetConcurrencyの初期値")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[s._v("// java.sql.ResultSet.CONCUR_READ_ONLY, java.sql.ResultSet.CONCUR_UPDATABLE のいづれか")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("setDefaultResultSetConcurrency")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[s._v("ResultSet")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),s._v("CONCUR_READ_ONLY"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),s._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[s._v("build")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[s._v(";")]),s._v("\n")])]),s._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[s._v("1")]),a("br"),a("span",{staticClass:"line-number"},[s._v("2")]),a("br"),a("span",{staticClass:"line-number"},[s._v("3")]),a("br"),a("span",{staticClass:"line-number"},[s._v("4")]),a("br"),a("span",{staticClass:"line-number"},[s._v("5")]),a("br"),a("span",{staticClass:"line-number"},[s._v("6")]),a("br"),a("span",{staticClass:"line-number"},[s._v("7")]),a("br"),a("span",{staticClass:"line-number"},[s._v("8")]),a("br"),a("span",{staticClass:"line-number"},[s._v("9")]),a("br"),a("span",{staticClass:"line-number"},[s._v("10")]),a("br"),a("span",{staticClass:"line-number"},[s._v("11")]),a("br"),a("span",{staticClass:"line-number"},[s._v("12")]),a("br")])]),a("h3",{attrs:{id:"カーソル型の初期値-defaultresultsettype"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#カーソル型の初期値-defaultresultsettype"}},[s._v("#")]),s._v(" カーソル型の初期値("),a("code",[s._v("DefaultResultSetType")]),s._v(")")]),s._v(" "),a("p",[a("code",[s._v("java.sql.ResultSet")]),s._v("のカーソルの型を指定します。")]),s._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[s._v("型")]),s._v(" "),a("th",{staticStyle:{"text-align":"left"}},[s._v("説明")]),s._v(" "),a("th",{staticStyle:{"text-align":"center"}},[s._v("初期値")])])]),s._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[s._v("java.sql.ResultSet#TYPE_FORWARD_ONLY")]),s._v(" "),a("td",{staticStyle:{"text-align":"left"}},[s._v("カーソルは最初から最後まで順方向にしか移動できません。")]),s._v(" "),a("td",{staticStyle:{"text-align":"center"}},[s._v("◯")])]),s._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[s._v("java.sql.ResultSet#TYPE_SCROLL_INSENSITIVE")]),s._v(" "),a("td",{staticStyle:{"text-align":"left"}},[s._v("カーソルは順方向・逆方向いずれにも移動可能です。ただし他による変更を反映しません。")]),s._v(" "),a("td",{staticStyle:{"text-align":"center"}})]),s._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[s._v("java.sql.ResultSet#TYPE_SCROLL_SENSITIVE")]),s._v(" "),a("td",{staticStyle:{"text-align":"left"}},[s._v("カーソルは順方向・逆方向いずれにも移動可能です。また他による変更も反映します。")]),s._v(" "),a("td",{staticStyle:{"text-align":"center"}})])])]),s._v(" "),a("h3",{attrs:{id:"変更可能性の初期値-defaultresultsetconcurrency"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#変更可能性の初期値-defaultresultsetconcurrency"}},[s._v("#")]),s._v(" 変更可能性の初期値("),a("code",[s._v("DefaultResultSetConcurrency")]),s._v(")")]),s._v(" "),a("p",[a("code",[s._v("java.sql.ResultSet")]),s._v("の変更可能性を指定します。")]),s._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[s._v("型")]),s._v(" "),a("th",{staticStyle:{"text-align":"left"}},[s._v("説明")]),s._v(" "),a("th",{staticStyle:{"text-align":"center"}},[s._v("初期値")])])]),s._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[s._v("java.sql.ResultSet.CONCUR_READ_ONLY")]),s._v(" "),a("td",{staticStyle:{"text-align":"left"}},[s._v("カーソルはデータの読み出ししかサポートしません。")]),s._v(" "),a("td",{staticStyle:{"text-align":"center"}},[s._v("◯")])]),s._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[s._v("java.sql.ResultSet.CONCUR_UPDATABLE")]),s._v(" "),a("td",{staticStyle:{"text-align":"left"}},[s._v("カーソルは変更可能です。カーソルを用いたデータの挿入・変更・削除がサポートされます。")]),s._v(" "),a("td",{staticStyle:{"text-align":"center"}})])])])])}),[],!1,null,null,null);t.default=e.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/25.9a3cac1f.js b/docs/assets/js/25.9a3cac1f.js deleted file mode 100644 index 40b4f0d..0000000 --- a/docs/assets/js/25.9a3cac1f.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[25],{211:function(t,a,s){"use strict";s.r(a);var e=s(3),n=Object(e.a)({},(function(){var t=this,a=t.$createElement,s=t._self._c||a;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"sqlfiltermanager"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#sqlfiltermanager"}},[t._v("#")]),t._v(" SqlFilterManager")]),t._v(" "),s("h2",{attrs:{id:"sqlフィルター"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#sqlフィルター"}},[t._v("#")]),t._v(" SQLフィルター")]),t._v(" "),s("p",[s("strong",[t._v("uroboroSQL")]),t._v("ではSQLの実行を行う一連の処理の流れの中にいくつかの拡張ポイントを設けており、この拡張ポイントに処理を追加することで、共通的なSQL文の加工や検索結果の記録といった様々な拡張を行うことができるように設計されています。")]),t._v(" "),s("p",[t._v("SQL処理の拡張はSqlFilterインタフェースを実装したクラスを作成し登録することで行います。"),s("br"),t._v("\nSqlFilterインタフェースには以下のメソッドが定義されています。")]),t._v(" "),s("table",[s("thead",[s("tr",[s("th",{staticStyle:{"text-align":"left"}},[t._v("SqlFilterメソッド名")]),t._v(" "),s("th",{staticStyle:{"text-align":"left"}},[t._v("説明")])])]),t._v(" "),s("tbody",[s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("initialize")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("SqlFilterの初期化を行う")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("doTransformSql")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("変換前のSQLに対して加工を行う")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("doParameter")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("バインドパラメータの加工を行う")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("doOutParameter")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("ストアドプロシージャのOutParameterの加工を行う")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("doPreparedStatement")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("PreparedStatementの加工を行う")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("doCallableStatement")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("CallableStatementの加工を行う")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("doQuery")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("検索処理結果の加工を行う")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("doUpdate")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("更新処理結果の加工を行う")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("doBatch")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("バッチ処理結果の加工を行う")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("doProcedure")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("Procedure呼出処理結果の加工を行う")])])])]),t._v(" "),s("p",[s("strong",[t._v("uroboroSQL")]),t._v("には標準でいくつかのSqlFilterの実装が含まれています。")]),t._v(" "),s("table",[s("thead",[s("tr",[s("th",{staticStyle:{"text-align":"left"}},[t._v("クラス名")]),t._v(" "),s("th",{staticStyle:{"text-align":"left"}},[t._v("説明")])])]),t._v(" "),s("tbody",[s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("jp.co.future.uroborosql.filter.DebugSqlFilter")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("SqlFilterの動作を理解するためのサンプル。各拡張ポイントで呼び出されるメソッドでログを出力します。")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("jp.co.future.uroborosql.filter.DumpResultSqlFilter")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("検索結果を表形式でログ出力するSQLフィルター。SqlREPLで使用しています。")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("jp.co.future.uroborosql.filter.WrapContextSqlFilter")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("SQL文の前後に文字列を追加するSQLフィルター。ページングや検索件数の上限設定に使用します。")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("jp.co.future.uroborosql.filter.SecretColumnSqlFilter")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("指定した特定のカラムのみ暗号化を行うSQLフィルター。パスワードや機密情報を暗号化してDBに格納するために使用します。")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("jp.co.future.uroborosql.filter.AuditLogSqlFilter")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("監査記録を取得するためのSQLフィルター。")])])])]),t._v(" "),s("p",[t._v("SQLフィルターを利用するためには、SqlConfig生成時にSqlFilterManagerの設定を追加して利用するSQLフィルターの登録を行ってください。"),s("br"),t._v("\nSQLフィルターは複数登録することができます。複数登録した場合は登録した順にSQLフィルターが処理されます。")]),t._v(" "),s("div",{staticClass:"language-java line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-java"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// create SqlConfig")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlConfig")]),t._v(" config "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("UroboroSQL")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("builder")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// SqlFilterManagerの設定")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("setSqlFilterManager")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlFilterManagerImpl")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// DumpResultSqlFilterの登録")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("addSqlFilter")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("DumpResultSqlFilter")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// WrapContextSqlFilterの登録")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("addSqlFilter")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("WrapContextSqlFilter")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('""')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"LIMIT /*$maxRowCount*/10 OFFSET /*$startRowIndex*/0"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('".*FOR\\\\sUPDATE.*"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("build")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br"),s("span",{staticClass:"line-number"},[t._v("9")]),s("br"),s("span",{staticClass:"line-number"},[t._v("10")]),s("br"),s("span",{staticClass:"line-number"},[t._v("11")]),s("br"),s("span",{staticClass:"line-number"},[t._v("12")]),s("br")])]),s("p",[t._v("独自にSqlFilterを作成する場合は、"),s("code",[t._v("jp.co.future.uroborosql.filter.AbstractSqlFilter")]),t._v("を継承し、必要に応じてメソッドをオーバーライドしてください。")]),t._v(" "),s("div",{staticClass:"language-java line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-java"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CustomSqlFilter")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("AbstractSqlFilter")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 途中略")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[t._v("@Override")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ResultSet")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("doQuery")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlContext")]),t._v(" sqlContext"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("PreparedStatement")]),t._v(" preparedStatement"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ResultSet")]),t._v(" resultSet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// フィルター処理の実装")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br"),s("span",{staticClass:"line-number"},[t._v("9")]),s("br")])])])}),[],!1,null,null,null);a.default=n.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/26.14e9e921.js b/docs/assets/js/26.14e9e921.js deleted file mode 100644 index 9bb1b9c..0000000 --- a/docs/assets/js/26.14e9e921.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[26],{223:function(t,a,s){"use strict";s.r(a);var e=s(3),n=Object(e.a)({},(function(){var t=this,a=t.$createElement,s=t._self._c||a;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"sqlmanager"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#sqlmanager"}},[t._v("#")]),t._v(" SqlManager")]),t._v(" "),s("p",[s("code",[t._v("SqlManager")]),t._v("はSQLファイルを管理するクラスです。2つのクラスが提供されています。")]),t._v(" "),s("table",[s("thead",[s("tr",[s("th",{staticStyle:{"text-align":"left"}},[t._v("クラス")]),t._v(" "),s("th",{staticStyle:{"text-align":"left"}},[t._v("説明")])])]),t._v(" "),s("tbody",[s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("SqlManagerImpl")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[s("code",[t._v("java.io")]),t._v("を利用したファイルアクセスを行う"),s("code",[t._v("SqlManager")]),t._v("クラス。")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("NioSqlManagerImpl")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[s("code",[t._v("java.nio")]),t._v("を利用したファイルアクセスを行う"),s("code",[t._v("SqlManager")]),t._v("クラス")])])])]),t._v(" "),s("p",[t._v("クラスの特徴比較")]),t._v(" "),s("table",[s("thead",[s("tr",[s("th",{staticStyle:{"text-align":"left"}},[t._v("特徴")]),t._v(" "),s("th",{staticStyle:{"text-align":"center"}},[t._v("SqlManagerImpl")]),t._v(" "),s("th",{staticStyle:{"text-align":"center"}},[t._v("NioSqlManagerImpl")]),t._v(" "),s("th",{staticStyle:{"text-align":"left"}},[t._v("補足")])])]),t._v(" "),s("tbody",[s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("SQLファイルルートフォルダ設定")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("〇")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("〇")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}})]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("SQLファイルエンコーディング設定")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("〇")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("〇")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}})]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("起動時のファイルキャッシュ")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("〇")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("△")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("NioSqlManagerImplはファイルパスのみキャッシュ")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("遅延ファイルキャッシュ")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("×")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("〇")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}})]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("jarファイル中のSQL参照")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("〇")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("〇")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}})]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("zipファイル中のSQL参照")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("×")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("〇")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}})]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("カスタムファイルアクセス対応")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("×")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("〇")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[s("code",[t._v("java.nio.file")]),t._v("パッケージを使用")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("ファイル変更検知")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("×")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("〇")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}})]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("DB種類毎のファイルパス切り替え")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("×")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("〇")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}})])])]),t._v(" "),s("p",[t._v("利用用途に応じて"),s("code",[t._v("SqlManager")]),t._v("を選択してください。"),s("br"),t._v("\nSqlManagerクラスの切り替えはビルダーAPIで行うことが出来ます。指定しない場合の初期値は"),s("code",[t._v("SqlManagerImpl")]),t._v("になります。")]),t._v(" "),s("div",{staticClass:"language-java line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-java"}},[s("code",[s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlConfig")]),t._v(" config "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("UroboroSQL")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("builder")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// NioSqlManagerの指定")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("setSqlManager")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("NioSqlManagerImpl")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("build")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br")])]),s("h2",{attrs:{id:"sqlファイルルートフォルダの設定"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#sqlファイルルートフォルダの設定"}},[t._v("#")]),t._v(" SQLファイルルートフォルダの設定")]),t._v(" "),s("p",[s("strong",[t._v("uroboroSQL")]),t._v("は初期設定ではクラスパス上にある"),s("code",[t._v("sql")]),t._v("フォルダ配下のSQLを読み込みます。"),s("br"),t._v("\nこのSQLファイルルートフォルダは変更することができます。")]),t._v(" "),s("p",[t._v("SQLファイルルートフォルダの設定 (custom_sqlフォルダを指定)")]),t._v(" "),s("div",{staticClass:"language-java line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-java"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// SqlManagerImplの場合")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlConfig")]),t._v(" config "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("UroboroSQL")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("builder")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// SQLファイルのルートフォルダの設定(custom_sqlフォルダをルートフォルダにする場合)")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("setSqlManager")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlManagerImpl")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"custom_sql"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("build")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// NioSqlManagerImplの場合")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlConfig")]),t._v(" config "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("UroboroSQL")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("builder")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// SQLファイルのルートフォルダの設定(custom_sqlフォルダをルートフォルダにする場合)")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("setSqlManager")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("NioSqlManagerImpl")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"custom_sql"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("build")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br"),s("span",{staticClass:"line-number"},[t._v("9")]),s("br")])]),s("h3",{attrs:{id:"spring-bootでの利用"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#spring-bootでの利用"}},[t._v("#")]),t._v(" Spring bootでの利用 "),s("Badge",{attrs:{text:"NioSqlManagerImplのみ"}})],1),t._v(" "),s("p",[t._v("Spring boot利用時に実行可能jarにSQLファイルをリソースとして含める場合には、NioSqlManagerImplの場合、パスの指定を変更する必要があります。")]),t._v(" "),s("p",[t._v("例えば、"),s("code",[t._v("classpath:sql")]),t._v("にSQLファイルを配置している場合は、実行可能jarで起動する際にはアプリケーション設定を利用して"),s("code",[t._v("BOOT-INF/classes/sql")]),t._v("のように指定してください。")]),t._v(" "),s("h2",{attrs:{id:"db種類毎のファイルパス切り替え"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#db種類毎のファイルパス切り替え"}},[t._v("#")]),t._v(" DB種類毎のファイルパス切り替え "),s("Badge",{attrs:{text:"NioSqlManagerImplのみ"}})],1),t._v(" "),s("p",[t._v("後述する"),s("RouterLink",{attrs:{to:"/configuration/dialect.html#dialect"}},[t._v("Dialect")]),t._v("を利用して、1つのSQL名に対してDB種類毎にファイルパスを切り替えることが出来ます。")],1),t._v(" "),s("p",[t._v("以下のようなファイル構成を例として説明します。")]),t._v(" "),s("div",{staticClass:"language-md line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-md"}},[s("code",[t._v("sql\n ├─employee\n │ └─select_employee.sql -- Oracle, postgresql以外のDB用SQL\n ├─oracle\n │ └─employee\n │ └─select_employee.sql -- oracle DB用SQL\n └─postgresql\n └─employee\n └─select_employee.sql -- postgresql DB用SQL\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br"),s("span",{staticClass:"line-number"},[t._v("9")]),s("br")])]),s("p",[t._v("SQL名として"),s("code",[t._v("employee/select_employee")]),t._v("を指定した場合、"),s("br"),t._v("\nOracle DBの場合は"),s("code",[t._v("sql/oracle/employee/select_employee.sql")]),t._v("が読み込まれます。"),s("br"),t._v("\n同様にPostgresql DBの場合は"),s("code",[t._v("sql/postgresql/employee/select_employee.sql")]),t._v("が読み込まれます。"),s("br"),t._v("\nDBに対するDialect用のフォルダがない場合は通常通り"),s("code",[t._v("sql/employee/select_employee.sql")]),t._v("が読み込まれます。")]),t._v(" "),s("p",[t._v("DB毎のフォルダ名")]),t._v(" "),s("table",[s("thead",[s("tr",[s("th",{staticStyle:{"text-align":"left"}},[t._v("DB名")]),t._v(" "),s("th",{staticStyle:{"text-align":"left"}},[t._v("フォルダ名")])])]),t._v(" "),s("tbody",[s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("H2 DB")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("h2")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("Microsoft SQL Server")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("mssql")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("MySQL")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("mysql")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("Oracle")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("oracle")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("Postgresql")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("postgresql")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("その他")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("default")])])])]),t._v(" "),s("h2",{attrs:{id:"sqlファイルの更新監視"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#sqlファイルの更新監視"}},[t._v("#")]),t._v(" SQLファイルの更新監視 "),s("Badge",{attrs:{text:"NioSqlManagerImplのみ"}})],1),t._v(" "),s("p",[s("code",[t._v("NioSqlManagerImpl")]),t._v("では、最初にSQLファイルの呼び出しがあったタイミングでSQLファイルをロードし、メモリ内にSQLをキャッシュします。\nファイル監視を有効にしている場合はキャッシュしているファイルに対して"),s("code",[t._v("java.nio.file.WatchService")]),t._v("を利用したファイル監視を行い、\n更新があった場合は自動的にリロードする仕組みを提供しています。")]),t._v(" "),s("div",{staticClass:"custom-block warning"},[s("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),s("p",[t._v("ファイル監視を行うのはファイルシステム上のファイルについてのみでjarファイルやzipファイル内のファイルに対してはファイル監視は行いません。")])]),t._v(" "),s("p",[t._v("アプリケーションの開発中など頻繁にSQLファイルを更新する場合に有効です。"),s("br"),t._v("\nファイル監視の有無は"),s("code",[t._v("NioSqlManagerImpl")]),t._v("の設定時に行います。")]),t._v(" "),s("div",{staticClass:"language-java line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-java"}},[s("code",[s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// NioSqlManagerImplの場合")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlConfig")]),t._v(" config "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("UroboroSQL")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("builder")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// SQLファイル監視を有効化(初期値はfalse)")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("setSqlManager")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("NioSqlManagerImpl")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("build")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br")])])])}),[],!1,null,null,null);a.default=n.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/27.81102cb1.js b/docs/assets/js/27.81102cb1.js deleted file mode 100644 index aa0a93e..0000000 --- a/docs/assets/js/27.81102cb1.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[27],{215:function(t,e,r){"use strict";r.r(e);var a=r(3),s=Object(a.a)({},(function(){var t=this,e=t.$createElement,r=t._self._c||e;return r("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[r("h1",{attrs:{id:"開発者ガイド"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#開発者ガイド"}},[t._v("#")]),t._v(" 開発者ガイド")]),t._v(" "),r("p",[t._v("uroboroSQLを開発する人向けのガイドです")]),t._v(" "),r("h2",{attrs:{id:"ソースコードの取得"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#ソースコードの取得"}},[t._v("#")]),t._v(" ソースコードの取得")]),t._v(" "),r("p",[r("a",{attrs:{href:"https://github.com/future-architect/uroborosql",target:"_blank",rel:"noopener noreferrer"}},[t._v("GitHub"),r("OutboundLink")],1),t._v("からソースをクローンする。")]),t._v(" "),r("div",{staticClass:"language-sh line-numbers-mode"},[r("pre",{pre:!0,attrs:{class:"language-sh"}},[r("code",[r("span",{pre:!0,attrs:{class:"token function"}},[t._v("git")]),t._v(" clone https://github.com/future-architect/uroborosql.git\n")])]),t._v(" "),r("div",{staticClass:"line-numbers-wrapper"},[r("span",{staticClass:"line-number"},[t._v("1")]),r("br")])]),r("h2",{attrs:{id:"ソースのビルド"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#ソースのビルド"}},[t._v("#")]),t._v(" ソースのビルド")]),t._v(" "),r("p",[t._v("ビルドには"),r("a",{attrs:{href:"https://maven.apache.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Apache Maven"),r("OutboundLink")],1),t._v("を利用します。")]),t._v(" "),r("div",{staticClass:"language-sh line-numbers-mode"},[r("pre",{pre:!0,attrs:{class:"language-sh"}},[r("code",[t._v("mvn compile\n")])]),t._v(" "),r("div",{staticClass:"line-numbers-wrapper"},[r("span",{staticClass:"line-number"},[t._v("1")]),r("br")])]),r("h2",{attrs:{id:"テスト"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#テスト"}},[t._v("#")]),t._v(" テスト")]),t._v(" "),r("p",[t._v("テストは"),r("a",{attrs:{href:"http://junit.org/junit4/",target:"_blank",rel:"noopener noreferrer"}},[t._v("JUnit"),r("OutboundLink")],1),t._v("で行います。")]),t._v(" "),r("div",{staticClass:"language-sh line-numbers-mode"},[r("pre",{pre:!0,attrs:{class:"language-sh"}},[r("code",[t._v("mvn "),r("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("test")]),t._v("\n")])]),t._v(" "),r("div",{staticClass:"line-numbers-wrapper"},[r("span",{staticClass:"line-number"},[t._v("1")]),r("br")])]),r("p",[t._v("カバレッジは"),r("a",{attrs:{href:"http://www.eclemma.org/jacoco/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Jacoco"),r("OutboundLink")],1),t._v("で確認することができます。")]),t._v(" "),r("div",{staticClass:"language-sh line-numbers-mode"},[r("pre",{pre:!0,attrs:{class:"language-sh"}},[r("code",[t._v("mvn "),r("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("test")]),t._v(" jacoco:report\n")])]),t._v(" "),r("div",{staticClass:"line-numbers-wrapper"},[r("span",{staticClass:"line-number"},[t._v("1")]),r("br")])]),r("p",[t._v("target/site/jacoco フォルダにjacocoカバレッジレポートが出力されます。")]),t._v(" "),r("p",[t._v("開発を行う際は、Jadocコメントが正しく記載されているようにしてください。"),r("br"),t._v("\njavadocプラグインでjavadocを生成し、エラーが出力されないことを確認してください。")]),t._v(" "),r("div",{staticClass:"language-sh line-numbers-mode"},[r("pre",{pre:!0,attrs:{class:"language-sh"}},[r("code",[t._v("mvn javadoc:javadoc\n")])]),t._v(" "),r("div",{staticClass:"line-numbers-wrapper"},[r("span",{staticClass:"line-number"},[t._v("1")]),r("br")])]),r("h2",{attrs:{id:"mavenローカルリポジトリへのインストール"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#mavenローカルリポジトリへのインストール"}},[t._v("#")]),t._v(" Mavenローカルリポジトリへのインストール")]),t._v(" "),r("div",{staticClass:"language-sh line-numbers-mode"},[r("pre",{pre:!0,attrs:{class:"language-sh"}},[r("code",[t._v("mvn "),r("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v("\n")])]),t._v(" "),r("div",{staticClass:"line-numbers-wrapper"},[r("span",{staticClass:"line-number"},[t._v("1")]),r("br")])]),r("h2",{attrs:{id:"ide"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#ide"}},[t._v("#")]),t._v(" IDE")]),t._v(" "),r("h3",{attrs:{id:"eclipse"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#eclipse"}},[t._v("#")]),t._v(" Eclipse")]),t._v(" "),r("p",[t._v("クローンしたフォルダをEclipseの既存Mavenプロジェクトとしてインポートしてください。"),r("br"),t._v("\nMavenのinitializeフェーズでEclipseプロジェクトの文字コードをUTF-8にする設定が入っているので、インポートが完了すれば開発が始められる状態になります。")]),t._v(" "),r("h3",{attrs:{id:"intellij"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#intellij"}},[t._v("#")]),t._v(" Intellij")]),t._v(" "),r("p",[t._v("Import Project でクローンしたフォルダを指定してください。"),r("br"),t._v("\nImport project from external model でMavenを選択してください。"),r("br"),t._v("\nプロジェクトが読み込まれると開発が始められる状態になります。")]),t._v(" "),r("h2",{attrs:{id:"continuous-integration"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#continuous-integration"}},[t._v("#")]),t._v(" Continuous Integration")]),t._v(" "),r("p",[t._v("Continuous Integration(CI)は"),r("a",{attrs:{href:"https://travis-ci.org/future-architect/uroborosql",target:"_blank",rel:"noopener noreferrer"}},[t._v("Travis CI"),r("OutboundLink")],1),t._v("で行っています。")]),t._v(" "),r("p",[t._v("CIの状況確認は以下で行います。")]),t._v(" "),r("ul",[r("li",[r("a",{attrs:{href:"https://travis-ci.org/future-architect/uroborosql",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://travis-ci.org/future-architect/uroborosql"),r("OutboundLink")],1)])]),t._v(" "),r("p",[t._v("また、CIと合わせてカバレッジレポートを"),r("a",{attrs:{href:"https://coveralls.io/github/future-architect/uroborosql",target:"_blank",rel:"noopener noreferrer"}},[t._v("Coveralls"),r("OutboundLink")],1),t._v("で公開しています。")]),t._v(" "),r("ul",[r("li",[r("a",{attrs:{href:"https://coveralls.io/github/future-architect/uroborosql",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://coveralls.io/github/future-architect/uroborosql"),r("OutboundLink")],1)])]),t._v(" "),r("h2",{attrs:{id:"issue-management"}},[r("a",{staticClass:"header-anchor",attrs:{href:"#issue-management"}},[t._v("#")]),t._v(" Issue Management")]),t._v(" "),r("p",[t._v("IssueとPullRequestはGithubの機能を利用しています。"),r("br"),t._v("\nコメントは英語で記載をお願いします。(Google翻訳がお勧めです)")]),t._v(" "),r("ul",[r("li",[r("a",{attrs:{href:"https://github.com/future-architect/uroborosql/issues",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://github.com/future-architect/uroborosql/issues"),r("OutboundLink")],1)]),t._v(" "),r("li",[r("a",{attrs:{href:"https://github.com/future-architect/uroborosql/pulls",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://github.com/future-architect/uroborosql/pulls"),r("OutboundLink")],1)])])])}),[],!1,null,null,null);e.default=s.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/28.941c9a42.js b/docs/assets/js/28.941c9a42.js deleted file mode 100644 index 0dc4205..0000000 --- a/docs/assets/js/28.941c9a42.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[28],{219:function(t,s,a){"use strict";a.r(s);var n=a(3),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"環境設定"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#環境設定"}},[t._v("#")]),t._v(" 環境設定")]),t._v(" "),a("h2",{attrs:{id:"ビルドツールの設定"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#ビルドツールの設定"}},[t._v("#")]),t._v(" ビルドツールの設定")]),t._v(" "),a("p",[a("strong",[t._v("uroboroSQL")]),t._v("をMavenプロジェクトに組み込むには、"),a("strong",[t._v("pom.xml")]),t._v("に以下のライブラリ依存関係を追加して下さい。\n"),a("strong",[t._v("uroboroSQL")]),t._v("は"),a("a",{attrs:{href:"https://search.maven.org/#search%7Cga%7C1%7Curoborosql",target:"_blank",rel:"noopener noreferrer"}},[t._v("Maven Central Repository"),a("OutboundLink")],1),t._v("で公開されています。")]),t._v(" "),a("div",{staticClass:"language-xml line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-xml"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("dependency")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("groupId")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("jp.co.future"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("artifactId")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("uroborosql"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("version")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("0.20.2"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br")])]),a("p",[t._v("また、"),a("Badge",{attrs:{text:"0.18.0+",vertical:"middle"}}),t._v(" より式言語ライブラリの選択が可能になりました。"),a("br"),t._v("\n以下の2つのライブラリのうち、どちらかを選択してライブラリ依存関係に追加して下さい。")],1),t._v(" "),a("p",[a("a",{attrs:{href:"https://github.com/jkuhnert/ognl",target:"_blank",rel:"noopener noreferrer"}},[t._v("OGNL"),a("OutboundLink")],1),t._v("を利用する場合")]),t._v(" "),a("div",{staticClass:"language-xml line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-xml"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("dependency")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("groupId")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("ognl"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("artifactId")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("ognl"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("version")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("3.2.16"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br")])]),a("p",[a("a",{attrs:{href:"https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#expressions",target:"_blank",rel:"noopener noreferrer"}},[t._v("Spring Expression Language(SpEL)"),a("OutboundLink")],1),t._v("を利用する場合")]),t._v(" "),a("div",{staticClass:"language-xml line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-xml"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("dependency")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("groupId")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("org.springframework"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("artifactId")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("spring-expression"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("version")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("5.3.1"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br")])]),a("p",[a("strong",[t._v("uroboroSQL")]),t._v("でREPLを使用する場合は追加で以下のライブラリ依存関係を追加してください。")]),t._v(" "),a("div",{staticClass:"language-xml line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-xml"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("dependency")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("groupId")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("org.jline"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("artifactId")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("jline"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("version")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("3.17.1"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("dependency")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("groupId")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("org.fusesource.jansi"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("artifactId")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("jansi"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("version")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("1.18"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br")])]),a("p",[t._v("Gradleプロジェクトの場合は、"),a("strong",[t._v("build.gradle")]),t._v("のdependencies内に以下のライブラリ依存関係を追加してください。")]),t._v(" "),a("div",{staticClass:"language-groovy line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-groovy"}},[a("code",[t._v("compile group"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'jp.co.future'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'uroborosql'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" version"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'0.20.2'")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 式言語ライブラリとしてOGNLを使用する場合")]),t._v("\ncompile group"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'ognl'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'ognl'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" version"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'3.2.16'")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 式言語ライブラリとしてSpring Expression Language(SpEL)を使用する場合")]),t._v("\ncompile group"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'org.springframework'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'spring-expression'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" version"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'5.3.1'")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// REPLを使用する場合")]),t._v("\ncompile group"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'org.jline'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'jline'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" version"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'3.17.1'")]),t._v("\ncompile group"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'org.fusesource.jansi'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'jansi'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" version"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'1.18'")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br")])]),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[t._v("uroboroSQLを利用するためには、Java8以上の環境が必要です。")])]),t._v(" "),a("h2",{attrs:{id:"事前準備"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#事前準備"}},[t._v("#")]),t._v(" 事前準備")]),t._v(" "),a("p",[t._v("事前準備として、")]),t._v(" "),a("ul",[a("li",[t._v("Java8 or 11のいずれかのJDKディストリビューション\n"),a("ul",[a("li",[a("a",{attrs:{href:"https://adoptopenjdk.net/index.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("AdobtOpenJDK"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"https://aws.amazon.com/jp/corretto/",target:"_blank",rel:"noopener noreferrer"}},[t._v("Amazon Corretto"),a("OutboundLink")],1)]),t._v(" "),a("li",[a("a",{attrs:{href:"http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("Oracle JDK"),a("OutboundLink")],1)])])]),t._v(" "),a("li",[a("a",{attrs:{href:"https://maven.apache.org/download.cgi",target:"_blank",rel:"noopener noreferrer"}},[t._v("Apache Maven"),a("OutboundLink")],1),t._v(" のv3.3.1(Java7対応版)以上のバージョン")])]),t._v(" "),a("p",[t._v("をインストールしてください。")]),t._v(" "),a("h2",{attrs:{id:"サンプルプロジェクトの実行"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#サンプルプロジェクトの実行"}},[t._v("#")]),t._v(" サンプルプロジェクトの実行")]),t._v(" "),a("p",[a("strong",[t._v("uroboroSQL")]),t._v("のサンプルアプリケーションである"),a("a",{attrs:{href:"https://github.com/future-architect/uroborosql-sample",target:"_blank",rel:"noopener noreferrer"}},[t._v("uroborosql-sample"),a("OutboundLink")],1),t._v("を使って"),a("strong",[t._v("uroboroSQL")]),t._v("を動かしてみましょう。")]),t._v(" "),a("p",[t._v("まず始めに"),a("a",{attrs:{href:"https://github.com/future-architect/uroborosql-sample",target:"_blank",rel:"noopener noreferrer"}},[t._v("uroborosql-sample"),a("OutboundLink")],1),t._v("から最新のソースコードを取得します。")]),t._v(" "),a("div",{staticClass:"language-sh line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("git")]),t._v(" clone https://github.com/future-architect/uroborosql-sample.git\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])]),a("p",[t._v("取得できたらcloneしたフォルダに移動します。")]),t._v(" "),a("div",{staticClass:"language-sh line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("cd")]),t._v(" uroborosql-sample\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])]),a("p",[t._v("まずはサンプルアプリケーションを実行してみましょう。\nサンプルアプリケーションは以下の起動コマンドで実行します。")]),t._v(" "),a("div",{staticClass:"language-sh line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[t._v("mvn -PrunMain\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])]),a("p",[t._v("これでサンプルアプリケーションが実行されます。"),a("br"),t._v("\n(初回実行時は必要なライブラリをダウンロードするため時間がかかります)"),a("br"),t._v("\nアプリケーションの実行ログが出力され、Mavenが正常終了すれば成功です。\n色々ログが流れますが、この中で")]),t._v(" "),a("ul",[a("li",[t._v("DB接続")]),t._v(" "),a("li",[t._v("テーブル作成と初期データの挿入")]),t._v(" "),a("li",[t._v("SQLによる検索")]),t._v(" "),a("li",[t._v("トランザクション")]),t._v(" "),a("li",[t._v("SQLによる挿入、更新、削除")]),t._v(" "),a("li",[t._v("バッチ更新")])]),t._v(" "),a("p",[t._v("といった一連の処理が実行されています。")]),t._v(" "),a("h2",{attrs:{id:"サンプルプロジェクトの構成"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#サンプルプロジェクトの構成"}},[t._v("#")]),t._v(" サンプルプロジェクトの構成")]),t._v(" "),a("p",[t._v("ではサンプルアプリケーションの構成を見ていきましょう。")]),t._v(" "),a("div",{staticClass:"language-txt line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-text"}},[a("code",[t._v("uroborosql-sample\n├─REPL\n│ repl.properties\n│ \n└─src\n └─main\n ├─java\n │ └─jp\n │ └─co\n │ └─future\n │ └─uroborosql\n │ └─sample\n │ │ AbstractApiSample.java\n │ │ Main.java\n │ │ EntityApiSample.java\n │ │ SqlFileApiSample.java\n │ │ \n │ ├─entity\n │ │ Department.java\n │ │ Employee.java\n │ │ DeptEmp.java\n │ │ \n │ └─type\n │ Gender.java\n │ \n └─resources\n │ logback.xml\n │ \n ├─data\n │ department.tsv\n │ dept_emp.tsv\n │ employee.tsv\n │ \n └─sql\n ├─ddl\n │ create_tables.sql\n │ \n ├─setup\n │ insert_data.sql\n │ \n ├─department\n │ insert_department.sql\n │ select_department.sql\n │ \n ├─employee\n │ insert_employee.sql\n │ select_employee.sql\n │ update_employee.sql\n │ \n └─relation\n insert_dept_emp.sql\n select_dept_emp.sql\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br"),a("span",{staticClass:"line-number"},[t._v("34")]),a("br"),a("span",{staticClass:"line-number"},[t._v("35")]),a("br"),a("span",{staticClass:"line-number"},[t._v("36")]),a("br"),a("span",{staticClass:"line-number"},[t._v("37")]),a("br"),a("span",{staticClass:"line-number"},[t._v("38")]),a("br"),a("span",{staticClass:"line-number"},[t._v("39")]),a("br"),a("span",{staticClass:"line-number"},[t._v("40")]),a("br"),a("span",{staticClass:"line-number"},[t._v("41")]),a("br"),a("span",{staticClass:"line-number"},[t._v("42")]),a("br"),a("span",{staticClass:"line-number"},[t._v("43")]),a("br"),a("span",{staticClass:"line-number"},[t._v("44")]),a("br"),a("span",{staticClass:"line-number"},[t._v("45")]),a("br"),a("span",{staticClass:"line-number"},[t._v("46")]),a("br"),a("span",{staticClass:"line-number"},[t._v("47")]),a("br"),a("span",{staticClass:"line-number"},[t._v("48")]),a("br"),a("span",{staticClass:"line-number"},[t._v("49")]),a("br"),a("span",{staticClass:"line-number"},[t._v("50")]),a("br"),a("span",{staticClass:"line-number"},[t._v("51")]),a("br"),a("span",{staticClass:"line-number"},[t._v("52")]),a("br")])]),a("p",[t._v("主要なファイルの説明です")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("ファイル")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("説明")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[a("a",{attrs:{href:"https://github.com/future-architect/uroborosql-sample/blob/master/src/main/java/jp/co/future/uroborosql/sample/Main.java",target:"_blank",rel:"noopener noreferrer"}},[t._v("Main.java"),a("OutboundLink")],1)]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("uroborosql-sampleのメインプログラムです。ここから各サンプルコードの呼び出しを行っています。")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[a("a",{attrs:{href:"https://github.com/future-architect/uroborosql-sample/blob/master/src/main/java/jp/co/future/uroborosql/sample/SqlFileApiSample.java",target:"_blank",rel:"noopener noreferrer"}},[t._v("SqlFileApiSample.java"),a("OutboundLink")],1),t._v(" / "),a("a",{attrs:{href:"https://github.com/future-architect/uroborosql-sample/blob/master/src/main/java/jp/co/future/uroborosql/sample/EntityApiSample.java",target:"_blank",rel:"noopener noreferrer"}},[t._v("EntityApiSample.java"),a("OutboundLink")],1)]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("提供されているAPIの種類毎のサンプルコードです。")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[a("a",{attrs:{href:"https://github.com/future-architect/uroborosql-sample/blob/master/src/main/java/jp/co/future/uroborosql/sample/entity/Department.java",target:"_blank",rel:"noopener noreferrer"}},[t._v("Department.java"),a("OutboundLink")],1),t._v(" / "),a("a",{attrs:{href:"https://github.com/future-architect/uroborosql-sample/blob/master/src/main/java/jp/co/future/uroborosql/sample/entity/Employee.java",target:"_blank",rel:"noopener noreferrer"}},[t._v("Employee.java"),a("OutboundLink")],1),t._v(" / "),a("a",{attrs:{href:"https://github.com/future-architect/uroborosql-sample/blob/master/src/main/java/jp/co/future/uroborosql/sample/entity/DeptEmp.java",target:"_blank",rel:"noopener noreferrer"}},[t._v("DeptEmp.java"),a("OutboundLink")],1)]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("テーブル構造を表すエンティティクラスです。サンプルコードの中で使用します。")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[a("a",{attrs:{href:"https://github.com/future-architect/uroborosql-sample/blob/master/src/main/java/jp/co/future/uroborosql/sample/type/Gender.java",target:"_blank",rel:"noopener noreferrer"}},[t._v("Gender.java"),a("OutboundLink")],1)]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("性別を表すEnumクラスです。サンプルコードの中で使用します。")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[a("a",{attrs:{href:"https://github.com/future-architect/uroborosql-sample/tree/master/src/main/resources/sql",target:"_blank",rel:"noopener noreferrer"}},[t._v("sqlフォルダ配下のSQL"),a("OutboundLink")],1)]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("uroborosqlで実行するSQLファイルです。")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[a("a",{attrs:{href:"https://github.com/future-architect/uroborosql-sample/tree/master/src/main/resources/data",target:"_blank",rel:"noopener noreferrer"}},[t._v("dataフォルダ配下のTSV"),a("OutboundLink")],1)]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("テーブルデータ作成用のTSVファイルです。Mainクラスの中でテーブルへの一括データ投入を行う際のデータとして利用します。")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[a("a",{attrs:{href:"https://github.com/future-architect/uroborosql-sample/blob/master/src/main/resources/logback.xml",target:"_blank",rel:"noopener noreferrer"}},[t._v("logback.xml"),a("OutboundLink")],1)]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("ログ出力設定ファイルです。")])])])])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/29.8096c2e9.js b/docs/assets/js/29.8096c2e9.js deleted file mode 100644 index f92c412..0000000 --- a/docs/assets/js/29.8096c2e9.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[29],{216:function(t,s,a){"use strict";a.r(s);var n=a(3),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"エンティティクラスを使用したdbアクセス"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#エンティティクラスを使用したdbアクセス"}},[t._v("#")]),t._v(" エンティティクラスを使用したDBアクセス")]),t._v(" "),a("p",[a("strong",[t._v("uroboroSQL")]),t._v("ではSQLファイルを使用したDBアクセスの他にエンティティクラスを使用したDBアクセスも提供しています。("),a("a",{attrs:{href:"https://github.com/future-architect/uroborosql-sample/blob/master/src/main/java/jp/co/future/uroborosql/sample/EntityApiSample.java",target:"_blank",rel:"noopener noreferrer"}},[t._v("EntityApiSample.java"),a("OutboundLink")],1),t._v("を参照)")]),t._v(" "),a("h2",{attrs:{id:"エンティティクラスを使用した検索"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#エンティティクラスを使用した検索"}},[t._v("#")]),t._v(" エンティティクラスを使用した検索")]),t._v(" "),a("p",[t._v("エンティティクラスを使用した検索を行う際は、"),a("code",[t._v("SqlAgent#query(エンティティクラス)")]),t._v("メソッドを使用して"),a("strong",[t._v("SqlEntityQuery")]),t._v("を取得し、バインドパラメータの設定や検索の実行を行います。")]),t._v(" "),a("p",[a("strong",[t._v("SqlEntityQuery")]),t._v("では検索結果をいくつかの形式で取得することができます。")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("メソッド")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("説明")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlEntityQuery#collect()")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("検索結果を"),a("code",[t._v("List<エンティティクラス>")]),t._v("の形式で取得する")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlEntityQuery#stream()")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("検索結果を"),a("code",[t._v("java.util.Stream")]),t._v("の形式で取得する")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlEntityQuery#first()")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("検索結果の1件目を取得する。戻り値は"),a("code",[t._v("Optional")])])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlEntityQuery#one()")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("検索結果の1件目を取得する。検索結果が複数件になる場合は"),a("code",[t._v("DataNonUniqueException")]),t._v("をスローする。戻り値は"),a("code",[t._v("Optional")])])])])]),t._v(" "),a("p",[t._v("まずはテーブルに紐づくエンティティクラスを作成します。")]),t._v(" "),a("ul",[a("li",[t._v("Department.java")])]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("package")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("jp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("co"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("future"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("uroborosql"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("sample"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("entity")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("jp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("co"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("future"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("uroborosql"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("enums"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("GenerationType")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("jp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("co"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("future"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("uroborosql"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("mapping"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("annotations"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("GeneratedValue")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("jp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("co"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("future"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("uroborosql"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("mapping"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("annotations"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Id")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("jp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("co"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("future"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("uroborosql"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("mapping"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("annotations"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Table")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token namespace"}},[t._v("jp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("co"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("future"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("uroborosql"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("mapping"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("annotations"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")])]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Version")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/**\n * Entity that can be mapped to department table\n */")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[t._v("@Table")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("name "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"department"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Department")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[t._v("@Id")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[t._v("@GeneratedValue")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("strategy "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("GenerationType")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("IDENTITY"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("long")]),t._v(" deptNo"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" deptName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[t._v("@Version")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("private")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("long")]),t._v(" lockVersion"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("long")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getDeptNo")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("deptNo"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setDeptNo")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("long")]),t._v(" deptNo"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("deptNo "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" deptNo"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getDeptName")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("deptName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setDeptName")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" deptName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("deptName "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" deptName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("long")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("getLockVersion")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("lockVersion"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setLockVersion")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("long")]),t._v(" lockVersion"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("lockVersion "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" lockVersion"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),a("span",{pre:!0,attrs:{class:"token annotation punctuation"}},[t._v("@Override")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("public")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("toString")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Department [deptNo="')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("deptNo "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('", deptName="')]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("deptName "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('", lockVersion="')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("lockVersion "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"]"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br"),a("span",{staticClass:"line-number"},[t._v("34")]),a("br"),a("span",{staticClass:"line-number"},[t._v("35")]),a("br"),a("span",{staticClass:"line-number"},[t._v("36")]),a("br"),a("span",{staticClass:"line-number"},[t._v("37")]),a("br"),a("span",{staticClass:"line-number"},[t._v("38")]),a("br"),a("span",{staticClass:"line-number"},[t._v("39")]),a("br"),a("span",{staticClass:"line-number"},[t._v("40")]),a("br"),a("span",{staticClass:"line-number"},[t._v("41")]),a("br"),a("span",{staticClass:"line-number"},[t._v("42")]),a("br"),a("span",{staticClass:"line-number"},[t._v("43")]),a("br"),a("span",{staticClass:"line-number"},[t._v("44")]),a("br"),a("span",{staticClass:"line-number"},[t._v("45")]),a("br"),a("span",{staticClass:"line-number"},[t._v("46")]),a("br"),a("span",{staticClass:"line-number"},[t._v("47")]),a("br"),a("span",{staticClass:"line-number"},[t._v("48")]),a("br"),a("span",{staticClass:"line-number"},[t._v("49")]),a("br"),a("span",{staticClass:"line-number"},[t._v("50")]),a("br"),a("span",{staticClass:"line-number"},[t._v("51")]),a("br"),a("span",{staticClass:"line-number"},[t._v("52")]),a("br")])]),a("p",[a("code",[t._v("@Table")]),t._v("アノテーションをクラスに指定することでテーブルとの紐づけを行います。上記の場合はdepartmentテーブルと紐づけています。"),a("br"),t._v("\nエンティティクラスの詳細については"),a("RouterLink",{attrs:{to:"/basics/entity-api.html#daoインタフェース"}},[t._v("DAOインタフェース")]),t._v("を参照してください。")],1),t._v(" "),a("p",[t._v("この"),a("code",[t._v("Department")]),t._v("クラスを使用した検索は以下のようになります。")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// no parameter : バインドパラメータ指定なしで検索")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("List")]),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Department")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" deps1 "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Department")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("collect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// add bind parameter : バインドパラメータを設定して検索")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("List")]),a("span",{pre:!0,attrs:{class:"token generics"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Department")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" deps2 "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Department")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("equal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"deptNo"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("collect")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br")])]),a("p",[t._v("検索結果の各行が"),a("code",[t._v("Department")]),t._v("クラスのインスタンスとして取得出来ます。")]),t._v(" "),a("h2",{attrs:{id:"エンティティクラスを使用した行挿入"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#エンティティクラスを使用した行挿入"}},[t._v("#")]),t._v(" エンティティクラスを使用した行挿入")]),t._v(" "),a("p",[t._v("エンティティクラスを使用してテーブルに行挿入を行うことが出来ます。行挿入を行う場合は"),a("code",[t._v("SqlAgent#insert(エンティティクラスインスタンス)")]),t._v("メソッドを使用します。")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Department")]),t._v(" dept "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Department")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\ndept"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setDeptName")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"production"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// insert entity : 行挿入")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" count "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("insert")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("dept"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br")])]),a("h2",{attrs:{id:"エンティティクラスを使用した行更新"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#エンティティクラスを使用した行更新"}},[t._v("#")]),t._v(" エンティティクラスを使用した行更新")]),t._v(" "),a("p",[t._v("エンティティクラスを使用してテーブルの行更新を行うことが出来ます。行更新を行う場合は"),a("code",[t._v("SqlAgent#update(エンティティクラスインスタンス)")]),t._v("メソッドを使用します。")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Department")]),t._v(" dept "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Department")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("first")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("orElseThrow")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("UroborosqlRuntimeException")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\ndept"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setDeptName")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"R&D"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// update entity : 行更新")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" count "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("update")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("dept"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br")])]),a("h2",{attrs:{id:"エンティティクラスを使用した行削除"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#エンティティクラスを使用した行削除"}},[t._v("#")]),t._v(" エンティティクラスを使用した行削除")]),t._v(" "),a("p",[t._v("エンティティクラスを使用してテーブルの行削除を行うことが出来ます。行更新を行う場合は"),a("code",[t._v("SqlAgent#delete(エンティティクラスインスタンス)")]),t._v("メソッドを使用します。")]),t._v(" "),a("div",{staticClass:"language-java line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-java"}},[a("code",[a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Department")]),t._v(" dept "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Department")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("first")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("orElseThrow")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("UroborosqlRuntimeException")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("::")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// delete entity : 行削除")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" count "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" agent"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("delete")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("dept"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br")])]),a("p",[t._v("エンティティクラスを使用したDBアクセスの詳細については"),a("RouterLink",{attrs:{to:"/basics/entity-api.html#daoインタフェース"}},[t._v("DAOインタフェース")]),t._v("を参照してください。")],1),t._v(" "),a("p",[a("strong",[t._v("uroboroSQL")]),t._v("ではこれらの基本的な操作のほか、バッチ処理やトランザクション処理なども行うことができます。\n詳細については"),a("RouterLink",{attrs:{to:"/basics/"}},[t._v("基本操作")]),t._v("を参照してください。")],1)])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/3.534dd136.js b/docs/assets/js/3.534dd136.js deleted file mode 100644 index f184c72..0000000 --- a/docs/assets/js/3.534dd136.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[3],{186:function(t,e,a){t.exports=a.p+"assets/img/cobertura.fa41cd2a.png"},187:function(t,e,a){t.exports=a.p+"assets/img/html_coverage_report_summary.210cec1a.png"},188:function(t,e,a){t.exports=a.p+"assets/img/html_coverage_report.a9aae4a3.png"},226:function(t,e,a){"use strict";a.r(e);var s=a(3),n=Object(s.a)({},(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"高度な操作"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#高度な操作"}},[t._v("#")]),t._v(" 高度な操作")]),t._v(" "),s("h2",{attrs:{id:"sqlファイルの解決ルール"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#sqlファイルの解決ルール"}},[t._v("#")]),t._v(" SQLファイルの解決ルール")]),t._v(" "),s("h3",{attrs:{id:"複数フォルダの指定"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#複数フォルダの指定"}},[t._v("#")]),t._v(" 複数フォルダの指定")]),t._v(" "),s("p",[t._v("sqlフォルダはクラスパスから参照することが出来れば複数指定することが出来ます。")]),t._v(" "),s("ul",[s("li",[s("code",[t._v("src/test/resources")]),t._v(", "),s("code",[t._v("src/main/resources")]),t._v(" の順にクラスパスに指定されている場合")])]),t._v(" "),s("div",{staticClass:"language-md line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-md"}},[s("code",[t._v("src\n ├─main\n │ └─resources\n │ └─sql\n │ ├─department\n │ │ ├─insert_department.sql\n │ │ └─select_department.sql\n │ └─employee\n │ ├─insert_employee.sql\n │ └─select_employee.sql\n └─test\n └─resources\n └─sql\n ├─department\n │ ├─update_department.sql\n │ └─delete_department.sql\n └─employee\n ├─update_employee.sql\n └─select_employee.sql\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br"),s("span",{staticClass:"line-number"},[t._v("9")]),s("br"),s("span",{staticClass:"line-number"},[t._v("10")]),s("br"),s("span",{staticClass:"line-number"},[t._v("11")]),s("br"),s("span",{staticClass:"line-number"},[t._v("12")]),s("br"),s("span",{staticClass:"line-number"},[t._v("13")]),s("br"),s("span",{staticClass:"line-number"},[t._v("14")]),s("br"),s("span",{staticClass:"line-number"},[t._v("15")]),s("br"),s("span",{staticClass:"line-number"},[t._v("16")]),s("br"),s("span",{staticClass:"line-number"},[t._v("17")]),s("br"),s("span",{staticClass:"line-number"},[t._v("18")]),s("br"),s("span",{staticClass:"line-number"},[t._v("19")]),s("br")])]),s("div",{staticClass:"custom-block warning"},[s("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),s("p",[t._v("SQLファイルのパスが重複している場合、クラスパス上で先にあるフォルダのSQLファイルが使用されます。")])]),t._v(" "),s("p",[t._v("上記のフォルダ構成の場合、"),s("code",[t._v("src/main/resources/sql/employee/select_employee.sql")]),t._v(" と "),s("code",[t._v("src/test/resources/sql/employee/select_employee.sql")]),t._v(" がともに "),s("code",[t._v("employee/select_employee")]),t._v(" として解決されますが、クラスパスとして"),s("code",[t._v("src/test/resources")]),t._v("が先に指定されているため、"),s("code",[t._v("src/test/resources/sql/employee/select_employee.sql")]),t._v("が使用されます。")]),t._v(" "),s("h3",{attrs:{id:"jarファイルの指定"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#jarファイルの指定"}},[t._v("#")]),t._v(" jarファイルの指定")]),t._v(" "),s("p",[t._v("SQLファイルはjarの中にリソースとして含めることもできます。"),s("br"),t._v("\nその場合、リソースのルート直下のsqlフォルダをルートフォルダとした相対パスでSQLファイルを指定することができます。\nSQLファイルのルートフォルダ(初期値:sql)は変更することができます。"),s("br"),t._v("\n変更方法の詳細は "),s("RouterLink",{attrs:{to:"/configuration/sql-manager.html#sqlファイルルートフォルダの設定"}},[t._v("SQLファイルルートフォルダの設定")]),t._v(" を参照してください。")],1),t._v(" "),s("h3",{attrs:{id:"dialectによるファイルパスの切り替え"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#dialectによるファイルパスの切り替え"}},[t._v("#")]),t._v(" Dialectによるファイルパスの切り替え")]),t._v(" "),s("p",[s("code",[t._v("NioSqlManagerImpl")]),t._v("を"),s("code",[t._v("SqlManager")]),t._v("として指定した場合、Dialectによるファイルパスの切り替えが出来るようになります。\n詳しくは"),s("RouterLink",{attrs:{to:"/configuration/sql-manager.html#db種類毎のファイルパス切り替え"}},[t._v("DB種類毎のファイルパス切り替え")]),t._v("を参照してください。")],1),t._v(" "),s("h2",{attrs:{id:"postgresqlのトランザクション内sqlエラー対応"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#postgresqlのトランザクション内sqlエラー対応"}},[t._v("#")]),t._v(" PostgreSQLのトランザクション内SQLエラー対応")]),t._v(" "),s("p",[t._v("PostgreSQLでは、1つのトランザクション内でSQLエラーが発生した場合、後続するSQL文はすべて無条件でエラーとなります。\nこの状態はトランザクションに対して"),s("code",[t._v("commit")]),t._v("もしくは"),s("code",[t._v("rollback")]),t._v("を実行するまで続きます。")]),t._v(" "),s("div",{staticClass:"custom-block warning"},[s("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),s("p",[t._v("エラーが発生している状態で"),s("code",[t._v("commit")]),t._v("を実行しても実際には"),s("code",[t._v("rollback")]),t._v("されます")])]),t._v(" "),s("p",[t._v("これはPostgreSQL固有の動作であり、通常は問題ない動作なのですが、テーブルロックエラーなどリトライ処理を行うケースで問題になります。\n(SQLのリトライについては"),s("RouterLink",{attrs:{to:"/configuration/sql-agent-factory.html#sql実行のリトライ"}},[t._v("SQL実行のリトライ")]),t._v("を参照)"),s("br"),t._v(" "),s("strong",[t._v("uroboroSQL")]),t._v("ではリトライ指定のあるSQL実行、かつ、PostgreSQL(より正確には"),s("code",[t._v("Dialect#isRollbackToSavepointBeforeRetry()")]),t._v("が"),s("code",[t._v("true")]),t._v("の場合)の場合にsavepointを使った部分ロールバックを行うことで\nこの問題に対応しています。"),s("br"),t._v("\n具体的にはリトライ指定のあるSQL実行、かつ、PostgreSQLの場合はSQL実行の直前にリトライ用のsavepointを設定し、SQL実行が成功すればsavepointの解放、SQL実行が失敗した場合はリトライ用のsavepointまでロールバックを行います。")],1),t._v(" "),s("div",{staticClass:"custom-block warning"},[s("p",{staticClass:"custom-block-title"},[t._v("WARNING")]),t._v(" "),s("p",[t._v("リトライ指定のないSQL実行の場合はsavepointの設定は行われません。")])]),t._v(" "),s("p",[t._v("リトライ指定のないSQLで上記と同様の動作を行う場合は以下のように実装してください。")]),t._v(" "),s("div",{staticClass:"language-java line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-java"}},[s("code",[t._v("agent"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("required")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// トランザクション開始")]),t._v("\n agent"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("savepointScope")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// savepointScopeの開始")]),t._v("\n agent"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("update")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"example/insert_product"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("param")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"product_id"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("count")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n agent"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("savepointScope")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("->")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 後続処理")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("int")]),t._v(" count "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" agent"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("update")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"department/insert_department"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("param")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"dept_no"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("param")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"dept_name"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Sales"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("count")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n ・・・\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br"),s("span",{staticClass:"line-number"},[t._v("9")]),s("br"),s("span",{staticClass:"line-number"},[t._v("10")]),s("br"),s("span",{staticClass:"line-number"},[t._v("11")]),s("br"),s("span",{staticClass:"line-number"},[t._v("12")]),s("br"),s("span",{staticClass:"line-number"},[t._v("13")]),s("br"),s("span",{staticClass:"line-number"},[t._v("14")]),s("br"),s("span",{staticClass:"line-number"},[t._v("15")]),s("br"),s("span",{staticClass:"line-number"},[t._v("16")]),s("br")])]),s("h2",{attrs:{id:"sqlカバレッジ-uroborosql-sql-coverage"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#sqlカバレッジ-uroborosql-sql-coverage"}},[t._v("#")]),t._v(" SQLカバレッジ ( "),s("code",[t._v("uroborosql.sql.coverage")]),t._v(" )")]),t._v(" "),s("p",[t._v("これまでアプリケーション上の条件分岐はカバレッジツールを利用して網羅率を確認することができました。"),s("br"),t._v("\nしかし、SQL文の条件分岐は実際にその分岐が通っているかどうかを確認する手段がなく、リリース後に初めて通った条件で不具合を発生させることがありました。"),s("br"),t._v("\nこの問題を解決するために"),s("strong",[t._v("uroboroSQL")]),t._v("では、SQL文の条件分岐を集計してカバレッジレポートを行う機能を提供します。")]),t._v(" "),s("p",[t._v("SQLカバレッジは"),s("strong",[t._v("uroboroSQL")]),t._v("を利用するアプリケーションの起動時オプションに")]),t._v(" "),s("div",{staticClass:"language-md line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-md"}},[s("code",[t._v("-Duroborosql.sql.coverage=true\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br")])]),s("p",[t._v("を追加することで有効になります。"),s("br"),t._v("\nSQLカバレッジを有効にするとアプリケーションが実行している間に実行されるSQLについて、カバレッジ情報が収集されます。"),s("br"),t._v("\nカバレッジ情報の収集結果は標準では"),s("code",[t._v("target/coverage/sql-cover.xml")]),t._v("に出力されます。"),s("br"),t._v("\nこのファイルの場所や名前を変更したい場合は、起動時オプションに")]),t._v(" "),s("div",{staticClass:"language-md line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-md"}},[s("code",[t._v("-Duroborosql.sql.coverage.file=[出力ファイルパス]\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br")])]),s("p",[t._v("を指定してください。")]),t._v(" "),s("p",[t._v("出力された"),s("code",[t._v("sql-cover.xml")]),t._v("をJenkinsのCobertura pluginなどのXMLレポートとして読み込むとSQLファイルのカバレッジレポートが参照できるようになります。")]),t._v(" "),s("p",[s("img",{attrs:{src:a(186),alt:"カバレッジレポート例",title:"Jenkins Cobertura Report"}})]),t._v(" "),s("p",[t._v("また"),s("Badge",{attrs:{text:"0.2.0+",vertical:"middle"}}),t._v("より、"),s("strong",[t._v("uroboroSQL")]),t._v("のみでHTMLレポートを出力することができるようになりました。"),s("br"),t._v("\n起動時オプションに")],1),t._v(" "),s("div",{staticClass:"language-md line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-md"}},[s("code",[t._v("-Duroborosql.sql.coverage=jp.co.future.uroborosql.coverage.reports.html.HtmlReportCoverageHandler\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br")])]),s("p",[t._v("を指定することで本機能を利用することができます。")]),t._v(" "),s("p",[t._v("カバレッジ情報はデフォルトでは"),s("code",[t._v("target/coverage/sql")]),t._v("フォルダ配下に出力されます。"),s("br"),t._v("\n出力先フォルダを変更した場合は、起動時オプションに")]),t._v(" "),s("div",{staticClass:"language-md line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-md"}},[s("code",[t._v("-Duroborosql.sql.coverage.dir=[出力フォルダパス]\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br")])]),s("p",[t._v("を指定してください。")]),t._v(" "),s("p",[t._v("出力されたレポートのサンプルは下記を参照してください。")]),t._v(" "),s("h3",{attrs:{id:"サマリーページ"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#サマリーページ"}},[t._v("#")]),t._v(" サマリーページ")]),t._v(" "),s("p",[s("img",{attrs:{src:a(187),alt:"HTML Coverage Report Summary"}})]),t._v(" "),s("h3",{attrs:{id:"詳細ページ"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#詳細ページ"}},[t._v("#")]),t._v(" 詳細ページ")]),t._v(" "),s("p",[s("img",{attrs:{src:a(188),alt:"HTML Coverage Report"}})]),t._v(" "),s("p",[s("a",{staticStyle:{"font-size":"20px"},attrs:{href:t.$withBase("/sample/testReport/"),target:"_blank"}},[s("i",{staticClass:"fa fa-external-link",attrs:{"aria-hidden":"true"}}),t._v("出力サンプル")])]),t._v(" "),s("h2",{attrs:{id:"ログ出力"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#ログ出力"}},[t._v("#")]),t._v(" ログ出力")]),t._v(" "),s("p",[s("strong",[t._v("uroboroSQL")]),t._v("ではログ出力ライブラリとしてSLF4Jを使用しています。SLF4Jの詳細は"),s("a",{attrs:{href:"https://www.slf4j.org/",target:"_blank",rel:"noopener noreferrer"}},[t._v("公式のドキュメント"),s("OutboundLink")],1),t._v("を参照して下さい。"),s("br"),t._v(" "),s("strong",[t._v("uroboroSQL")]),t._v("で出力されるログ内容は以下表の通りです。")]),t._v(" "),s("table",[s("thead",[s("tr",[s("th",{staticStyle:{"text-align":"center"}},[t._v("クラス名")]),t._v(" "),s("th",{staticStyle:{"text-align":"center"}},[t._v("TRACE")]),t._v(" "),s("th",{staticStyle:{"text-align":"center"}},[t._v("DEBUG")]),t._v(" "),s("th",{staticStyle:{"text-align":"center"}},[t._v("INFO")]),t._v(" "),s("th",{staticStyle:{"text-align":"center"}},[t._v("WARN")]),t._v(" "),s("th",{staticStyle:{"text-align":"center"}},[t._v("ERROR")]),t._v(" "),s("th",{staticStyle:{"text-align":"center"}},[t._v("FATAL")])])]),t._v(" "),s("tbody",[s("tr",[s("td",{staticStyle:{"text-align":"center"}},[t._v("AbstractAgent")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("変換前SQL")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("実行時SQL")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("-")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"center"}},[t._v("DebugSqlFilter")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("パラメーター/"),s("br"),t._v("対象データ数/"),s("br"),t._v("実行結果")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("-")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"center"}},[t._v("IfNode")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("評価式/"),s("br"),t._v("判定結果/"),s("br"),t._v("パラメーター")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("-")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"center"}},[t._v("Parameter")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("パラメーターの設定")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("サブパラメーター値にNULLを設定")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("-")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"center"}},[t._v("SecretColumnSqlFilter")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("バッチ処理追加件数/"),s("br"),t._v("ストアドプロシージャ出力パラメーター")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("-")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"center"}},[t._v("SqlAgent")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("ステートメントのクローズ")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("処理実行アナウンス/"),s("br"),t._v("リトライ実行アナウンス/"),s("br"),t._v("SQL実行時間")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("エラーメッセージ")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("-")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"center"}},[t._v("SqlContext")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("バッチ処理追加件数/"),s("br"),t._v("ストアドプロシージャ出力パラメーター")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("-")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"center"}},[t._v("SqlContextFactory")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("定数パラメーター")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("定数名の重複")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("エラーメッセージ")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("-")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"center"}},[t._v("SqlLoader")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("SQL定義ファイルの読み込み完了")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("SQL定義ファイルの読み込み開始/読み込み中")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("-")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("デフォルトファイルパスの設定/"),s("br"),t._v("デフォルト拡張子/"),s("br"),t._v("空のSQLキャッシュの返却")]),t._v(" "),s("td",{staticStyle:{"text-align":"center"}},[t._v("-")])])])]),t._v(" "),s("h2",{attrs:{id:"システムプロパティ"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#システムプロパティ"}},[t._v("#")]),t._v(" システムプロパティ")]),t._v(" "),s("p",[s("strong",[t._v("uroboroSQL")]),t._v("ではシステムプロパティを指定することで動作を変更することができます。")]),t._v(" "),s("table",[s("thead",[s("tr",[s("th",{staticStyle:{"text-align":"left"}},[t._v("プロパティ名")]),t._v(" "),s("th",{staticStyle:{"text-align":"left"}},[t._v("説明")]),t._v(" "),s("th",{staticStyle:{"text-align":"left"}},[t._v("初期値")])])]),t._v(" "),s("tbody",[s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("uroborosql.sql.coverage")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("SQLカバレッジを出力するかどうかのフラグ。"),s("code",[t._v("true")]),t._v("の場合はSQLカバレッジを出力します。"),s("br"),t._v("文字列として"),s("code",[t._v("jp.co.future.uroborosql.coverage.CoverageHandler")]),t._v("インタフェースの"),s("br"),t._v("実装クラスが設定された場合はそのクラスを利用してカバレッジの収集を行います。")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("なし")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("uroborosql.sql.coverage.file")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("指定されたPATH(ファイル)に SQLカバレッジのCobertura形式のxmlレポートを出力します。")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("./target/coverage/sql-cover.xml")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("uroborosql.sql.coverage.dir")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("指定されたPATH(フォルダ)にSQLカバレッジのHTMLレポートを出力します。")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("./target/coverage/sql")])]),t._v(" "),s("tr",[s("td",{staticStyle:{"text-align":"left"}},[t._v("uroborosql.entity.cache.size")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("Entityクラス情報のキャッシュサイズを指定します。"),s("br"),t._v("キャッシュサイズを超えるEntityクラスの読み込みがあった場合は古い情報から破棄されます。")]),t._v(" "),s("td",{staticStyle:{"text-align":"left"}},[t._v("30")])])])])])}),[],!1,null,null,null);e.default=n.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/30.9f2c3224.js b/docs/assets/js/30.9f2c3224.js deleted file mode 100644 index c0dd93a..0000000 --- a/docs/assets/js/30.9f2c3224.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[30],{224:function(t,s,a){"use strict";a.r(s);var n=a(3),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"sql-repl"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#sql-repl"}},[t._v("#")]),t._v(" SQL-REPL")]),t._v(" "),a("p",[t._v("ここまではJavaアプリケーションから"),a("strong",[t._v("uroboroSQL")]),t._v("を利用する場合の説明でした。\n"),a("strong",[t._v("uroboroSQL")]),t._v("にはもう一つ特徴的な機能として、SQLを対話しながら実行するための "),a("strong",[t._v("REPL(Read-Eval-Print Loop)")]),t._v(" 機能を提供しています。")]),t._v(" "),a("p",[t._v("今度はこの"),a("strong",[t._v("REPL")]),t._v("機能を利用してみましょう。")]),t._v(" "),a("h2",{attrs:{id:"replの利用"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#replの利用"}},[t._v("#")]),t._v(" REPLの利用")]),t._v(" "),a("p",[a("strong",[t._v("REPL")]),t._v("を起動するためには"),a("code",[t._v("jp.co.future.uroborosql.client.SqlREPL")]),t._v("クラスを実行する必要があります。\nサンプルアプリケーションで"),a("code",[t._v("SqlREPL")]),t._v("クラスを実行するためには以下のコマンドを実行します。")]),t._v(" "),a("div",{staticClass:"language-sh line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[t._v("mvn -PREPL\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])]),a("p",[t._v("実行すると以下のようにタイトル表示とコマンド説明、設定値の情報が表示され、そのあとコマンド入力状態になります。")]),t._v(" "),a("div",{staticClass:"language-sh line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("\n _ ____ ___ _\n _ _ _ __ ___ "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("__ ___ _ __ ___/ ___"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" / _ "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'__/ _ \\| '")]),t._v("_ "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v(" / _ "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" '__/ _ "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("___ "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("_"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("_"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("_"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("_"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("_"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("__"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("_"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("___\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("__,_"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("_"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("___/"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("_.__/ "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("___/"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("_"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("___/____/ "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("__"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("_"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("_____"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("\n\nuroboroSQL SQL REPL ver.0.20.2\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("\n\nCommands "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v("\n query "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" execute query from loaded sql file.\n ex1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" query "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("sql "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("file")]),t._v(" name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Enter"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" Execute SQL without parameter.\n ex2"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" query "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("sql "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("file")]),t._v(" name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("param1")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("val1 "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("param2")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("val2 "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("..")]),t._v("."),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Enter"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" Execute SQL with the specified parameters.\n update "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" execute update from loaded sql file.\n ex1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" update "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("sql "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("file")]),t._v(" name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Enter"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" Execute SQL without parameter.\n ex2"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" update "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("sql "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("file")]),t._v(" name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("param1")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("val1 "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("param2")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("val2 "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("..")]),t._v("."),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Enter"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" Execute SQL with the specified parameters.\n view "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" view sql file.\n ex"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" view "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("sql "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("file")]),t._v(" name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Enter"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" Show sql "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("file")]),t._v(" contents.\n list "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" list loaded sql files.\n ex1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" list"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Enter"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" Show all loaded sql file"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("s"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(".\n ex2"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" list keyword"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Enter"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" Show loaded sql file"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("s"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" filter by keyword.\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("history")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" list "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("command")]),t._v(" history.\n ex1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" history"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Enter"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" Show all "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("command")]),t._v(" history.\n ex2"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("history")]),t._v(" keyword"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Enter"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" Show "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("command")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("history")]),t._v(" filter by keyword.\n driver "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" list loaded drivers.\n desc "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" describe table.\n ex"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" desc "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("table name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Enter"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" Show table description.\n generate: generate sql to access the table.\n ex"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" generate "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("select/insert/update/delete"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("table name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Enter"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" Show sql to access tables according to keywords.\n parse "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" parse sql file.\n ex"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" parse "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("sql "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("file")]),t._v(" name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Enter"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" Parse sql file.\n cls "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("clear")]),t._v(" screen.\n "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("exit")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token builtin class-name"}},[t._v("exit")]),t._v(" SQL REPL. "),a("span",{pre:!0,attrs:{class:"token variable"}},[a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("`")]),t._v("CTRL+C"),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("`")])]),t._v(" is an alias.\nProperties "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("file")]),t._v(" path:REPL"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("\\")]),t._v("repl.properties\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("Properties"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\ndb.password"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("\nsql.additionalClassPath"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("src/test/resources"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("target/test-classes"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),a("span",{pre:!0,attrs:{class:"token variable"}},[t._v("${user.home}")]),t._v("/.m2/repository/com/h2database/h2/1.4.199/h2-1.4.199.jar\nsql.encoding"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("UTF-8\ndb.user"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("sa\nsql.versionColumnName"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("lock_no\nsql.optimisticLockSupplier"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("jp.co.future.uroborosql.mapping.FieldIncrementOptimisticLockSupplier\ndb.url"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("jdbc:h2:mem:repldb"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("DB_CLOSE_DELAY")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("-1"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\nsqlContextFactory.enumConstantPackageNames"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("jp.co.future.uroborosql.context.test\nsqlContextFactory.constantClassNames"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("jp.co.future.uroborosql.context.test.TestConsts\ninitialize.\n\nuroborosql "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")])])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br"),a("span",{staticClass:"line-number"},[t._v("34")]),a("br"),a("span",{staticClass:"line-number"},[t._v("35")]),a("br"),a("span",{staticClass:"line-number"},[t._v("36")]),a("br"),a("span",{staticClass:"line-number"},[t._v("37")]),a("br"),a("span",{staticClass:"line-number"},[t._v("38")]),a("br"),a("span",{staticClass:"line-number"},[t._v("39")]),a("br"),a("span",{staticClass:"line-number"},[t._v("40")]),a("br"),a("span",{staticClass:"line-number"},[t._v("41")]),a("br"),a("span",{staticClass:"line-number"},[t._v("42")]),a("br"),a("span",{staticClass:"line-number"},[t._v("43")]),a("br"),a("span",{staticClass:"line-number"},[t._v("44")]),a("br"),a("span",{staticClass:"line-number"},[t._v("45")]),a("br"),a("span",{staticClass:"line-number"},[t._v("46")]),a("br"),a("span",{staticClass:"line-number"},[t._v("47")]),a("br")])]),a("p",[a("strong",[t._v("REPL")]),t._v("を立ち上げた状態では接続したDB(H2DB メモリDB)には何もない状態なので、まずはテーブルを作成します。\nサンプルアプリケーションで利用できるSQLファイルを確認しましょう。")]),t._v(" "),a("div",{staticClass:"language-sh line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[t._v("uroborosql "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" list"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("Enter"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])]),a("p",[t._v("と入力してください。")]),t._v(" "),a("div",{staticClass:"language-sh line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[t._v("uroborosql "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" list\nLIST:\nddl/create_tables\ndepartment/insert_department\ndepartment/select_department\nemployee/insert_employee\nemployee/select_employee\nemployee/update_employee\nrelation/insert_dept_emp\nrelation/select_dept_emp\nsetup/insert_data\nuroborosql "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")])])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br")])]),a("p",[t._v("ロード済みのSQLファイルの"),a("code",[t._v("SQL名")]),t._v("がわかります。\nテーブルを作成するために"),a("code",[t._v("ddl/create_tables")]),t._v("を実行します。\n"),a("code",[t._v("ddl/create_tables")]),t._v("はDDLなので実行するためには"),a("code",[t._v("update")]),t._v("コマンドを使用します。")]),t._v(" "),a("div",{staticClass:"language-sh line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[t._v("uroborosql "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" u"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("Tab"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])]),a("p",[t._v("と入力してください。")]),t._v(" "),a("div",{staticClass:"language-sh line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[t._v("uroborosql "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" update\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])]),a("p",[t._v("という風に"),a("code",[t._v("u")]),t._v("に一致するコマンドがコード補完されます。")]),t._v(" "),a("div",{staticClass:"custom-block tip"},[a("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),a("p",[a("strong",[t._v("REPL")]),t._v("では"),a("code",[t._v("[Tab]")]),t._v("を押下することでコマンドや"),a("code",[t._v("SQL名")]),t._v("、バインドパラメータなどが必要に応じでコード補完されます。")])]),t._v(" "),a("p",[t._v("続いて")]),t._v(" "),a("div",{staticClass:"language-sh line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[t._v("uroborosql "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" update d"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("Tab"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])]),a("p",[t._v("と入力してください。"),a("br"),t._v("\n今度は"),a("code",[t._v("ddl")]),t._v("に一致する"),a("code",[t._v("SQL名")]),t._v("の候補が表示されます。")]),t._v(" "),a("div",{staticClass:"language-sh line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[t._v("uroborosql "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" update d\nddl/create_tables department/insert_department department/select_department\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br")])]),a("p",[t._v("この状態で"),a("code",[t._v("[Tab]")]),t._v("を入力することで候補を選択することが出来ます。"),a("br"),t._v(" "),a("code",[t._v("ddl/create_tables")]),t._v("を選択して"),a("code",[t._v("[Enter]")]),t._v("を入力すると以下のようになります。")]),t._v(" "),a("div",{staticClass:"language-sh line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[t._v("uroborosql "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" update ddl/create_tables\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])]),a("p",[t._v("もう一度"),a("code",[t._v("[Enter]")]),t._v("を入力するとSQLが実行されます。")]),t._v(" "),a("div",{staticClass:"language-sql line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sql"}},[a("code",[t._v("uroborosql "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("update")]),t._v(" ddl"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("create_tables\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("DEBUG"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" Executed "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("SQL")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("-- employee")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("drop")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("table")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("exists")]),t._v(" employee "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("cascade")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("create")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("table")]),t._v(" employee "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n emp_no number"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("6")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("auto_increment")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" first_name "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("varchar")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("20")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("not")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("null")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" last_name "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("varchar")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("20")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("not")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("null")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" birth_date "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("date")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("not")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("null")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" gender "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("char")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("not")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("null")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" lock_version number"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("not")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("null")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("default")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("constraint")]),t._v(" employee_PKC "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("primary")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("key")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("emp_no"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("-- dept_emp")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("drop")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("table")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("exists")]),t._v(" dept_emp "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("cascade")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("create")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("table")]),t._v(" dept_emp "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n emp_no number"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("6")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("not")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("null")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" dept_no number"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("not")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("null")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("constraint")]),t._v(" dept_emp_PKC "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("primary")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("key")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("emp_no"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("dept_no"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("-- department")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("drop")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("table")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("exists")]),t._v(" department "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("cascade")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("create")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("table")]),t._v(" department "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n dept_no number"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("auto_increment")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" dept_name "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("varchar")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("not")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("null")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" lock_version number"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("not")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("null")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("default")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("constraint")]),t._v(" department_PKC "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("primary")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("key")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("dept_no"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("comment")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("on")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("table")]),t._v(" employee "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("is")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'employee'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("comment")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("on")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("column")]),t._v(" employee"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("emp_no "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("is")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'emp_no'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("comment")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("on")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("column")]),t._v(" employee"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("first_name "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("is")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'first_name'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("comment")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("on")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("column")]),t._v(" employee"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("last_name "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("is")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'last_name'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("comment")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("on")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("column")]),t._v(" employee"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("birth_date "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("is")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'birth_date'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("comment")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("on")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("column")]),t._v(" employee"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("gender "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("is")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'gender ''F''emale/''M''ale/''O''ther'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("comment")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("on")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("column")]),t._v(" employee"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("lock_version "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("is")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'lock_version'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("comment")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("on")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("table")]),t._v(" dept_emp "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("is")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'dept_emp'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("comment")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("on")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("column")]),t._v(" dept_emp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("emp_no "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("is")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'emp_no'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("comment")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("on")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("column")]),t._v(" dept_emp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("dept_no "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("is")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'dept_no'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("comment")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("on")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("table")]),t._v(" department "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("is")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'department'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("comment")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("on")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("column")]),t._v(" department"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("dept_no "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("is")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'dept_no'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("comment")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("on")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("column")]),t._v(" department"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("dept_name "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("is")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'dept_name'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("comment")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("on")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("column")]),t._v(" department"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("lock_version "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("is")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'lock_version'")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("DEBUG"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("Execute")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("update")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("SQL")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("DEBUG"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("SQL")]),t._v(" execution "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("time")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("ddl"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("create_tables"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" : "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("00")]),t._v(":"),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("00")]),t._v(":"),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("00.030")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("update")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("sql")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("ddl"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("create_tables"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("end")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("row")]),t._v(" count"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\nuroborosql "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br"),a("span",{staticClass:"line-number"},[t._v("32")]),a("br"),a("span",{staticClass:"line-number"},[t._v("33")]),a("br"),a("span",{staticClass:"line-number"},[t._v("34")]),a("br"),a("span",{staticClass:"line-number"},[t._v("35")]),a("br"),a("span",{staticClass:"line-number"},[t._v("36")]),a("br"),a("span",{staticClass:"line-number"},[t._v("37")]),a("br"),a("span",{staticClass:"line-number"},[t._v("38")]),a("br"),a("span",{staticClass:"line-number"},[t._v("39")]),a("br"),a("span",{staticClass:"line-number"},[t._v("40")]),a("br"),a("span",{staticClass:"line-number"},[t._v("41")]),a("br"),a("span",{staticClass:"line-number"},[t._v("42")]),a("br"),a("span",{staticClass:"line-number"},[t._v("43")]),a("br"),a("span",{staticClass:"line-number"},[t._v("44")]),a("br"),a("span",{staticClass:"line-number"},[t._v("45")]),a("br"),a("span",{staticClass:"line-number"},[t._v("46")]),a("br"),a("span",{staticClass:"line-number"},[t._v("47")]),a("br")])]),a("p",[a("code",[t._v("ddl/create_tables")]),t._v("が実行され、DBにテーブルが作成されました。")]),t._v(" "),a("p",[t._v("では次に作成されたテーブルの定義情報を確認します。"),a("br"),t._v("\nテーブル定義情報の確認には"),a("code",[t._v("desc")]),t._v("コマンドを使用します。\nここでは"),a("code",[t._v("EMPLOYEE")]),t._v("テーブルの定義情報を確認してみましょう。")]),t._v(" "),a("div",{staticClass:"language-sh line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[t._v("uroborosql "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" desc EMPLOYEE"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("Enter"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])]),a("div",{staticClass:"language-sql line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sql"}},[a("code",[t._v("uroborosql "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("desc")]),t._v(" EMPLOYEE\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("TABLE_NAME"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("COLUMN_NAME "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("TYPE_NAME"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("COLUMN_SIZE"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("DECIMAL_DIGITS"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("IS_NULLABLE"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("COLUMN_DEF "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("REMARKS "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("EMPLOYEE "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("EMP_NO "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("DECIMAL")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("6")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("NO")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("NEXT")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("VALUE")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("FOR")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"PUBLIC"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"SYSTEM_SEQUENCE_D06A5524_EC18_4835_A536_1F5A372BFC73"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("emp_no "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("EMPLOYEE "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("FIRST_NAME "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("VARCHAR")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("20")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("NO")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("first_name "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("EMPLOYEE "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("LAST_NAME "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("VARCHAR")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("20")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("NO")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("last_name "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("EMPLOYEE "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("BIRTH_DATE "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("DATE")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("NO")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("birth_date "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("EMPLOYEE "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("GENDER "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("CHAR")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("NO")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("gender "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'F'")]),t._v("emale"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'M'")]),t._v("ale"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'O'")]),t._v("ther"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("EMPLOYEE "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("LOCK_VERSION"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("DECIMAL")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("NO")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("lock_version "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------")]),t._v("\nuroborosql "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")])])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br")])]),a("p",[t._v("EMPLOYEEテーブルの定義情報が表形式で表示されました。")]),t._v(" "),a("p",[t._v("続いて初期データを投入しましょう。")]),t._v(" "),a("p",[a("code",[t._v("setup/insert_data")]),t._v("を実行します。")]),t._v(" "),a("div",{staticClass:"language-sh line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[t._v("uroborosql "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" update setup/insert_data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("Enter"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])]),a("div",{staticClass:"language-sql line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sql"}},[a("code",[t._v("uroborosql "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("update")]),t._v(" setup"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("insert_data\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("DEBUG"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" Executed "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("SQL")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("insert")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("into")]),t._v(" department "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("dept_name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("values")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'sales'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("insert")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("into")]),t._v(" department "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("dept_name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("values")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'export'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("insert")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("into")]),t._v(" department "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("dept_name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("values")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'accounting'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("insert")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("into")]),t._v(" department "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("dept_name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("values")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'personnel'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("insert")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("into")]),t._v(" employee "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("first_name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" last_name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" birth_date"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" gender"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("values")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Bob'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Smith'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'1970-01-02'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'M'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("insert")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("into")]),t._v(" employee "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("first_name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" last_name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" birth_date"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" gender"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("values")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Susan'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Davis'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'1969-02-10'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'F'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("insert")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("into")]),t._v(" employee "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("first_name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" last_name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" birth_date"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" gender"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("values")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'John'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Wilson'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'1982-05-08'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'M'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("insert")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("into")]),t._v(" employee "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("first_name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" last_name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" birth_date"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" gender"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("values")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Sharon'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Johnson'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'1990-01-20'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'F'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("insert")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("into")]),t._v(" employee "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("first_name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" last_name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" birth_date"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" gender"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("values")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Stephen'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'Taylor'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'2003-12-31'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'M'")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("insert")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("into")]),t._v(" dept_emp "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("emp_no"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" dept_no"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("values")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("insert")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("into")]),t._v(" dept_emp "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("emp_no"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" dept_no"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("values")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("insert")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("into")]),t._v(" dept_emp "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("emp_no"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" dept_no"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("values")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("insert")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("into")]),t._v(" dept_emp "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("emp_no"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" dept_no"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("values")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("insert")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("into")]),t._v(" dept_emp "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("emp_no"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" dept_no"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("values")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("5")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("DEBUG"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("Execute")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("update")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("SQL")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("DEBUG"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("SQL")]),t._v(" execution "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("time")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("setup"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("insert_data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" : "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("00")]),t._v(":"),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("00")]),t._v(":"),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("00.017")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("update")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("sql")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("setup"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("insert_data"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("end")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("row")]),t._v(" count"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\nuroborosql "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")])])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br")])]),a("p",[t._v("これでテーブルに初期データが挿入されました。\nでは、挿入したデータを検索してみましょう。")]),t._v(" "),a("p",[t._v("検索を行う前に、検索を行うSQLの内容を確認してみましょう。"),a("br"),t._v("\nSQLの内容を確認するには"),a("code",[t._v("view")]),t._v("コマンドを使用します。")]),t._v(" "),a("div",{staticClass:"language-sh line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[t._v("uroborosql "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" view department/select_department"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("Enter"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])]),a("div",{staticClass:"language-sql line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sql"}},[a("code",[t._v("uroborosql "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("view")]),t._v(" department"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("select_department\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("select")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* _SQL_ID_ */")]),t._v("\n dept"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("dept_no "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" dept_no\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" dept"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("dept_name "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" dept_name\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" dept"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("lock_version "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" lock_version\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v("\n department dept\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*BEGIN*/")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("where")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*IF SF.isNotEmpty(deptNo)*/")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("and")]),t._v(" dept"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("dept_no "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*deptNo*/")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*END*/")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*IF SF.isNotEmpty(deptName)*/")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("and")]),t._v(" dept"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("dept_name "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*deptName*/")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'sample'")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*END*/")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*END*/")]),t._v("\nuroborosql "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")])])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br")])]),a("p",[t._v("検索を行う場合は"),a("code",[t._v("query")]),t._v("コマンドを使用します。\n"),a("code",[t._v("query")]),t._v("の後に実行する"),a("code",[t._v("SQL名")]),t._v("を指定します。")]),t._v(" "),a("div",{staticClass:"language-sh line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[t._v("uroborosql "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" query department/select_department"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("Enter"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])]),a("div",{staticClass:"language-sql line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sql"}},[a("code",[t._v("uroborosql "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" query department"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("select_department\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("DEBUG"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" Evaluation Expression:"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("SF"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("isNotEmpty"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("deptNo"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Result:"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Parameter:"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("deptNo:"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("DEBUG"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" Evaluation Expression:"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("SF"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("isNotEmpty"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("deptName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Result:"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Parameter:"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("deptName:"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("DEBUG"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" Executed "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("SQL")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("select")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* department/select_department */")]),t._v("\n dept"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("dept_no "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" dept_no\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" dept"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("dept_name "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" dept_name\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" dept"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("lock_version "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" lock_version\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v("\n department dept\n\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("DEBUG"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("Execute")]),t._v(" search "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("SQL")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("INFO "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("-------+----------+------------+")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("DEPT_NO"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("DEPT_NAME "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("LOCK_VERSION"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("-------+----------+------------+")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("sales "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("export "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("accounting"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("personnel "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("-------+----------+------------+")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("DEBUG"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("SQL")]),t._v(" execution "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("time")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("department"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("select_department"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" : "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("00")]),t._v(":"),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("00")]),t._v(":"),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("00.078")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\nquery "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("sql")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("department"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("select_department"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("end")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("\nuroborosql "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")])])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br")])]),a("p",[t._v("ここではバインドパラメータを指定しなかったため、絞込み条件のないSQLが実行され検索結果として4件のデータが取得できました。")]),t._v(" "),a("p",[a("strong",[t._v("REPL")]),t._v("では上の結果のように、")]),t._v(" "),a("ul",[a("li",[t._v("実行するSQL")]),t._v(" "),a("li",[t._v("バインドパラメータ")]),t._v(" "),a("li",[t._v("SQL文の中の評価式とその評価結果")]),t._v(" "),a("li",[t._v("検索結果")]),t._v(" "),a("li",[t._v("実行時間")])]),t._v(" "),a("p",[t._v("が表示されるので、SQLがどういう風に実行され、どういう値が取得できるのかが良く分かるようになっています。")]),t._v(" "),a("p",[t._v("次にバインドパラメータを指定して検索してみましょう。")]),t._v(" "),a("p",[t._v("検索するSQLにどのようなバインドパラメータや条件分岐があるかを確認するには"),a("code",[t._v("parse")]),t._v("コマンドを使用します。")]),t._v(" "),a("div",{staticClass:"language-sh line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[t._v("uroborosql "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" parse department/select_department"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("Enter"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])]),a("div",{staticClass:"language-sql line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sql"}},[a("code",[t._v("uroborosql "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" parse department"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("select_department\nPARSE:\n\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("SQL")]),t._v(" :\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("select")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* _SQL_ID_ */")]),t._v("\n dept"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("dept_no "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" dept_no\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" dept"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("dept_name "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" dept_name\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" dept"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("lock_version "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" lock_version\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v("\n department dept\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*BEGIN*/")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("where")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*IF SF.isNotEmpty(deptNo)*/")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("and")]),t._v(" dept"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("dept_no "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*deptNo*/")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*END*/")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*IF SF.isNotEmpty(deptName)*/")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("and")]),t._v(" dept"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("dept_name "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*deptName*/")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v("'sample'")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*END*/")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*END*/")]),t._v("\n\nBRANCHES :\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("BEGIN")]),t._v(" {\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("IF")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v(" SF"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("isNotEmpty"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("deptNo"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" {\n }\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("IF")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v(" SF"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("isNotEmpty"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("deptName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" {\n }\n }\n\nBIND_PARAMS :\n deptName\n deptNo\nuroborosql "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")])])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br"),a("span",{staticClass:"line-number"},[t._v("27")]),a("br"),a("span",{staticClass:"line-number"},[t._v("28")]),a("br"),a("span",{staticClass:"line-number"},[t._v("29")]),a("br"),a("span",{staticClass:"line-number"},[t._v("30")]),a("br"),a("span",{staticClass:"line-number"},[t._v("31")]),a("br")])]),a("p",[a("code",[t._v("parse")]),t._v("コマンドの結果は以下のようになります。")]),t._v(" "),a("ul",[a("li",[a("code",[t._v("SQL")]),t._v(" : 解析対象のSQL")]),t._v(" "),a("li",[a("code",[t._v("BRANCHES")]),t._v(" : 条件分岐")]),t._v(" "),a("li",[a("code",[t._v("BIND_PARAMS")]),t._v(" : バインドパラメータ")])]),t._v(" "),a("p",[t._v("条件分岐では "),a("code",[t._v("BEGIN")]),t._v("のスコープ({}で囲まれた中)に2つのIF分岐が並んでいることがわかります。"),a("br"),t._v("\nまた、バインドパラメータでは "),a("code",[t._v("deptNo")]),t._v("と"),a("code",[t._v("deptName")]),t._v("があることがわかります。")]),t._v(" "),a("p",[a("code",[t._v("parse")]),t._v("コマンドで確認したバインドパラメータを指定して検索を行います。")]),t._v(" "),a("div",{staticClass:"language-sh line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[t._v("uroborosql "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" query department/select_department "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("deptNo")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("Enter"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])]),a("div",{staticClass:"language-sql line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sql"}},[a("code",[t._v("uroborosql "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" query department"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("select_department deptNo"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("DEBUG"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" Evaluation Expression:"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("SF"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("isNotEmpty"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("deptNo"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Result:"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Parameter:"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("deptNo:"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("DEBUG"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" Evaluation Expression:"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("SF"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("isNotEmpty"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("deptName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Result:"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Parameter:"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("deptName:"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("null")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("DEBUG"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" Executed "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("SQL")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("select")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* department/select_department */")]),t._v("\n dept"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("dept_no "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" dept_no\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" dept"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("dept_name "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" dept_name\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" dept"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("lock_version "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" lock_version\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v("\n department dept\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("where")]),t._v("\ndept"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("dept_no "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" ?"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*deptNo*/")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("DEBUG"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("Set")]),t._v(" the parameter"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("INDEX")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Parameter name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("deptNo"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("Value")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Class"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("Integer")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("DEBUG"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("Execute")]),t._v(" search "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("SQL")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("INFO "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("-------+---------+------------+")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("DEPT_NO"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("DEPT_NAME"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("LOCK_VERSION"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("-------+---------+------------+")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("sales "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("-------+---------+------------+")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("DEBUG"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("SQL")]),t._v(" execution "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("time")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("department"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("select_department"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" : "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("00")]),t._v(":"),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("00")]),t._v(":"),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("00.005")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\nquery "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("sql")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("department"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("select_department"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("end")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("\nuroborosql "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")])])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br")])]),a("p",[a("code",[t._v("deptNo")]),t._v("に"),a("code",[t._v("1")]),t._v("を指定して検索しています。\nこの時、SQL文の評価式である/*IF SF.isNotEmpty(deptNo)*/が"),a("code",[t._v("true")]),t._v("となりSQLのwhere句に"),a("code",[t._v("dept_no")]),t._v("の条件が追加されバインドパラメータがバインドされます。"),a("br"),t._v("\nその結果、検索結果は1件になっています。")]),t._v(" "),a("p",[t._v("このように"),a("code",[t._v("SQL名")]),t._v("の後ろに"),a("code",[t._v("バインドパラメータ名")]),t._v("="),a("code",[t._v("値")]),t._v("という形でバインドパラメータを記述することでバインドパラメータを指定してSQLを実行することができます。")]),t._v(" "),a("p",[t._v("バインドパラメータが複数ある場合は"),a("code",[t._v("バインドパラメータ名1")]),t._v("="),a("code",[t._v("値1")]),t._v(" "),a("code",[t._v("バインドパラメータ名2")]),t._v("="),a("code",[t._v("値2")]),t._v(" ... という風に各パラメータの間を空白で区切って指定してください。")]),t._v(" "),a("ul",[a("li",[t._v("バインドパラメータを複数指定する例")])]),t._v(" "),a("div",{staticClass:"language-sh line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[t._v("uroborosql "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" query department/select_department "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("deptNo")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token assign-left variable"}},[t._v("deptName")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("sales"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("Enter"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br")])]),a("div",{staticClass:"language-sql line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sql"}},[a("code",[t._v("uroborosql "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" query department"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("select_department deptNo"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v(" deptName"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("sales\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("DEBUG"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" Evaluation Expression:"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("SF"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("isNotEmpty"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("deptNo"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Result:"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Parameter:"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("deptNo:"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("DEBUG"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" Evaluation Expression:"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("SF"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("isNotEmpty"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("deptName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Result:"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Parameter:"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("deptName:"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("{"),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("115")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("97")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("108")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("101")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("115")]),t._v("}"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("DEBUG"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" Executed "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("SQL")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("select")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* department/select_department */")]),t._v("\n dept"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("dept_no "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" dept_no\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" dept"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("dept_name "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" dept_name\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" dept"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("lock_version "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" lock_version\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v("\n department dept\n"),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("where")]),t._v("\ndept"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("dept_no "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" ?"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*deptNo*/")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("and")]),t._v(" dept"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("dept_name "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" ?"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*deptName*/")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("DEBUG"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("Set")]),t._v(" the parameter"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("INDEX")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Parameter name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("deptNo"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("Value")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Class"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("Integer")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("DEBUG"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("Set")]),t._v(" the parameter"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("INDEX")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Parameter name"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("deptName"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("Value")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("sales"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Class"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("String"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("DEBUG"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("Execute")]),t._v(" search "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("SQL")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("INFO "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("-------+---------+------------+")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("DEPT_NO"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("DEPT_NAME"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("LOCK_VERSION"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("-------+---------+------------+")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("sales "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("|")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("+")]),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("-------+---------+------------+")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("DEBUG"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("SQL")]),t._v(" execution "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("time")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("department"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("select_department"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" : "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("00")]),t._v(":"),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("00")]),t._v(":"),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("00.006")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\nquery "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("sql")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("department"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("/")]),t._v("select_department"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("end")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("\nuroborosql "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")])])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br"),a("span",{staticClass:"line-number"},[t._v("21")]),a("br"),a("span",{staticClass:"line-number"},[t._v("22")]),a("br"),a("span",{staticClass:"line-number"},[t._v("23")]),a("br"),a("span",{staticClass:"line-number"},[t._v("24")]),a("br"),a("span",{staticClass:"line-number"},[t._v("25")]),a("br"),a("span",{staticClass:"line-number"},[t._v("26")]),a("br")])]),a("p",[a("strong",[t._v("REPL")]),t._v("を終了する場合はコマンド"),a("code",[t._v("quit")]),t._v(",もしくは"),a("code",[t._v("exit")]),t._v("を入力してください。")]),t._v(" "),a("div",{staticClass:"language-sh line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-sh"}},[a("code",[t._v("uroborosql "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" quit"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("Enter"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\nSQL REPL end.\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br")])]),a("p",[t._v("終了メッセージが表示されてREPLが終了します。")]),t._v(" "),a("p",[a("strong",[t._v("REPL")]),t._v("には他にも以下のコマンドがあります。")]),t._v(" "),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("コマンド")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("説明")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("query")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("検索SQLを実行します")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("update")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("更新SQL(insert/update/delete)やDDLを実行します")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("view")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("SQL名で指定したSQLの内容を表示します")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("list")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("使用可能なSQL名の一覧を表示します")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("history")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("実行したコマンドの履歴を表示します")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("driver")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("使用可能なJDBCドライバーの一覧を表示します")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("desc")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("指定したテーブルの定義情報を表示します")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("generate")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("指定したテーブルに対するselect/insert/update/deleteを行うSQLを生成します")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("parse")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("指定したSQLで使用されているバインドパラメータやIF分岐条件を抽出して表示します")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("cls")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("コンソール画面のクリア")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("exit")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("REPLを終了します")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("help")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("利用できるコマンドの説明を表示します")])])])]),t._v(" "),a("h2",{attrs:{id:"replの設定"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#replの設定"}},[t._v("#")]),t._v(" REPLの設定")]),t._v(" "),a("p",[t._v("さて、ここまでREPLの操作を説明してきましたが、DB接続情報やSQLファイルの場所はどこで指定していたのでしょうか。\n実は"),a("code",[t._v("jp.co.future.uroborosql.client.SqlREPL")]),t._v("を実行する際、引数としてプロパティファイルを指定します。このプロパティファイルにDB接続情報やSQLファイルの場所などREPLを実行するのに必要な情報が記載されています。")]),t._v(" "),a("p",[t._v("pom.xmlのREPL実行部分")]),t._v(" "),a("div",{staticClass:"language-xml line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-xml"}},[a("code",[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("plugin")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("groupId")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("org.codehaus.mojo"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("artifactId")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("exec-maven-plugin"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("executions")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("execution")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("id")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("repl"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("goals")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("goal")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("java"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("configuration")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("workingDirectory")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("${basedir}"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("mainClass")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("jp.co.future.uroborosql.client.SqlREPL"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("arguments")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("argument")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("REPL/repl.properties"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),t._v("phase")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v("process-test-classes"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token tag"}},[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("")])]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br"),a("span",{staticClass:"line-number"},[t._v("6")]),a("br"),a("span",{staticClass:"line-number"},[t._v("7")]),a("br"),a("span",{staticClass:"line-number"},[t._v("8")]),a("br"),a("span",{staticClass:"line-number"},[t._v("9")]),a("br"),a("span",{staticClass:"line-number"},[t._v("10")]),a("br"),a("span",{staticClass:"line-number"},[t._v("11")]),a("br"),a("span",{staticClass:"line-number"},[t._v("12")]),a("br"),a("span",{staticClass:"line-number"},[t._v("13")]),a("br"),a("span",{staticClass:"line-number"},[t._v("14")]),a("br"),a("span",{staticClass:"line-number"},[t._v("15")]),a("br"),a("span",{staticClass:"line-number"},[t._v("16")]),a("br"),a("span",{staticClass:"line-number"},[t._v("17")]),a("br"),a("span",{staticClass:"line-number"},[t._v("18")]),a("br"),a("span",{staticClass:"line-number"},[t._v("19")]),a("br"),a("span",{staticClass:"line-number"},[t._v("20")]),a("br")])]),a("p",[t._v("初期設定ではプロパティファイルの場所は"),a("code",[t._v("REPL/repl.properties")]),t._v("になっています。")]),t._v(" "),a("ul",[a("li",[t._v("REPL/repl.properties")])]),t._v(" "),a("div",{staticClass:"language-properties line-numbers-mode"},[a("pre",{pre:!0,attrs:{class:"language-properties"}},[a("code",[a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("db.url")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[t._v("jdbc:h2:file:./target/db/repldb;")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("db.user")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[t._v("sa")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("db.password")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),t._v("\n\n"),a("span",{pre:!0,attrs:{class:"token attr-name"}},[t._v("sql.additionalClassPath")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token attr-value"}},[t._v("${user.home}/.m2/repository/com/h2database/h2/1.4.192/h2-1.4.192.jar")]),t._v("\n")])]),t._v(" "),a("div",{staticClass:"line-numbers-wrapper"},[a("span",{staticClass:"line-number"},[t._v("1")]),a("br"),a("span",{staticClass:"line-number"},[t._v("2")]),a("br"),a("span",{staticClass:"line-number"},[t._v("3")]),a("br"),a("span",{staticClass:"line-number"},[t._v("4")]),a("br"),a("span",{staticClass:"line-number"},[t._v("5")]),a("br")])]),a("table",[a("thead",[a("tr",[a("th",{staticStyle:{"text-align":"left"}},[t._v("プロパティ名")]),t._v(" "),a("th",{staticStyle:{"text-align":"left"}},[t._v("説明")])])]),t._v(" "),a("tbody",[a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("db.url")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("DB接続URL")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("db.schema")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("DB接続スキーマ")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("db.user")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("DB接続ユーザ")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("db.password")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("DB接続パスワード")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("sql.loadPath")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("SQLをロードするパス。初期値は"),a("code",[t._v("sql")])])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("sql.encoding")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("SQLファイルのエンコーディング。初期値は"),a("code",[t._v("UTF-8")])])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("sql.fileExtension")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("ロードするSQLファイルの拡張子。初期値は"),a("code",[t._v(".sql")])])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("sql.detectChanges")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("SQLファイルの変更検知を行うかどうか。初期値は"),a("code",[t._v("true")])])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("sql.additionalClassPath")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[a("strong",[t._v("REPL")]),t._v("起動時に起動時クラスパス以外でクラスパスに追加する場所。"),a("code",[t._v(";")]),t._v("で区切ることで複数指定可。SQLファイルのルート(sqlフォルダの親フォルダ)をクラスパスに追加することで、自動的にSQLファイルがロードされます。合わせて接続するDBのJDBCドライバを含むJarを指定することで動的にJDBCドライバを読み込みます。")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("sqlContextFactory.constantClassNames")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlContextFactoryに登録する定数クラスを指定。"),a("code",[t._v(",")]),t._v("で区切ることで複数指定可。 ex) jp.co.future.uroborosql.context.test.TestConsts")])]),t._v(" "),a("tr",[a("td",{staticStyle:{"text-align":"left"}},[t._v("sqlContextFactory.enumConstantPackageNames")]),t._v(" "),a("td",{staticStyle:{"text-align":"left"}},[t._v("SqlContextFactoryに登録するEnum定数パッケージ名を指定。"),a("code",[t._v(",")]),t._v("で区切ることで複数指定可。ex) jp.co.future.uroborosql.context.test")])])])]),t._v(" "),a("p",[t._v("このプロパティファイルを変更することでいろいろなDBに接続することができるようになります。")]),t._v(" "),a("p",[t._v("これまで見てきたように"),a("strong",[t._v("REPL")]),t._v("を利用することで簡単にSQL実行や動作確認ができるので、SQL開発には欠かせないツールになります。\n色々なSQLを記述して"),a("strong",[t._v("REPL")]),t._v("で試してみてください。")]),t._v(" "),a("p",[t._v("これで "),a("em",[t._v("Getting Started")]),t._v(" は終了です。")]),t._v(" "),a("p",[a("strong",[t._v("uroboroSQL")]),t._v("で使用するSQLの文法や基本的な操作については"),a("a",{attrs:{href:"../basics"}},[t._v("基本操作")]),t._v("を参照してください。")])])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/31.0b4510c3.js b/docs/assets/js/31.0b4510c3.js deleted file mode 100644 index 3406dad..0000000 --- a/docs/assets/js/31.0b4510c3.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[31],{201:function(t,e,n){"use strict";n.r(e);var o=n(3),i=Object(o.a)({},(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("h1",{attrs:{id:"license"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#license"}},[t._v("#")]),t._v(" License")]),t._v(" "),n("p",[t._v("MIT License")]),t._v(" "),n("p",[t._v("Copyright (c) 2018")]),t._v(" "),n("p",[t._v('Permission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the "Software"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:')]),t._v(" "),n("p",[t._v("The above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.")]),t._v(" "),n("p",[t._v('THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.')])])}),[],!1,null,null,null);e.default=i.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/32.f111ce19.js b/docs/assets/js/32.f111ce19.js deleted file mode 100644 index 7df92a5..0000000 --- a/docs/assets/js/32.f111ce19.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[32],{220:function(r,e,t){"use strict";t.r(e);var a=t(3),o=Object(a.a)({},(function(){var r=this,e=r.$createElement,t=r._self._c||e;return t("ContentSlotsDistributor",{attrs:{"slot-key":r.$parent.slotKey}},[t("h1",{attrs:{id:"uroborosqlとは"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#uroborosqlとは"}},[r._v("#")]),r._v(" uroboroSQLとは")]),r._v(" "),t("p",[t("strong",[r._v("uroboroSQL")]),r._v("は2Way-SQLが利用可能なJava製のシンプルなSQL実行ライブラリです。")]),r._v(" "),t("p",[t("a",{attrs:{href:"https://www.future.co.jp/architect/",target:"_blank",rel:"noopener noreferrer"}},[r._v("フューチャーアーキテクト"),t("OutboundLink")],1),r._v("社内にて、2006-2007年頃に"),t("a",{attrs:{href:"http://s2dao.seasar.org/ja/",target:"_blank",rel:"noopener noreferrer"}},[r._v("S2Dao"),t("OutboundLink")],1),r._v("を参考に開発され、プロジェクトで実際に利用されて現在まで改善が続けられてきました。社内ではWebアプリケーションフレームワークや各種設計開発支援ツールと連携・統合される形で利用されています。")]),r._v(" "),t("p",[r._v("とはいえ、社内で秘伝のタレ化していることは否めず、開発フェーズでは開発パートナーさんからも「ググれない」から使い方がわからないいう声もちらほら。だったらOSS化してしまえということのが公開のきっかけです。")]),r._v(" "),t("h2",{attrs:{id:"uroborosqlを使う理由"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#uroborosqlを使う理由"}},[r._v("#")]),r._v(" uroboroSQLを使う理由")]),r._v(" "),t("p",[r._v("JavaからRDBにアクセスするとき、Java標準のJPA(Java Persistence API)の実装である"),t("a",{attrs:{href:"https://www.eclipse.org/eclipselink/",target:"_blank",rel:"noopener noreferrer"}},[r._v("EclipseLink"),t("OutboundLink")],1),r._v("、"),t("a",{attrs:{href:"http://openjpa.apache.org/",target:"_blank",rel:"noopener noreferrer"}},[r._v("OpenJPA"),t("OutboundLink")],1),r._v("はもとより、歴史のあるORMとして"),t("a",{attrs:{href:"https://hibernate.org/",target:"_blank",rel:"noopener noreferrer"}},[r._v("Hibernate"),t("OutboundLink")],1),r._v("、"),t("a",{attrs:{href:"http://www.mybatis.org/mybatis-3/ja/index.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("MyBatis"),t("OutboundLink")],1),r._v("、"),t("a",{attrs:{href:"https://spring.io/projects/spring-data-jdbc#overview",target:"_blank",rel:"noopener noreferrer"}},[r._v("Spring Data JDBC"),t("OutboundLink")],1),r._v("といったグローバルで使われているものもありますし、日本でよく使われてきた"),t("a",{attrs:{href:"http://s2dao.seasar.org/ja/",target:"_blank",rel:"noopener noreferrer"}},[r._v("S2Dao"),t("OutboundLink")],1),r._v("、"),t("a",{attrs:{href:"http://s2container.seasar.org/2.4/ja/s2jdbc.html",target:"_blank",rel:"noopener noreferrer"}},[r._v("S2JDBC"),t("OutboundLink")],1),r._v("、"),t("a",{attrs:{href:"http://dbflute.seasar.org/",target:"_blank",rel:"noopener noreferrer"}},[r._v("DBflute"),t("OutboundLink")],1),r._v("、"),t("a",{attrs:{href:"https://doma.readthedocs.io/en/stable/",target:"_blank",rel:"noopener noreferrer"}},[r._v("Doma"),t("OutboundLink")],1),r._v("といったものもあります。")]),r._v(" "),t("p",[r._v("こういった数多のDB系ライブラリ・フレームワークの中で解決したい領域もそれぞれですが、"),t("strong",[r._v("uroboroSQL")]),r._v("は主にSQL中心の設計コンセプトを採用しています。Javaを中心に考えてSQLを組み立てるという思想ではなく、SQLに足りないところをJavaで補うという思想です。")]),r._v(" "),t("p",[r._v("これはエンタープライズシステムにおいて、ORマッパーやクエリビルダでは実装しきれない、hint句による実行計画の指定や分析関数の利用など複雑かつDBプロダクト依存のSQLを使う場合に有効と考えています。")]),r._v(" "),t("p",[r._v("そのため、"),t("strong",[r._v("uroboroSQL")]),r._v("はSQLは2Way-SQL方式で記述ができるものの、ORMでよくあるエンティティクラスとリレーションをたどって遅延ロードして子エンティティを取得するなどの機能は有していません。(単純なエンティティクラスへのマッピングは提供しています)")]),r._v(" "),t("p",[r._v("その分、エンタープライズで培われたノウハウとして、区分値サポート、リトライ、フィルターによるカスタマイズなどの機能を充実させています。また、2Way-SQLのIF分岐に対してカバレッジを取れるようにするという、品質視点での機能があるのも特徴です。")]),r._v(" "),t("h3",{staticStyle:{"text-align":"center"}},[r._v("SQLの能力を最大限活かしつつ、生産性と品質を高めたい")]),r._v(" "),t("p",[r._v("それが"),t("strong",[r._v("uroboroSQL")]),r._v("の最大の関心事なのです。")]),r._v(" "),t("h2",{attrs:{id:"further-reading"}},[t("a",{staticClass:"header-anchor",attrs:{href:"#further-reading"}},[r._v("#")]),r._v(" Further Reading")]),r._v(" "),t("iframe",{staticStyle:{border:"1px solid #CCC","border-width":"1px","margin-top":"10px","margin-bottom":"5px","max-width":"100%"},attrs:{src:"//www.slideshare.net/slideshow/embed_code/key/bOHqva5K4q4X7R",width:"595",height:"485",frameborder:"0",marginwidth:"0",marginheight:"0",scrolling:"no",allowfullscreen:""}}),r._v(" "),t("div",{staticStyle:{"margin-bottom":"5px"}},[t("strong",[t("a",{attrs:{href:"//www.slideshare.net/KenichiHoshi1/uroborosql-osc2017-tokyospring",title:"uroboroSQLの紹介 (OSC2017 Tokyo/Spring)",target:"_blank"}},[r._v("uroboroSQLの紹介 (OSC2017 Tokyo/Spring)")])]),r._v(" from "),t("strong",[t("a",{attrs:{href:"https://www.slideshare.net/KenichiHoshi1",target:"_blank"}},[r._v("Kenichi Hoshi")])])])])}),[],!1,null,null,null);e.default=o.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/33.eb21ab3c.js b/docs/assets/js/33.eb21ab3c.js deleted file mode 100644 index 067f482..0000000 --- a/docs/assets/js/33.eb21ab3c.js +++ /dev/null @@ -1,3931 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[33],{195:function(e,t,n){var r;"undefined"!=typeof self&&self,r=function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s="./src/mermaid.js")}({"./node_modules/@braintree/sanitize-url/index.js": -/*!*******************************************************!*\ - !*** ./node_modules/@braintree/sanitize-url/index.js ***! - \*******************************************************/ -/*! no static exports found */function(e,t,n){"use strict";var r=/^(%20|\s)*(javascript|data)/im,o=/[^\x20-\x7E]/gim,i=/^([^:]+):/gm,s=[".","/"];e.exports={sanitizeUrl:function(e){if(!e)return"about:blank";var t,n,a=e.replace(o,"").trim();return function(e){return s.indexOf(e[0])>-1}(a)?a:(n=a.match(i))?(t=n[0],r.test(t)?"about:blank":a):"about:blank"}}},"./node_modules/d3-array/src/array.js": -/*!********************************************!*\ - !*** ./node_modules/d3-array/src/array.js ***! - \********************************************/ -/*! exports provided: slice, map */function(e,t,n){"use strict";n.r(t),n.d(t,"slice",(function(){return o})),n.d(t,"map",(function(){return i}));var r=Array.prototype,o=r.slice,i=r.map},"./node_modules/d3-array/src/ascending.js": -/*!************************************************!*\ - !*** ./node_modules/d3-array/src/ascending.js ***! - \************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(e,t){return et?1:e>=t?0:NaN}},"./node_modules/d3-array/src/bisect.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-array/src/bisect.js ***! - \*********************************************/ -/*! exports provided: bisectRight, bisectLeft, default */function(e,t,n){"use strict";n.r(t),n.d(t,"bisectRight",(function(){return s})),n.d(t,"bisectLeft",(function(){return a}));var r=n(/*! ./ascending */"./node_modules/d3-array/src/ascending.js"),o=n(/*! ./bisector */"./node_modules/d3-array/src/bisector.js"),i=Object(o.default)(r.default),s=i.right,a=i.left;t.default=s},"./node_modules/d3-array/src/bisector.js": -/*!***********************************************!*\ - !*** ./node_modules/d3-array/src/bisector.js ***! - \***********************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./ascending */"./node_modules/d3-array/src/ascending.js");t.default=function(e){var t;return 1===e.length&&(t=e,e=function(e,n){return Object(r.default)(t(e),n)}),{left:function(t,n,r,o){for(null==r&&(r=0),null==o&&(o=t.length);r>>1;e(t[i],n)<0?r=i+1:o=i}return r},right:function(t,n,r,o){for(null==r&&(r=0),null==o&&(o=t.length);r>>1;e(t[i],n)>0?o=i:r=i+1}return r}}}},"./node_modules/d3-array/src/constant.js": -/*!***********************************************!*\ - !*** ./node_modules/d3-array/src/constant.js ***! - \***********************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(e){return function(){return e}}},"./node_modules/d3-array/src/cross.js": -/*!********************************************!*\ - !*** ./node_modules/d3-array/src/cross.js ***! - \********************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./pairs */"./node_modules/d3-array/src/pairs.js");t.default=function(e,t,n){var o,i,s,a,c=e.length,u=t.length,d=new Array(c*u);for(null==n&&(n=r.pair),o=s=0;oe?1:t>=e?0:NaN}},"./node_modules/d3-array/src/deviation.js": -/*!************************************************!*\ - !*** ./node_modules/d3-array/src/deviation.js ***! - \************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./variance */"./node_modules/d3-array/src/variance.js");t.default=function(e,t){var n=Object(r.default)(e,t);return n?Math.sqrt(n):n}},"./node_modules/d3-array/src/extent.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-array/src/extent.js ***! - \*********************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(e,t){var n,r,o,i=e.length,s=-1;if(null==t){for(;++s=n)for(r=o=n;++sn&&(r=n),o=n)for(r=o=n;++sn&&(r=n),oh;)p.pop(),--m;var g,y=new Array(m+1);for(i=0;i<=m;++i)(g=y[i]=[]).x0=i>0?p[i-1]:f,g.x1=i=n)for(r=n;++ir&&(r=n)}else for(;++i=n)for(r=n;++ir&&(r=n);return r}},"./node_modules/d3-array/src/mean.js": -/*!*******************************************!*\ - !*** ./node_modules/d3-array/src/mean.js ***! - \*******************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./number */"./node_modules/d3-array/src/number.js");t.default=function(e,t){var n,o=e.length,i=o,s=-1,a=0;if(null==t)for(;++s=0;)for(t=(r=e[o]).length;--t>=0;)n[--s]=r[t];return n}},"./node_modules/d3-array/src/min.js": -/*!******************************************!*\ - !*** ./node_modules/d3-array/src/min.js ***! - \******************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(e,t){var n,r,o=e.length,i=-1;if(null==t){for(;++i=n)for(r=n;++in&&(r=n)}else for(;++i=n)for(r=n;++in&&(r=n);return r}},"./node_modules/d3-array/src/number.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-array/src/number.js ***! - \*********************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(e){return null===e?NaN:+e}},"./node_modules/d3-array/src/pairs.js": -/*!********************************************!*\ - !*** ./node_modules/d3-array/src/pairs.js ***! - \********************************************/ -/*! exports provided: default, pair */function(e,t,n){"use strict";function r(e,t){return[e,t]}n.r(t),n.d(t,"pair",(function(){return r})),t.default=function(e,t){null==t&&(t=r);for(var n=0,o=e.length-1,i=e[0],s=new Array(o<0?0:o);n=1)return+n(e[o-1],o-1,e);var o,i=(o-1)*t,s=Math.floor(i),a=+n(e[s],s,e);return a+(+n(e[s+1],s+1,e)-a)*(i-s)}}},"./node_modules/d3-array/src/range.js": -/*!********************************************!*\ - !*** ./node_modules/d3-array/src/range.js ***! - \********************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(e,t,n){e=+e,t=+t,n=(o=arguments.length)<2?(t=e,e=0,1):o<3?1:+n;for(var r=-1,o=0|Math.max(0,Math.ceil((t-e)/n)),i=new Array(o);++r=0?(c>=r?10:c>=o?5:c>=i?2:1)*Math.pow(10,a):-Math.pow(10,-a)/(c>=r?10:c>=o?5:c>=i?2:1)}function a(e,t,n){var s=Math.abs(t-e)/Math.max(0,n),a=Math.pow(10,Math.floor(Math.log(s)/Math.LN10)),c=s/a;return c>=r?a*=10:c>=o?a*=5:c>=i&&(a*=2),t0)return[e];if((r=t0)for(e=Math.ceil(e/a),t=Math.floor(t/a),i=new Array(o=Math.ceil(t-e+1));++c1)return u/(s-1)}},"./node_modules/d3-array/src/zip.js": -/*!******************************************!*\ - !*** ./node_modules/d3-array/src/zip.js ***! - \******************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./transpose */"./node_modules/d3-array/src/transpose.js");t.default=function(){return Object(r.default)(arguments)}},"./node_modules/d3-axis/src/array.js": -/*!*******************************************!*\ - !*** ./node_modules/d3-axis/src/array.js ***! - \*******************************************/ -/*! exports provided: slice */function(e,t,n){"use strict";n.r(t),n.d(t,"slice",(function(){return r}));var r=Array.prototype.slice},"./node_modules/d3-axis/src/axis.js": -/*!******************************************!*\ - !*** ./node_modules/d3-axis/src/axis.js ***! - \******************************************/ -/*! exports provided: axisTop, axisRight, axisBottom, axisLeft */function(e,t,n){"use strict";n.r(t),n.d(t,"axisTop",(function(){return l})),n.d(t,"axisRight",(function(){return f})),n.d(t,"axisBottom",(function(){return h})),n.d(t,"axisLeft",(function(){return p}));var r=n(/*! ./array */"./node_modules/d3-axis/src/array.js"),o=n(/*! ./identity */"./node_modules/d3-axis/src/identity.js");function i(e){return"translate("+(e+.5)+",0)"}function s(e){return"translate(0,"+(e+.5)+")"}function a(e){return function(t){return+e(t)}}function c(e){var t=Math.max(0,e.bandwidth()-1)/2;return e.round()&&(t=Math.round(t)),function(n){return+e(n)+t}}function u(){return!this.__axis}function d(e,t){var n=[],d=null,l=null,f=6,h=6,p=3,m=1===e||4===e?-1:1,g=4===e||2===e?"x":"y",y=1===e||3===e?i:s;function b(r){var i=null==d?t.ticks?t.ticks.apply(t,n):t.domain():d,s=null==l?t.tickFormat?t.tickFormat.apply(t,n):o.default:l,b=Math.max(f,0)+p,_=t.range(),v=+_[0]+.5,j=+_[_.length-1]+.5,x=(t.bandwidth?c:a)(t.copy()),k=r.selection?r.selection():r,w=k.selectAll(".domain").data([null]),O=k.selectAll(".tick").data(i,t).order(),C=O.exit(),E=O.enter().append("g").attr("class","tick"),T=O.select("line"),S=O.select("text");w=w.merge(w.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),O=O.merge(E),T=T.merge(E.append("line").attr("stroke","currentColor").attr(g+"2",m*f)),S=S.merge(E.append("text").attr("fill","currentColor").attr(g,m*b).attr("dy",1===e?"0em":3===e?"0.71em":"0.32em")),r!==k&&(w=w.transition(r),O=O.transition(r),T=T.transition(r),S=S.transition(r),C=C.transition(r).attr("opacity",1e-6).attr("transform",(function(e){return isFinite(e=x(e))?y(e):this.getAttribute("transform")})),E.attr("opacity",1e-6).attr("transform",(function(e){var t=this.parentNode.__axis;return y(t&&isFinite(t=t(e))?t:x(e))}))),C.remove(),w.attr("d",4===e||2==e?h?"M"+m*h+","+v+"H0.5V"+j+"H"+m*h:"M0.5,"+v+"V"+j:h?"M"+v+","+m*h+"V0.5H"+j+"V"+m*h:"M"+v+",0.5H"+j),O.attr("opacity",1).attr("transform",(function(e){return y(x(e))})),T.attr(g+"2",m*f),S.attr(g,m*b).text(s),k.filter(u).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",2===e?"start":4===e?"end":"middle"),k.each((function(){this.__axis=x}))}return b.scale=function(e){return arguments.length?(t=e,b):t},b.ticks=function(){return n=r.slice.call(arguments),b},b.tickArguments=function(e){return arguments.length?(n=null==e?[]:r.slice.call(e),b):n.slice()},b.tickValues=function(e){return arguments.length?(d=null==e?null:r.slice.call(e),b):d&&d.slice()},b.tickFormat=function(e){return arguments.length?(l=e,b):l},b.tickSize=function(e){return arguments.length?(f=h=+e,b):f},b.tickSizeInner=function(e){return arguments.length?(f=+e,b):f},b.tickSizeOuter=function(e){return arguments.length?(h=+e,b):h},b.tickPadding=function(e){return arguments.length?(p=+e,b):p},b}function l(e){return d(1,e)}function f(e){return d(2,e)}function h(e){return d(3,e)}function p(e){return d(4,e)}},"./node_modules/d3-axis/src/identity.js": -/*!**********************************************!*\ - !*** ./node_modules/d3-axis/src/identity.js ***! - \**********************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(e){return e}},"./node_modules/d3-axis/src/index.js": -/*!*******************************************!*\ - !*** ./node_modules/d3-axis/src/index.js ***! - \*******************************************/ -/*! exports provided: axisTop, axisRight, axisBottom, axisLeft */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./axis */"./node_modules/d3-axis/src/axis.js");n.d(t,"axisTop",(function(){return r.axisTop})),n.d(t,"axisRight",(function(){return r.axisRight})),n.d(t,"axisBottom",(function(){return r.axisBottom})),n.d(t,"axisLeft",(function(){return r.axisLeft}))},"./node_modules/d3-brush/src/brush.js": -/*!********************************************!*\ - !*** ./node_modules/d3-brush/src/brush.js ***! - \********************************************/ -/*! exports provided: brushSelection, brushX, brushY, default */function(e,t,n){"use strict";n.r(t),n.d(t,"brushSelection",(function(){return D})),n.d(t,"brushX",(function(){return B})),n.d(t,"brushY",(function(){return N}));var r=n(/*! d3-dispatch */"./node_modules/d3-dispatch/src/index.js"),o=n(/*! d3-drag */"./node_modules/d3-drag/src/index.js"),i=n(/*! d3-interpolate */"./node_modules/d3-interpolate/src/index.js"),s=n(/*! d3-selection */"./node_modules/d3-selection/src/index.js"),a=n(/*! d3-transition */"./node_modules/d3-transition/src/index.js"),c=n(/*! ./constant.js */"./node_modules/d3-brush/src/constant.js"),u=n(/*! ./event.js */"./node_modules/d3-brush/src/event.js"),d=n(/*! ./noevent.js */"./node_modules/d3-brush/src/noevent.js"),l={name:"drag"},f={name:"space"},h={name:"handle"},p={name:"center"};function m(e){return[+e[0],+e[1]]}function g(e){return[m(e[0]),m(e[1])]}function y(e){return function(t){return Object(s.touch)(t,s.event.touches,e)}}var b={name:"x",handles:["w","e"].map(C),input:function(e,t){return null==e?null:[[+e[0],t[0][1]],[+e[1],t[1][1]]]},output:function(e){return e&&[e[0][0],e[1][0]]}},_={name:"y",handles:["n","s"].map(C),input:function(e,t){return null==e?null:[[t[0][0],+e[0]],[t[1][0],+e[1]]]},output:function(e){return e&&[e[0][1],e[1][1]]}},v={name:"xy",handles:["n","w","e","s","nw","ne","sw","se"].map(C),input:function(e){return null==e?null:g(e)},output:function(e){return e}},j={overlay:"crosshair",selection:"move",n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},x={e:"w",w:"e",nw:"ne",ne:"nw",se:"sw",sw:"se"},k={n:"s",s:"n",nw:"sw",ne:"se",se:"ne",sw:"nw"},w={overlay:1,selection:1,n:null,e:1,s:null,w:-1,nw:-1,ne:1,se:1,sw:-1},O={overlay:1,selection:1,n:-1,e:null,s:1,w:null,nw:-1,ne:-1,se:1,sw:1};function C(e){return{type:e}}function E(){return!s.event.ctrlKey&&!s.event.button}function T(){var e=this.ownerSVGElement||this;return e.hasAttribute("viewBox")?[[(e=e.viewBox.baseVal).x,e.y],[e.x+e.width,e.y+e.height]]:[[0,0],[e.width.baseVal.value,e.height.baseVal.value]]}function S(){return navigator.maxTouchPoints||"ontouchstart"in this}function A(e){for(;!e.__brush;)if(!(e=e.parentNode))return;return e.__brush}function M(e){return e[0][0]===e[1][0]||e[0][1]===e[1][1]}function D(e){var t=e.__brush;return t?t.dim.output(t.selection):null}function B(){return L(b)}function N(){return L(_)}function L(e){var t,n=T,m=E,v=S,D=!0,B=Object(r.dispatch)("start","brush","end"),N=6;function L(t){var n=t.property("__brush",q).selectAll(".overlay").data([C("overlay")]);n.enter().append("rect").attr("class","overlay").attr("pointer-events","all").attr("cursor",j.overlay).merge(n).each((function(){var e=A(this).extent;Object(s.select)(this).attr("x",e[0][0]).attr("y",e[0][1]).attr("width",e[1][0]-e[0][0]).attr("height",e[1][1]-e[0][1])})),t.selectAll(".selection").data([C("selection")]).enter().append("rect").attr("class","selection").attr("cursor",j.selection).attr("fill","#777").attr("fill-opacity",.3).attr("stroke","#fff").attr("shape-rendering","crispEdges");var r=t.selectAll(".handle").data(e.handles,(function(e){return e.type}));r.exit().remove(),r.enter().append("rect").attr("class",(function(e){return"handle handle--"+e.type})).attr("cursor",(function(e){return j[e.type]})),t.each(P).attr("fill","none").attr("pointer-events","all").on("mousedown.brush",F).filter(v).on("touchstart.brush",F).on("touchmove.brush",Y).on("touchend.brush touchcancel.brush",z).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function P(){var e=Object(s.select)(this),t=A(this).selection;t?(e.selectAll(".selection").style("display",null).attr("x",t[0][0]).attr("y",t[0][1]).attr("width",t[1][0]-t[0][0]).attr("height",t[1][1]-t[0][1]),e.selectAll(".handle").style("display",null).attr("x",(function(e){return"e"===e.type[e.type.length-1]?t[1][0]-N/2:t[0][0]-N/2})).attr("y",(function(e){return"s"===e.type[0]?t[1][1]-N/2:t[0][1]-N/2})).attr("width",(function(e){return"n"===e.type||"s"===e.type?t[1][0]-t[0][0]+N:N})).attr("height",(function(e){return"e"===e.type||"w"===e.type?t[1][1]-t[0][1]+N:N}))):e.selectAll(".selection,.handle").style("display","none").attr("x",null).attr("y",null).attr("width",null).attr("height",null)}function I(e,t,n){return!n&&e.__brush.emitter||new R(e,t)}function R(e,t){this.that=e,this.args=t,this.state=e.__brush,this.active=0}function F(){if((!t||s.event.touches)&&m.apply(this,arguments)){var n,r,i,c,u,g,v,C,E,T,S,B=this,N=s.event.target.__data__.type,L="selection"===(D&&s.event.metaKey?N="overlay":N)?l:D&&s.event.altKey?p:h,R=e===_?null:w[N],F=e===b?null:O[N],Y=A(B),z=Y.extent,q=Y.selection,G=z[0][0],U=z[0][1],W=z[1][0],H=z[1][1],$=0,V=0,X=R&&F&&D&&s.event.shiftKey,Z=s.event.touches?y(s.event.changedTouches[0].identifier):s.mouse,K=Z(B),Q=K,J=I(B,arguments,!0).beforestart();"overlay"===N?(q&&(E=!0),Y.selection=q=[[n=e===_?G:K[0],i=e===b?U:K[1]],[u=e===_?W:n,v=e===b?H:i]]):(n=q[0][0],i=q[0][1],u=q[1][0],v=q[1][1]),r=n,c=i,g=u,C=v;var ee=Object(s.select)(B).attr("pointer-events","none"),te=ee.selectAll(".overlay").attr("cursor",j[N]);if(s.event.touches)J.moved=re,J.ended=ie;else{var ne=Object(s.select)(s.event.view).on("mousemove.brush",re,!0).on("mouseup.brush",ie,!0);D&&ne.on("keydown.brush",se,!0).on("keyup.brush",ae,!0),Object(o.dragDisable)(s.event.view)}Object(d.nopropagation)(),Object(a.interrupt)(B),P.call(B),J.start()}function re(){var e=Z(B);!X||T||S||(Math.abs(e[0]-Q[0])>Math.abs(e[1]-Q[1])?S=!0:T=!0),Q=e,E=!0,Object(d.default)(),oe()}function oe(){var e;switch($=Q[0]-K[0],V=Q[1]-K[1],L){case f:case l:R&&($=Math.max(G-n,Math.min(W-u,$)),r=n+$,g=u+$),F&&(V=Math.max(U-i,Math.min(H-v,V)),c=i+V,C=v+V);break;case h:R<0?($=Math.max(G-n,Math.min(W-n,$)),r=n+$,g=u):R>0&&($=Math.max(G-u,Math.min(W-u,$)),r=n,g=u+$),F<0?(V=Math.max(U-i,Math.min(H-i,V)),c=i+V,C=v):F>0&&(V=Math.max(U-v,Math.min(H-v,V)),c=i,C=v+V);break;case p:R&&(r=Math.max(G,Math.min(W,n-$*R)),g=Math.max(G,Math.min(W,u+$*R))),F&&(c=Math.max(U,Math.min(H,i-V*F)),C=Math.max(U,Math.min(H,v+V*F)))}g0&&(n=r-$),F<0?v=C-V:F>0&&(i=c-V),L=f,te.attr("cursor",j.selection),oe());break;default:return}Object(d.default)()}function ae(){switch(s.event.keyCode){case 16:X&&(T=S=X=!1,oe());break;case 18:L===p&&(R<0?u=g:R>0&&(n=r),F<0?v=C:F>0&&(i=c),L=h,oe());break;case 32:L===f&&(s.event.altKey?(R&&(u=g-$*R,n=r+$*R),F&&(v=C-V*F,i=c+V*F),L=p):(R<0?u=g:R>0&&(n=r),F<0?v=C:F>0&&(i=c),L=h),te.attr("cursor",j[N]),oe());break;default:return}Object(d.default)()}}function Y(){I(this,arguments).moved()}function z(){I(this,arguments).ended()}function q(){var t=this.__brush||{selection:null};return t.extent=g(n.apply(this,arguments)),t.dim=e,t}return L.move=function(t,n){t.selection?t.on("start.brush",(function(){I(this,arguments).beforestart().start()})).on("interrupt.brush end.brush",(function(){I(this,arguments).end()})).tween("brush",(function(){var t=this,r=t.__brush,o=I(t,arguments),s=r.selection,a=e.input("function"==typeof n?n.apply(this,arguments):n,r.extent),c=Object(i.interpolate)(s,a);function u(e){r.selection=1===e&&null===a?null:c(e),P.call(t),o.brush()}return null!==s&&null!==a?u:u(1)})):t.each((function(){var t=this,r=arguments,o=t.__brush,i=e.input("function"==typeof n?n.apply(t,r):n,o.extent),s=I(t,r).beforestart();Object(a.interrupt)(t),o.selection=null===i?null:i,P.call(t),s.start().brush().end()}))},L.clear=function(e){L.move(e,null)},R.prototype={beforestart:function(){return 1==++this.active&&(this.state.emitter=this,this.starting=!0),this},start:function(){return this.starting?(this.starting=!1,this.emit("start")):this.emit("brush"),this},brush:function(){return this.emit("brush"),this},end:function(){return 0==--this.active&&(delete this.state.emitter,this.emit("end")),this},emit:function(t){Object(s.customEvent)(new u.default(L,t,e.output(this.state.selection)),B.apply,B,[t,this.that,this.args])}},L.extent=function(e){return arguments.length?(n="function"==typeof e?e:Object(c.default)(g(e)),L):n},L.filter=function(e){return arguments.length?(m="function"==typeof e?e:Object(c.default)(!!e),L):m},L.touchable=function(e){return arguments.length?(v="function"==typeof e?e:Object(c.default)(!!e),L):v},L.handleSize=function(e){return arguments.length?(N=+e,L):N},L.keyModifiers=function(e){return arguments.length?(D=!!e,L):D},L.on=function(){var e=B.on.apply(B,arguments);return e===B?L:e},L}t.default=function(){return L(v)}},"./node_modules/d3-brush/src/constant.js": -/*!***********************************************!*\ - !*** ./node_modules/d3-brush/src/constant.js ***! - \***********************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(e){return function(){return e}}},"./node_modules/d3-brush/src/event.js": -/*!********************************************!*\ - !*** ./node_modules/d3-brush/src/event.js ***! - \********************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(e,t,n){this.target=e,this.type=t,this.selection=n}},"./node_modules/d3-brush/src/index.js": -/*!********************************************!*\ - !*** ./node_modules/d3-brush/src/index.js ***! - \********************************************/ -/*! exports provided: brush, brushX, brushY, brushSelection */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./brush.js */"./node_modules/d3-brush/src/brush.js");n.d(t,"brush",(function(){return r.default})),n.d(t,"brushX",(function(){return r.brushX})),n.d(t,"brushY",(function(){return r.brushY})),n.d(t,"brushSelection",(function(){return r.brushSelection}))},"./node_modules/d3-brush/src/noevent.js": -/*!**********************************************!*\ - !*** ./node_modules/d3-brush/src/noevent.js ***! - \**********************************************/ -/*! exports provided: nopropagation, default */function(e,t,n){"use strict";n.r(t),n.d(t,"nopropagation",(function(){return o}));var r=n(/*! d3-selection */"./node_modules/d3-selection/src/index.js");function o(){r.event.stopImmediatePropagation()}t.default=function(){r.event.preventDefault(),r.event.stopImmediatePropagation()}},"./node_modules/d3-chord/src/array.js": -/*!********************************************!*\ - !*** ./node_modules/d3-chord/src/array.js ***! - \********************************************/ -/*! exports provided: slice */function(e,t,n){"use strict";n.r(t),n.d(t,"slice",(function(){return r}));var r=Array.prototype.slice},"./node_modules/d3-chord/src/chord.js": -/*!********************************************!*\ - !*** ./node_modules/d3-chord/src/chord.js ***! - \********************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! d3-array */"./node_modules/d3-array/src/index.js"),o=n(/*! ./math */"./node_modules/d3-chord/src/math.js");function i(e){return function(t,n){return e(t.source.value+t.target.value,n.source.value+n.target.value)}}t.default=function(){var e=0,t=null,n=null,s=null;function a(i){var a,c,u,d,l,f,h=i.length,p=[],m=Object(r.range)(h),g=[],y=[],b=y.groups=new Array(h),_=new Array(h*h);for(a=0,l=-1;++l=c.length)return null!=e&&n.sort(e),null!=t?t(n):n;for(var a,u,l,f=-1,h=n.length,p=c[o++],m=Object(r.default)(),g=i();++fc.length)return n;var o,i=u[r-1];return null!=t&&r>=c.length?o=n.entries():(o=[],n.each((function(t,n){o.push({key:n,values:e(t,r)})}))),null!=i?o.sort((function(e,t){return i(e.key,t.key)})):o}(d(e,0,s,a),0)},key:function(e){return c.push(e),n},sortKeys:function(e){return u[c.length-1]=e,n},sortValues:function(t){return e=t,n},rollup:function(e){return t=e,n}}}},"./node_modules/d3-collection/src/set.js": -/*!***********************************************!*\ - !*** ./node_modules/d3-collection/src/set.js ***! - \***********************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./map */"./node_modules/d3-collection/src/map.js");function o(){}var i=r.default.prototype;function s(e,t){var n=new o;if(e instanceof o)e.each((function(e){n.add(e)}));else if(e){var r=-1,i=e.length;if(null==t)for(;++r>8&15|t>>4&240,t>>4&15|240&t,(15&t)<<4|15&t,1):8===n?new O(t>>24&255,t>>16&255,t>>8&255,(255&t)/255):4===n?new O(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|240&t,((15&t)<<4|15&t)/255):null):(t=l.exec(e))?new O(t[1],t[2],t[3],1):(t=f.exec(e))?new O(255*t[1]/100,255*t[2]/100,255*t[3]/100,1):(t=h.exec(e))?x(t[1],t[2],t[3],t[4]):(t=p.exec(e))?x(255*t[1]/100,255*t[2]/100,255*t[3]/100,t[4]):(t=m.exec(e))?S(t[1],t[2]/100,t[3]/100,1):(t=g.exec(e))?S(t[1],t[2]/100,t[3]/100,t[4]):y.hasOwnProperty(e)?j(y[e]):"transparent"===e?new O(NaN,NaN,NaN,0):null}function j(e){return new O(e>>16&255,e>>8&255,255&e,1)}function x(e,t,n,r){return r<=0&&(e=t=n=NaN),new O(e,t,n,r)}function k(e){return e instanceof o||(e=v(e)),e?new O((e=e.rgb()).r,e.g,e.b,e.opacity):new O}function w(e,t,n,r){return 1===arguments.length?k(e):new O(e,t,n,null==r?1:r)}function O(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}function C(){return"#"+T(this.r)+T(this.g)+T(this.b)}function E(){var e=this.opacity;return(1===(e=isNaN(e)?1:Math.max(0,Math.min(1,e)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===e?")":", "+e+")")}function T(e){return((e=Math.max(0,Math.min(255,Math.round(e)||0)))<16?"0":"")+e.toString(16)}function S(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new D(e,t,n,r)}function A(e){if(e instanceof D)return new D(e.h,e.s,e.l,e.opacity);if(e instanceof o||(e=v(e)),!e)return new D;if(e instanceof D)return e;var t=(e=e.rgb()).r/255,n=e.g/255,r=e.b/255,i=Math.min(t,n,r),s=Math.max(t,n,r),a=NaN,c=s-i,u=(s+i)/2;return c?(a=t===s?(n-r)/c+6*(n0&&u<1?0:a,new D(a,c,u,e.opacity)}function M(e,t,n,r){return 1===arguments.length?A(e):new D(e,t,n,null==r?1:r)}function D(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}function B(e,t,n){return 255*(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)}Object(r.default)(o,v,{copy:function(e){return Object.assign(new this.constructor,this,e)},displayable:function(){return this.rgb().displayable()},hex:b,formatHex:b,formatHsl:function(){return A(this).formatHsl()},formatRgb:_,toString:_}),Object(r.default)(O,w,Object(r.extend)(o,{brighter:function(e){return e=null==e?s:Math.pow(s,e),new O(this.r*e,this.g*e,this.b*e,this.opacity)},darker:function(e){return e=null==e?i:Math.pow(i,e),new O(this.r*e,this.g*e,this.b*e,this.opacity)},rgb:function(){return this},displayable:function(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:C,formatHex:C,formatRgb:E,toString:E})),Object(r.default)(D,M,Object(r.extend)(o,{brighter:function(e){return e=null==e?s:Math.pow(s,e),new D(this.h,this.s,this.l*e,this.opacity)},darker:function(e){return e=null==e?i:Math.pow(i,e),new D(this.h,this.s,this.l*e,this.opacity)},rgb:function(){var e=this.h%360+360*(this.h<0),t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*t,o=2*n-r;return new O(B(e>=240?e-240:e+120,o,r),B(e,o,r),B(e<120?e+240:e-120,o,r),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function(){var e=this.opacity;return(1===(e=isNaN(e)?1:Math.max(0,Math.min(1,e)))?"hsl(":"hsla(")+(this.h||0)+", "+100*(this.s||0)+"%, "+100*(this.l||0)+"%"+(1===e?")":", "+e+")")}}))},"./node_modules/d3-color/src/cubehelix.js": -/*!************************************************!*\ - !*** ./node_modules/d3-color/src/cubehelix.js ***! - \************************************************/ -/*! exports provided: default, Cubehelix */function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return m})),n.d(t,"Cubehelix",(function(){return g}));var r=n(/*! ./define.js */"./node_modules/d3-color/src/define.js"),o=n(/*! ./color.js */"./node_modules/d3-color/src/color.js"),i=n(/*! ./math.js */"./node_modules/d3-color/src/math.js"),s=-.14861,a=1.78277,c=-.29227,u=-.90649,d=1.97294,l=d*u,f=d*a,h=a*c-u*s;function p(e){if(e instanceof g)return new g(e.h,e.s,e.l,e.opacity);e instanceof o.Rgb||(e=Object(o.rgbConvert)(e));var t=e.r/255,n=e.g/255,r=e.b/255,s=(h*r+l*t-f*n)/(h+l-f),a=r-s,p=(d*(n-s)-c*a)/u,m=Math.sqrt(p*p+a*a)/(d*s*(1-s)),y=m?Math.atan2(p,a)*i.rad2deg-120:NaN;return new g(y<0?y+360:y,m,s,e.opacity)}function m(e,t,n,r){return 1===arguments.length?p(e):new g(e,t,n,null==r?1:r)}function g(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}Object(r.default)(g,m,Object(r.extend)(o.Color,{brighter:function(e){return e=null==e?o.brighter:Math.pow(o.brighter,e),new g(this.h,this.s,this.l*e,this.opacity)},darker:function(e){return e=null==e?o.darker:Math.pow(o.darker,e),new g(this.h,this.s,this.l*e,this.opacity)},rgb:function(){var e=isNaN(this.h)?0:(this.h+120)*i.deg2rad,t=+this.l,n=isNaN(this.s)?0:this.s*t*(1-t),r=Math.cos(e),l=Math.sin(e);return new o.Rgb(255*(t+n*(s*r+a*l)),255*(t+n*(c*r+u*l)),255*(t+n*(d*r)),this.opacity)}}))},"./node_modules/d3-color/src/define.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-color/src/define.js ***! - \*********************************************/ -/*! exports provided: default, extend */function(e,t,n){"use strict";function r(e,t){var n=Object.create(e.prototype);for(var r in t)n[r]=t[r];return n}n.r(t),n.d(t,"extend",(function(){return r})),t.default=function(e,t,n){e.prototype=t.prototype=n,n.constructor=e}},"./node_modules/d3-color/src/index.js": -/*!********************************************!*\ - !*** ./node_modules/d3-color/src/index.js ***! - \********************************************/ -/*! exports provided: color, rgb, hsl, lab, hcl, lch, gray, cubehelix */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./color.js */"./node_modules/d3-color/src/color.js");n.d(t,"color",(function(){return r.default})),n.d(t,"rgb",(function(){return r.rgb})),n.d(t,"hsl",(function(){return r.hsl}));var o=n(/*! ./lab.js */"./node_modules/d3-color/src/lab.js");n.d(t,"lab",(function(){return o.default})),n.d(t,"hcl",(function(){return o.hcl})),n.d(t,"lch",(function(){return o.lch})),n.d(t,"gray",(function(){return o.gray}));var i=n(/*! ./cubehelix.js */"./node_modules/d3-color/src/cubehelix.js");n.d(t,"cubehelix",(function(){return i.default}))},"./node_modules/d3-color/src/lab.js": -/*!******************************************!*\ - !*** ./node_modules/d3-color/src/lab.js ***! - \******************************************/ -/*! exports provided: gray, default, Lab, lch, hcl, Hcl */function(e,t,n){"use strict";n.r(t),n.d(t,"gray",(function(){return u})),n.d(t,"default",(function(){return d})),n.d(t,"Lab",(function(){return l})),n.d(t,"lch",(function(){return y})),n.d(t,"hcl",(function(){return b})),n.d(t,"Hcl",(function(){return _}));var r=n(/*! ./define.js */"./node_modules/d3-color/src/define.js"),o=n(/*! ./color.js */"./node_modules/d3-color/src/color.js"),i=n(/*! ./math.js */"./node_modules/d3-color/src/math.js"),s=6/29,a=3*s*s;function c(e){if(e instanceof l)return new l(e.l,e.a,e.b,e.opacity);if(e instanceof _)return v(e);e instanceof o.Rgb||(e=Object(o.rgbConvert)(e));var t,n,r=m(e.r),i=m(e.g),s=m(e.b),a=f((.2225045*r+.7168786*i+.0606169*s)/1);return r===i&&i===s?t=n=a:(t=f((.4360747*r+.3850649*i+.1430804*s)/.96422),n=f((.0139322*r+.0971045*i+.7141733*s)/.82521)),new l(116*a-16,500*(t-a),200*(a-n),e.opacity)}function u(e,t){return new l(e,0,0,null==t?1:t)}function d(e,t,n,r){return 1===arguments.length?c(e):new l(e,t,n,null==r?1:r)}function l(e,t,n,r){this.l=+e,this.a=+t,this.b=+n,this.opacity=+r}function f(e){return e>.008856451679035631?Math.pow(e,1/3):e/a+4/29}function h(e){return e>s?e*e*e:a*(e-4/29)}function p(e){return 255*(e<=.0031308?12.92*e:1.055*Math.pow(e,1/2.4)-.055)}function m(e){return(e/=255)<=.04045?e/12.92:Math.pow((e+.055)/1.055,2.4)}function g(e){if(e instanceof _)return new _(e.h,e.c,e.l,e.opacity);if(e instanceof l||(e=c(e)),0===e.a&&0===e.b)return new _(NaN,0=n&&(a>=i&&(c-=e.data[a-i+s*r]),t.data[a-n+s*r]=c/Math.min(a+1,r-1+i-a,i))}function o(e,t,n){for(var r=e.width,o=e.height,i=1+(n<<1),s=0;s=n&&(a>=i&&(c-=e.data[s+(a-i)*r]),t.data[s+(a-n)*r]=c/Math.min(a+1,o-1+i-a,i))}n.r(t),n.d(t,"blurX",(function(){return r})),n.d(t,"blurY",(function(){return o}))},"./node_modules/d3-contour/src/constant.js": -/*!*************************************************!*\ - !*** ./node_modules/d3-contour/src/constant.js ***! - \*************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(e){return function(){return e}}},"./node_modules/d3-contour/src/contains.js": -/*!*************************************************!*\ - !*** ./node_modules/d3-contour/src/contains.js ***! - \*************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";function r(e,t){for(var n=t[0],r=t[1],i=-1,s=0,a=e.length,c=a-1;sr!=p>r&&n<(h-d)*(r-l)/(p-l)+d&&(i=-i)}return i}function o(e,t,n){var r,o,i,s;return function(e,t,n){return(t[0]-e[0])*(n[1]-e[1])==(n[0]-e[0])*(t[1]-e[1])}(e,t,n)&&(o=e[r=+(e[0]===t[0])],i=n[r],s=t[r],o<=i&&i<=s||s<=i&&i<=o)}n.r(t),t.default=function(e,t){for(var n,o=-1,i=t.length;++o=r,d[c<<1].forEach(m);++i=r,d[a|c<<1].forEach(m);for(d[c<<0].forEach(m);++s=r,u=n[s*e]>=r,d[c<<1|u<<2].forEach(m);++i=r,l=u,u=n[s*e+i+1]>=r,d[a|c<<1|u<<2|l<<3].forEach(m);d[c|u<<3].forEach(m)}for(i=-1,u=n[s*e]>=r,d[u<<2].forEach(m);++i=r,d[u<<2|l<<3].forEach(m);function m(e){var t,n,r=[e[0][0]+i,e[0][1]+s],a=[e[1][0]+i,e[1][1]+s],c=p(r),u=p(a);(t=h[c])?(n=f[u])?(delete h[t.end],delete f[n.start],t===n?(t.ring.push(a),o(t.ring)):f[t.start]=h[n.end]={start:t.start,end:n.end,ring:t.ring.concat(n.ring)}):(delete h[t.end],t.ring.push(a),h[t.end=u]=t):(t=f[u])?(n=h[c])?(delete f[t.start],delete h[n.end],t===n?(t.ring.push(a),o(t.ring)):f[n.start]=h[t.end]={start:n.start,end:t.end,ring:n.ring.concat(t.ring)}):(delete f[t.start],t.ring.unshift(r),f[t.start=c]=t):f[c]=h[u]={start:c,end:u,ring:[r,a]}}d[u<<3].forEach(m)}(n,r,(function(e){l(e,n,r),Object(s.default)(e)>0?o.push([e]):i.push(e)})),i.forEach((function(e){for(var t,n=0,r=o.length;n0&&s0&&a0&&o>0))throw new Error("invalid size");return e=r,t=o,f},f.thresholds=function(e){return arguments.length?(n="function"==typeof e?e:Array.isArray(e)?Object(a.default)(o.slice.call(e)):Object(a.default)(e),f):n},f.smooth=function(e){return arguments.length?(l=e?m:u.default,f):l===m},f}},"./node_modules/d3-contour/src/density.js": -/*!************************************************!*\ - !*** ./node_modules/d3-contour/src/density.js ***! - \************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! d3-array */"./node_modules/d3-array/src/index.js"),o=n(/*! ./array */"./node_modules/d3-contour/src/array.js"),i=n(/*! ./blur */"./node_modules/d3-contour/src/blur.js"),s=n(/*! ./constant */"./node_modules/d3-contour/src/constant.js"),a=n(/*! ./contours */"./node_modules/d3-contour/src/contours.js");function c(e){return e[0]}function u(e){return e[1]}function d(){return 1}t.default=function(){var e=c,t=u,n=d,l=960,f=500,h=20,p=2,m=3*h,g=l+2*m>>p,y=f+2*m>>p,b=Object(s.default)(20);function _(o){var s=new Float32Array(g*y),c=new Float32Array(g*y);o.forEach((function(r,o,i){var a=+e(r,o,i)+m>>p,c=+t(r,o,i)+m>>p,u=+n(r,o,i);a>=0&&a=0&&c>p),Object(i.blurY)({width:g,height:y,data:c},{width:g,height:y,data:s},h>>p),Object(i.blurX)({width:g,height:y,data:s},{width:g,height:y,data:c},h>>p),Object(i.blurY)({width:g,height:y,data:c},{width:g,height:y,data:s},h>>p),Object(i.blurX)({width:g,height:y,data:s},{width:g,height:y,data:c},h>>p),Object(i.blurY)({width:g,height:y,data:c},{width:g,height:y,data:s},h>>p);var u=b(s);if(!Array.isArray(u)){var d=Object(r.max)(s);u=Object(r.tickStep)(0,d,u),(u=Object(r.range)(0,Math.floor(d/u)*u,u)).shift()}return Object(a.default)().thresholds(u).size([g,y])(s).map(v)}function v(e){return e.value*=Math.pow(2,-2*p),e.coordinates.forEach(j),e}function j(e){e.forEach(x)}function x(e){e.forEach(k)}function k(e){e[0]=e[0]*Math.pow(2,p)-m,e[1]=e[1]*Math.pow(2,p)-m}function w(){return g=l+2*(m=3*h)>>p,y=f+2*m>>p,_}return _.x=function(t){return arguments.length?(e="function"==typeof t?t:Object(s.default)(+t),_):e},_.y=function(e){return arguments.length?(t="function"==typeof e?e:Object(s.default)(+e),_):t},_.weight=function(e){return arguments.length?(n="function"==typeof e?e:Object(s.default)(+e),_):n},_.size=function(e){if(!arguments.length)return[l,f];var t=Math.ceil(e[0]),n=Math.ceil(e[1]);if(!(t>=0||t>=0))throw new Error("invalid size");return l=t,f=n,w()},_.cellSize=function(e){if(!arguments.length)return 1<=1))throw new Error("invalid cell size");return p=Math.floor(Math.log(e)/Math.LN2),w()},_.thresholds=function(e){return arguments.length?(b="function"==typeof e?e:Array.isArray(e)?Object(s.default)(o.slice.call(e)):Object(s.default)(e),_):b},_.bandwidth=function(e){if(!arguments.length)return Math.sqrt(h*(h+1));if(!((e=+e)>=0))throw new Error("invalid bandwidth");return h=Math.round((Math.sqrt(4*e*e+1)-1)/2),w()},_}},"./node_modules/d3-contour/src/index.js": -/*!**********************************************!*\ - !*** ./node_modules/d3-contour/src/index.js ***! - \**********************************************/ -/*! exports provided: contours, contourDensity */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./contours */"./node_modules/d3-contour/src/contours.js");n.d(t,"contours",(function(){return r.default}));var o=n(/*! ./density */"./node_modules/d3-contour/src/density.js");n.d(t,"contourDensity",(function(){return o.default}))},"./node_modules/d3-contour/src/noop.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-contour/src/noop.js ***! - \*********************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(){}},"./node_modules/d3-dispatch/src/dispatch.js": -/*!**************************************************!*\ - !*** ./node_modules/d3-dispatch/src/dispatch.js ***! - \**************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r={value:function(){}};function o(){for(var e,t=0,n=arguments.length,r={};t=0&&(n=e.slice(r+1),e=e.slice(0,r)),e&&!t.hasOwnProperty(e))throw new Error("unknown type: "+e);return{type:e,name:n}}))}function a(e,t){for(var n,r=0,o=e.length;r0)for(var n,r,o=new Array(n),i=0;ij}b.mouse("drag")}function O(){Object(o.select)(o.event.view).on("mousemove.drag mouseup.drag",null),Object(i.yesdrag)(o.event.view,n),Object(s.default)(),b.mouse("end")}function C(){if(p.apply(this,arguments)){var e,t,n=o.event.changedTouches,r=m.apply(this,arguments),i=n.length;for(e=0;e9999?"+"+a(t,6):a(t,4))+"-"+a(e.getUTCMonth()+1,2)+"-"+a(e.getUTCDate(),2)+(i?"T"+a(n,2)+":"+a(r,2)+":"+a(o,2)+"."+a(i,3)+"Z":o?"T"+a(n,2)+":"+a(r,2)+":"+a(o,2)+"Z":r||n?"T"+a(n,2)+":"+a(r,2)+"Z":"")}t.default=function(e){var t=new RegExp('["'+e+"\n\r]"),n=e.charCodeAt(0);function a(e,t){var i,s=[],a=e.length,c=0,u=0,d=a<=0,l=!1;function f(){if(d)return o;if(l)return l=!1,r;var t,i,s=c;if(34===e.charCodeAt(s)){for(;c++=a?d=!0:10===(i=e.charCodeAt(c++))?l=!0:13===i&&(l=!0,10===e.charCodeAt(c)&&++c),e.slice(s+1,t-1).replace(/""/g,'"')}for(;cf+u||rh+u||id.index){var l=f-s.x-s.vx,g=h-s.y-s.vy,y=l*l+g*g;ye.r&&(e.r=e[t].r)}function f(){if(t){var r,o,i=t.length;for(n=new Array(i),r=0;r=d)){(e.data!==t||e.next)&&(0===c&&(p+=(c=Object(o.default)())*c),0===f&&(p+=(f=Object(o.default)())*f),p1?(null==n?l.remove(e):l.set(e,y(n)),t):l.get(e)},find:function(t,n,r){var o,i,s,a,c,u=0,d=e.length;for(null==r?r=1/0:r*=r,u=0;u1?(h.on(e,n),t):h.on(e)}}}},"./node_modules/d3-force/src/x.js": -/*!****************************************!*\ - !*** ./node_modules/d3-force/src/x.js ***! - \****************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./constant */"./node_modules/d3-force/src/constant.js");t.default=function(e){var t,n,o,i=Object(r.default)(.1);function s(e){for(var r,i=0,s=t.length;i1?r[0]+r.slice(2):r,+e.slice(n+1)]}},"./node_modules/d3-format/src/formatGroup.js": -/*!***************************************************!*\ - !*** ./node_modules/d3-format/src/formatGroup.js ***! - \***************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(e,t){return function(n,r){for(var o=n.length,i=[],s=0,a=e[0],c=0;o>0&&a>0&&(c+a+1>r&&(a=Math.max(1,r-c)),i.push(n.substring(o-=a,o+a)),!((c+=a+1)>r));)a=e[s=(s+1)%e.length];return i.reverse().join(t)}}},"./node_modules/d3-format/src/formatNumerals.js": -/*!******************************************************!*\ - !*** ./node_modules/d3-format/src/formatNumerals.js ***! - \******************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(e){return function(t){return t.replace(/[0-9]/g,(function(t){return e[+t]}))}}},"./node_modules/d3-format/src/formatPrefixAuto.js": -/*!********************************************************!*\ - !*** ./node_modules/d3-format/src/formatPrefixAuto.js ***! - \********************************************************/ -/*! exports provided: prefixExponent, default */function(e,t,n){"use strict";n.r(t),n.d(t,"prefixExponent",(function(){return r}));var r,o=n(/*! ./formatDecimal.js */"./node_modules/d3-format/src/formatDecimal.js");t.default=function(e,t){var n=Object(o.default)(e,t);if(!n)return e+"";var i=n[0],s=n[1],a=s-(r=3*Math.max(-8,Math.min(8,Math.floor(s/3))))+1,c=i.length;return a===c?i:a>c?i+new Array(a-c+1).join("0"):a>0?i.slice(0,a)+"."+i.slice(a):"0."+new Array(1-a).join("0")+Object(o.default)(e,Math.max(0,t+a-1))[0]}},"./node_modules/d3-format/src/formatRounded.js": -/*!*****************************************************!*\ - !*** ./node_modules/d3-format/src/formatRounded.js ***! - \*****************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./formatDecimal.js */"./node_modules/d3-format/src/formatDecimal.js");t.default=function(e,t){var n=Object(r.default)(e,t);if(!n)return e+"";var o=n[0],i=n[1];return i<0?"0."+new Array(-i).join("0")+o:o.length>i+1?o.slice(0,i+1)+"."+o.slice(i+1):o+new Array(i-o.length+2).join("0")}},"./node_modules/d3-format/src/formatSpecifier.js": -/*!*******************************************************!*\ - !*** ./node_modules/d3-format/src/formatSpecifier.js ***! - \*******************************************************/ -/*! exports provided: default, FormatSpecifier */function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return o})),n.d(t,"FormatSpecifier",(function(){return i}));var r=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function o(e){if(!(t=r.exec(e)))throw new Error("invalid format: "+e);var t;return new i({fill:t[1],align:t[2],sign:t[3],symbol:t[4],zero:t[5],width:t[6],comma:t[7],precision:t[8]&&t[8].slice(1),trim:t[9],type:t[10]})}function i(e){this.fill=void 0===e.fill?" ":e.fill+"",this.align=void 0===e.align?">":e.align+"",this.sign=void 0===e.sign?"-":e.sign+"",this.symbol=void 0===e.symbol?"":e.symbol+"",this.zero=!!e.zero,this.width=void 0===e.width?void 0:+e.width,this.comma=!!e.comma,this.precision=void 0===e.precision?void 0:+e.precision,this.trim=!!e.trim,this.type=void 0===e.type?"":e.type+""}o.prototype=i.prototype,i.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type}},"./node_modules/d3-format/src/formatTrim.js": -/*!**************************************************!*\ - !*** ./node_modules/d3-format/src/formatTrim.js ***! - \**************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(e){e:for(var t,n=e.length,r=1,o=-1;r0&&(o=0)}return o>0?e.slice(0,o)+e.slice(t+1):e}},"./node_modules/d3-format/src/formatTypes.js": -/*!***************************************************!*\ - !*** ./node_modules/d3-format/src/formatTypes.js ***! - \***************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./formatPrefixAuto.js */"./node_modules/d3-format/src/formatPrefixAuto.js"),o=n(/*! ./formatRounded.js */"./node_modules/d3-format/src/formatRounded.js");t.default={"%":function(e,t){return(100*e).toFixed(t)},b:function(e){return Math.round(e).toString(2)},c:function(e){return e+""},d:function(e){return Math.round(e).toString(10)},e:function(e,t){return e.toExponential(t)},f:function(e,t){return e.toFixed(t)},g:function(e,t){return e.toPrecision(t)},o:function(e){return Math.round(e).toString(8)},p:function(e,t){return Object(o.default)(100*e,t)},r:o.default,s:r.default,X:function(e){return Math.round(e).toString(16).toUpperCase()},x:function(e){return Math.round(e).toString(16)}}},"./node_modules/d3-format/src/identity.js": -/*!************************************************!*\ - !*** ./node_modules/d3-format/src/identity.js ***! - \************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(e){return e}},"./node_modules/d3-format/src/index.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-format/src/index.js ***! - \*********************************************/ -/*! exports provided: formatDefaultLocale, format, formatPrefix, formatLocale, formatSpecifier, FormatSpecifier, precisionFixed, precisionPrefix, precisionRound */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./defaultLocale.js */"./node_modules/d3-format/src/defaultLocale.js");n.d(t,"formatDefaultLocale",(function(){return r.default})),n.d(t,"format",(function(){return r.format})),n.d(t,"formatPrefix",(function(){return r.formatPrefix}));var o=n(/*! ./locale.js */"./node_modules/d3-format/src/locale.js");n.d(t,"formatLocale",(function(){return o.default}));var i=n(/*! ./formatSpecifier.js */"./node_modules/d3-format/src/formatSpecifier.js");n.d(t,"formatSpecifier",(function(){return i.default})),n.d(t,"FormatSpecifier",(function(){return i.FormatSpecifier}));var s=n(/*! ./precisionFixed.js */"./node_modules/d3-format/src/precisionFixed.js");n.d(t,"precisionFixed",(function(){return s.default}));var a=n(/*! ./precisionPrefix.js */"./node_modules/d3-format/src/precisionPrefix.js");n.d(t,"precisionPrefix",(function(){return a.default}));var c=n(/*! ./precisionRound.js */"./node_modules/d3-format/src/precisionRound.js");n.d(t,"precisionRound",(function(){return c.default}))},"./node_modules/d3-format/src/locale.js": -/*!**********************************************!*\ - !*** ./node_modules/d3-format/src/locale.js ***! - \**********************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./exponent.js */"./node_modules/d3-format/src/exponent.js"),o=n(/*! ./formatGroup.js */"./node_modules/d3-format/src/formatGroup.js"),i=n(/*! ./formatNumerals.js */"./node_modules/d3-format/src/formatNumerals.js"),s=n(/*! ./formatSpecifier.js */"./node_modules/d3-format/src/formatSpecifier.js"),a=n(/*! ./formatTrim.js */"./node_modules/d3-format/src/formatTrim.js"),c=n(/*! ./formatTypes.js */"./node_modules/d3-format/src/formatTypes.js"),u=n(/*! ./formatPrefixAuto.js */"./node_modules/d3-format/src/formatPrefixAuto.js"),d=n(/*! ./identity.js */"./node_modules/d3-format/src/identity.js"),l=Array.prototype.map,f=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];t.default=function(e){var t=void 0===e.grouping||void 0===e.thousands?d.default:Object(o.default)(l.call(e.grouping,Number),e.thousands+""),n=void 0===e.currency?"":e.currency[0]+"",h=void 0===e.currency?"":e.currency[1]+"",p=void 0===e.decimal?".":e.decimal+"",m=void 0===e.numerals?d.default:Object(i.default)(l.call(e.numerals,String)),g=void 0===e.percent?"%":e.percent+"",y=void 0===e.minus?"-":e.minus+"",b=void 0===e.nan?"NaN":e.nan+"";function _(e){var r=(e=Object(s.default)(e)).fill,o=e.align,i=e.sign,d=e.symbol,l=e.zero,_=e.width,v=e.comma,j=e.precision,x=e.trim,k=e.type;"n"===k?(v=!0,k="g"):c.default[k]||(void 0===j&&(j=12),x=!0,k="g"),(l||"0"===r&&"="===o)&&(l=!0,r="0",o="=");var w="$"===d?n:"#"===d&&/[boxX]/.test(k)?"0"+k.toLowerCase():"",O="$"===d?h:/[%p]/.test(k)?g:"",C=c.default[k],E=/[defgprs%]/.test(k);function T(e){var n,s,c,d=w,h=O;if("c"===k)h=C(e)+h,e="";else{var g=(e=+e)<0;if(e=isNaN(e)?b:C(Math.abs(e),j),x&&(e=Object(a.default)(e)),g&&0==+e&&(g=!1),d=(g?"("===i?i:y:"-"===i||"("===i?"":i)+d,h=("s"===k?f[8+u.prefixExponent/3]:"")+h+(g&&"("===i?")":""),E)for(n=-1,s=e.length;++n(c=e.charCodeAt(n))||c>57){h=(46===c?p+e.slice(n+1):e.slice(n))+h,e=e.slice(0,n);break}}v&&!l&&(e=t(e,1/0));var T=d.length+e.length+h.length,S=T<_?new Array(_-T+1).join(r):"";switch(v&&l&&(e=t(S+e,S.length?_-h.length:1/0),S=""),o){case"<":e=d+e+h+S;break;case"=":e=d+S+e+h;break;case"^":e=S.slice(0,T=S.length>>1)+d+e+h+S.slice(T);break;default:e=S+d+e+h}return m(e)}return j=void 0===j?6:/[gprs]/.test(k)?Math.max(1,Math.min(21,j)):Math.max(0,Math.min(20,j)),T.toString=function(){return e+""},T}return{format:_,formatPrefix:function(e,t){var n=_(((e=Object(s.default)(e)).type="f",e)),o=3*Math.max(-8,Math.min(8,Math.floor(Object(r.default)(t)/3))),i=Math.pow(10,-o),a=f[8+o/3];return function(e){return n(i*e)+a}}}}},"./node_modules/d3-format/src/precisionFixed.js": -/*!******************************************************!*\ - !*** ./node_modules/d3-format/src/precisionFixed.js ***! - \******************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./exponent.js */"./node_modules/d3-format/src/exponent.js");t.default=function(e){return Math.max(0,-Object(r.default)(Math.abs(e)))}},"./node_modules/d3-format/src/precisionPrefix.js": -/*!*******************************************************!*\ - !*** ./node_modules/d3-format/src/precisionPrefix.js ***! - \*******************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./exponent.js */"./node_modules/d3-format/src/exponent.js");t.default=function(e,t){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(Object(r.default)(t)/3)))-Object(r.default)(Math.abs(e)))}},"./node_modules/d3-format/src/precisionRound.js": -/*!******************************************************!*\ - !*** ./node_modules/d3-format/src/precisionRound.js ***! - \******************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./exponent.js */"./node_modules/d3-format/src/exponent.js");t.default=function(e,t){return e=Math.abs(e),t=Math.abs(t)-e,Math.max(0,Object(r.default)(t)-Object(r.default)(e))+1}},"./node_modules/d3-geo/src/adder.js": -/*!******************************************!*\ - !*** ./node_modules/d3-geo/src/adder.js ***! - \******************************************/ -/*! exports provided: default */function(e,t,n){"use strict";function r(){this.reset()}n.r(t),t.default=function(){return new r},r.prototype={constructor:r,reset:function(){this.s=this.t=0},add:function(e){i(o,e,this.t),i(this,o.s,this.s),this.s?this.t+=o.t:this.s=o.t},valueOf:function(){return this.s}};var o=new r;function i(e,t,n){var r=e.s=t+n,o=r-t,i=r-o;e.t=t-i+(n-o)}},"./node_modules/d3-geo/src/area.js": -/*!*****************************************!*\ - !*** ./node_modules/d3-geo/src/area.js ***! - \*****************************************/ -/*! exports provided: areaRingSum, areaStream, default */function(e,t,n){"use strict";n.r(t),n.d(t,"areaRingSum",(function(){return f})),n.d(t,"areaStream",(function(){return p}));var r,o,i,s,a,c=n(/*! ./adder.js */"./node_modules/d3-geo/src/adder.js"),u=n(/*! ./math.js */"./node_modules/d3-geo/src/math.js"),d=n(/*! ./noop.js */"./node_modules/d3-geo/src/noop.js"),l=n(/*! ./stream.js */"./node_modules/d3-geo/src/stream.js"),f=Object(c.default)(),h=Object(c.default)(),p={point:d.default,lineStart:d.default,lineEnd:d.default,polygonStart:function(){f.reset(),p.lineStart=m,p.lineEnd=g},polygonEnd:function(){var e=+f;h.add(e<0?u.tau+e:e),this.lineStart=this.lineEnd=this.point=d.default},sphere:function(){h.add(u.tau)}};function m(){p.point=y}function g(){b(r,o)}function y(e,t){p.point=b,r=e,o=t,e*=u.radians,t*=u.radians,i=e,s=Object(u.cos)(t=t/2+u.quarterPi),a=Object(u.sin)(t)}function b(e,t){e*=u.radians,t=(t*=u.radians)/2+u.quarterPi;var n=e-i,r=n>=0?1:-1,o=r*n,c=Object(u.cos)(t),d=Object(u.sin)(t),l=a*d,h=s*c+l*Object(u.cos)(o),p=l*r*Object(u.sin)(o);f.add(Object(u.atan2)(p,h)),i=e,s=c,a=d}t.default=function(e){return h.reset(),Object(l.default)(e,p),2*h}},"./node_modules/d3-geo/src/bounds.js": -/*!*******************************************!*\ - !*** ./node_modules/d3-geo/src/bounds.js ***! - \*******************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r,o,i,s,a,c,u,d,l,f,h=n(/*! ./adder.js */"./node_modules/d3-geo/src/adder.js"),p=n(/*! ./area.js */"./node_modules/d3-geo/src/area.js"),m=n(/*! ./cartesian.js */"./node_modules/d3-geo/src/cartesian.js"),g=n(/*! ./math.js */"./node_modules/d3-geo/src/math.js"),y=n(/*! ./stream.js */"./node_modules/d3-geo/src/stream.js"),b=Object(h.default)(),_={point:v,lineStart:x,lineEnd:k,polygonStart:function(){_.point=w,_.lineStart=O,_.lineEnd=C,b.reset(),p.areaStream.polygonStart()},polygonEnd:function(){p.areaStream.polygonEnd(),_.point=v,_.lineStart=x,_.lineEnd=k,p.areaRingSum<0?(r=-(i=180),o=-(s=90)):b>g.epsilon?s=90:b<-g.epsilon&&(o=-90),f[0]=r,f[1]=i},sphere:function(){r=-(i=180),o=-(s=90)}};function v(e,t){l.push(f=[r=e,i=e]),ts&&(s=t)}function j(e,t){var n=Object(m.cartesian)([e*g.radians,t*g.radians]);if(d){var c=Object(m.cartesianCross)(d,n),u=[c[1],-c[0],0],h=Object(m.cartesianCross)(u,c);Object(m.cartesianNormalizeInPlace)(h),h=Object(m.spherical)(h);var p,y=e-a,b=y>0?1:-1,_=h[0]*g.degrees*b,v=Object(g.abs)(y)>180;v^(b*a<_&&_s&&(s=p):v^(b*a<(_=(_+360)%360-180)&&_s&&(s=t)),v?eE(r,i)&&(i=e):E(e,i)>E(r,i)&&(r=e):i>=r?(ei&&(i=e)):e>a?E(r,e)>E(r,i)&&(i=e):E(e,i)>E(r,i)&&(r=e)}else l.push(f=[r=e,i=e]);ts&&(s=t),d=n,a=e}function x(){_.point=j}function k(){f[0]=r,f[1]=i,_.point=v,d=null}function w(e,t){if(d){var n=e-a;b.add(Object(g.abs)(n)>180?n+(n>0?360:-360):n)}else c=e,u=t;p.areaStream.point(e,t),j(e,t)}function O(){p.areaStream.lineStart()}function C(){w(c,u),p.areaStream.lineEnd(),Object(g.abs)(b)>g.epsilon&&(r=-(i=180)),f[0]=r,f[1]=i,d=null}function E(e,t){return(t-=e)<0?t+360:t}function T(e,t){return e[0]-t[0]}function S(e,t){return e[0]<=e[1]?e[0]<=t&&t<=e[1]:tE(a[0],a[1])&&(a[1]=c[1]),E(c[0],a[1])>E(a[0],a[1])&&(a[0]=c[0])):u.push(a=c);for(d=-1/0,t=0,a=u[n=u.length-1];t<=n;a=c,++t)c=u[t],(h=E(a[1],c[0]))>d&&(d=h,r=c[0],i=a[1])}return l=f=null,r===1/0||o===1/0?[[NaN,NaN],[NaN,NaN]]:[[r,o],[i,s]]}},"./node_modules/d3-geo/src/cartesian.js": -/*!**********************************************!*\ - !*** ./node_modules/d3-geo/src/cartesian.js ***! - \**********************************************/ -/*! exports provided: spherical, cartesian, cartesianDot, cartesianCross, cartesianAddInPlace, cartesianScale, cartesianNormalizeInPlace */function(e,t,n){"use strict";n.r(t),n.d(t,"spherical",(function(){return o})),n.d(t,"cartesian",(function(){return i})),n.d(t,"cartesianDot",(function(){return s})),n.d(t,"cartesianCross",(function(){return a})),n.d(t,"cartesianAddInPlace",(function(){return c})),n.d(t,"cartesianScale",(function(){return u})),n.d(t,"cartesianNormalizeInPlace",(function(){return d}));var r=n(/*! ./math.js */"./node_modules/d3-geo/src/math.js");function o(e){return[Object(r.atan2)(e[1],e[0]),Object(r.asin)(e[2])]}function i(e){var t=e[0],n=e[1],o=Object(r.cos)(n);return[o*Object(r.cos)(t),o*Object(r.sin)(t),Object(r.sin)(n)]}function s(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function a(e,t){return[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]]}function c(e,t){e[0]+=t[0],e[1]+=t[1],e[2]+=t[2]}function u(e,t){return[e[0]*t,e[1]*t,e[2]*t]}function d(e){var t=Object(r.sqrt)(e[0]*e[0]+e[1]*e[1]+e[2]*e[2]);e[0]/=t,e[1]/=t,e[2]/=t}},"./node_modules/d3-geo/src/centroid.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-geo/src/centroid.js ***! - \*********************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r,o,i,s,a,c,u,d,l,f,h,p,m,g,y,b,_=n(/*! ./math.js */"./node_modules/d3-geo/src/math.js"),v=n(/*! ./noop.js */"./node_modules/d3-geo/src/noop.js"),j=n(/*! ./stream.js */"./node_modules/d3-geo/src/stream.js"),x={sphere:v.default,point:k,lineStart:O,lineEnd:T,polygonStart:function(){x.lineStart=S,x.lineEnd=A},polygonEnd:function(){x.lineStart=O,x.lineEnd=T}};function k(e,t){e*=_.radians,t*=_.radians;var n=Object(_.cos)(t);w(n*Object(_.cos)(e),n*Object(_.sin)(e),Object(_.sin)(t))}function w(e,t,n){++r,i+=(e-i)/r,s+=(t-s)/r,a+=(n-a)/r}function O(){x.point=C}function C(e,t){e*=_.radians,t*=_.radians;var n=Object(_.cos)(t);g=n*Object(_.cos)(e),y=n*Object(_.sin)(e),b=Object(_.sin)(t),x.point=E,w(g,y,b)}function E(e,t){e*=_.radians,t*=_.radians;var n=Object(_.cos)(t),r=n*Object(_.cos)(e),i=n*Object(_.sin)(e),s=Object(_.sin)(t),a=Object(_.atan2)(Object(_.sqrt)((a=y*s-b*i)*a+(a=b*r-g*s)*a+(a=g*i-y*r)*a),g*r+y*i+b*s);o+=a,c+=a*(g+(g=r)),u+=a*(y+(y=i)),d+=a*(b+(b=s)),w(g,y,b)}function T(){x.point=k}function S(){x.point=M}function A(){D(p,m),x.point=k}function M(e,t){p=e,m=t,e*=_.radians,t*=_.radians,x.point=D;var n=Object(_.cos)(t);g=n*Object(_.cos)(e),y=n*Object(_.sin)(e),b=Object(_.sin)(t),w(g,y,b)}function D(e,t){e*=_.radians,t*=_.radians;var n=Object(_.cos)(t),r=n*Object(_.cos)(e),i=n*Object(_.sin)(e),s=Object(_.sin)(t),a=y*s-b*i,p=b*r-g*s,m=g*i-y*r,v=Object(_.sqrt)(a*a+p*p+m*m),j=Object(_.asin)(v),x=v&&-j/v;l+=x*a,f+=x*p,h+=x*m,o+=j,c+=j*(g+(g=r)),u+=j*(y+(y=i)),d+=j*(b+(b=s)),w(g,y,b)}t.default=function(e){r=o=i=s=a=c=u=d=l=f=h=0,Object(j.default)(e,x);var t=l,n=f,p=h,m=t*t+n*n+p*p;return m<_.epsilon2&&(t=c,n=u,p=d,o<_.epsilon&&(t=i,n=s,p=a),(m=t*t+n*n+p*p)<_.epsilon2)?[NaN,NaN]:[Object(_.atan2)(n,t)*_.degrees,Object(_.asin)(p/Object(_.sqrt)(m))*_.degrees]}},"./node_modules/d3-geo/src/circle.js": -/*!*******************************************!*\ - !*** ./node_modules/d3-geo/src/circle.js ***! - \*******************************************/ -/*! exports provided: circleStream, default */function(e,t,n){"use strict";n.r(t),n.d(t,"circleStream",(function(){return a}));var r=n(/*! ./cartesian.js */"./node_modules/d3-geo/src/cartesian.js"),o=n(/*! ./constant.js */"./node_modules/d3-geo/src/constant.js"),i=n(/*! ./math.js */"./node_modules/d3-geo/src/math.js"),s=n(/*! ./rotation.js */"./node_modules/d3-geo/src/rotation.js");function a(e,t,n,o,s,a){if(n){var u=Object(i.cos)(t),d=Object(i.sin)(t),l=o*n;null==s?(s=t+o*i.tau,a=t-l/2):(s=c(u,s),a=c(u,a),(o>0?sa)&&(s+=o*i.tau));for(var f,h=s;o>0?h>a:h0?o.pi:-o.pi,u=Object(o.abs)(s-n);Object(o.abs)(u-o.pi)0?o.halfPi:-o.halfPi),e.point(i,r),e.lineEnd(),e.lineStart(),e.point(c,r),e.point(s,r),t=0):i!==c&&u>=o.pi&&(Object(o.abs)(n-i)o.epsilon?Object(o.atan)((Object(o.sin)(t)*(s=Object(o.cos)(r))*Object(o.sin)(n)-Object(o.sin)(r)*(i=Object(o.cos)(t))*Object(o.sin)(e))/(i*s*a)):(t+r)/2}(n,r,s,a),e.point(i,r),e.lineEnd(),e.lineStart(),e.point(c,r),t=0),e.point(n=s,r=a),i=c},lineEnd:function(){e.lineEnd(),n=r=NaN},clean:function(){return 2-t}}}),(function(e,t,n,r){var i;if(null==e)i=n*o.halfPi,r.point(-o.pi,i),r.point(0,i),r.point(o.pi,i),r.point(o.pi,0),r.point(o.pi,-i),r.point(0,-i),r.point(-o.pi,-i),r.point(-o.pi,0),r.point(-o.pi,i);else if(Object(o.abs)(e[0]-t[0])>o.epsilon){var s=e[0]1&&t.push(t.pop().concat(t.shift()))},result:function(){var n=t;return t=[],e=null,n}}}},"./node_modules/d3-geo/src/clip/circle.js": -/*!************************************************!*\ - !*** ./node_modules/d3-geo/src/clip/circle.js ***! - \************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ../cartesian.js */"./node_modules/d3-geo/src/cartesian.js"),o=n(/*! ../circle.js */"./node_modules/d3-geo/src/circle.js"),i=n(/*! ../math.js */"./node_modules/d3-geo/src/math.js"),s=n(/*! ../pointEqual.js */"./node_modules/d3-geo/src/pointEqual.js"),a=n(/*! ./index.js */"./node_modules/d3-geo/src/clip/index.js");t.default=function(e){var t=Object(i.cos)(e),n=6*i.radians,c=t>0,u=Object(i.abs)(t)>i.epsilon;function d(e,n){return Object(i.cos)(e)*Object(i.cos)(n)>t}function l(e,n,o){var s=Object(r.cartesian)(e),a=Object(r.cartesian)(n),c=[1,0,0],u=Object(r.cartesianCross)(s,a),d=Object(r.cartesianDot)(u,u),l=u[0],f=d-l*l;if(!f)return!o&&e;var h=t*d/f,p=-t*l/f,m=Object(r.cartesianCross)(c,u),g=Object(r.cartesianScale)(c,h),y=Object(r.cartesianScale)(u,p);Object(r.cartesianAddInPlace)(g,y);var b=m,_=Object(r.cartesianDot)(g,b),v=Object(r.cartesianDot)(b,b),j=_*_-v*(Object(r.cartesianDot)(g,g)-1);if(!(j<0)){var x=Object(i.sqrt)(j),k=Object(r.cartesianScale)(b,(-_-x)/v);if(Object(r.cartesianAddInPlace)(k,g),k=Object(r.spherical)(k),!o)return k;var w,O=e[0],C=n[0],E=e[1],T=n[1];C0^k[1]<(Object(i.abs)(k[0]-O)i.pi^(O<=k[0]&&k[0]<=C)){var M=Object(r.cartesianScale)(b,(-_+x)/v);return Object(r.cartesianAddInPlace)(M,g),[k,Object(r.spherical)(M)]}}}function f(t,n){var r=c?e:i.pi-e,o=0;return t<-r?o|=1:t>r&&(o|=2),n<-r?o|=4:n>r&&(o|=8),o}return Object(a.default)(d,(function(e){var t,n,r,o,a;return{lineStart:function(){o=r=!1,a=1},point:function(h,p){var m,g=[h,p],y=d(h,p),b=c?y?0:f(h,p):y?f(h+(h<0?i.pi:-i.pi),p):0;if(!t&&(o=r=y)&&e.lineStart(),y!==r&&(!(m=l(t,g))||Object(s.default)(t,m)||Object(s.default)(g,m))&&(g[0]+=i.epsilon,g[1]+=i.epsilon,y=d(g[0],g[1])),y!==r)a=0,y?(e.lineStart(),m=l(g,t),e.point(m[0],m[1])):(m=l(t,g),e.point(m[0],m[1]),e.lineEnd()),t=m;else if(u&&t&&c^y){var _;b&n||!(_=l(g,t,!0))||(a=0,c?(e.lineStart(),e.point(_[0][0],_[0][1]),e.point(_[1][0],_[1][1]),e.lineEnd()):(e.point(_[1][0],_[1][1]),e.lineEnd(),e.lineStart(),e.point(_[0][0],_[0][1])))}!y||t&&Object(s.default)(t,g)||e.point(g[0],g[1]),t=g,r=y,n=b},lineEnd:function(){r&&e.lineEnd(),t=null},clean:function(){return a|(o&&r)<<1}}}),(function(t,r,i,s){Object(o.circleStream)(s,e,n,i,t,r)}),c?[0,-e]:[-i.pi,e-i.pi])}},"./node_modules/d3-geo/src/clip/extent.js": -/*!************************************************!*\ - !*** ./node_modules/d3-geo/src/clip/extent.js ***! - \************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./rectangle.js */"./node_modules/d3-geo/src/clip/rectangle.js");t.default=function(){var e,t,n,o=0,i=0,s=960,a=500;return n={stream:function(n){return e&&t===n?e:e=Object(r.default)(o,i,s,a)(t=n)},extent:function(r){return arguments.length?(o=+r[0][0],i=+r[0][1],s=+r[1][0],a=+r[1][1],e=t=null,n):[[o,i],[s,a]]}}}},"./node_modules/d3-geo/src/clip/index.js": -/*!***********************************************!*\ - !*** ./node_modules/d3-geo/src/clip/index.js ***! - \***********************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./buffer.js */"./node_modules/d3-geo/src/clip/buffer.js"),o=n(/*! ./rejoin.js */"./node_modules/d3-geo/src/clip/rejoin.js"),i=n(/*! ../math.js */"./node_modules/d3-geo/src/math.js"),s=n(/*! ../polygonContains.js */"./node_modules/d3-geo/src/polygonContains.js"),a=n(/*! d3-array */"./node_modules/d3-array/src/index.js");function c(e){return e.length>1}function u(e,t){return((e=e.x)[0]<0?e[1]-i.halfPi-i.epsilon:i.halfPi-e[1])-((t=t.x)[0]<0?t[1]-i.halfPi-i.epsilon:i.halfPi-t[1])}t.default=function(e,t,n,i){return function(d){var l,f,h,p=t(d),m=Object(r.default)(),g=t(m),y=!1,b={point:_,lineStart:j,lineEnd:x,polygonStart:function(){b.point=k,b.lineStart=w,b.lineEnd=O,f=[],l=[]},polygonEnd:function(){b.point=_,b.lineStart=j,b.lineEnd=x,f=Object(a.merge)(f);var e=Object(s.default)(l,i);f.length?(y||(d.polygonStart(),y=!0),Object(o.default)(f,u,e,n,d)):e&&(y||(d.polygonStart(),y=!0),d.lineStart(),n(null,null,1,d),d.lineEnd()),y&&(d.polygonEnd(),y=!1),f=l=null},sphere:function(){d.polygonStart(),d.lineStart(),n(null,null,1,d),d.lineEnd(),d.polygonEnd()}};function _(t,n){e(t,n)&&d.point(t,n)}function v(e,t){p.point(e,t)}function j(){b.point=v,p.lineStart()}function x(){b.point=_,p.lineEnd()}function k(e,t){h.push([e,t]),g.point(e,t)}function w(){g.lineStart(),h=[]}function O(){k(h[0][0],h[0][1]),g.lineEnd();var e,t,n,r,o=g.clean(),i=m.result(),s=i.length;if(h.pop(),l.push(h),h=null,s)if(1&o){if((t=(n=i[0]).length-1)>0){for(y||(d.polygonStart(),y=!0),d.lineStart(),e=0;e1&&2&o&&i.push(i.pop().concat(i.shift())),f.push(i.filter(c))}return b}}},"./node_modules/d3-geo/src/clip/line.js": -/*!**********************************************!*\ - !*** ./node_modules/d3-geo/src/clip/line.js ***! - \**********************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(e,t,n,r,o,i){var s,a=e[0],c=e[1],u=0,d=1,l=t[0]-a,f=t[1]-c;if(s=n-a,l||!(s>0)){if(s/=l,l<0){if(s0){if(s>d)return;s>u&&(u=s)}if(s=o-a,l||!(s<0)){if(s/=l,l<0){if(s>d)return;s>u&&(u=s)}else if(l>0){if(s0)){if(s/=f,f<0){if(s0){if(s>d)return;s>u&&(u=s)}if(s=i-c,f||!(s<0)){if(s/=f,f<0){if(s>d)return;s>u&&(u=s)}else if(f>0){if(s0&&(e[0]=a+u*l,e[1]=c+u*f),d<1&&(t[0]=a+d*l,t[1]=c+d*f),!0}}}}}},"./node_modules/d3-geo/src/clip/rectangle.js": -/*!***************************************************!*\ - !*** ./node_modules/d3-geo/src/clip/rectangle.js ***! - \***************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return c}));var r=n(/*! ../math.js */"./node_modules/d3-geo/src/math.js"),o=n(/*! ./buffer.js */"./node_modules/d3-geo/src/clip/buffer.js"),i=n(/*! ./line.js */"./node_modules/d3-geo/src/clip/line.js"),s=n(/*! ./rejoin.js */"./node_modules/d3-geo/src/clip/rejoin.js"),a=n(/*! d3-array */"./node_modules/d3-array/src/index.js");function c(e,t,n,c){function u(r,o){return e<=r&&r<=n&&t<=o&&o<=c}function d(r,o,i,s){var a=0,u=0;if(null==r||(a=l(r,i))!==(u=l(o,i))||h(r,o)<0^i>0)do{s.point(0===a||3===a?e:n,a>1?c:t)}while((a=(a+i+4)%4)!==u);else s.point(o[0],o[1])}function l(o,i){return Object(r.abs)(o[0]-e)0?0:3:Object(r.abs)(o[0]-n)0?2:1:Object(r.abs)(o[1]-t)0?1:0:i>0?3:2}function f(e,t){return h(e.x,t.x)}function h(e,t){var n=l(e,1),r=l(t,1);return n!==r?n-r:0===n?t[1]-e[1]:1===n?e[0]-t[0]:2===n?e[1]-t[1]:t[0]-e[0]}return function(r){var l,h,p,m,g,y,b,_,v,j,x,k=r,w=Object(o.default)(),O={point:C,lineStart:function(){O.point=E,h&&h.push(p=[]),j=!0,v=!1,b=_=NaN},lineEnd:function(){l&&(E(m,g),y&&v&&w.rejoin(),l.push(w.result())),O.point=C,v&&k.lineEnd()},polygonStart:function(){k=w,l=[],h=[],x=!0},polygonEnd:function(){var t=function(){for(var t=0,n=0,r=h.length;nc&&(l-o)*(c-i)>(f-i)*(e-o)&&++t:f<=c&&(l-o)*(c-i)<(f-i)*(e-o)&&--t;return t}(),n=x&&t,o=(l=Object(a.merge)(l)).length;(n||o)&&(r.polygonStart(),n&&(r.lineStart(),d(null,null,1,r),r.lineEnd()),o&&Object(s.default)(l,f,t,d,r),r.polygonEnd()),k=r,l=h=p=null}};function C(e,t){u(e,t)&&k.point(e,t)}function E(r,o){var s=u(r,o);if(h&&p.push([r,o]),j)m=r,g=o,y=s,j=!1,s&&(k.lineStart(),k.point(r,o));else if(s&&v)k.point(r,o);else{var a=[b=Math.max(-1e9,Math.min(1e9,b)),_=Math.max(-1e9,Math.min(1e9,_))],d=[r=Math.max(-1e9,Math.min(1e9,r)),o=Math.max(-1e9,Math.min(1e9,o))];Object(i.default)(a,d,e,t,n,c)?(v||(k.lineStart(),k.point(a[0],a[1])),k.point(d[0],d[1]),s||k.lineEnd(),x=!1):s&&(k.lineStart(),k.point(r,o),x=!1)}b=r,_=o,v=s}return O}}},"./node_modules/d3-geo/src/clip/rejoin.js": -/*!************************************************!*\ - !*** ./node_modules/d3-geo/src/clip/rejoin.js ***! - \************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ../pointEqual.js */"./node_modules/d3-geo/src/pointEqual.js");function o(e,t,n,r){this.x=e,this.z=t,this.o=n,this.e=r,this.v=!1,this.n=this.p=null}function i(e){if(t=e.length){for(var t,n,r=0,o=e[0];++r=0;--c)a.point((h=f[c])[0],h[1]);else s(m.x,m.p.x,-1,a);m=m.p}f=(m=m.o).z,g=!g}while(!m.v);a.lineEnd()}}}},"./node_modules/d3-geo/src/compose.js": -/*!********************************************!*\ - !*** ./node_modules/d3-geo/src/compose.js ***! - \********************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(e,t){function n(n,r){return n=e(n,r),t(n[0],n[1])}return e.invert&&t.invert&&(n.invert=function(n,r){return(n=t.invert(n,r))&&e.invert(n[0],n[1])}),n}},"./node_modules/d3-geo/src/constant.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-geo/src/constant.js ***! - \*********************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(e){return function(){return e}}},"./node_modules/d3-geo/src/contains.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-geo/src/contains.js ***! - \*********************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./polygonContains.js */"./node_modules/d3-geo/src/polygonContains.js"),o=n(/*! ./distance.js */"./node_modules/d3-geo/src/distance.js"),i=n(/*! ./math.js */"./node_modules/d3-geo/src/math.js"),s={Feature:function(e,t){return c(e.geometry,t)},FeatureCollection:function(e,t){for(var n=e.features,r=-1,o=n.length;++r0&&(s=Object(o.default)(e[a],e[a-1]))>0&&n<=s&&r<=s&&(n+r-s)*(1-Math.pow((n-r)/s,2))o.epsilon})).map(f)).concat(Object(r.range)(Object(o.ceil)(u/y)*y,c,y).filter((function(e){return Object(o.abs)(e%_)>o.epsilon})).map(h))}return j.lines=function(){return x().map((function(e){return{type:"LineString",coordinates:e}}))},j.outline=function(){return{type:"Polygon",coordinates:[p(a).concat(m(d).slice(1),p(n).reverse().slice(1),m(l).reverse().slice(1))]}},j.extent=function(e){return arguments.length?j.extentMajor(e).extentMinor(e):j.extentMinor()},j.extentMajor=function(e){return arguments.length?(a=+e[0][0],n=+e[1][0],l=+e[0][1],d=+e[1][1],a>n&&(e=a,a=n,n=e),l>d&&(e=l,l=d,d=e),j.precision(v)):[[a,l],[n,d]]},j.extentMinor=function(n){return arguments.length?(t=+n[0][0],e=+n[1][0],u=+n[0][1],c=+n[1][1],t>e&&(n=t,t=e,e=n),u>c&&(n=u,u=c,c=n),j.precision(v)):[[t,u],[e,c]]},j.step=function(e){return arguments.length?j.stepMajor(e).stepMinor(e):j.stepMinor()},j.stepMajor=function(e){return arguments.length?(b=+e[0],_=+e[1],j):[b,_]},j.stepMinor=function(e){return arguments.length?(g=+e[0],y=+e[1],j):[g,y]},j.precision=function(r){return arguments.length?(v=+r,f=i(u,c,90),h=s(t,e,v),p=i(l,d,90),m=s(a,n,v),j):v},j.extentMajor([[-180,-90+o.epsilon],[180,90-o.epsilon]]).extentMinor([[-180,-80-o.epsilon],[180,80+o.epsilon]])}function c(){return a()()}},"./node_modules/d3-geo/src/identity.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-geo/src/identity.js ***! - \*********************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(e){return e}},"./node_modules/d3-geo/src/index.js": -/*!******************************************!*\ - !*** ./node_modules/d3-geo/src/index.js ***! - \******************************************/ -/*! exports provided: geoArea, geoBounds, geoCentroid, geoCircle, geoClipAntimeridian, geoClipCircle, geoClipExtent, geoClipRectangle, geoContains, geoDistance, geoGraticule, geoGraticule10, geoInterpolate, geoLength, geoPath, geoAlbers, geoAlbersUsa, geoAzimuthalEqualArea, geoAzimuthalEqualAreaRaw, geoAzimuthalEquidistant, geoAzimuthalEquidistantRaw, geoConicConformal, geoConicConformalRaw, geoConicEqualArea, geoConicEqualAreaRaw, geoConicEquidistant, geoConicEquidistantRaw, geoEqualEarth, geoEqualEarthRaw, geoEquirectangular, geoEquirectangularRaw, geoGnomonic, geoGnomonicRaw, geoIdentity, geoProjection, geoProjectionMutator, geoMercator, geoMercatorRaw, geoNaturalEarth1, geoNaturalEarth1Raw, geoOrthographic, geoOrthographicRaw, geoStereographic, geoStereographicRaw, geoTransverseMercator, geoTransverseMercatorRaw, geoRotation, geoStream, geoTransform */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./area.js */"./node_modules/d3-geo/src/area.js");n.d(t,"geoArea",(function(){return r.default}));var o=n(/*! ./bounds.js */"./node_modules/d3-geo/src/bounds.js");n.d(t,"geoBounds",(function(){return o.default}));var i=n(/*! ./centroid.js */"./node_modules/d3-geo/src/centroid.js");n.d(t,"geoCentroid",(function(){return i.default}));var s=n(/*! ./circle.js */"./node_modules/d3-geo/src/circle.js");n.d(t,"geoCircle",(function(){return s.default}));var a=n(/*! ./clip/antimeridian.js */"./node_modules/d3-geo/src/clip/antimeridian.js");n.d(t,"geoClipAntimeridian",(function(){return a.default}));var c=n(/*! ./clip/circle.js */"./node_modules/d3-geo/src/clip/circle.js");n.d(t,"geoClipCircle",(function(){return c.default}));var u=n(/*! ./clip/extent.js */"./node_modules/d3-geo/src/clip/extent.js");n.d(t,"geoClipExtent",(function(){return u.default}));var d=n(/*! ./clip/rectangle.js */"./node_modules/d3-geo/src/clip/rectangle.js");n.d(t,"geoClipRectangle",(function(){return d.default}));var l=n(/*! ./contains.js */"./node_modules/d3-geo/src/contains.js");n.d(t,"geoContains",(function(){return l.default}));var f=n(/*! ./distance.js */"./node_modules/d3-geo/src/distance.js");n.d(t,"geoDistance",(function(){return f.default}));var h=n(/*! ./graticule.js */"./node_modules/d3-geo/src/graticule.js");n.d(t,"geoGraticule",(function(){return h.default})),n.d(t,"geoGraticule10",(function(){return h.graticule10}));var p=n(/*! ./interpolate.js */"./node_modules/d3-geo/src/interpolate.js");n.d(t,"geoInterpolate",(function(){return p.default}));var m=n(/*! ./length.js */"./node_modules/d3-geo/src/length.js");n.d(t,"geoLength",(function(){return m.default}));var g=n(/*! ./path/index.js */"./node_modules/d3-geo/src/path/index.js");n.d(t,"geoPath",(function(){return g.default}));var y=n(/*! ./projection/albers.js */"./node_modules/d3-geo/src/projection/albers.js");n.d(t,"geoAlbers",(function(){return y.default}));var b=n(/*! ./projection/albersUsa.js */"./node_modules/d3-geo/src/projection/albersUsa.js");n.d(t,"geoAlbersUsa",(function(){return b.default}));var _=n(/*! ./projection/azimuthalEqualArea.js */"./node_modules/d3-geo/src/projection/azimuthalEqualArea.js");n.d(t,"geoAzimuthalEqualArea",(function(){return _.default})),n.d(t,"geoAzimuthalEqualAreaRaw",(function(){return _.azimuthalEqualAreaRaw}));var v=n(/*! ./projection/azimuthalEquidistant.js */"./node_modules/d3-geo/src/projection/azimuthalEquidistant.js");n.d(t,"geoAzimuthalEquidistant",(function(){return v.default})),n.d(t,"geoAzimuthalEquidistantRaw",(function(){return v.azimuthalEquidistantRaw}));var j=n(/*! ./projection/conicConformal.js */"./node_modules/d3-geo/src/projection/conicConformal.js");n.d(t,"geoConicConformal",(function(){return j.default})),n.d(t,"geoConicConformalRaw",(function(){return j.conicConformalRaw}));var x=n(/*! ./projection/conicEqualArea.js */"./node_modules/d3-geo/src/projection/conicEqualArea.js");n.d(t,"geoConicEqualArea",(function(){return x.default})),n.d(t,"geoConicEqualAreaRaw",(function(){return x.conicEqualAreaRaw}));var k=n(/*! ./projection/conicEquidistant.js */"./node_modules/d3-geo/src/projection/conicEquidistant.js");n.d(t,"geoConicEquidistant",(function(){return k.default})),n.d(t,"geoConicEquidistantRaw",(function(){return k.conicEquidistantRaw}));var w=n(/*! ./projection/equalEarth.js */"./node_modules/d3-geo/src/projection/equalEarth.js");n.d(t,"geoEqualEarth",(function(){return w.default})),n.d(t,"geoEqualEarthRaw",(function(){return w.equalEarthRaw}));var O=n(/*! ./projection/equirectangular.js */"./node_modules/d3-geo/src/projection/equirectangular.js");n.d(t,"geoEquirectangular",(function(){return O.default})),n.d(t,"geoEquirectangularRaw",(function(){return O.equirectangularRaw}));var C=n(/*! ./projection/gnomonic.js */"./node_modules/d3-geo/src/projection/gnomonic.js");n.d(t,"geoGnomonic",(function(){return C.default})),n.d(t,"geoGnomonicRaw",(function(){return C.gnomonicRaw}));var E=n(/*! ./projection/identity.js */"./node_modules/d3-geo/src/projection/identity.js");n.d(t,"geoIdentity",(function(){return E.default}));var T=n(/*! ./projection/index.js */"./node_modules/d3-geo/src/projection/index.js");n.d(t,"geoProjection",(function(){return T.default})),n.d(t,"geoProjectionMutator",(function(){return T.projectionMutator}));var S=n(/*! ./projection/mercator.js */"./node_modules/d3-geo/src/projection/mercator.js");n.d(t,"geoMercator",(function(){return S.default})),n.d(t,"geoMercatorRaw",(function(){return S.mercatorRaw}));var A=n(/*! ./projection/naturalEarth1.js */"./node_modules/d3-geo/src/projection/naturalEarth1.js");n.d(t,"geoNaturalEarth1",(function(){return A.default})),n.d(t,"geoNaturalEarth1Raw",(function(){return A.naturalEarth1Raw}));var M=n(/*! ./projection/orthographic.js */"./node_modules/d3-geo/src/projection/orthographic.js");n.d(t,"geoOrthographic",(function(){return M.default})),n.d(t,"geoOrthographicRaw",(function(){return M.orthographicRaw}));var D=n(/*! ./projection/stereographic.js */"./node_modules/d3-geo/src/projection/stereographic.js");n.d(t,"geoStereographic",(function(){return D.default})),n.d(t,"geoStereographicRaw",(function(){return D.stereographicRaw}));var B=n(/*! ./projection/transverseMercator.js */"./node_modules/d3-geo/src/projection/transverseMercator.js");n.d(t,"geoTransverseMercator",(function(){return B.default})),n.d(t,"geoTransverseMercatorRaw",(function(){return B.transverseMercatorRaw}));var N=n(/*! ./rotation.js */"./node_modules/d3-geo/src/rotation.js");n.d(t,"geoRotation",(function(){return N.default}));var L=n(/*! ./stream.js */"./node_modules/d3-geo/src/stream.js");n.d(t,"geoStream",(function(){return L.default}));var P=n(/*! ./transform.js */"./node_modules/d3-geo/src/transform.js");n.d(t,"geoTransform",(function(){return P.default}))},"./node_modules/d3-geo/src/interpolate.js": -/*!************************************************!*\ - !*** ./node_modules/d3-geo/src/interpolate.js ***! - \************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./math.js */"./node_modules/d3-geo/src/math.js");t.default=function(e,t){var n=e[0]*r.radians,o=e[1]*r.radians,i=t[0]*r.radians,s=t[1]*r.radians,a=Object(r.cos)(o),c=Object(r.sin)(o),u=Object(r.cos)(s),d=Object(r.sin)(s),l=a*Object(r.cos)(n),f=a*Object(r.sin)(n),h=u*Object(r.cos)(i),p=u*Object(r.sin)(i),m=2*Object(r.asin)(Object(r.sqrt)(Object(r.haversin)(s-o)+a*u*Object(r.haversin)(i-n))),g=Object(r.sin)(m),y=m?function(e){var t=Object(r.sin)(e*=m)/g,n=Object(r.sin)(m-e)/g,o=n*l+t*h,i=n*f+t*p,s=n*c+t*d;return[Object(r.atan2)(i,o)*r.degrees,Object(r.atan2)(s,Object(r.sqrt)(o*o+i*i))*r.degrees]}:function(){return[n*r.degrees,o*r.degrees]};return y.distance=m,y}},"./node_modules/d3-geo/src/length.js": -/*!*******************************************!*\ - !*** ./node_modules/d3-geo/src/length.js ***! - \*******************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r,o,i,s=n(/*! ./adder.js */"./node_modules/d3-geo/src/adder.js"),a=n(/*! ./math.js */"./node_modules/d3-geo/src/math.js"),c=n(/*! ./noop.js */"./node_modules/d3-geo/src/noop.js"),u=n(/*! ./stream.js */"./node_modules/d3-geo/src/stream.js"),d=Object(s.default)(),l={sphere:c.default,point:c.default,lineStart:function(){l.point=h,l.lineEnd=f},lineEnd:c.default,polygonStart:c.default,polygonEnd:c.default};function f(){l.point=l.lineEnd=c.default}function h(e,t){e*=a.radians,t*=a.radians,r=e,o=Object(a.sin)(t),i=Object(a.cos)(t),l.point=p}function p(e,t){e*=a.radians,t*=a.radians;var n=Object(a.sin)(t),s=Object(a.cos)(t),c=Object(a.abs)(e-r),u=Object(a.cos)(c),l=s*Object(a.sin)(c),f=i*n-o*s*u,h=o*n+i*s*u;d.add(Object(a.atan2)(Object(a.sqrt)(l*l+f*f),h)),r=e,o=n,i=s}t.default=function(e){return d.reset(),Object(u.default)(e,l),+d}},"./node_modules/d3-geo/src/math.js": -/*!*****************************************!*\ - !*** ./node_modules/d3-geo/src/math.js ***! - \*****************************************/ -/*! exports provided: epsilon, epsilon2, pi, halfPi, quarterPi, tau, degrees, radians, abs, atan, atan2, cos, ceil, exp, floor, log, pow, sin, sign, sqrt, tan, acos, asin, haversin */function(e,t,n){"use strict";n.r(t),n.d(t,"epsilon",(function(){return r})),n.d(t,"epsilon2",(function(){return o})),n.d(t,"pi",(function(){return i})),n.d(t,"halfPi",(function(){return s})),n.d(t,"quarterPi",(function(){return a})),n.d(t,"tau",(function(){return c})),n.d(t,"degrees",(function(){return u})),n.d(t,"radians",(function(){return d})),n.d(t,"abs",(function(){return l})),n.d(t,"atan",(function(){return f})),n.d(t,"atan2",(function(){return h})),n.d(t,"cos",(function(){return p})),n.d(t,"ceil",(function(){return m})),n.d(t,"exp",(function(){return g})),n.d(t,"floor",(function(){return y})),n.d(t,"log",(function(){return b})),n.d(t,"pow",(function(){return _})),n.d(t,"sin",(function(){return v})),n.d(t,"sign",(function(){return j})),n.d(t,"sqrt",(function(){return x})),n.d(t,"tan",(function(){return k})),n.d(t,"acos",(function(){return w})),n.d(t,"asin",(function(){return O})),n.d(t,"haversin",(function(){return C}));var r=1e-6,o=1e-12,i=Math.PI,s=i/2,a=i/4,c=2*i,u=180/i,d=i/180,l=Math.abs,f=Math.atan,h=Math.atan2,p=Math.cos,m=Math.ceil,g=Math.exp,y=Math.floor,b=Math.log,_=Math.pow,v=Math.sin,j=Math.sign||function(e){return e>0?1:e<0?-1:0},x=Math.sqrt,k=Math.tan;function w(e){return e>1?0:e<-1?i:Math.acos(e)}function O(e){return e>1?s:e<-1?-s:Math.asin(e)}function C(e){return(e=v(e/2))*e}},"./node_modules/d3-geo/src/noop.js": -/*!*****************************************!*\ - !*** ./node_modules/d3-geo/src/noop.js ***! - \*****************************************/ -/*! exports provided: default */function(e,t,n){"use strict";function r(){}n.r(t),n.d(t,"default",(function(){return r}))},"./node_modules/d3-geo/src/path/area.js": -/*!**********************************************!*\ - !*** ./node_modules/d3-geo/src/path/area.js ***! - \**********************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r,o,i,s,a=n(/*! ../adder.js */"./node_modules/d3-geo/src/adder.js"),c=n(/*! ../math.js */"./node_modules/d3-geo/src/math.js"),u=n(/*! ../noop.js */"./node_modules/d3-geo/src/noop.js"),d=Object(a.default)(),l=Object(a.default)(),f={point:u.default,lineStart:u.default,lineEnd:u.default,polygonStart:function(){f.lineStart=h,f.lineEnd=g},polygonEnd:function(){f.lineStart=f.lineEnd=f.point=u.default,d.add(Object(c.abs)(l)),l.reset()},result:function(){var e=d/2;return d.reset(),e}};function h(){f.point=p}function p(e,t){f.point=m,r=i=e,o=s=t}function m(e,t){l.add(s*e-i*t),i=e,s=t}function g(){m(r,o)}t.default=f},"./node_modules/d3-geo/src/path/bounds.js": -/*!************************************************!*\ - !*** ./node_modules/d3-geo/src/path/bounds.js ***! - \************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ../noop.js */"./node_modules/d3-geo/src/noop.js"),o=1/0,i=o,s=-o,a=s,c={point:function(e,t){es&&(s=e),ta&&(a=t)},lineStart:r.default,lineEnd:r.default,polygonStart:r.default,polygonEnd:r.default,result:function(){var e=[[o,i],[s,a]];return s=a=-(i=o=1/0),e}};t.default=c},"./node_modules/d3-geo/src/path/centroid.js": -/*!**************************************************!*\ - !*** ./node_modules/d3-geo/src/path/centroid.js ***! - \**************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r,o,i,s,a=n(/*! ../math.js */"./node_modules/d3-geo/src/math.js"),c=0,u=0,d=0,l=0,f=0,h=0,p=0,m=0,g=0,y={point:b,lineStart:_,lineEnd:x,polygonStart:function(){y.lineStart=k,y.lineEnd=w},polygonEnd:function(){y.point=b,y.lineStart=_,y.lineEnd=x},result:function(){var e=g?[p/g,m/g]:h?[l/h,f/h]:d?[c/d,u/d]:[NaN,NaN];return c=u=d=l=f=h=p=m=g=0,e}};function b(e,t){c+=e,u+=t,++d}function _(){y.point=v}function v(e,t){y.point=j,b(i=e,s=t)}function j(e,t){var n=e-i,r=t-s,o=Object(a.sqrt)(n*n+r*r);l+=o*(i+e)/2,f+=o*(s+t)/2,h+=o,b(i=e,s=t)}function x(){y.point=b}function k(){y.point=O}function w(){C(r,o)}function O(e,t){y.point=C,b(r=i=e,o=s=t)}function C(e,t){var n=e-i,r=t-s,o=Object(a.sqrt)(n*n+r*r);l+=o*(i+e)/2,f+=o*(s+t)/2,h+=o,p+=(o=s*e-i*t)*(i+e),m+=o*(s+t),g+=3*o,b(i=e,s=t)}t.default=y},"./node_modules/d3-geo/src/path/context.js": -/*!*************************************************!*\ - !*** ./node_modules/d3-geo/src/path/context.js ***! - \*************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return i}));var r=n(/*! ../math.js */"./node_modules/d3-geo/src/math.js"),o=n(/*! ../noop.js */"./node_modules/d3-geo/src/noop.js");function i(e){this._context=e}i.prototype={_radius:4.5,pointRadius:function(e){return this._radius=e,this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){0===this._line&&this._context.closePath(),this._point=NaN},point:function(e,t){switch(this._point){case 0:this._context.moveTo(e,t),this._point=1;break;case 1:this._context.lineTo(e,t);break;default:this._context.moveTo(e+this._radius,t),this._context.arc(e,t,this._radius,0,r.tau)}},result:o.default}},"./node_modules/d3-geo/src/path/index.js": -/*!***********************************************!*\ - !*** ./node_modules/d3-geo/src/path/index.js ***! - \***********************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ../identity.js */"./node_modules/d3-geo/src/identity.js"),o=n(/*! ../stream.js */"./node_modules/d3-geo/src/stream.js"),i=n(/*! ./area.js */"./node_modules/d3-geo/src/path/area.js"),s=n(/*! ./bounds.js */"./node_modules/d3-geo/src/path/bounds.js"),a=n(/*! ./centroid.js */"./node_modules/d3-geo/src/path/centroid.js"),c=n(/*! ./context.js */"./node_modules/d3-geo/src/path/context.js"),u=n(/*! ./measure.js */"./node_modules/d3-geo/src/path/measure.js"),d=n(/*! ./string.js */"./node_modules/d3-geo/src/path/string.js");t.default=function(e,t){var n,l,f=4.5;function h(e){return e&&("function"==typeof f&&l.pointRadius(+f.apply(this,arguments)),Object(o.default)(e,n(l))),l.result()}return h.area=function(e){return Object(o.default)(e,n(i.default)),i.default.result()},h.measure=function(e){return Object(o.default)(e,n(u.default)),u.default.result()},h.bounds=function(e){return Object(o.default)(e,n(s.default)),s.default.result()},h.centroid=function(e){return Object(o.default)(e,n(a.default)),a.default.result()},h.projection=function(t){return arguments.length?(n=null==t?(e=null,r.default):(e=t).stream,h):e},h.context=function(e){return arguments.length?(l=null==e?(t=null,new d.default):new c.default(t=e),"function"!=typeof f&&l.pointRadius(f),h):t},h.pointRadius=function(e){return arguments.length?(f="function"==typeof e?e:(l.pointRadius(+e),+e),h):f},h.projection(e).context(t)}},"./node_modules/d3-geo/src/path/measure.js": -/*!*************************************************!*\ - !*** ./node_modules/d3-geo/src/path/measure.js ***! - \*************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r,o,i,s,a,c=n(/*! ../adder.js */"./node_modules/d3-geo/src/adder.js"),u=n(/*! ../math.js */"./node_modules/d3-geo/src/math.js"),d=n(/*! ../noop.js */"./node_modules/d3-geo/src/noop.js"),l=Object(c.default)(),f={point:d.default,lineStart:function(){f.point=h},lineEnd:function(){r&&p(o,i),f.point=d.default},polygonStart:function(){r=!0},polygonEnd:function(){r=null},result:function(){var e=+l;return l.reset(),e}};function h(e,t){f.point=p,o=s=e,i=a=t}function p(e,t){s-=e,a-=t,l.add(Object(u.sqrt)(s*s+a*a)),s=e,a=t}t.default=f},"./node_modules/d3-geo/src/path/string.js": -/*!************************************************!*\ - !*** ./node_modules/d3-geo/src/path/string.js ***! - \************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";function r(){this._string=[]}function o(e){return"m0,"+e+"a"+e+","+e+" 0 1,1 0,"+-2*e+"a"+e+","+e+" 0 1,1 0,"+2*e+"z"}n.r(t),n.d(t,"default",(function(){return r})),r.prototype={_radius:4.5,_circle:o(4.5),pointRadius:function(e){return(e=+e)!==this._radius&&(this._radius=e,this._circle=null),this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){0===this._line&&this._string.push("Z"),this._point=NaN},point:function(e,t){switch(this._point){case 0:this._string.push("M",e,",",t),this._point=1;break;case 1:this._string.push("L",e,",",t);break;default:null==this._circle&&(this._circle=o(this._radius)),this._string.push("M",e,",",t,this._circle)}},result:function(){if(this._string.length){var e=this._string.join("");return this._string=[],e}return null}}},"./node_modules/d3-geo/src/pointEqual.js": -/*!***********************************************!*\ - !*** ./node_modules/d3-geo/src/pointEqual.js ***! - \***********************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./math.js */"./node_modules/d3-geo/src/math.js");t.default=function(e,t){return Object(r.abs)(e[0]-t[0])=0?1:-1,S=T*E,A=S>i.pi,M=_*O;if(s.add(Object(i.atan2)(M*T*Object(i.sin)(S),v*C+M*Object(i.cos)(S))),d+=A?E+T*i.tau:E,A^y>=n^k>=n){var D=Object(o.cartesianCross)(Object(o.cartesian)(g),Object(o.cartesian)(x));Object(o.cartesianNormalizeInPlace)(D);var B=Object(o.cartesianCross)(u,D);Object(o.cartesianNormalizeInPlace)(B);var N=(A^E>=0?-1:1)*Object(i.asin)(B[2]);(r>N||r===N&&(D[0]||D[1]))&&(l+=A^E>=0?1:-1)}}return(d<-i.epsilon||d=.12&&o<.234&&r>=-.425&&r<-.214?l:o>=.166&&o<.234&&r>=-.214&&r<-.115?f:d).invert(e)},p.stream=function(n){return e&&t===n?e:(r=[d.stream(t=n),l.stream(n),f.stream(n)],o=r.length,e={point:function(e,t){for(var n=-1;++n0?t<-r.halfPi+r.epsilon&&(t=-r.halfPi+r.epsilon):t>r.halfPi-r.epsilon&&(t=r.halfPi-r.epsilon);var n=a/Object(r.pow)(s(t),o);return[n*Object(r.sin)(o*e),a-n*Object(r.cos)(o*e)]}return c.invert=function(e,t){var n=a-t,i=Object(r.sign)(o)*Object(r.sqrt)(e*e+n*n);return[Object(r.atan2)(e,Object(r.abs)(n))/o*Object(r.sign)(n),2*Object(r.atan)(Object(r.pow)(a/i,1/o))-r.halfPi]},c}t.default=function(){return Object(o.conicProjection)(a).scale(109.5).parallels([30,30])}},"./node_modules/d3-geo/src/projection/conicEqualArea.js": -/*!**************************************************************!*\ - !*** ./node_modules/d3-geo/src/projection/conicEqualArea.js ***! - \**************************************************************/ -/*! exports provided: conicEqualAreaRaw, default */function(e,t,n){"use strict";n.r(t),n.d(t,"conicEqualAreaRaw",(function(){return s}));var r=n(/*! ../math.js */"./node_modules/d3-geo/src/math.js"),o=n(/*! ./conic.js */"./node_modules/d3-geo/src/projection/conic.js"),i=n(/*! ./cylindricalEqualArea.js */"./node_modules/d3-geo/src/projection/cylindricalEqualArea.js");function s(e,t){var n=Object(r.sin)(e),o=(n+Object(r.sin)(t))/2;if(Object(r.abs)(o)2?e[2]%360*c.radians:0,Y()):[S*c.degrees,A*c.degrees,M*c.degrees]},R.angle=function(e){return arguments.length?(D=e%360*c.radians,Y()):D*c.degrees},R.precision=function(e){return arguments.length?(_=Object(f.default)(v,I=e*e),z()):Object(c.sqrt)(I)},R.fitExtent=function(e,t){return Object(l.fitExtent)(R,e,t)},R.fitSize=function(e,t){return Object(l.fitSize)(R,e,t)},R.fitWidth=function(e,t){return Object(l.fitWidth)(R,e,t)},R.fitHeight=function(e,t){return Object(l.fitHeight)(R,e,t)},function(){return t=e.apply(this,arguments),R.invert=t.invert&&F,Y()}}},"./node_modules/d3-geo/src/projection/mercator.js": -/*!********************************************************!*\ - !*** ./node_modules/d3-geo/src/projection/mercator.js ***! - \********************************************************/ -/*! exports provided: mercatorRaw, default, mercatorProjection */function(e,t,n){"use strict";n.r(t),n.d(t,"mercatorRaw",(function(){return s})),n.d(t,"mercatorProjection",(function(){return a}));var r=n(/*! ../math.js */"./node_modules/d3-geo/src/math.js"),o=n(/*! ../rotation.js */"./node_modules/d3-geo/src/rotation.js"),i=n(/*! ./index.js */"./node_modules/d3-geo/src/projection/index.js");function s(e,t){return[e,Object(r.log)(Object(r.tan)((r.halfPi+t)/2))]}function a(e){var t,n,a,c=Object(i.default)(e),u=c.center,d=c.scale,l=c.translate,f=c.clipExtent,h=null;function p(){var i=r.pi*d(),u=c(Object(o.default)(c.rotate()).invert([0,0]));return f(null==h?[[u[0]-i,u[1]-i],[u[0]+i,u[1]+i]]:e===s?[[Math.max(u[0]-i,h),t],[Math.min(u[0]+i,n),a]]:[[h,Math.max(u[1]-i,t)],[n,Math.min(u[1]+i,a)]])}return c.scale=function(e){return arguments.length?(d(e),p()):d()},c.translate=function(e){return arguments.length?(l(e),p()):l()},c.center=function(e){return arguments.length?(u(e),p()):u()},c.clipExtent=function(e){return arguments.length?(null==e?h=t=n=a=null:(h=+e[0][0],t=+e[0][1],n=+e[1][0],a=+e[1][1]),p()):null==h?null:[[h,t],[n,a]]},p()}s.invert=function(e,t){return[e,2*Object(r.atan)(Object(r.exp)(t))-r.halfPi]},t.default=function(){return a(s).scale(961/r.tau)}},"./node_modules/d3-geo/src/projection/naturalEarth1.js": -/*!*************************************************************!*\ - !*** ./node_modules/d3-geo/src/projection/naturalEarth1.js ***! - \*************************************************************/ -/*! exports provided: naturalEarth1Raw, default */function(e,t,n){"use strict";n.r(t),n.d(t,"naturalEarth1Raw",(function(){return i}));var r=n(/*! ./index.js */"./node_modules/d3-geo/src/projection/index.js"),o=n(/*! ../math.js */"./node_modules/d3-geo/src/math.js");function i(e,t){var n=t*t,r=n*n;return[e*(.8707-.131979*n+r*(r*(.003971*n-.001529*r)-.013791)),t*(1.007226+n*(.015085+r*(.028874*n-.044475-.005916*r)))]}i.invert=function(e,t){var n,r=t,i=25;do{var s=r*r,a=s*s;r-=n=(r*(1.007226+s*(.015085+a*(.028874*s-.044475-.005916*a)))-t)/(1.007226+s*(.045255+a*(.259866*s-.311325-.005916*11*a)))}while(Object(o.abs)(n)>o.epsilon&&--i>0);return[e/(.8707+(s=r*r)*(s*(s*s*s*(.003971-.001529*s)-.013791)-.131979)),r]},t.default=function(){return Object(r.default)(i).scale(175.295)}},"./node_modules/d3-geo/src/projection/orthographic.js": -/*!************************************************************!*\ - !*** ./node_modules/d3-geo/src/projection/orthographic.js ***! - \************************************************************/ -/*! exports provided: orthographicRaw, default */function(e,t,n){"use strict";n.r(t),n.d(t,"orthographicRaw",(function(){return s}));var r=n(/*! ../math.js */"./node_modules/d3-geo/src/math.js"),o=n(/*! ./azimuthal.js */"./node_modules/d3-geo/src/projection/azimuthal.js"),i=n(/*! ./index.js */"./node_modules/d3-geo/src/projection/index.js");function s(e,t){return[Object(r.cos)(t)*Object(r.sin)(e),Object(r.sin)(t)]}s.invert=Object(o.azimuthalInvert)(r.asin),t.default=function(){return Object(i.default)(s).scale(249.5).clipAngle(90+r.epsilon)}},"./node_modules/d3-geo/src/projection/resample.js": -/*!********************************************************!*\ - !*** ./node_modules/d3-geo/src/projection/resample.js ***! - \********************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ../cartesian.js */"./node_modules/d3-geo/src/cartesian.js"),o=n(/*! ../math.js */"./node_modules/d3-geo/src/math.js"),i=n(/*! ../transform.js */"./node_modules/d3-geo/src/transform.js"),s=Object(o.cos)(30*o.radians);t.default=function(e,t){return+t?function(e,t){function n(r,i,a,c,u,d,l,f,h,p,m,g,y,b){var _=l-r,v=f-i,j=_*_+v*v;if(j>4*t&&y--){var x=c+p,k=u+m,w=d+g,O=Object(o.sqrt)(x*x+k*k+w*w),C=Object(o.asin)(w/=O),E=Object(o.abs)(Object(o.abs)(w)-1)t||Object(o.abs)((_*M+v*D)/j-.5)>.3||c*p+u*m+d*g2?e[2]+90:90]):[(e=n())[0],e[1],e[2]-90]},n([0,0,90]).scale(159.155)}},"./node_modules/d3-geo/src/rotation.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-geo/src/rotation.js ***! - \*********************************************/ -/*! exports provided: rotateRadians, default */function(e,t,n){"use strict";n.r(t),n.d(t,"rotateRadians",(function(){return s}));var r=n(/*! ./compose.js */"./node_modules/d3-geo/src/compose.js"),o=n(/*! ./math.js */"./node_modules/d3-geo/src/math.js");function i(e,t){return[Object(o.abs)(e)>o.pi?e+Math.round(-e/o.tau)*o.tau:e,t]}function s(e,t,n){return(e%=o.tau)?t||n?Object(r.default)(c(e),u(t,n)):c(e):t||n?u(t,n):i}function a(e){return function(t,n){return[(t+=e)>o.pi?t-o.tau:t<-o.pi?t+o.tau:t,n]}}function c(e){var t=a(e);return t.invert=a(-e),t}function u(e,t){var n=Object(o.cos)(e),r=Object(o.sin)(e),i=Object(o.cos)(t),s=Object(o.sin)(t);function a(e,t){var a=Object(o.cos)(t),c=Object(o.cos)(e)*a,u=Object(o.sin)(e)*a,d=Object(o.sin)(t),l=d*n+c*r;return[Object(o.atan2)(u*i-l*s,c*n-d*r),Object(o.asin)(l*i+u*s)]}return a.invert=function(e,t){var a=Object(o.cos)(t),c=Object(o.cos)(e)*a,u=Object(o.sin)(e)*a,d=Object(o.sin)(t),l=d*i-u*s;return[Object(o.atan2)(u*i+d*s,c*n+l*r),Object(o.asin)(l*n-c*r)]},a}i.invert=i,t.default=function(e){function t(t){return(t=e(t[0]*o.radians,t[1]*o.radians))[0]*=o.degrees,t[1]*=o.degrees,t}return e=s(e[0]*o.radians,e[1]*o.radians,e.length>2?e[2]*o.radians:0),t.invert=function(t){return(t=e.invert(t[0]*o.radians,t[1]*o.radians))[0]*=o.degrees,t[1]*=o.degrees,t},t}},"./node_modules/d3-geo/src/stream.js": -/*!*******************************************!*\ - !*** ./node_modules/d3-geo/src/stream.js ***! - \*******************************************/ -/*! exports provided: default */function(e,t,n){"use strict";function r(e,t){e&&i.hasOwnProperty(e.type)&&i[e.type](e,t)}n.r(t);var o={Feature:function(e,t){r(e.geometry,t)},FeatureCollection:function(e,t){for(var n=e.features,o=-1,i=n.length;++o=0;)t+=n[r].value;else t=1;e.value=t}n.r(t),t.default=function(){return this.eachAfter(r)}},"./node_modules/d3-hierarchy/src/hierarchy/descendants.js": -/*!****************************************************************!*\ - !*** ./node_modules/d3-hierarchy/src/hierarchy/descendants.js ***! - \****************************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(){var e=[];return this.each((function(t){e.push(t)})),e}},"./node_modules/d3-hierarchy/src/hierarchy/each.js": -/*!*********************************************************!*\ - !*** ./node_modules/d3-hierarchy/src/hierarchy/each.js ***! - \*********************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(e){var t,n,r,o,i=this,s=[i];do{for(t=s.reverse(),s=[];i=t.pop();)if(e(i),n=i.children)for(r=0,o=n.length;r=0;--n)o.push(t[n]);return this}},"./node_modules/d3-hierarchy/src/hierarchy/index.js": -/*!**********************************************************!*\ - !*** ./node_modules/d3-hierarchy/src/hierarchy/index.js ***! - \**********************************************************/ -/*! exports provided: default, computeHeight, Node */function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return p})),n.d(t,"computeHeight",(function(){return y})),n.d(t,"Node",(function(){return b}));var r=n(/*! ./count.js */"./node_modules/d3-hierarchy/src/hierarchy/count.js"),o=n(/*! ./each.js */"./node_modules/d3-hierarchy/src/hierarchy/each.js"),i=n(/*! ./eachBefore.js */"./node_modules/d3-hierarchy/src/hierarchy/eachBefore.js"),s=n(/*! ./eachAfter.js */"./node_modules/d3-hierarchy/src/hierarchy/eachAfter.js"),a=n(/*! ./sum.js */"./node_modules/d3-hierarchy/src/hierarchy/sum.js"),c=n(/*! ./sort.js */"./node_modules/d3-hierarchy/src/hierarchy/sort.js"),u=n(/*! ./path.js */"./node_modules/d3-hierarchy/src/hierarchy/path.js"),d=n(/*! ./ancestors.js */"./node_modules/d3-hierarchy/src/hierarchy/ancestors.js"),l=n(/*! ./descendants.js */"./node_modules/d3-hierarchy/src/hierarchy/descendants.js"),f=n(/*! ./leaves.js */"./node_modules/d3-hierarchy/src/hierarchy/leaves.js"),h=n(/*! ./links.js */"./node_modules/d3-hierarchy/src/hierarchy/links.js");function p(e,t){var n,r,o,i,s,a=new b(e),c=+e.value&&(a.value=e.value),u=[a];for(null==t&&(t=m);n=u.pop();)if(c&&(n.value=+n.data.value),(o=t(n.data))&&(s=o.length))for(n.children=new Array(s),i=s-1;i>=0;--i)u.push(r=n.children[i]=new b(o[i])),r.parent=n,r.depth=n.depth+1;return a.eachBefore(y)}function m(e){return e.children}function g(e){e.data=e.data.data}function y(e){var t=0;do{e.height=t}while((e=e.parent)&&e.height<++t)}function b(e){this.data=e,this.depth=this.height=0,this.parent=null}b.prototype=p.prototype={constructor:b,count:r.default,each:o.default,eachAfter:s.default,eachBefore:i.default,sum:a.default,sort:c.default,path:u.default,ancestors:d.default,descendants:l.default,leaves:f.default,links:h.default,copy:function(){return p(this).eachBefore(g)}}},"./node_modules/d3-hierarchy/src/hierarchy/leaves.js": -/*!***********************************************************!*\ - !*** ./node_modules/d3-hierarchy/src/hierarchy/leaves.js ***! - \***********************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(){var e=[];return this.eachBefore((function(t){t.children||e.push(t)})),e}},"./node_modules/d3-hierarchy/src/hierarchy/links.js": -/*!**********************************************************!*\ - !*** ./node_modules/d3-hierarchy/src/hierarchy/links.js ***! - \**********************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(){var e=this,t=[];return e.each((function(n){n!==e&&t.push({source:n.parent,target:n})})),t}},"./node_modules/d3-hierarchy/src/hierarchy/path.js": -/*!*********************************************************!*\ - !*** ./node_modules/d3-hierarchy/src/hierarchy/path.js ***! - \*********************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(e){for(var t=this,n=function(e,t){if(e===t)return e;var n=e.ancestors(),r=t.ancestors(),o=null;for(e=n.pop(),t=r.pop();e===t;)o=e,e=n.pop(),t=r.pop();return o}(t,e),r=[t];t!==n;)t=t.parent,r.push(t);for(var o=r.length;e!==n;)r.splice(o,0,e),e=e.parent;return r}},"./node_modules/d3-hierarchy/src/hierarchy/sort.js": -/*!*********************************************************!*\ - !*** ./node_modules/d3-hierarchy/src/hierarchy/sort.js ***! - \*********************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(e){return this.eachBefore((function(t){t.children&&t.children.sort(e)}))}},"./node_modules/d3-hierarchy/src/hierarchy/sum.js": -/*!********************************************************!*\ - !*** ./node_modules/d3-hierarchy/src/hierarchy/sum.js ***! - \********************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(e){return this.eachAfter((function(t){for(var n=+e(t.data)||0,r=t.children,o=r&&r.length;--o>=0;)n+=r[o].value;t.value=n}))}},"./node_modules/d3-hierarchy/src/index.js": -/*!************************************************!*\ - !*** ./node_modules/d3-hierarchy/src/index.js ***! - \************************************************/ -/*! exports provided: cluster, hierarchy, pack, packSiblings, packEnclose, partition, stratify, tree, treemap, treemapBinary, treemapDice, treemapSlice, treemapSliceDice, treemapSquarify, treemapResquarify */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./cluster.js */"./node_modules/d3-hierarchy/src/cluster.js");n.d(t,"cluster",(function(){return r.default}));var o=n(/*! ./hierarchy/index.js */"./node_modules/d3-hierarchy/src/hierarchy/index.js");n.d(t,"hierarchy",(function(){return o.default}));var i=n(/*! ./pack/index.js */"./node_modules/d3-hierarchy/src/pack/index.js");n.d(t,"pack",(function(){return i.default}));var s=n(/*! ./pack/siblings.js */"./node_modules/d3-hierarchy/src/pack/siblings.js");n.d(t,"packSiblings",(function(){return s.default}));var a=n(/*! ./pack/enclose.js */"./node_modules/d3-hierarchy/src/pack/enclose.js");n.d(t,"packEnclose",(function(){return a.default}));var c=n(/*! ./partition.js */"./node_modules/d3-hierarchy/src/partition.js");n.d(t,"partition",(function(){return c.default}));var u=n(/*! ./stratify.js */"./node_modules/d3-hierarchy/src/stratify.js");n.d(t,"stratify",(function(){return u.default}));var d=n(/*! ./tree.js */"./node_modules/d3-hierarchy/src/tree.js");n.d(t,"tree",(function(){return d.default}));var l=n(/*! ./treemap/index.js */"./node_modules/d3-hierarchy/src/treemap/index.js");n.d(t,"treemap",(function(){return l.default}));var f=n(/*! ./treemap/binary.js */"./node_modules/d3-hierarchy/src/treemap/binary.js");n.d(t,"treemapBinary",(function(){return f.default}));var h=n(/*! ./treemap/dice.js */"./node_modules/d3-hierarchy/src/treemap/dice.js");n.d(t,"treemapDice",(function(){return h.default}));var p=n(/*! ./treemap/slice.js */"./node_modules/d3-hierarchy/src/treemap/slice.js");n.d(t,"treemapSlice",(function(){return p.default}));var m=n(/*! ./treemap/sliceDice.js */"./node_modules/d3-hierarchy/src/treemap/sliceDice.js");n.d(t,"treemapSliceDice",(function(){return m.default}));var g=n(/*! ./treemap/squarify.js */"./node_modules/d3-hierarchy/src/treemap/squarify.js");n.d(t,"treemapSquarify",(function(){return g.default}));var y=n(/*! ./treemap/resquarify.js */"./node_modules/d3-hierarchy/src/treemap/resquarify.js");n.d(t,"treemapResquarify",(function(){return y.default}))},"./node_modules/d3-hierarchy/src/pack/enclose.js": -/*!*******************************************************!*\ - !*** ./node_modules/d3-hierarchy/src/pack/enclose.js ***! - \*******************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ../array.js */"./node_modules/d3-hierarchy/src/array.js");function o(e,t){var n,r;if(a(t,e))return[t];for(n=0;n0&&n*n>r*r+o*o}function a(e,t){for(var n=0;n(s*=s)?(r=(u+s-o)/(2*u),i=Math.sqrt(Math.max(0,s/u-r*r)),n.x=e.x-r*a-i*c,n.y=e.y-r*c+i*a):(r=(u+o-s)/(2*u),i=Math.sqrt(Math.max(0,o/u-r*r)),n.x=t.x+r*a-i*c,n.y=t.y+r*c+i*a)):(n.x=t.x+n.r,n.y=t.y)}function i(e,t){var n=e.r+t.r-1e-6,r=t.x-e.x,o=t.y-e.y;return n>0&&n*n>r*r+o*o}function s(e){var t=e._,n=e.next._,r=t.r+n.r,o=(t.x*n.r+n.x*t.r)/r,i=(t.y*n.r+n.y*t.r)/r;return o*o+i*i}function a(e){this._=e,this.next=null,this.previous=null}function c(e){if(!(u=e.length))return 0;var t,n,c,u,d,l,f,h,p,m,g;if((t=e[0]).x=0,t.y=0,!(u>1))return t.r;if(n=e[1],t.x=-n.r,n.x=t.r,n.y=0,!(u>2))return t.r+n.r;o(n,t,c=e[2]),t=new a(t),n=new a(n),c=new a(c),t.next=c.previous=n,n.next=t.previous=c,c.next=n.previous=t;e:for(f=3;f0)throw new Error("cycle");return c}return n.id=function(t){return arguments.length?(e=Object(r.required)(t),n):e},n.parentId=function(e){return arguments.length?(t=Object(r.required)(e),n):t},n}},"./node_modules/d3-hierarchy/src/tree.js": -/*!***********************************************!*\ - !*** ./node_modules/d3-hierarchy/src/tree.js ***! - \***********************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./hierarchy/index.js */"./node_modules/d3-hierarchy/src/hierarchy/index.js");function o(e,t){return e.parent===t.parent?1:2}function i(e){var t=e.children;return t?t[0]:e.t}function s(e){var t=e.children;return t?t[t.length-1]:e.t}function a(e,t,n){var r=n/(t.i-e.i);t.c-=r,t.s+=n,e.c+=r,t.z+=n,t.m+=n}function c(e,t,n){return e.a.parent===t.parent?e.a:n}function u(e,t){this._=e,this.parent=null,this.children=null,this.A=null,this.a=this,this.z=0,this.m=0,this.c=0,this.s=0,this.t=null,this.i=t}u.prototype=Object.create(r.Node.prototype),t.default=function(){var e=o,t=1,n=1,r=null;function d(o){var i=function(e){for(var t,n,r,o,i,s=new u(e,0),a=[s];t=a.pop();)if(r=t._.children)for(t.children=new Array(i=r.length),o=i-1;o>=0;--o)a.push(n=t.children[o]=new u(r[o],o)),n.parent=t;return(s.parent=new u(null,0)).children=[s],s}(o);if(i.eachAfter(l),i.parent.m=-i.z,i.eachBefore(f),r)o.eachBefore(h);else{var s=o,a=o,c=o;o.eachBefore((function(e){e.xa.x&&(a=e),e.depth>c.depth&&(c=e)}));var d=s===a?1:e(s,a)/2,p=d-s.x,m=t/(a.x+d+p),g=n/(c.depth||1);o.eachBefore((function(e){e.x=(e.x+p)*m,e.y=e.depth*g}))}return o}function l(t){var n=t.children,r=t.parent.children,o=t.i?r[t.i-1]:null;if(n){!function(e){for(var t,n=0,r=0,o=e.children,i=o.length;--i>=0;)(t=o[i]).z+=n,t.m+=n,n+=t.s+(r+=t.c)}(t);var u=(n[0].z+n[n.length-1].z)/2;o?(t.z=o.z+e(t._,o._),t.m=t.z-u):t.z=u}else o&&(t.z=o.z+e(t._,o._));t.parent.A=function(t,n,r){if(n){for(var o,u=t,d=t,l=n,f=u.parent.children[0],h=u.m,p=d.m,m=l.m,g=f.m;l=s(l),u=i(u),l&&u;)f=i(f),(d=s(d)).a=t,(o=l.z+m-u.z-h+e(l._,u._))>0&&(a(c(l,t,r),t,o),h+=o,p+=o),m+=l.m,h+=u.m,g+=f.m,p+=d.m;l&&!s(d)&&(d.t=l,d.m+=m-p),u&&!i(f)&&(f.t=u,f.m+=h-g,r=t)}return r}(t,o,t.parent.A||r[0])}function f(e){e._.x=e.z+e.parent.m,e.m+=e.parent.m}function h(e){e.x*=t,e.y=e.depth*n}return d.separation=function(t){return arguments.length?(e=t,d):e},d.size=function(e){return arguments.length?(r=!1,t=+e[0],n=+e[1],d):r?null:[t,n]},d.nodeSize=function(e){return arguments.length?(r=!0,t=+e[0],n=+e[1],d):r?[t,n]:null},d}},"./node_modules/d3-hierarchy/src/treemap/binary.js": -/*!*********************************************************!*\ - !*** ./node_modules/d3-hierarchy/src/treemap/binary.js ***! - \*********************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(e,t,n,r,o){var i,s,a=e.children,c=a.length,u=new Array(c+1);for(u[0]=s=i=0;i=n-1){var d=a[t];return d.x0=o,d.y0=i,d.x1=s,void(d.y1=c)}for(var l=u[t],f=r/2+l,h=t+1,p=n-1;h>>1;u[m]c-i){var b=(o*y+s*g)/r;e(t,h,g,o,i,b,c),e(h,n,y,b,i,s,c)}else{var _=(i*y+c*g)/r;e(t,h,g,o,i,s,_),e(h,n,y,o,_,s,c)}}(0,c,e.value,t,n,r,o)}},"./node_modules/d3-hierarchy/src/treemap/dice.js": -/*!*******************************************************!*\ - !*** ./node_modules/d3-hierarchy/src/treemap/dice.js ***! - \*******************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(e,t,n,r,o){for(var i,s=e.children,a=-1,c=s.length,u=e.value&&(r-t)/e.value;++a1?t:1)},n}(i.phi)},"./node_modules/d3-hierarchy/src/treemap/round.js": -/*!********************************************************!*\ - !*** ./node_modules/d3-hierarchy/src/treemap/round.js ***! - \********************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(e){e.x0=Math.round(e.x0),e.y0=Math.round(e.y0),e.x1=Math.round(e.x1),e.y1=Math.round(e.y1)}},"./node_modules/d3-hierarchy/src/treemap/slice.js": -/*!********************************************************!*\ - !*** ./node_modules/d3-hierarchy/src/treemap/slice.js ***! - \********************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(e,t,n,r,o){for(var i,s=e.children,a=-1,c=s.length,u=e.value&&(o-n)/e.value;++ap&&(p=u),b=f*f*y,(m=Math.max(p/b,b/h))>g){f-=u;break}g=m}_.push(c={value:f,dice:d1?t:1)},n}(i)},"./node_modules/d3-interpolate/src/array.js": -/*!**************************************************!*\ - !*** ./node_modules/d3-interpolate/src/array.js ***! - \**************************************************/ -/*! exports provided: default, genericArray */function(e,t,n){"use strict";n.r(t),n.d(t,"genericArray",(function(){return i}));var r=n(/*! ./value.js */"./node_modules/d3-interpolate/src/value.js"),o=n(/*! ./numberArray.js */"./node_modules/d3-interpolate/src/numberArray.js");function i(e,t){var n,o=t?t.length:0,i=e?Math.min(o,e.length):0,s=new Array(i),a=new Array(o);for(n=0;n=1?(n=1,t-1):Math.floor(n*t),i=e[o],s=e[o+1],a=o>0?e[o-1]:2*i-s,c=o180||n<-180?n-360*Math.round(n/360):n):Object(r.default)(isNaN(e)?t:e)}function s(e){return 1==(e=+e)?a:function(t,n){return n-t?function(e,t,n){return e=Math.pow(e,n),t=Math.pow(t,n)-e,n=1/n,function(r){return Math.pow(e+r*t,n)}}(t,n,e):Object(r.default)(isNaN(t)?n:t)}}function a(e,t){var n=t-e;return n?o(e,n):Object(r.default)(isNaN(e)?t:e)}},"./node_modules/d3-interpolate/src/constant.js": -/*!*****************************************************!*\ - !*** ./node_modules/d3-interpolate/src/constant.js ***! - \*****************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(e){return function(){return e}}},"./node_modules/d3-interpolate/src/cubehelix.js": -/*!******************************************************!*\ - !*** ./node_modules/d3-interpolate/src/cubehelix.js ***! - \******************************************************/ -/*! exports provided: default, cubehelixLong */function(e,t,n){"use strict";n.r(t),n.d(t,"cubehelixLong",(function(){return s}));var r=n(/*! d3-color */"./node_modules/d3-color/src/index.js"),o=n(/*! ./color.js */"./node_modules/d3-interpolate/src/color.js");function i(e){return function t(n){function i(t,i){var s=e((t=Object(r.cubehelix)(t)).h,(i=Object(r.cubehelix)(i)).h),a=Object(o.default)(t.s,i.s),c=Object(o.default)(t.l,i.l),u=Object(o.default)(t.opacity,i.opacity);return function(e){return t.h=s(e),t.s=a(e),t.l=c(Math.pow(e,n)),t.opacity=u(e),t+""}}return n=+n,i.gamma=t,i}(1)}t.default=i(o.hue);var s=i(o.default)},"./node_modules/d3-interpolate/src/date.js": -/*!*************************************************!*\ - !*** ./node_modules/d3-interpolate/src/date.js ***! - \*************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(e,t){var n=new Date;return e=+e,t=+t,function(r){return n.setTime(e*(1-r)+t*r),n}}},"./node_modules/d3-interpolate/src/discrete.js": -/*!*****************************************************!*\ - !*** ./node_modules/d3-interpolate/src/discrete.js ***! - \*****************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(e){var t=e.length;return function(n){return e[Math.max(0,Math.min(t-1,Math.floor(n*t)))]}}},"./node_modules/d3-interpolate/src/hcl.js": -/*!************************************************!*\ - !*** ./node_modules/d3-interpolate/src/hcl.js ***! - \************************************************/ -/*! exports provided: default, hclLong */function(e,t,n){"use strict";n.r(t),n.d(t,"hclLong",(function(){return s}));var r=n(/*! d3-color */"./node_modules/d3-color/src/index.js"),o=n(/*! ./color.js */"./node_modules/d3-interpolate/src/color.js");function i(e){return function(t,n){var i=e((t=Object(r.hcl)(t)).h,(n=Object(r.hcl)(n)).h),s=Object(o.default)(t.c,n.c),a=Object(o.default)(t.l,n.l),c=Object(o.default)(t.opacity,n.opacity);return function(e){return t.h=i(e),t.c=s(e),t.l=a(e),t.opacity=c(e),t+""}}}t.default=i(o.hue);var s=i(o.default)},"./node_modules/d3-interpolate/src/hsl.js": -/*!************************************************!*\ - !*** ./node_modules/d3-interpolate/src/hsl.js ***! - \************************************************/ -/*! exports provided: default, hslLong */function(e,t,n){"use strict";n.r(t),n.d(t,"hslLong",(function(){return s}));var r=n(/*! d3-color */"./node_modules/d3-color/src/index.js"),o=n(/*! ./color.js */"./node_modules/d3-interpolate/src/color.js");function i(e){return function(t,n){var i=e((t=Object(r.hsl)(t)).h,(n=Object(r.hsl)(n)).h),s=Object(o.default)(t.s,n.s),a=Object(o.default)(t.l,n.l),c=Object(o.default)(t.opacity,n.opacity);return function(e){return t.h=i(e),t.s=s(e),t.l=a(e),t.opacity=c(e),t+""}}}t.default=i(o.hue);var s=i(o.default)},"./node_modules/d3-interpolate/src/hue.js": -/*!************************************************!*\ - !*** ./node_modules/d3-interpolate/src/hue.js ***! - \************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./color.js */"./node_modules/d3-interpolate/src/color.js");t.default=function(e,t){var n=Object(r.hue)(+e,+t);return function(e){var t=n(e);return t-360*Math.floor(t/360)}}},"./node_modules/d3-interpolate/src/index.js": -/*!**************************************************!*\ - !*** ./node_modules/d3-interpolate/src/index.js ***! - \**************************************************/ -/*! exports provided: interpolate, interpolateArray, interpolateBasis, interpolateBasisClosed, interpolateDate, interpolateDiscrete, interpolateHue, interpolateNumber, interpolateNumberArray, interpolateObject, interpolateRound, interpolateString, interpolateTransformCss, interpolateTransformSvg, interpolateZoom, interpolateRgb, interpolateRgbBasis, interpolateRgbBasisClosed, interpolateHsl, interpolateHslLong, interpolateLab, interpolateHcl, interpolateHclLong, interpolateCubehelix, interpolateCubehelixLong, piecewise, quantize */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./value.js */"./node_modules/d3-interpolate/src/value.js");n.d(t,"interpolate",(function(){return r.default}));var o=n(/*! ./array.js */"./node_modules/d3-interpolate/src/array.js");n.d(t,"interpolateArray",(function(){return o.default}));var i=n(/*! ./basis.js */"./node_modules/d3-interpolate/src/basis.js");n.d(t,"interpolateBasis",(function(){return i.default}));var s=n(/*! ./basisClosed.js */"./node_modules/d3-interpolate/src/basisClosed.js");n.d(t,"interpolateBasisClosed",(function(){return s.default}));var a=n(/*! ./date.js */"./node_modules/d3-interpolate/src/date.js");n.d(t,"interpolateDate",(function(){return a.default}));var c=n(/*! ./discrete.js */"./node_modules/d3-interpolate/src/discrete.js");n.d(t,"interpolateDiscrete",(function(){return c.default}));var u=n(/*! ./hue.js */"./node_modules/d3-interpolate/src/hue.js");n.d(t,"interpolateHue",(function(){return u.default}));var d=n(/*! ./number.js */"./node_modules/d3-interpolate/src/number.js");n.d(t,"interpolateNumber",(function(){return d.default}));var l=n(/*! ./numberArray.js */"./node_modules/d3-interpolate/src/numberArray.js");n.d(t,"interpolateNumberArray",(function(){return l.default}));var f=n(/*! ./object.js */"./node_modules/d3-interpolate/src/object.js");n.d(t,"interpolateObject",(function(){return f.default}));var h=n(/*! ./round.js */"./node_modules/d3-interpolate/src/round.js");n.d(t,"interpolateRound",(function(){return h.default}));var p=n(/*! ./string.js */"./node_modules/d3-interpolate/src/string.js");n.d(t,"interpolateString",(function(){return p.default}));var m=n(/*! ./transform/index.js */"./node_modules/d3-interpolate/src/transform/index.js");n.d(t,"interpolateTransformCss",(function(){return m.interpolateTransformCss})),n.d(t,"interpolateTransformSvg",(function(){return m.interpolateTransformSvg}));var g=n(/*! ./zoom.js */"./node_modules/d3-interpolate/src/zoom.js");n.d(t,"interpolateZoom",(function(){return g.default}));var y=n(/*! ./rgb.js */"./node_modules/d3-interpolate/src/rgb.js");n.d(t,"interpolateRgb",(function(){return y.default})),n.d(t,"interpolateRgbBasis",(function(){return y.rgbBasis})),n.d(t,"interpolateRgbBasisClosed",(function(){return y.rgbBasisClosed}));var b=n(/*! ./hsl.js */"./node_modules/d3-interpolate/src/hsl.js");n.d(t,"interpolateHsl",(function(){return b.default})),n.d(t,"interpolateHslLong",(function(){return b.hslLong}));var _=n(/*! ./lab.js */"./node_modules/d3-interpolate/src/lab.js");n.d(t,"interpolateLab",(function(){return _.default}));var v=n(/*! ./hcl.js */"./node_modules/d3-interpolate/src/hcl.js");n.d(t,"interpolateHcl",(function(){return v.default})),n.d(t,"interpolateHclLong",(function(){return v.hclLong}));var j=n(/*! ./cubehelix.js */"./node_modules/d3-interpolate/src/cubehelix.js");n.d(t,"interpolateCubehelix",(function(){return j.default})),n.d(t,"interpolateCubehelixLong",(function(){return j.cubehelixLong}));var x=n(/*! ./piecewise.js */"./node_modules/d3-interpolate/src/piecewise.js");n.d(t,"piecewise",(function(){return x.default}));var k=n(/*! ./quantize.js */"./node_modules/d3-interpolate/src/quantize.js");n.d(t,"quantize",(function(){return k.default}))},"./node_modules/d3-interpolate/src/lab.js": -/*!************************************************!*\ - !*** ./node_modules/d3-interpolate/src/lab.js ***! - \************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return i}));var r=n(/*! d3-color */"./node_modules/d3-color/src/index.js"),o=n(/*! ./color.js */"./node_modules/d3-interpolate/src/color.js");function i(e,t){var n=Object(o.default)((e=Object(r.lab)(e)).l,(t=Object(r.lab)(t)).l),i=Object(o.default)(e.a,t.a),s=Object(o.default)(e.b,t.b),a=Object(o.default)(e.opacity,t.opacity);return function(t){return e.l=n(t),e.a=i(t),e.b=s(t),e.opacity=a(t),e+""}}},"./node_modules/d3-interpolate/src/number.js": -/*!***************************************************!*\ - !*** ./node_modules/d3-interpolate/src/number.js ***! - \***************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(e,t){return e=+e,t=+t,function(n){return e*(1-n)+t*n}}},"./node_modules/d3-interpolate/src/numberArray.js": -/*!********************************************************!*\ - !*** ./node_modules/d3-interpolate/src/numberArray.js ***! - \********************************************************/ -/*! exports provided: default, isNumberArray */function(e,t,n){"use strict";function r(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}n.r(t),n.d(t,"isNumberArray",(function(){return r})),t.default=function(e,t){t||(t=[]);var n,r=e?Math.min(t.length,e.length):0,o=t.slice();return function(i){for(n=0;nc&&(a=t.slice(c,a),d[u]?d[u]+=a:d[++u]=a),(n=n[0])===(s=s[0])?d[u]?d[u]+=s:d[++u]=s:(d[++u]=null,l.push({i:u,x:Object(r.default)(n,s)})),c=i.lastIndex;return c180?t+=360:t-e>180&&(e+=360),s.push({i:n.push(i(n)+"rotate(",null,o)-2,x:Object(r.default)(e,t)})):t&&n.push(i(n)+"rotate("+t+o)}(s.rotate,a.rotate,c,u),function(e,t,n,s){e!==t?s.push({i:n.push(i(n)+"skewX(",null,o)-2,x:Object(r.default)(e,t)}):t&&n.push(i(n)+"skewX("+t+o)}(s.skewX,a.skewX,c,u),function(e,t,n,o,s,a){if(e!==n||t!==o){var c=s.push(i(s)+"scale(",null,",",null,")");a.push({i:c-4,x:Object(r.default)(e,n)},{i:c-2,x:Object(r.default)(t,o)})}else 1===n&&1===o||s.push(i(s)+"scale("+n+","+o+")")}(s.scaleX,s.scaleY,a.scaleX,a.scaleY,c,u),s=a=null,function(e){for(var t,n=-1,r=u.length;++n1e-6)if(Math.abs(l*c-u*d)>1e-6&&i){var h=n-s,p=o-a,m=c*c+u*u,g=h*h+p*p,y=Math.sqrt(m),b=Math.sqrt(f),_=i*Math.tan((r-Math.acos((m+f-g)/(2*y*b)))/2),v=_/b,j=_/y;Math.abs(v-1)>1e-6&&(this._+="L"+(e+v*d)+","+(t+v*l)),this._+="A"+i+","+i+",0,0,"+ +(l*h>d*p)+","+(this._x1=e+j*c)+","+(this._y1=t+j*u)}else this._+="L"+(this._x1=e)+","+(this._y1=t)},arc:function(e,t,n,s,a,c){e=+e,t=+t,c=!!c;var u=(n=+n)*Math.cos(s),d=n*Math.sin(s),l=e+u,f=t+d,h=1^c,p=c?s-a:a-s;if(n<0)throw new Error("negative radius: "+n);null===this._x1?this._+="M"+l+","+f:(Math.abs(this._x1-l)>1e-6||Math.abs(this._y1-f)>1e-6)&&(this._+="L"+l+","+f),n&&(p<0&&(p=p%o+o),p>i?this._+="A"+n+","+n+",0,1,"+h+","+(e-u)+","+(t-d)+"A"+n+","+n+",0,1,"+h+","+(this._x1=l)+","+(this._y1=f):p>1e-6&&(this._+="A"+n+","+n+",0,"+ +(p>=r)+","+h+","+(this._x1=e+n*Math.cos(a))+","+(this._y1=t+n*Math.sin(a))))},rect:function(e,t,n,r){this._+="M"+(this._x0=this._x1=+e)+","+(this._y0=this._y1=+t)+"h"+ +n+"v"+ +r+"h"+-n+"Z"},toString:function(){return this._}},t.default=a},"./node_modules/d3-polygon/src/area.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-polygon/src/area.js ***! - \*********************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(e){for(var t,n=-1,r=e.length,o=e[r-1],i=0;++na!=u>a&&s<(c-n)*(a-r)/(u-r)+n&&(d=!d),c=n,u=r;return d}},"./node_modules/d3-polygon/src/cross.js": -/*!**********************************************!*\ - !*** ./node_modules/d3-polygon/src/cross.js ***! - \**********************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(e,t,n){return(t[0]-e[0])*(n[1]-e[1])-(t[1]-e[1])*(n[0]-e[0])}},"./node_modules/d3-polygon/src/hull.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-polygon/src/hull.js ***! - \*********************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./cross.js */"./node_modules/d3-polygon/src/cross.js");function o(e,t){return e[0]-t[0]||e[1]-t[1]}function i(e){for(var t=e.length,n=[0,1],o=2,i=2;i1&&Object(r.default)(e[n[o-2]],e[n[o-1]],e[i])<=0;)--o;n[o++]=i}return n.slice(0,o)}t.default=function(e){if((n=e.length)<3)return null;var t,n,r=new Array(n),s=new Array(n);for(t=0;t=0;--t)l.push(e[r[a[t]][2]]);for(t=+u;t=(i=(m+y)/2))?m=i:y=i,(d=n>=(s=(g+b)/2))?g=s:b=s,o=h,!(h=h[l=d<<1|u]))return o[l]=p,e;if(a=+e._x.call(null,h.data),c=+e._y.call(null,h.data),t===a&&n===c)return p.next=h,o?o[l]=p:e._root=p,e;do{o=o?o[l]=new Array(4):e._root=new Array(4),(u=t>=(i=(m+y)/2))?m=i:y=i,(d=n>=(s=(g+b)/2))?g=s:b=s}while((l=d<<1|u)==(f=(c>=s)<<1|a>=i));return o[f]=h,o[l]=p,e}function o(e){var t,n,o,i,s=e.length,a=new Array(s),c=new Array(s),u=1/0,d=1/0,l=-1/0,f=-1/0;for(n=0;nl&&(l=o),if&&(f=i));if(u>l||d>f)return this;for(this.cover(u,d).cover(l,f),n=0;ne||e>=o||r>t||t>=i;)switch(a=(th||(s=u.y0)>p||(a=u.x1)=b)<<1|e>=y)&&(u=m[m.length-1],m[m.length-1]=m[m.length-1-d],m[m.length-1-d]=u)}else{var _=e-+this._x.call(null,g.data),v=t-+this._y.call(null,g.data),j=_*_+v*v;if(j=(a=(p+g)/2))?p=a:g=a,(d=s>=(c=(m+y)/2))?m=c:y=c,t=h,!(h=h[l=d<<1|u]))return this;if(!h.length)break;(t[l+1&3]||t[l+2&3]||t[l+3&3])&&(n=t,f=l)}for(;h.data!==e;)if(r=h,!(h=h.next))return this;return(o=h.next)&&delete h.next,r?(o?r.next=o:delete r.next,this):t?(o?t[l]=o:delete t[l],(h=t[0]||t[1]||t[2]||t[3])&&h===(t[3]||t[2]||t[1]||t[0])&&!h.length&&(n?n[f]=h:this._root=h),this):(this._root=o,this)}},"./node_modules/d3-quadtree/src/root.js": -/*!**********************************************!*\ - !*** ./node_modules/d3-quadtree/src/root.js ***! - \**********************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(){return this._root}},"./node_modules/d3-quadtree/src/size.js": -/*!**********************************************!*\ - !*** ./node_modules/d3-quadtree/src/size.js ***! - \**********************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(){var e=0;return this.visit((function(t){if(!t.length)do{++e}while(t=t.next)})),e}},"./node_modules/d3-quadtree/src/visit.js": -/*!***********************************************!*\ - !*** ./node_modules/d3-quadtree/src/visit.js ***! - \***********************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./quad.js */"./node_modules/d3-quadtree/src/quad.js");t.default=function(e){var t,n,o,i,s,a,c=[],u=this._root;for(u&&c.push(new r.default(u,this._x0,this._y0,this._x1,this._y1));t=c.pop();)if(!e(u=t.node,o=t.x0,i=t.y0,s=t.x1,a=t.y1)&&u.length){var d=(o+s)/2,l=(i+a)/2;(n=u[3])&&c.push(new r.default(n,d,l,s,a)),(n=u[2])&&c.push(new r.default(n,o,l,d,a)),(n=u[1])&&c.push(new r.default(n,d,i,s,l)),(n=u[0])&&c.push(new r.default(n,o,i,d,l))}return this}},"./node_modules/d3-quadtree/src/visitAfter.js": -/*!****************************************************!*\ - !*** ./node_modules/d3-quadtree/src/visitAfter.js ***! - \****************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./quad.js */"./node_modules/d3-quadtree/src/quad.js");t.default=function(e){var t,n=[],o=[];for(this._root&&n.push(new r.default(this._root,this._x0,this._y0,this._x1,this._y1));t=n.pop();){var i=t.node;if(i.length){var s,a=t.x0,c=t.y0,u=t.x1,d=t.y1,l=(a+u)/2,f=(c+d)/2;(s=i[0])&&n.push(new r.default(s,a,c,l,f)),(s=i[1])&&n.push(new r.default(s,l,c,u,f)),(s=i[2])&&n.push(new r.default(s,a,f,l,d)),(s=i[3])&&n.push(new r.default(s,l,f,u,d))}o.push(t)}for(;t=o.pop();)e(t.node,t.x0,t.y0,t.x1,t.y1);return this}},"./node_modules/d3-quadtree/src/x.js": -/*!*******************************************!*\ - !*** ./node_modules/d3-quadtree/src/x.js ***! - \*******************************************/ -/*! exports provided: defaultX, default */function(e,t,n){"use strict";function r(e){return e[0]}n.r(t),n.d(t,"defaultX",(function(){return r})),t.default=function(e){return arguments.length?(this._x=e,this):this._x}},"./node_modules/d3-quadtree/src/y.js": -/*!*******************************************!*\ - !*** ./node_modules/d3-quadtree/src/y.js ***! - \*******************************************/ -/*! exports provided: defaultY, default */function(e,t,n){"use strict";function r(e){return e[1]}n.r(t),n.d(t,"defaultY",(function(){return r})),t.default=function(e){return arguments.length?(this._y=e,this):this._y}},"./node_modules/d3-random/src/bates.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-random/src/bates.js ***! - \*********************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./defaultSource */"./node_modules/d3-random/src/defaultSource.js"),o=n(/*! ./irwinHall */"./node_modules/d3-random/src/irwinHall.js");t.default=function e(t){function n(e){var n=o.default.source(t)(e);return function(){return n()/e}}return n.source=e,n}(r.default)},"./node_modules/d3-random/src/defaultSource.js": -/*!*****************************************************!*\ - !*** ./node_modules/d3-random/src/defaultSource.js ***! - \*****************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(){return Math.random()}},"./node_modules/d3-random/src/exponential.js": -/*!***************************************************!*\ - !*** ./node_modules/d3-random/src/exponential.js ***! - \***************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./defaultSource */"./node_modules/d3-random/src/defaultSource.js");t.default=function e(t){function n(e){return function(){return-Math.log(1-t())/e}}return n.source=e,n}(r.default)},"./node_modules/d3-random/src/index.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-random/src/index.js ***! - \*********************************************/ -/*! exports provided: randomUniform, randomNormal, randomLogNormal, randomBates, randomIrwinHall, randomExponential */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./uniform */"./node_modules/d3-random/src/uniform.js");n.d(t,"randomUniform",(function(){return r.default}));var o=n(/*! ./normal */"./node_modules/d3-random/src/normal.js");n.d(t,"randomNormal",(function(){return o.default}));var i=n(/*! ./logNormal */"./node_modules/d3-random/src/logNormal.js");n.d(t,"randomLogNormal",(function(){return i.default}));var s=n(/*! ./bates */"./node_modules/d3-random/src/bates.js");n.d(t,"randomBates",(function(){return s.default}));var a=n(/*! ./irwinHall */"./node_modules/d3-random/src/irwinHall.js");n.d(t,"randomIrwinHall",(function(){return a.default}));var c=n(/*! ./exponential */"./node_modules/d3-random/src/exponential.js");n.d(t,"randomExponential",(function(){return c.default}))},"./node_modules/d3-random/src/irwinHall.js": -/*!*************************************************!*\ - !*** ./node_modules/d3-random/src/irwinHall.js ***! - \*************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./defaultSource */"./node_modules/d3-random/src/defaultSource.js");t.default=function e(t){function n(e){return function(){for(var n=0,r=0;r1);return e+n*i*Math.sqrt(-2*Math.log(o)/o)}}return n.source=e,n}(r.default)},"./node_modules/d3-random/src/uniform.js": -/*!***********************************************!*\ - !*** ./node_modules/d3-random/src/uniform.js ***! - \***********************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./defaultSource */"./node_modules/d3-random/src/defaultSource.js");t.default=function e(t){function n(e,n){return e=null==e?0:+e,n=null==n?1:+n,1===arguments.length?(n=e,e=0):n-=e,function(){return t()*n+e}}return n.source=e,n}(r.default)},"./node_modules/d3-scale-chromatic/src/categorical/Accent.js": -/*!*******************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/categorical/Accent.js ***! - \*******************************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ../colors.js */"./node_modules/d3-scale-chromatic/src/colors.js");t.default=Object(r.default)("7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666")},"./node_modules/d3-scale-chromatic/src/categorical/Dark2.js": -/*!******************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/categorical/Dark2.js ***! - \******************************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ../colors.js */"./node_modules/d3-scale-chromatic/src/colors.js");t.default=Object(r.default)("1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666")},"./node_modules/d3-scale-chromatic/src/categorical/Paired.js": -/*!*******************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/categorical/Paired.js ***! - \*******************************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ../colors.js */"./node_modules/d3-scale-chromatic/src/colors.js");t.default=Object(r.default)("a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928")},"./node_modules/d3-scale-chromatic/src/categorical/Pastel1.js": -/*!********************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/categorical/Pastel1.js ***! - \********************************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ../colors.js */"./node_modules/d3-scale-chromatic/src/colors.js");t.default=Object(r.default)("fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2")},"./node_modules/d3-scale-chromatic/src/categorical/Pastel2.js": -/*!********************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/categorical/Pastel2.js ***! - \********************************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ../colors.js */"./node_modules/d3-scale-chromatic/src/colors.js");t.default=Object(r.default)("b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc")},"./node_modules/d3-scale-chromatic/src/categorical/Set1.js": -/*!*****************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/categorical/Set1.js ***! - \*****************************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ../colors.js */"./node_modules/d3-scale-chromatic/src/colors.js");t.default=Object(r.default)("e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999")},"./node_modules/d3-scale-chromatic/src/categorical/Set2.js": -/*!*****************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/categorical/Set2.js ***! - \*****************************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ../colors.js */"./node_modules/d3-scale-chromatic/src/colors.js");t.default=Object(r.default)("66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3")},"./node_modules/d3-scale-chromatic/src/categorical/Set3.js": -/*!*****************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/categorical/Set3.js ***! - \*****************************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ../colors.js */"./node_modules/d3-scale-chromatic/src/colors.js");t.default=Object(r.default)("8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f")},"./node_modules/d3-scale-chromatic/src/categorical/Tableau10.js": -/*!**********************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/categorical/Tableau10.js ***! - \**********************************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ../colors.js */"./node_modules/d3-scale-chromatic/src/colors.js");t.default=Object(r.default)("4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab")},"./node_modules/d3-scale-chromatic/src/categorical/category10.js": -/*!***********************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/categorical/category10.js ***! - \***********************************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ../colors.js */"./node_modules/d3-scale-chromatic/src/colors.js");t.default=Object(r.default)("1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf")},"./node_modules/d3-scale-chromatic/src/colors.js": -/*!*******************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/colors.js ***! - \*******************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(e){for(var t=e.length/6|0,n=new Array(t),r=0;r1)&&(e-=Math.floor(e));var t=Math.abs(e-.5);return a.h=360*e-100,a.s=1.5-1.5*t,a.l=.8-.9*t,a+""}},"./node_modules/d3-scale-chromatic/src/sequential-multi/sinebow.js": -/*!*************************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/sequential-multi/sinebow.js ***! - \*************************************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! d3-color */"./node_modules/d3-color/src/index.js"),o=Object(r.rgb)(),i=Math.PI/3,s=2*Math.PI/3;t.default=function(e){var t;return e=(.5-e)*Math.PI,o.r=255*(t=Math.sin(e))*t,o.g=255*(t=Math.sin(e+i))*t,o.b=255*(t=Math.sin(e+s))*t,o+""}},"./node_modules/d3-scale-chromatic/src/sequential-multi/turbo.js": -/*!***********************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/sequential-multi/turbo.js ***! - \***********************************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(e){return e=Math.max(0,Math.min(1,e)),"rgb("+Math.max(0,Math.min(255,Math.round(34.61+e*(1172.33-e*(10793.56-e*(33300.12-e*(38394.49-14825.05*e)))))))+", "+Math.max(0,Math.min(255,Math.round(23.31+e*(557.33+e*(1225.33-e*(3574.96-e*(1073.77+707.56*e)))))))+", "+Math.max(0,Math.min(255,Math.round(27.2+e*(3211.1-e*(15327.97-e*(27814-e*(22569.18-6838.66*e)))))))+")"}},"./node_modules/d3-scale-chromatic/src/sequential-multi/viridis.js": -/*!*************************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/sequential-multi/viridis.js ***! - \*************************************************************************/ -/*! exports provided: default, magma, inferno, plasma */function(e,t,n){"use strict";n.r(t),n.d(t,"magma",(function(){return i})),n.d(t,"inferno",(function(){return s})),n.d(t,"plasma",(function(){return a}));var r=n(/*! ../colors.js */"./node_modules/d3-scale-chromatic/src/colors.js");function o(e){var t=e.length;return function(n){return e[Math.max(0,Math.min(t-1,Math.floor(n*t)))]}}t.default=o(Object(r.default)("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725"));var i=o(Object(r.default)("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")),s=o(Object(r.default)("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")),a=o(Object(r.default)("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921"))},"./node_modules/d3-scale-chromatic/src/sequential-single/Blues.js": -/*!************************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/sequential-single/Blues.js ***! - \************************************************************************/ -/*! exports provided: scheme, default */function(e,t,n){"use strict";n.r(t),n.d(t,"scheme",(function(){return i}));var r=n(/*! ../colors.js */"./node_modules/d3-scale-chromatic/src/colors.js"),o=n(/*! ../ramp.js */"./node_modules/d3-scale-chromatic/src/ramp.js"),i=new Array(3).concat("deebf79ecae13182bd","eff3ffbdd7e76baed62171b5","eff3ffbdd7e76baed63182bd08519c","eff3ffc6dbef9ecae16baed63182bd08519c","eff3ffc6dbef9ecae16baed64292c62171b5084594","f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594","f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b").map(r.default);t.default=Object(o.default)(i)},"./node_modules/d3-scale-chromatic/src/sequential-single/Greens.js": -/*!*************************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/sequential-single/Greens.js ***! - \*************************************************************************/ -/*! exports provided: scheme, default */function(e,t,n){"use strict";n.r(t),n.d(t,"scheme",(function(){return i}));var r=n(/*! ../colors.js */"./node_modules/d3-scale-chromatic/src/colors.js"),o=n(/*! ../ramp.js */"./node_modules/d3-scale-chromatic/src/ramp.js"),i=new Array(3).concat("e5f5e0a1d99b31a354","edf8e9bae4b374c476238b45","edf8e9bae4b374c47631a354006d2c","edf8e9c7e9c0a1d99b74c47631a354006d2c","edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32","f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32","f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b").map(r.default);t.default=Object(o.default)(i)},"./node_modules/d3-scale-chromatic/src/sequential-single/Greys.js": -/*!************************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/sequential-single/Greys.js ***! - \************************************************************************/ -/*! exports provided: scheme, default */function(e,t,n){"use strict";n.r(t),n.d(t,"scheme",(function(){return i}));var r=n(/*! ../colors.js */"./node_modules/d3-scale-chromatic/src/colors.js"),o=n(/*! ../ramp.js */"./node_modules/d3-scale-chromatic/src/ramp.js"),i=new Array(3).concat("f0f0f0bdbdbd636363","f7f7f7cccccc969696525252","f7f7f7cccccc969696636363252525","f7f7f7d9d9d9bdbdbd969696636363252525","f7f7f7d9d9d9bdbdbd969696737373525252252525","fffffff0f0f0d9d9d9bdbdbd969696737373525252252525","fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000").map(r.default);t.default=Object(o.default)(i)},"./node_modules/d3-scale-chromatic/src/sequential-single/Oranges.js": -/*!**************************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/sequential-single/Oranges.js ***! - \**************************************************************************/ -/*! exports provided: scheme, default */function(e,t,n){"use strict";n.r(t),n.d(t,"scheme",(function(){return i}));var r=n(/*! ../colors.js */"./node_modules/d3-scale-chromatic/src/colors.js"),o=n(/*! ../ramp.js */"./node_modules/d3-scale-chromatic/src/ramp.js"),i=new Array(3).concat("fee6cefdae6be6550d","feeddefdbe85fd8d3cd94701","feeddefdbe85fd8d3ce6550da63603","feeddefdd0a2fdae6bfd8d3ce6550da63603","feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04","fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04","fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704").map(r.default);t.default=Object(o.default)(i)},"./node_modules/d3-scale-chromatic/src/sequential-single/Purples.js": -/*!**************************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/sequential-single/Purples.js ***! - \**************************************************************************/ -/*! exports provided: scheme, default */function(e,t,n){"use strict";n.r(t),n.d(t,"scheme",(function(){return i}));var r=n(/*! ../colors.js */"./node_modules/d3-scale-chromatic/src/colors.js"),o=n(/*! ../ramp.js */"./node_modules/d3-scale-chromatic/src/ramp.js"),i=new Array(3).concat("efedf5bcbddc756bb1","f2f0f7cbc9e29e9ac86a51a3","f2f0f7cbc9e29e9ac8756bb154278f","f2f0f7dadaebbcbddc9e9ac8756bb154278f","f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486","fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486","fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d").map(r.default);t.default=Object(o.default)(i)},"./node_modules/d3-scale-chromatic/src/sequential-single/Reds.js": -/*!***********************************************************************!*\ - !*** ./node_modules/d3-scale-chromatic/src/sequential-single/Reds.js ***! - \***********************************************************************/ -/*! exports provided: scheme, default */function(e,t,n){"use strict";n.r(t),n.d(t,"scheme",(function(){return i}));var r=n(/*! ../colors.js */"./node_modules/d3-scale-chromatic/src/colors.js"),o=n(/*! ../ramp.js */"./node_modules/d3-scale-chromatic/src/ramp.js"),i=new Array(3).concat("fee0d2fc9272de2d26","fee5d9fcae91fb6a4acb181d","fee5d9fcae91fb6a4ade2d26a50f15","fee5d9fcbba1fc9272fb6a4ade2d26a50f15","fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d","fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d","fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d").map(r.default);t.default=Object(o.default)(i)},"./node_modules/d3-scale/src/array.js": -/*!********************************************!*\ - !*** ./node_modules/d3-scale/src/array.js ***! - \********************************************/ -/*! exports provided: map, slice */function(e,t,n){"use strict";n.r(t),n.d(t,"map",(function(){return o})),n.d(t,"slice",(function(){return i}));var r=Array.prototype,o=r.map,i=r.slice},"./node_modules/d3-scale/src/band.js": -/*!*******************************************!*\ - !*** ./node_modules/d3-scale/src/band.js ***! - \*******************************************/ -/*! exports provided: default, point */function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return s})),n.d(t,"point",(function(){return c}));var r=n(/*! d3-array */"./node_modules/d3-array/src/index.js"),o=n(/*! ./init */"./node_modules/d3-scale/src/init.js"),i=n(/*! ./ordinal */"./node_modules/d3-scale/src/ordinal.js");function s(){var e,t,n=Object(i.default)().unknown(void 0),a=n.domain,c=n.range,u=[0,1],d=!1,l=0,f=0,h=.5;function p(){var n=a().length,o=u[1]r&&(t=n,n=r,r=t),function(e){return Math.max(n,Math.min(r,e))}}function f(e,t,n){var r=e[0],o=e[1],i=t[0],s=t[1];return o2?h:f,s=d=null,_}function _(t){return isNaN(t=+t)?n:(s||(s=r(p.map(e),m,g)))(e(y(t)))}return _.invert=function(n){return y(t((d||(d=r(m,p.map(e),o.interpolateNumber)))(n)))},_.domain=function(e){return arguments.length?(p=i.map.call(e,a.default),y===u||(y=l(p)),b()):p.slice()},_.range=function(e){return arguments.length?(m=i.slice.call(e),b()):m.slice()},_.rangeRound=function(e){return m=i.slice.call(e),g=o.interpolateRound,b()},_.clamp=function(e){return arguments.length?(y=e?l(p):u,_):y!==u},_.interpolate=function(e){return arguments.length?(g=e,b()):g},_.unknown=function(e){return arguments.length?(n=e,_):n},function(n,r){return e=n,t=r,b()}}function g(e,t){return m()(e,t)}},"./node_modules/d3-scale/src/diverging.js": -/*!************************************************!*\ - !*** ./node_modules/d3-scale/src/diverging.js ***! - \************************************************/ -/*! exports provided: default, divergingLog, divergingSymlog, divergingPow, divergingSqrt */function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return l})),n.d(t,"divergingLog",(function(){return f})),n.d(t,"divergingSymlog",(function(){return h})),n.d(t,"divergingPow",(function(){return p})),n.d(t,"divergingSqrt",(function(){return m}));var r=n(/*! ./continuous */"./node_modules/d3-scale/src/continuous.js"),o=n(/*! ./init */"./node_modules/d3-scale/src/init.js"),i=n(/*! ./linear */"./node_modules/d3-scale/src/linear.js"),s=n(/*! ./log */"./node_modules/d3-scale/src/log.js"),a=n(/*! ./sequential */"./node_modules/d3-scale/src/sequential.js"),c=n(/*! ./symlog */"./node_modules/d3-scale/src/symlog.js"),u=n(/*! ./pow */"./node_modules/d3-scale/src/pow.js");function d(){var e,t,n,o,i,s,a,c=0,u=.5,d=1,l=r.identity,f=!1;function h(e){return isNaN(e=+e)?a:(e=.5+((e=+s(e))-t)*(e0?(c=Math.floor(c/o)*o,u=Math.ceil(u/o)*o,o=Object(r.tickIncrement)(c,u,n)):o<0&&(c=Math.ceil(c*o)/o,u=Math.floor(u*o)/o,o=Object(r.tickIncrement)(c,u,n)),o>0?(i[s]=Math.floor(c/o)*o,i[a]=Math.ceil(u/o)*o,t(i)):o<0&&(i[s]=Math.ceil(c*o)/o,i[a]=Math.floor(u*o)/o,t(i)),e},e}function c(){var e=Object(o.default)(o.identity,o.identity);return e.copy=function(){return Object(o.copy)(e,c())},i.initRange.apply(e,arguments),a(e)}},"./node_modules/d3-scale/src/log.js": -/*!******************************************!*\ - !*** ./node_modules/d3-scale/src/log.js ***! - \******************************************/ -/*! exports provided: loggish, default */function(e,t,n){"use strict";n.r(t),n.d(t,"loggish",(function(){return p})),n.d(t,"default",(function(){return m}));var r=n(/*! d3-array */"./node_modules/d3-array/src/index.js"),o=n(/*! d3-format */"./node_modules/d3-format/src/index.js"),i=n(/*! ./nice */"./node_modules/d3-scale/src/nice.js"),s=n(/*! ./continuous */"./node_modules/d3-scale/src/continuous.js"),a=n(/*! ./init */"./node_modules/d3-scale/src/init.js");function c(e){return Math.log(e)}function u(e){return Math.exp(e)}function d(e){return-Math.log(-e)}function l(e){return-Math.exp(-e)}function f(e){return isFinite(e)?+("1e"+e):e<0?0:e}function h(e){return function(t){return-e(-t)}}function p(e){var t,n,s=e(c,u),a=s.domain,p=10;function m(){return t=function(e){return e===Math.E?Math.log:10===e&&Math.log10||2===e&&Math.log2||(e=Math.log(e),function(t){return Math.log(t)/e})}(p),n=function(e){return 10===e?f:e===Math.E?Math.exp:function(t){return Math.pow(e,t)}}(p),a()[0]<0?(t=h(t),n=h(n),e(d,l)):e(c,u),s}return s.base=function(e){return arguments.length?(p=+e,m()):p},s.domain=function(e){return arguments.length?(a(e),m()):a()},s.ticks=function(e){var o,i=a(),s=i[0],c=i[i.length-1];(o=c0){for(;fc)break;g.push(l)}}else for(;f=1;--d)if(!((l=u*d)c)break;g.push(l)}}else g=Object(r.ticks)(f,h,Math.min(h-f,m)).map(n);return o?g.reverse():g},s.tickFormat=function(e,r){if(null==r&&(r=10===p?".0e":","),"function"!=typeof r&&(r=Object(o.format)(r)),e===1/0)return r;null==e&&(e=10);var i=Math.max(1,p*e/s.ticks().length);return function(e){var o=e/n(Math.round(t(e)));return o*p0?a[r-1]:t[0],r=c?[u[c-1],n]:[u[r-1],u[r]]},l.unknown=function(t){return arguments.length?(e=t,l):l},l.thresholds=function(){return u.slice()},l.copy=function(){return a().domain([t,n]).range(d).unknown(e)},s.initRange.apply(Object(i.linearish)(l),arguments)}},"./node_modules/d3-scale/src/sequential.js": -/*!*************************************************!*\ - !*** ./node_modules/d3-scale/src/sequential.js ***! - \*************************************************/ -/*! exports provided: copy, default, sequentialLog, sequentialSymlog, sequentialPow, sequentialSqrt */function(e,t,n){"use strict";n.r(t),n.d(t,"copy",(function(){return d})),n.d(t,"default",(function(){return l})),n.d(t,"sequentialLog",(function(){return f})),n.d(t,"sequentialSymlog",(function(){return h})),n.d(t,"sequentialPow",(function(){return p})),n.d(t,"sequentialSqrt",(function(){return m}));var r=n(/*! ./continuous */"./node_modules/d3-scale/src/continuous.js"),o=n(/*! ./init */"./node_modules/d3-scale/src/init.js"),i=n(/*! ./linear */"./node_modules/d3-scale/src/linear.js"),s=n(/*! ./log */"./node_modules/d3-scale/src/log.js"),a=n(/*! ./symlog */"./node_modules/d3-scale/src/symlog.js"),c=n(/*! ./pow */"./node_modules/d3-scale/src/pow.js");function u(){var e,t,n,o,i,s=0,a=1,c=r.identity,u=!1;function d(t){return isNaN(t=+t)?i:c(0===n?.5:(t=(o(t)-e)*n,u?Math.max(0,Math.min(1,t)):t))}return d.domain=function(r){return arguments.length?(e=o(s=+r[0]),t=o(a=+r[1]),n=e===t?0:1/(t-e),d):[s,a]},d.clamp=function(e){return arguments.length?(u=!!e,d):u},d.interpolator=function(e){return arguments.length?(c=e,d):c},d.unknown=function(e){return arguments.length?(i=e,d):i},function(r){return o=r,e=r(s),t=r(a),n=e===t?0:1/(t-e),d}}function d(e,t){return t.domain(e.domain()).interpolator(e.interpolator()).clamp(e.clamp()).unknown(e.unknown())}function l(){var e=Object(i.linearish)(u()(r.identity));return e.copy=function(){return d(e,l())},o.initInterpolator.apply(e,arguments)}function f(){var e=Object(s.loggish)(u()).domain([1,10]);return e.copy=function(){return d(e,f()).base(e.base())},o.initInterpolator.apply(e,arguments)}function h(){var e=Object(a.symlogish)(u());return e.copy=function(){return d(e,h()).constant(e.constant())},o.initInterpolator.apply(e,arguments)}function p(){var e=Object(c.powish)(u());return e.copy=function(){return d(e,p()).exponent(e.exponent())},o.initInterpolator.apply(e,arguments)}function m(){return p.apply(null,arguments).exponent(.5)}},"./node_modules/d3-scale/src/sequentialQuantile.js": -/*!*********************************************************!*\ - !*** ./node_modules/d3-scale/src/sequentialQuantile.js ***! - \*********************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return s}));var r=n(/*! d3-array */"./node_modules/d3-array/src/index.js"),o=n(/*! ./continuous */"./node_modules/d3-scale/src/continuous.js"),i=n(/*! ./init */"./node_modules/d3-scale/src/init.js");function s(){var e=[],t=o.identity;function n(n){if(!isNaN(n=+n))return t((Object(r.bisect)(e,n)-1)/(e.length-1))}return n.domain=function(t){if(!arguments.length)return e.slice();e=[];for(var o,i=0,s=t.length;i=0&&"xmlns"!==(t=e.slice(0,n))&&(e=e.slice(n+1)),r.default.hasOwnProperty(t)?{space:r.default[t],local:e}:e}},"./node_modules/d3-selection/src/namespaces.js": -/*!*****************************************************!*\ - !*** ./node_modules/d3-selection/src/namespaces.js ***! - \*****************************************************/ -/*! exports provided: xhtml, default */function(e,t,n){"use strict";n.r(t),n.d(t,"xhtml",(function(){return r}));var r="http://www.w3.org/1999/xhtml";t.default={svg:"http://www.w3.org/2000/svg",xhtml:r,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"}},"./node_modules/d3-selection/src/point.js": -/*!************************************************!*\ - !*** ./node_modules/d3-selection/src/point.js ***! - \************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(e,t){var n=e.ownerSVGElement||e;if(n.createSVGPoint){var r=n.createSVGPoint();return r.x=t.clientX,r.y=t.clientY,[(r=r.matrixTransform(e.getScreenCTM().inverse())).x,r.y]}var o=e.getBoundingClientRect();return[t.clientX-o.left-e.clientLeft,t.clientY-o.top-e.clientTop]}},"./node_modules/d3-selection/src/select.js": -/*!*************************************************!*\ - !*** ./node_modules/d3-selection/src/select.js ***! - \*************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./selection/index */"./node_modules/d3-selection/src/selection/index.js");t.default=function(e){return"string"==typeof e?new r.Selection([[document.querySelector(e)]],[document.documentElement]):new r.Selection([[e]],r.root)}},"./node_modules/d3-selection/src/selectAll.js": -/*!****************************************************!*\ - !*** ./node_modules/d3-selection/src/selectAll.js ***! - \****************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./selection/index */"./node_modules/d3-selection/src/selection/index.js");t.default=function(e){return"string"==typeof e?new r.Selection([document.querySelectorAll(e)],[document.documentElement]):new r.Selection([null==e?[]:e],r.root)}},"./node_modules/d3-selection/src/selection/append.js": -/*!***********************************************************!*\ - !*** ./node_modules/d3-selection/src/selection/append.js ***! - \***********************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ../creator */"./node_modules/d3-selection/src/creator.js");t.default=function(e){var t="function"==typeof e?e:Object(r.default)(e);return this.select((function(){return this.appendChild(t.apply(this,arguments))}))}},"./node_modules/d3-selection/src/selection/attr.js": -/*!*********************************************************!*\ - !*** ./node_modules/d3-selection/src/selection/attr.js ***! - \*********************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ../namespace */"./node_modules/d3-selection/src/namespace.js");function o(e){return function(){this.removeAttribute(e)}}function i(e){return function(){this.removeAttributeNS(e.space,e.local)}}function s(e,t){return function(){this.setAttribute(e,t)}}function a(e,t){return function(){this.setAttributeNS(e.space,e.local,t)}}function c(e,t){return function(){var n=t.apply(this,arguments);null==n?this.removeAttribute(e):this.setAttribute(e,n)}}function u(e,t){return function(){var n=t.apply(this,arguments);null==n?this.removeAttributeNS(e.space,e.local):this.setAttributeNS(e.space,e.local,n)}}t.default=function(e,t){var n=Object(r.default)(e);if(arguments.length<2){var d=this.node();return n.local?d.getAttributeNS(n.space,n.local):d.getAttribute(n)}return this.each((null==t?n.local?i:o:"function"==typeof t?n.local?u:c:n.local?a:s)(n,t))}},"./node_modules/d3-selection/src/selection/call.js": -/*!*********************************************************!*\ - !*** ./node_modules/d3-selection/src/selection/call.js ***! - \*********************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(){var e=arguments[0];return arguments[0]=this,e.apply(null,arguments),this}},"./node_modules/d3-selection/src/selection/classed.js": -/*!************************************************************!*\ - !*** ./node_modules/d3-selection/src/selection/classed.js ***! - \************************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";function r(e){return e.trim().split(/^|\s+/)}function o(e){return e.classList||new i(e)}function i(e){this._node=e,this._names=r(e.getAttribute("class")||"")}function s(e,t){for(var n=o(e),r=-1,i=t.length;++r=0&&(this._names.splice(t,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(e){return this._names.indexOf(e)>=0}},t.default=function(e,t){var n=r(e+"");if(arguments.length<2){for(var i=o(this.node()),s=-1,a=n.length;++s=w&&(w=k+1);!(x=v[w])&&++w=0&&(t=e.slice(n+1),e=e.slice(0,n)),{type:e,name:t}}))}function c(e){return function(){var t=this.__on;if(t){for(var n,r=0,o=-1,i=t.length;r=0;)(r=o[i])&&(s&&4^r.compareDocumentPosition(s)&&s.parentNode.insertBefore(r,s),s=r);return this}},"./node_modules/d3-selection/src/selection/property.js": -/*!*************************************************************!*\ - !*** ./node_modules/d3-selection/src/selection/property.js ***! - \*************************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";function r(e){return function(){delete this[e]}}function o(e,t){return function(){this[e]=t}}function i(e,t){return function(){var n=t.apply(this,arguments);null==n?delete this[e]:this[e]=n}}n.r(t),t.default=function(e,t){return arguments.length>1?this.each((null==t?r:"function"==typeof t?i:o)(e,t)):this.node()[e]}},"./node_modules/d3-selection/src/selection/raise.js": -/*!**********************************************************!*\ - !*** ./node_modules/d3-selection/src/selection/raise.js ***! - \**********************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";function r(){this.nextSibling&&this.parentNode.appendChild(this)}n.r(t),t.default=function(){return this.each(r)}},"./node_modules/d3-selection/src/selection/remove.js": -/*!***********************************************************!*\ - !*** ./node_modules/d3-selection/src/selection/remove.js ***! - \***********************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";function r(){var e=this.parentNode;e&&e.removeChild(this)}n.r(t),t.default=function(){return this.each(r)}},"./node_modules/d3-selection/src/selection/select.js": -/*!***********************************************************!*\ - !*** ./node_modules/d3-selection/src/selection/select.js ***! - \***********************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./index */"./node_modules/d3-selection/src/selection/index.js"),o=n(/*! ../selector */"./node_modules/d3-selection/src/selector.js");t.default=function(e){"function"!=typeof e&&(e=Object(o.default)(e));for(var t=this._groups,n=t.length,i=new Array(n),s=0;st?1:e>=t?0:NaN}t.default=function(e){function t(t,n){return t&&n?e(t.__data__,n.__data__):!t-!n}e||(e=o);for(var n=this._groups,i=n.length,s=new Array(i),a=0;a1?this.each((null==t?o:"function"==typeof t?s:i)(e,t,null==n?"":n)):a(this.node(),e)}},"./node_modules/d3-selection/src/selection/text.js": -/*!*********************************************************!*\ - !*** ./node_modules/d3-selection/src/selection/text.js ***! - \*********************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";function r(){this.textContent=""}function o(e){return function(){this.textContent=e}}function i(e){return function(){var t=e.apply(this,arguments);this.textContent=null==t?"":t}}n.r(t),t.default=function(e){return arguments.length?this.each(null==e?r:("function"==typeof e?i:o)(e)):this.node().textContent}},"./node_modules/d3-selection/src/selector.js": -/*!***************************************************!*\ - !*** ./node_modules/d3-selection/src/selector.js ***! - \***************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";function r(){}n.r(t),t.default=function(e){return null==e?r:function(){return this.querySelector(e)}}},"./node_modules/d3-selection/src/selectorAll.js": -/*!******************************************************!*\ - !*** ./node_modules/d3-selection/src/selectorAll.js ***! - \******************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";function r(){return[]}n.r(t),t.default=function(e){return null==e?r:function(){return this.querySelectorAll(e)}}},"./node_modules/d3-selection/src/sourceEvent.js": -/*!******************************************************!*\ - !*** ./node_modules/d3-selection/src/sourceEvent.js ***! - \******************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./selection/on */"./node_modules/d3-selection/src/selection/on.js");t.default=function(){for(var e,t=r.event;e=t.sourceEvent;)t=e;return t}},"./node_modules/d3-selection/src/touch.js": -/*!************************************************!*\ - !*** ./node_modules/d3-selection/src/touch.js ***! - \************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./sourceEvent */"./node_modules/d3-selection/src/sourceEvent.js"),o=n(/*! ./point */"./node_modules/d3-selection/src/point.js");t.default=function(e,t,n){arguments.length<3&&(n=t,t=Object(r.default)().changedTouches);for(var i,s=0,a=t?t.length:0;sM*M+D*D&&(O=E,C=T),{cx:O,cy:C,x01:-l,y01:-f,x11:O*(o/x-1),y11:C*(o/x-1)}}t.default=function(){var e=s,t=a,n=Object(o.default)(0),h=null,p=c,m=u,g=d,y=null;function b(){var o,s,a=+e.apply(this,arguments),c=+t.apply(this,arguments),u=p.apply(this,arguments)-i.halfPi,d=m.apply(this,arguments)-i.halfPi,b=Object(i.abs)(d-u),_=d>u;if(y||(y=o=Object(r.path)()),ci.epsilon)if(b>i.tau-i.epsilon)y.moveTo(c*Object(i.cos)(u),c*Object(i.sin)(u)),y.arc(0,0,c,u,d,!_),a>i.epsilon&&(y.moveTo(a*Object(i.cos)(d),a*Object(i.sin)(d)),y.arc(0,0,a,d,u,_));else{var v,j,x=u,k=d,w=u,O=d,C=b,E=b,T=g.apply(this,arguments)/2,S=T>i.epsilon&&(h?+h.apply(this,arguments):Object(i.sqrt)(a*a+c*c)),A=Object(i.min)(Object(i.abs)(c-a)/2,+n.apply(this,arguments)),M=A,D=A;if(S>i.epsilon){var B=Object(i.asin)(S/a*Object(i.sin)(T)),N=Object(i.asin)(S/c*Object(i.sin)(T));(C-=2*B)>i.epsilon?(w+=B*=_?1:-1,O-=B):(C=0,w=O=(u+d)/2),(E-=2*N)>i.epsilon?(x+=N*=_?1:-1,k-=N):(E=0,x=k=(u+d)/2)}var L=c*Object(i.cos)(x),P=c*Object(i.sin)(x),I=a*Object(i.cos)(O),R=a*Object(i.sin)(O);if(A>i.epsilon){var F,Y=c*Object(i.cos)(k),z=c*Object(i.sin)(k),q=a*Object(i.cos)(w),G=a*Object(i.sin)(w);if(bi.epsilon?D>i.epsilon?(v=f(q,G,L,P,c,D,_),j=f(Y,z,I,R,c,D,_),y.moveTo(v.cx+v.x01,v.cy+v.y01),Di.epsilon&&C>i.epsilon?M>i.epsilon?(v=f(I,R,Y,z,a,-M,_),j=f(L,P,q,G,a,-M,_),y.lineTo(v.cx+v.x01,v.cy+v.y01),M=s;--a)f.point(y[a],b[a]);f.lineEnd(),f.areaEnd()}g&&(y[i]=+e(h,i,o),b[i]=+n(h,i,o),f.point(t?+t(h,i,o):y[i],c?+c(h,i,o):b[i]))}if(p)return f=null,p+""||null}function p(){return Object(s.default)().defined(u).curve(l).context(d)}return h.x=function(n){return arguments.length?(e="function"==typeof n?n:Object(o.default)(+n),t=null,h):e},h.x0=function(t){return arguments.length?(e="function"==typeof t?t:Object(o.default)(+t),h):e},h.x1=function(e){return arguments.length?(t=null==e?null:"function"==typeof e?e:Object(o.default)(+e),h):t},h.y=function(e){return arguments.length?(n="function"==typeof e?e:Object(o.default)(+e),c=null,h):n},h.y0=function(e){return arguments.length?(n="function"==typeof e?e:Object(o.default)(+e),h):n},h.y1=function(e){return arguments.length?(c=null==e?null:"function"==typeof e?e:Object(o.default)(+e),h):c},h.lineX0=h.lineY0=function(){return p().x(e).y(n)},h.lineY1=function(){return p().x(e).y(c)},h.lineX1=function(){return p().x(t).y(n)},h.defined=function(e){return arguments.length?(u="function"==typeof e?e:Object(o.default)(!!e),h):u},h.curve=function(e){return arguments.length?(l=e,null!=d&&(f=l(d)),h):l},h.context=function(e){return arguments.length?(null==e?d=f=null:f=l(d=e),h):d},h}},"./node_modules/d3-shape/src/areaRadial.js": -/*!*************************************************!*\ - !*** ./node_modules/d3-shape/src/areaRadial.js ***! - \*************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./curve/radial.js */"./node_modules/d3-shape/src/curve/radial.js"),o=n(/*! ./area.js */"./node_modules/d3-shape/src/area.js"),i=n(/*! ./lineRadial.js */"./node_modules/d3-shape/src/lineRadial.js");t.default=function(){var e=Object(o.default)().curve(r.curveRadialLinear),t=e.curve,n=e.lineX0,s=e.lineX1,a=e.lineY0,c=e.lineY1;return e.angle=e.x,delete e.x,e.startAngle=e.x0,delete e.x0,e.endAngle=e.x1,delete e.x1,e.radius=e.y,delete e.y,e.innerRadius=e.y0,delete e.y0,e.outerRadius=e.y1,delete e.y1,e.lineStartAngle=function(){return Object(i.lineRadial)(n())},delete e.lineX0,e.lineEndAngle=function(){return Object(i.lineRadial)(s())},delete e.lineX1,e.lineInnerRadius=function(){return Object(i.lineRadial)(a())},delete e.lineY0,e.lineOuterRadius=function(){return Object(i.lineRadial)(c())},delete e.lineY1,e.curve=function(e){return arguments.length?t(Object(r.default)(e)):t()._curve},e}},"./node_modules/d3-shape/src/array.js": -/*!********************************************!*\ - !*** ./node_modules/d3-shape/src/array.js ***! - \********************************************/ -/*! exports provided: slice */function(e,t,n){"use strict";n.r(t),n.d(t,"slice",(function(){return r}));var r=Array.prototype.slice},"./node_modules/d3-shape/src/constant.js": -/*!***********************************************!*\ - !*** ./node_modules/d3-shape/src/constant.js ***! - \***********************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(e){return function(){return e}}},"./node_modules/d3-shape/src/curve/basis.js": -/*!**************************************************!*\ - !*** ./node_modules/d3-shape/src/curve/basis.js ***! - \**************************************************/ -/*! exports provided: point, Basis, default */function(e,t,n){"use strict";function r(e,t,n){e._context.bezierCurveTo((2*e._x0+e._x1)/3,(2*e._y0+e._y1)/3,(e._x0+2*e._x1)/3,(e._y0+2*e._y1)/3,(e._x0+4*e._x1+t)/6,(e._y0+4*e._y1+n)/6)}function o(e){this._context=e}n.r(t),n.d(t,"point",(function(){return r})),n.d(t,"Basis",(function(){return o})),o.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:r(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:r(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}},t.default=function(e){return new o(e)}},"./node_modules/d3-shape/src/curve/basisClosed.js": -/*!********************************************************!*\ - !*** ./node_modules/d3-shape/src/curve/basisClosed.js ***! - \********************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ../noop.js */"./node_modules/d3-shape/src/noop.js"),o=n(/*! ./basis.js */"./node_modules/d3-shape/src/curve/basis.js");function i(e){this._context=e}i.prototype={areaStart:r.default,areaEnd:r.default,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x2=e,this._y2=t;break;case 1:this._point=2,this._x3=e,this._y3=t;break;case 2:this._point=3,this._x4=e,this._y4=t,this._context.moveTo((this._x0+4*this._x1+e)/6,(this._y0+4*this._y1+t)/6);break;default:Object(o.point)(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}},t.default=function(e){return new i(e)}},"./node_modules/d3-shape/src/curve/basisOpen.js": -/*!******************************************************!*\ - !*** ./node_modules/d3-shape/src/curve/basisOpen.js ***! - \******************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./basis.js */"./node_modules/d3-shape/src/curve/basis.js");function o(e){this._context=e}o.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var n=(this._x0+4*this._x1+e)/6,o=(this._y0+4*this._y1+t)/6;this._line?this._context.lineTo(n,o):this._context.moveTo(n,o);break;case 3:this._point=4;default:Object(r.point)(this,e,t)}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}},t.default=function(e){return new o(e)}},"./node_modules/d3-shape/src/curve/bundle.js": -/*!***************************************************!*\ - !*** ./node_modules/d3-shape/src/curve/bundle.js ***! - \***************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./basis.js */"./node_modules/d3-shape/src/curve/basis.js");function o(e,t){this._basis=new r.Basis(e),this._beta=t}o.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var e=this._x,t=this._y,n=e.length-1;if(n>0)for(var r,o=e[0],i=t[0],s=e[n]-o,a=t[n]-i,c=-1;++c<=n;)r=c/n,this._basis.point(this._beta*e[c]+(1-this._beta)*(o+r*s),this._beta*t[c]+(1-this._beta)*(i+r*a));this._x=this._y=null,this._basis.lineEnd()},point:function(e,t){this._x.push(+e),this._y.push(+t)}},t.default=function e(t){function n(e){return 1===t?new r.Basis(e):new o(e,t)}return n.beta=function(t){return e(+t)},n}(.85)},"./node_modules/d3-shape/src/curve/cardinal.js": -/*!*****************************************************!*\ - !*** ./node_modules/d3-shape/src/curve/cardinal.js ***! - \*****************************************************/ -/*! exports provided: point, Cardinal, default */function(e,t,n){"use strict";function r(e,t,n){e._context.bezierCurveTo(e._x1+e._k*(e._x2-e._x0),e._y1+e._k*(e._y2-e._y0),e._x2+e._k*(e._x1-t),e._y2+e._k*(e._y1-n),e._x2,e._y2)}function o(e,t){this._context=e,this._k=(1-t)/6}n.r(t),n.d(t,"point",(function(){return r})),n.d(t,"Cardinal",(function(){return o})),o.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:r(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2,this._x1=e,this._y1=t;break;case 2:this._point=3;default:r(this,e,t)}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}},t.default=function e(t){function n(e){return new o(e,t)}return n.tension=function(t){return e(+t)},n}(0)},"./node_modules/d3-shape/src/curve/cardinalClosed.js": -/*!***********************************************************!*\ - !*** ./node_modules/d3-shape/src/curve/cardinalClosed.js ***! - \***********************************************************/ -/*! exports provided: CardinalClosed, default */function(e,t,n){"use strict";n.r(t),n.d(t,"CardinalClosed",(function(){return i}));var r=n(/*! ../noop.js */"./node_modules/d3-shape/src/noop.js"),o=n(/*! ./cardinal.js */"./node_modules/d3-shape/src/curve/cardinal.js");function i(e,t){this._context=e,this._k=(1-t)/6}i.prototype={areaStart:r.default,areaEnd:r.default,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x3=e,this._y3=t;break;case 1:this._point=2,this._context.moveTo(this._x4=e,this._y4=t);break;case 2:this._point=3,this._x5=e,this._y5=t;break;default:Object(o.point)(this,e,t)}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}},t.default=function e(t){function n(e){return new i(e,t)}return n.tension=function(t){return e(+t)},n}(0)},"./node_modules/d3-shape/src/curve/cardinalOpen.js": -/*!*********************************************************!*\ - !*** ./node_modules/d3-shape/src/curve/cardinalOpen.js ***! - \*********************************************************/ -/*! exports provided: CardinalOpen, default */function(e,t,n){"use strict";n.r(t),n.d(t,"CardinalOpen",(function(){return o}));var r=n(/*! ./cardinal.js */"./node_modules/d3-shape/src/curve/cardinal.js");function o(e,t){this._context=e,this._k=(1-t)/6}o.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Object(r.point)(this,e,t)}this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}},t.default=function e(t){function n(e){return new o(e,t)}return n.tension=function(t){return e(+t)},n}(0)},"./node_modules/d3-shape/src/curve/catmullRom.js": -/*!*******************************************************!*\ - !*** ./node_modules/d3-shape/src/curve/catmullRom.js ***! - \*******************************************************/ -/*! exports provided: point, default */function(e,t,n){"use strict";n.r(t),n.d(t,"point",(function(){return i}));var r=n(/*! ../math.js */"./node_modules/d3-shape/src/math.js"),o=n(/*! ./cardinal.js */"./node_modules/d3-shape/src/curve/cardinal.js");function i(e,t,n){var o=e._x1,i=e._y1,s=e._x2,a=e._y2;if(e._l01_a>r.epsilon){var c=2*e._l01_2a+3*e._l01_a*e._l12_a+e._l12_2a,u=3*e._l01_a*(e._l01_a+e._l12_a);o=(o*c-e._x0*e._l12_2a+e._x2*e._l01_2a)/u,i=(i*c-e._y0*e._l12_2a+e._y2*e._l01_2a)/u}if(e._l23_a>r.epsilon){var d=2*e._l23_2a+3*e._l23_a*e._l12_a+e._l12_2a,l=3*e._l23_a*(e._l23_a+e._l12_a);s=(s*d+e._x1*e._l23_2a-t*e._l12_2a)/l,a=(a*d+e._y1*e._l23_2a-n*e._l12_2a)/l}e._context.bezierCurveTo(o,i,s,a,e._x2,e._y2)}function s(e,t){this._context=e,this._alpha=t}s.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){if(e=+e,t=+t,this._point){var n=this._x2-e,r=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3;default:i(this,e,t)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}},t.default=function e(t){function n(e){return t?new s(e,t):new o.Cardinal(e,0)}return n.alpha=function(t){return e(+t)},n}(.5)},"./node_modules/d3-shape/src/curve/catmullRomClosed.js": -/*!*************************************************************!*\ - !*** ./node_modules/d3-shape/src/curve/catmullRomClosed.js ***! - \*************************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./cardinalClosed.js */"./node_modules/d3-shape/src/curve/cardinalClosed.js"),o=n(/*! ../noop.js */"./node_modules/d3-shape/src/noop.js"),i=n(/*! ./catmullRom.js */"./node_modules/d3-shape/src/curve/catmullRom.js");function s(e,t){this._context=e,this._alpha=t}s.prototype={areaStart:o.default,areaEnd:o.default,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(e,t){if(e=+e,t=+t,this._point){var n=this._x2-e,r=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=e,this._y3=t;break;case 1:this._point=2,this._context.moveTo(this._x4=e,this._y4=t);break;case 2:this._point=3,this._x5=e,this._y5=t;break;default:Object(i.point)(this,e,t)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}},t.default=function e(t){function n(e){return t?new s(e,t):new r.CardinalClosed(e,0)}return n.alpha=function(t){return e(+t)},n}(.5)},"./node_modules/d3-shape/src/curve/catmullRomOpen.js": -/*!***********************************************************!*\ - !*** ./node_modules/d3-shape/src/curve/catmullRomOpen.js ***! - \***********************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./cardinalOpen.js */"./node_modules/d3-shape/src/curve/cardinalOpen.js"),o=n(/*! ./catmullRom.js */"./node_modules/d3-shape/src/curve/catmullRom.js");function i(e,t){this._context=e,this._alpha=t}i.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){if(e=+e,t=+t,this._point){var n=this._x2-e,r=this._y2-t;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:Object(o.point)(this,e,t)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=e,this._y0=this._y1,this._y1=this._y2,this._y2=t}},t.default=function e(t){function n(e){return t?new i(e,t):new r.CardinalOpen(e,0)}return n.alpha=function(t){return e(+t)},n}(.5)},"./node_modules/d3-shape/src/curve/linear.js": -/*!***************************************************!*\ - !*** ./node_modules/d3-shape/src/curve/linear.js ***! - \***************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";function r(e){this._context=e}n.r(t),r.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:this._context.lineTo(e,t)}}},t.default=function(e){return new r(e)}},"./node_modules/d3-shape/src/curve/linearClosed.js": -/*!*********************************************************!*\ - !*** ./node_modules/d3-shape/src/curve/linearClosed.js ***! - \*********************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ../noop.js */"./node_modules/d3-shape/src/noop.js");function o(e){this._context=e}o.prototype={areaStart:r.default,areaEnd:r.default,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(e,t){e=+e,t=+t,this._point?this._context.lineTo(e,t):(this._point=1,this._context.moveTo(e,t))}},t.default=function(e){return new o(e)}},"./node_modules/d3-shape/src/curve/monotone.js": -/*!*****************************************************!*\ - !*** ./node_modules/d3-shape/src/curve/monotone.js ***! - \*****************************************************/ -/*! exports provided: monotoneX, monotoneY */function(e,t,n){"use strict";function r(e){return e<0?-1:1}function o(e,t,n){var o=e._x1-e._x0,i=t-e._x1,s=(e._y1-e._y0)/(o||i<0&&-0),a=(n-e._y1)/(i||o<0&&-0),c=(s*i+a*o)/(o+i);return(r(s)+r(a))*Math.min(Math.abs(s),Math.abs(a),.5*Math.abs(c))||0}function i(e,t){var n=e._x1-e._x0;return n?(3*(e._y1-e._y0)/n-t)/2:t}function s(e,t,n){var r=e._x0,o=e._y0,i=e._x1,s=e._y1,a=(i-r)/3;e._context.bezierCurveTo(r+a,o+a*t,i-a,s-a*n,i,s)}function a(e){this._context=e}function c(e){this._context=new u(e)}function u(e){this._context=e}function d(e){return new a(e)}function l(e){return new c(e)}n.r(t),n.d(t,"monotoneX",(function(){return d})),n.d(t,"monotoneY",(function(){return l})),a.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:s(this,this._t0,i(this,this._t0))}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){var n=NaN;if(t=+t,(e=+e)!==this._x1||t!==this._y1){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,s(this,i(this,n=o(this,e,t)),n);break;default:s(this,this._t0,n=o(this,e,t))}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t,this._t0=n}}},(c.prototype=Object.create(a.prototype)).point=function(e,t){a.prototype.point.call(this,t,e)},u.prototype={moveTo:function(e,t){this._context.moveTo(t,e)},closePath:function(){this._context.closePath()},lineTo:function(e,t){this._context.lineTo(t,e)},bezierCurveTo:function(e,t,n,r,o,i){this._context.bezierCurveTo(t,e,r,n,i,o)}}},"./node_modules/d3-shape/src/curve/natural.js": -/*!****************************************************!*\ - !*** ./node_modules/d3-shape/src/curve/natural.js ***! - \****************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";function r(e){this._context=e}function o(e){var t,n,r=e.length-1,o=new Array(r),i=new Array(r),s=new Array(r);for(o[0]=0,i[0]=2,s[0]=e[0]+2*e[1],t=1;t=0;--t)o[t]=(s[t]-o[t+1])/i[t];for(i[r-1]=(e[r]+o[r-1])/2,t=0;t=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,t),this._context.lineTo(e,t);else{var n=this._x*(1-this._t)+e*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,t)}}this._x=e,this._y=t}},t.default=function(e){return new r(e,.5)}},"./node_modules/d3-shape/src/descending.js": -/*!*************************************************!*\ - !*** ./node_modules/d3-shape/src/descending.js ***! - \*************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(e,t){return te?1:t>=e?0:NaN}},"./node_modules/d3-shape/src/identity.js": -/*!***********************************************!*\ - !*** ./node_modules/d3-shape/src/identity.js ***! - \***********************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(e){return e}},"./node_modules/d3-shape/src/index.js": -/*!********************************************!*\ - !*** ./node_modules/d3-shape/src/index.js ***! - \********************************************/ -/*! exports provided: arc, area, line, pie, areaRadial, radialArea, lineRadial, radialLine, pointRadial, linkHorizontal, linkVertical, linkRadial, symbol, symbols, symbolCircle, symbolCross, symbolDiamond, symbolSquare, symbolStar, symbolTriangle, symbolWye, curveBasisClosed, curveBasisOpen, curveBasis, curveBundle, curveCardinalClosed, curveCardinalOpen, curveCardinal, curveCatmullRomClosed, curveCatmullRomOpen, curveCatmullRom, curveLinearClosed, curveLinear, curveMonotoneX, curveMonotoneY, curveNatural, curveStep, curveStepAfter, curveStepBefore, stack, stackOffsetExpand, stackOffsetDiverging, stackOffsetNone, stackOffsetSilhouette, stackOffsetWiggle, stackOrderAppearance, stackOrderAscending, stackOrderDescending, stackOrderInsideOut, stackOrderNone, stackOrderReverse */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./arc.js */"./node_modules/d3-shape/src/arc.js");n.d(t,"arc",(function(){return r.default}));var o=n(/*! ./area.js */"./node_modules/d3-shape/src/area.js");n.d(t,"area",(function(){return o.default}));var i=n(/*! ./line.js */"./node_modules/d3-shape/src/line.js");n.d(t,"line",(function(){return i.default}));var s=n(/*! ./pie.js */"./node_modules/d3-shape/src/pie.js");n.d(t,"pie",(function(){return s.default}));var a=n(/*! ./areaRadial.js */"./node_modules/d3-shape/src/areaRadial.js");n.d(t,"areaRadial",(function(){return a.default})),n.d(t,"radialArea",(function(){return a.default}));var c=n(/*! ./lineRadial.js */"./node_modules/d3-shape/src/lineRadial.js");n.d(t,"lineRadial",(function(){return c.default})),n.d(t,"radialLine",(function(){return c.default}));var u=n(/*! ./pointRadial.js */"./node_modules/d3-shape/src/pointRadial.js");n.d(t,"pointRadial",(function(){return u.default}));var d=n(/*! ./link/index.js */"./node_modules/d3-shape/src/link/index.js");n.d(t,"linkHorizontal",(function(){return d.linkHorizontal})),n.d(t,"linkVertical",(function(){return d.linkVertical})),n.d(t,"linkRadial",(function(){return d.linkRadial}));var l=n(/*! ./symbol.js */"./node_modules/d3-shape/src/symbol.js");n.d(t,"symbol",(function(){return l.default})),n.d(t,"symbols",(function(){return l.symbols}));var f=n(/*! ./symbol/circle.js */"./node_modules/d3-shape/src/symbol/circle.js");n.d(t,"symbolCircle",(function(){return f.default}));var h=n(/*! ./symbol/cross.js */"./node_modules/d3-shape/src/symbol/cross.js");n.d(t,"symbolCross",(function(){return h.default}));var p=n(/*! ./symbol/diamond.js */"./node_modules/d3-shape/src/symbol/diamond.js");n.d(t,"symbolDiamond",(function(){return p.default}));var m=n(/*! ./symbol/square.js */"./node_modules/d3-shape/src/symbol/square.js");n.d(t,"symbolSquare",(function(){return m.default}));var g=n(/*! ./symbol/star.js */"./node_modules/d3-shape/src/symbol/star.js");n.d(t,"symbolStar",(function(){return g.default}));var y=n(/*! ./symbol/triangle.js */"./node_modules/d3-shape/src/symbol/triangle.js");n.d(t,"symbolTriangle",(function(){return y.default}));var b=n(/*! ./symbol/wye.js */"./node_modules/d3-shape/src/symbol/wye.js");n.d(t,"symbolWye",(function(){return b.default}));var _=n(/*! ./curve/basisClosed.js */"./node_modules/d3-shape/src/curve/basisClosed.js");n.d(t,"curveBasisClosed",(function(){return _.default}));var v=n(/*! ./curve/basisOpen.js */"./node_modules/d3-shape/src/curve/basisOpen.js");n.d(t,"curveBasisOpen",(function(){return v.default}));var j=n(/*! ./curve/basis.js */"./node_modules/d3-shape/src/curve/basis.js");n.d(t,"curveBasis",(function(){return j.default}));var x=n(/*! ./curve/bundle.js */"./node_modules/d3-shape/src/curve/bundle.js");n.d(t,"curveBundle",(function(){return x.default}));var k=n(/*! ./curve/cardinalClosed.js */"./node_modules/d3-shape/src/curve/cardinalClosed.js");n.d(t,"curveCardinalClosed",(function(){return k.default}));var w=n(/*! ./curve/cardinalOpen.js */"./node_modules/d3-shape/src/curve/cardinalOpen.js");n.d(t,"curveCardinalOpen",(function(){return w.default}));var O=n(/*! ./curve/cardinal.js */"./node_modules/d3-shape/src/curve/cardinal.js");n.d(t,"curveCardinal",(function(){return O.default}));var C=n(/*! ./curve/catmullRomClosed.js */"./node_modules/d3-shape/src/curve/catmullRomClosed.js");n.d(t,"curveCatmullRomClosed",(function(){return C.default}));var E=n(/*! ./curve/catmullRomOpen.js */"./node_modules/d3-shape/src/curve/catmullRomOpen.js");n.d(t,"curveCatmullRomOpen",(function(){return E.default}));var T=n(/*! ./curve/catmullRom.js */"./node_modules/d3-shape/src/curve/catmullRom.js");n.d(t,"curveCatmullRom",(function(){return T.default}));var S=n(/*! ./curve/linearClosed.js */"./node_modules/d3-shape/src/curve/linearClosed.js");n.d(t,"curveLinearClosed",(function(){return S.default}));var A=n(/*! ./curve/linear.js */"./node_modules/d3-shape/src/curve/linear.js");n.d(t,"curveLinear",(function(){return A.default}));var M=n(/*! ./curve/monotone.js */"./node_modules/d3-shape/src/curve/monotone.js");n.d(t,"curveMonotoneX",(function(){return M.monotoneX})),n.d(t,"curveMonotoneY",(function(){return M.monotoneY}));var D=n(/*! ./curve/natural.js */"./node_modules/d3-shape/src/curve/natural.js");n.d(t,"curveNatural",(function(){return D.default}));var B=n(/*! ./curve/step.js */"./node_modules/d3-shape/src/curve/step.js");n.d(t,"curveStep",(function(){return B.default})),n.d(t,"curveStepAfter",(function(){return B.stepAfter})),n.d(t,"curveStepBefore",(function(){return B.stepBefore}));var N=n(/*! ./stack.js */"./node_modules/d3-shape/src/stack.js");n.d(t,"stack",(function(){return N.default}));var L=n(/*! ./offset/expand.js */"./node_modules/d3-shape/src/offset/expand.js");n.d(t,"stackOffsetExpand",(function(){return L.default}));var P=n(/*! ./offset/diverging.js */"./node_modules/d3-shape/src/offset/diverging.js");n.d(t,"stackOffsetDiverging",(function(){return P.default}));var I=n(/*! ./offset/none.js */"./node_modules/d3-shape/src/offset/none.js");n.d(t,"stackOffsetNone",(function(){return I.default}));var R=n(/*! ./offset/silhouette.js */"./node_modules/d3-shape/src/offset/silhouette.js");n.d(t,"stackOffsetSilhouette",(function(){return R.default}));var F=n(/*! ./offset/wiggle.js */"./node_modules/d3-shape/src/offset/wiggle.js");n.d(t,"stackOffsetWiggle",(function(){return F.default}));var Y=n(/*! ./order/appearance.js */"./node_modules/d3-shape/src/order/appearance.js");n.d(t,"stackOrderAppearance",(function(){return Y.default}));var z=n(/*! ./order/ascending.js */"./node_modules/d3-shape/src/order/ascending.js");n.d(t,"stackOrderAscending",(function(){return z.default}));var q=n(/*! ./order/descending.js */"./node_modules/d3-shape/src/order/descending.js");n.d(t,"stackOrderDescending",(function(){return q.default}));var G=n(/*! ./order/insideOut.js */"./node_modules/d3-shape/src/order/insideOut.js");n.d(t,"stackOrderInsideOut",(function(){return G.default}));var U=n(/*! ./order/none.js */"./node_modules/d3-shape/src/order/none.js");n.d(t,"stackOrderNone",(function(){return U.default}));var W=n(/*! ./order/reverse.js */"./node_modules/d3-shape/src/order/reverse.js");n.d(t,"stackOrderReverse",(function(){return W.default}))},"./node_modules/d3-shape/src/line.js": -/*!*******************************************!*\ - !*** ./node_modules/d3-shape/src/line.js ***! - \*******************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! d3-path */"./node_modules/d3-path/src/index.js"),o=n(/*! ./constant.js */"./node_modules/d3-shape/src/constant.js"),i=n(/*! ./curve/linear.js */"./node_modules/d3-shape/src/curve/linear.js"),s=n(/*! ./point.js */"./node_modules/d3-shape/src/point.js");t.default=function(){var e=s.x,t=s.y,n=Object(o.default)(!0),a=null,c=i.default,u=null;function d(o){var i,s,d,l=o.length,f=!1;for(null==a&&(u=c(d=Object(r.path)())),i=0;i<=l;++i)!(i1?0:e<-1?l:Math.acos(e)}function m(e){return e>=1?f:e<=-1?-f:Math.asin(e)}},"./node_modules/d3-shape/src/noop.js": -/*!*******************************************!*\ - !*** ./node_modules/d3-shape/src/noop.js ***! - \*******************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(){}},"./node_modules/d3-shape/src/offset/diverging.js": -/*!*******************************************************!*\ - !*** ./node_modules/d3-shape/src/offset/diverging.js ***! - \*******************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(e,t){if((a=e.length)>0)for(var n,r,o,i,s,a,c=0,u=e[t[0]].length;c0?(r[0]=i,r[1]=i+=o):o<0?(r[1]=s,r[0]=s+=o):(r[0]=0,r[1]=o)}},"./node_modules/d3-shape/src/offset/expand.js": -/*!****************************************************!*\ - !*** ./node_modules/d3-shape/src/offset/expand.js ***! - \****************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./none.js */"./node_modules/d3-shape/src/offset/none.js");t.default=function(e,t){if((o=e.length)>0){for(var n,o,i,s=0,a=e[0].length;s1)for(var n,r,o,i=1,s=e[t[0]],a=s.length;i0){for(var n,o=0,i=e[t[0]],s=i.length;o0&&(o=(n=e[t[0]]).length)>0){for(var n,o,i,s=0,a=1;ai&&(i=t,r=n);return r}t.default=function(e){var t=e.map(o);return Object(r.default)(e).sort((function(e,n){return t[e]-t[n]}))}},"./node_modules/d3-shape/src/order/ascending.js": -/*!******************************************************!*\ - !*** ./node_modules/d3-shape/src/order/ascending.js ***! - \******************************************************/ -/*! exports provided: default, sum */function(e,t,n){"use strict";n.r(t),n.d(t,"sum",(function(){return o}));var r=n(/*! ./none.js */"./node_modules/d3-shape/src/order/none.js");function o(e){for(var t,n=0,r=-1,o=e.length;++r=0;)n[t]=t;return n}},"./node_modules/d3-shape/src/order/reverse.js": -/*!****************************************************!*\ - !*** ./node_modules/d3-shape/src/order/reverse.js ***! - \****************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./none.js */"./node_modules/d3-shape/src/order/none.js");t.default=function(e){return Object(r.default)(e).reverse()}},"./node_modules/d3-shape/src/pie.js": -/*!******************************************!*\ - !*** ./node_modules/d3-shape/src/pie.js ***! - \******************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./constant.js */"./node_modules/d3-shape/src/constant.js"),o=n(/*! ./descending.js */"./node_modules/d3-shape/src/descending.js"),i=n(/*! ./identity.js */"./node_modules/d3-shape/src/identity.js"),s=n(/*! ./math.js */"./node_modules/d3-shape/src/math.js");t.default=function(){var e=i.default,t=o.default,n=null,a=Object(r.default)(0),c=Object(r.default)(s.tau),u=Object(r.default)(0);function d(r){var o,i,d,l,f,h=r.length,p=0,m=new Array(h),g=new Array(h),y=+a.apply(this,arguments),b=Math.min(s.tau,Math.max(-s.tau,c.apply(this,arguments)-y)),_=Math.min(Math.abs(b)/h,u.apply(this,arguments)),v=_*(b<0?-1:1);for(o=0;o0&&(p+=f);for(null!=t?m.sort((function(e,n){return t(g[e],g[n])})):null!=n&&m.sort((function(e,t){return n(r[e],r[t])})),o=0,d=p?(b-h*v)/p:0;o0?f*d:0)+v,g[i]={data:r[i],index:o,value:f,startAngle:y,endAngle:l,padAngle:_};return g}return d.value=function(t){return arguments.length?(e="function"==typeof t?t:Object(r.default)(+t),d):e},d.sortValues=function(e){return arguments.length?(t=e,n=null,d):t},d.sort=function(e){return arguments.length?(n=e,t=null,d):n},d.startAngle=function(e){return arguments.length?(a="function"==typeof e?e:Object(r.default)(+e),d):a},d.endAngle=function(e){return arguments.length?(c="function"==typeof e?e:Object(r.default)(+e),d):c},d.padAngle=function(e){return arguments.length?(u="function"==typeof e?e:Object(r.default)(+e),d):u},d}},"./node_modules/d3-shape/src/point.js": -/*!********************************************!*\ - !*** ./node_modules/d3-shape/src/point.js ***! - \********************************************/ -/*! exports provided: x, y */function(e,t,n){"use strict";function r(e){return e[0]}function o(e){return e[1]}n.r(t),n.d(t,"x",(function(){return r})),n.d(t,"y",(function(){return o}))},"./node_modules/d3-shape/src/pointRadial.js": -/*!**************************************************!*\ - !*** ./node_modules/d3-shape/src/pointRadial.js ***! - \**************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(e,t){return[(t=+t)*Math.cos(e-=Math.PI/2),t*Math.sin(e)]}},"./node_modules/d3-shape/src/stack.js": -/*!********************************************!*\ - !*** ./node_modules/d3-shape/src/stack.js ***! - \********************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./array.js */"./node_modules/d3-shape/src/array.js"),o=n(/*! ./constant.js */"./node_modules/d3-shape/src/constant.js"),i=n(/*! ./offset/none.js */"./node_modules/d3-shape/src/offset/none.js"),s=n(/*! ./order/none.js */"./node_modules/d3-shape/src/order/none.js");function a(e,t){return e[t]}t.default=function(){var e=Object(o.default)([]),t=s.default,n=i.default,c=a;function u(r){var o,i,s=e.apply(this,arguments),a=r.length,u=s.length,d=new Array(u);for(o=0;o=12)]},q:function(e){return 1+~~(e.getMonth()/3)},Q:ye,s:be,S:U,u:W,U:H,V:$,w:V,W:X,x:null,X:null,y:Z,Y:K,Z:Q,"%":ge},Ae={a:function(e){return l[e.getUTCDay()]},A:function(e){return d[e.getUTCDay()]},b:function(e){return h[e.getUTCMonth()]},B:function(e){return f[e.getUTCMonth()]},c:null,d:J,e:J,f:oe,H:ee,I:te,j:ne,L:re,m:ie,M:se,p:function(e){return u[+(e.getUTCHours()>=12)]},q:function(e){return 1+~~(e.getUTCMonth()/3)},Q:ye,s:be,S:ae,u:ce,U:ue,V:de,w:le,W:fe,x:null,X:null,y:he,Y:pe,Z:me,"%":ge},Me={a:function(e,t,n){var r=ke.exec(t.slice(n));return r?(e.w=we[r[0].toLowerCase()],n+r[0].length):-1},A:function(e,t,n){var r=je.exec(t.slice(n));return r?(e.w=xe[r[0].toLowerCase()],n+r[0].length):-1},b:function(e,t,n){var r=Ee.exec(t.slice(n));return r?(e.m=Te[r[0].toLowerCase()],n+r[0].length):-1},B:function(e,t,n){var r=Oe.exec(t.slice(n));return r?(e.m=Ce[r[0].toLowerCase()],n+r[0].length):-1},c:function(e,n,r){return Ne(e,t,n,r)},d:C,e:C,f:D,H:T,I:T,j:E,L:M,m:O,M:S,p:function(e,t,n){var r=_e.exec(t.slice(n));return r?(e.p=ve[r[0].toLowerCase()],n+r[0].length):-1},q:w,Q:N,s:L,S:A,u:y,U:b,V:_,w:g,W:v,x:function(e,t,r){return Ne(e,n,t,r)},X:function(e,t,n){return Ne(e,a,t,n)},y:x,Y:j,Z:k,"%":B};function De(e,t){return function(n){var r,o,i,s=[],a=-1,u=0,d=e.length;for(n instanceof Date||(n=new Date(+n));++a53)return null;"w"in u||(u.w=1),"Z"in u?(c=(a=i(s(u.y,0,1))).getUTCDay(),a=c>4||0===c?r.utcMonday.ceil(a):Object(r.utcMonday)(a),a=r.utcDay.offset(a,7*(u.V-1)),u.y=a.getUTCFullYear(),u.m=a.getUTCMonth(),u.d=a.getUTCDate()+(u.w+6)%7):(c=(a=o(s(u.y,0,1))).getDay(),a=c>4||0===c?r.timeMonday.ceil(a):Object(r.timeMonday)(a),a=r.timeDay.offset(a,7*(u.V-1)),u.y=a.getFullYear(),u.m=a.getMonth(),u.d=a.getDate()+(u.w+6)%7)}else("W"in u||"U"in u)&&("w"in u||(u.w="u"in u?u.u%7:"W"in u?1:0),c="Z"in u?i(s(u.y,0,1)).getUTCDay():o(s(u.y,0,1)).getDay(),u.m=0,u.d="W"in u?(u.w+6)%7+7*u.W-(c+5)%7:u.w+7*u.U-(c+6)%7);return"Z"in u?(u.H+=u.Z/100|0,u.M+=u.Z%100,i(u)):o(u)}}function Ne(e,t,n,r){for(var o,i,s=0,a=t.length,u=n.length;s=u)return-1;if(37===(o=t.charCodeAt(s++))){if(o=t.charAt(s++),!(i=Me[o in c?t.charAt(s++):o])||(r=i(e,n,r))<0)return-1}else if(o!=n.charCodeAt(r++))return-1}return r}return Se.x=De(n,Se),Se.X=De(a,Se),Se.c=De(t,Se),Ae.x=De(n,Ae),Ae.X=De(a,Ae),Ae.c=De(t,Ae),{format:function(e){var t=De(e+="",Se);return t.toString=function(){return e},t},parse:function(e){var t=Be(e+="",!1);return t.toString=function(){return e},t},utcFormat:function(e){var t=De(e+="",Ae);return t.toString=function(){return e},t},utcParse:function(e){var t=Be(e+="",!0);return t.toString=function(){return e},t}}}var c={"-":"",_:" ",0:"0"},u=/^\s*\d+/,d=/^%/,l=/[\\^$*+?|[\]().{}]/g;function f(e,t,n){var r=e<0?"-":"",o=(r?-e:e)+"",i=o.length;return r+(i68?1900:2e3),n+r[0].length):-1}function k(e,t,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(t.slice(n,n+6));return r?(e.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function w(e,t,n){var r=u.exec(t.slice(n,n+1));return r?(e.q=3*r[0]-3,n+r[0].length):-1}function O(e,t,n){var r=u.exec(t.slice(n,n+2));return r?(e.m=r[0]-1,n+r[0].length):-1}function C(e,t,n){var r=u.exec(t.slice(n,n+2));return r?(e.d=+r[0],n+r[0].length):-1}function E(e,t,n){var r=u.exec(t.slice(n,n+3));return r?(e.m=0,e.d=+r[0],n+r[0].length):-1}function T(e,t,n){var r=u.exec(t.slice(n,n+2));return r?(e.H=+r[0],n+r[0].length):-1}function S(e,t,n){var r=u.exec(t.slice(n,n+2));return r?(e.M=+r[0],n+r[0].length):-1}function A(e,t,n){var r=u.exec(t.slice(n,n+2));return r?(e.S=+r[0],n+r[0].length):-1}function M(e,t,n){var r=u.exec(t.slice(n,n+3));return r?(e.L=+r[0],n+r[0].length):-1}function D(e,t,n){var r=u.exec(t.slice(n,n+6));return r?(e.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function B(e,t,n){var r=d.exec(t.slice(n,n+1));return r?n+r[0].length:-1}function N(e,t,n){var r=u.exec(t.slice(n));return r?(e.Q=+r[0],n+r[0].length):-1}function L(e,t,n){var r=u.exec(t.slice(n));return r?(e.s=+r[0],n+r[0].length):-1}function P(e,t){return f(e.getDate(),t,2)}function I(e,t){return f(e.getHours(),t,2)}function R(e,t){return f(e.getHours()%12||12,t,2)}function F(e,t){return f(1+r.timeDay.count(Object(r.timeYear)(e),e),t,3)}function Y(e,t){return f(e.getMilliseconds(),t,3)}function z(e,t){return Y(e,t)+"000"}function q(e,t){return f(e.getMonth()+1,t,2)}function G(e,t){return f(e.getMinutes(),t,2)}function U(e,t){return f(e.getSeconds(),t,2)}function W(e){var t=e.getDay();return 0===t?7:t}function H(e,t){return f(r.timeSunday.count(Object(r.timeYear)(e)-1,e),t,2)}function $(e,t){var n=e.getDay();return e=n>=4||0===n?Object(r.timeThursday)(e):r.timeThursday.ceil(e),f(r.timeThursday.count(Object(r.timeYear)(e),e)+(4===Object(r.timeYear)(e).getDay()),t,2)}function V(e){return e.getDay()}function X(e,t){return f(r.timeMonday.count(Object(r.timeYear)(e)-1,e),t,2)}function Z(e,t){return f(e.getFullYear()%100,t,2)}function K(e,t){return f(e.getFullYear()%1e4,t,4)}function Q(e){var t=e.getTimezoneOffset();return(t>0?"-":(t*=-1,"+"))+f(t/60|0,"0",2)+f(t%60,"0",2)}function J(e,t){return f(e.getUTCDate(),t,2)}function ee(e,t){return f(e.getUTCHours(),t,2)}function te(e,t){return f(e.getUTCHours()%12||12,t,2)}function ne(e,t){return f(1+r.utcDay.count(Object(r.utcYear)(e),e),t,3)}function re(e,t){return f(e.getUTCMilliseconds(),t,3)}function oe(e,t){return re(e,t)+"000"}function ie(e,t){return f(e.getUTCMonth()+1,t,2)}function se(e,t){return f(e.getUTCMinutes(),t,2)}function ae(e,t){return f(e.getUTCSeconds(),t,2)}function ce(e){var t=e.getUTCDay();return 0===t?7:t}function ue(e,t){return f(r.utcSunday.count(Object(r.utcYear)(e)-1,e),t,2)}function de(e,t){var n=e.getUTCDay();return e=n>=4||0===n?Object(r.utcThursday)(e):r.utcThursday.ceil(e),f(r.utcThursday.count(Object(r.utcYear)(e),e)+(4===Object(r.utcYear)(e).getUTCDay()),t,2)}function le(e){return e.getUTCDay()}function fe(e,t){return f(r.utcMonday.count(Object(r.utcYear)(e)-1,e),t,2)}function he(e,t){return f(e.getUTCFullYear()%100,t,2)}function pe(e,t){return f(e.getUTCFullYear()%1e4,t,4)}function me(){return"+0000"}function ge(){return"%"}function ye(e){return+e}function be(e){return Math.floor(+e/1e3)}},"./node_modules/d3-time/src/day.js": -/*!*****************************************!*\ - !*** ./node_modules/d3-time/src/day.js ***! - \*****************************************/ -/*! exports provided: default, days */function(e,t,n){"use strict";n.r(t),n.d(t,"days",(function(){return s}));var r=n(/*! ./interval.js */"./node_modules/d3-time/src/interval.js"),o=n(/*! ./duration.js */"./node_modules/d3-time/src/duration.js"),i=Object(r.default)((function(e){e.setHours(0,0,0,0)}),(function(e,t){e.setDate(e.getDate()+t)}),(function(e,t){return(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*o.durationMinute)/o.durationDay}),(function(e){return e.getDate()-1}));t.default=i;var s=i.range},"./node_modules/d3-time/src/duration.js": -/*!**********************************************!*\ - !*** ./node_modules/d3-time/src/duration.js ***! - \**********************************************/ -/*! exports provided: durationSecond, durationMinute, durationHour, durationDay, durationWeek */function(e,t,n){"use strict";n.r(t),n.d(t,"durationSecond",(function(){return r})),n.d(t,"durationMinute",(function(){return o})),n.d(t,"durationHour",(function(){return i})),n.d(t,"durationDay",(function(){return s})),n.d(t,"durationWeek",(function(){return a}));var r=1e3,o=6e4,i=36e5,s=864e5,a=6048e5},"./node_modules/d3-time/src/hour.js": -/*!******************************************!*\ - !*** ./node_modules/d3-time/src/hour.js ***! - \******************************************/ -/*! exports provided: default, hours */function(e,t,n){"use strict";n.r(t),n.d(t,"hours",(function(){return s}));var r=n(/*! ./interval.js */"./node_modules/d3-time/src/interval.js"),o=n(/*! ./duration.js */"./node_modules/d3-time/src/duration.js"),i=Object(r.default)((function(e){e.setTime(e-e.getMilliseconds()-e.getSeconds()*o.durationSecond-e.getMinutes()*o.durationMinute)}),(function(e,t){e.setTime(+e+t*o.durationHour)}),(function(e,t){return(t-e)/o.durationHour}),(function(e){return e.getHours()}));t.default=i;var s=i.range},"./node_modules/d3-time/src/index.js": -/*!*******************************************!*\ - !*** ./node_modules/d3-time/src/index.js ***! - \*******************************************/ -/*! exports provided: timeInterval, timeMillisecond, timeMilliseconds, utcMillisecond, utcMilliseconds, timeSecond, timeSeconds, utcSecond, utcSeconds, timeMinute, timeMinutes, timeHour, timeHours, timeDay, timeDays, timeWeek, timeWeeks, timeSunday, timeSundays, timeMonday, timeMondays, timeTuesday, timeTuesdays, timeWednesday, timeWednesdays, timeThursday, timeThursdays, timeFriday, timeFridays, timeSaturday, timeSaturdays, timeMonth, timeMonths, timeYear, timeYears, utcMinute, utcMinutes, utcHour, utcHours, utcDay, utcDays, utcWeek, utcWeeks, utcSunday, utcSundays, utcMonday, utcMondays, utcTuesday, utcTuesdays, utcWednesday, utcWednesdays, utcThursday, utcThursdays, utcFriday, utcFridays, utcSaturday, utcSaturdays, utcMonth, utcMonths, utcYear, utcYears */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./interval.js */"./node_modules/d3-time/src/interval.js");n.d(t,"timeInterval",(function(){return r.default}));var o=n(/*! ./millisecond.js */"./node_modules/d3-time/src/millisecond.js");n.d(t,"timeMillisecond",(function(){return o.default})),n.d(t,"timeMilliseconds",(function(){return o.milliseconds})),n.d(t,"utcMillisecond",(function(){return o.default})),n.d(t,"utcMilliseconds",(function(){return o.milliseconds}));var i=n(/*! ./second.js */"./node_modules/d3-time/src/second.js");n.d(t,"timeSecond",(function(){return i.default})),n.d(t,"timeSeconds",(function(){return i.seconds})),n.d(t,"utcSecond",(function(){return i.default})),n.d(t,"utcSeconds",(function(){return i.seconds}));var s=n(/*! ./minute.js */"./node_modules/d3-time/src/minute.js");n.d(t,"timeMinute",(function(){return s.default})),n.d(t,"timeMinutes",(function(){return s.minutes}));var a=n(/*! ./hour.js */"./node_modules/d3-time/src/hour.js");n.d(t,"timeHour",(function(){return a.default})),n.d(t,"timeHours",(function(){return a.hours}));var c=n(/*! ./day.js */"./node_modules/d3-time/src/day.js");n.d(t,"timeDay",(function(){return c.default})),n.d(t,"timeDays",(function(){return c.days}));var u=n(/*! ./week.js */"./node_modules/d3-time/src/week.js");n.d(t,"timeWeek",(function(){return u.sunday})),n.d(t,"timeWeeks",(function(){return u.sundays})),n.d(t,"timeSunday",(function(){return u.sunday})),n.d(t,"timeSundays",(function(){return u.sundays})),n.d(t,"timeMonday",(function(){return u.monday})),n.d(t,"timeMondays",(function(){return u.mondays})),n.d(t,"timeTuesday",(function(){return u.tuesday})),n.d(t,"timeTuesdays",(function(){return u.tuesdays})),n.d(t,"timeWednesday",(function(){return u.wednesday})),n.d(t,"timeWednesdays",(function(){return u.wednesdays})),n.d(t,"timeThursday",(function(){return u.thursday})),n.d(t,"timeThursdays",(function(){return u.thursdays})),n.d(t,"timeFriday",(function(){return u.friday})),n.d(t,"timeFridays",(function(){return u.fridays})),n.d(t,"timeSaturday",(function(){return u.saturday})),n.d(t,"timeSaturdays",(function(){return u.saturdays}));var d=n(/*! ./month.js */"./node_modules/d3-time/src/month.js");n.d(t,"timeMonth",(function(){return d.default})),n.d(t,"timeMonths",(function(){return d.months}));var l=n(/*! ./year.js */"./node_modules/d3-time/src/year.js");n.d(t,"timeYear",(function(){return l.default})),n.d(t,"timeYears",(function(){return l.years}));var f=n(/*! ./utcMinute.js */"./node_modules/d3-time/src/utcMinute.js");n.d(t,"utcMinute",(function(){return f.default})),n.d(t,"utcMinutes",(function(){return f.utcMinutes}));var h=n(/*! ./utcHour.js */"./node_modules/d3-time/src/utcHour.js");n.d(t,"utcHour",(function(){return h.default})),n.d(t,"utcHours",(function(){return h.utcHours}));var p=n(/*! ./utcDay.js */"./node_modules/d3-time/src/utcDay.js");n.d(t,"utcDay",(function(){return p.default})),n.d(t,"utcDays",(function(){return p.utcDays}));var m=n(/*! ./utcWeek.js */"./node_modules/d3-time/src/utcWeek.js");n.d(t,"utcWeek",(function(){return m.utcSunday})),n.d(t,"utcWeeks",(function(){return m.utcSundays})),n.d(t,"utcSunday",(function(){return m.utcSunday})),n.d(t,"utcSundays",(function(){return m.utcSundays})),n.d(t,"utcMonday",(function(){return m.utcMonday})),n.d(t,"utcMondays",(function(){return m.utcMondays})),n.d(t,"utcTuesday",(function(){return m.utcTuesday})),n.d(t,"utcTuesdays",(function(){return m.utcTuesdays})),n.d(t,"utcWednesday",(function(){return m.utcWednesday})),n.d(t,"utcWednesdays",(function(){return m.utcWednesdays})),n.d(t,"utcThursday",(function(){return m.utcThursday})),n.d(t,"utcThursdays",(function(){return m.utcThursdays})),n.d(t,"utcFriday",(function(){return m.utcFriday})),n.d(t,"utcFridays",(function(){return m.utcFridays})),n.d(t,"utcSaturday",(function(){return m.utcSaturday})),n.d(t,"utcSaturdays",(function(){return m.utcSaturdays}));var g=n(/*! ./utcMonth.js */"./node_modules/d3-time/src/utcMonth.js");n.d(t,"utcMonth",(function(){return g.default})),n.d(t,"utcMonths",(function(){return g.utcMonths}));var y=n(/*! ./utcYear.js */"./node_modules/d3-time/src/utcYear.js");n.d(t,"utcYear",(function(){return y.default})),n.d(t,"utcYears",(function(){return y.utcYears}))},"./node_modules/d3-time/src/interval.js": -/*!**********************************************!*\ - !*** ./node_modules/d3-time/src/interval.js ***! - \**********************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),n.d(t,"default",(function(){return i}));var r=new Date,o=new Date;function i(e,t,n,s){function a(t){return e(t=0===arguments.length?new Date:new Date(+t)),t}return a.floor=function(t){return e(t=new Date(+t)),t},a.ceil=function(n){return e(n=new Date(n-1)),t(n,1),e(n),n},a.round=function(e){var t=a(e),n=a.ceil(e);return e-t0))return s;do{s.push(i=new Date(+n)),t(n,o),e(n)}while(i=t)for(;e(t),!n(t);)t.setTime(t-1)}),(function(e,r){if(e>=e)if(r<0)for(;++r<=0;)for(;t(e,-1),!n(e););else for(;--r>=0;)for(;t(e,1),!n(e););}))},n&&(a.count=function(t,i){return r.setTime(+t),o.setTime(+i),e(r),e(o),Math.floor(n(r,o))},a.every=function(e){return e=Math.floor(e),isFinite(e)&&e>0?e>1?a.filter(s?function(t){return s(t)%e==0}:function(t){return a.count(0,t)%e==0}):a:null}),a}},"./node_modules/d3-time/src/millisecond.js": -/*!*************************************************!*\ - !*** ./node_modules/d3-time/src/millisecond.js ***! - \*************************************************/ -/*! exports provided: default, milliseconds */function(e,t,n){"use strict";n.r(t),n.d(t,"milliseconds",(function(){return i}));var r=n(/*! ./interval.js */"./node_modules/d3-time/src/interval.js"),o=Object(r.default)((function(){}),(function(e,t){e.setTime(+e+t)}),(function(e,t){return t-e}));o.every=function(e){return e=Math.floor(e),isFinite(e)&&e>0?e>1?Object(r.default)((function(t){t.setTime(Math.floor(t/e)*e)}),(function(t,n){t.setTime(+t+n*e)}),(function(t,n){return(n-t)/e})):o:null},t.default=o;var i=o.range},"./node_modules/d3-time/src/minute.js": -/*!********************************************!*\ - !*** ./node_modules/d3-time/src/minute.js ***! - \********************************************/ -/*! exports provided: default, minutes */function(e,t,n){"use strict";n.r(t),n.d(t,"minutes",(function(){return s}));var r=n(/*! ./interval.js */"./node_modules/d3-time/src/interval.js"),o=n(/*! ./duration.js */"./node_modules/d3-time/src/duration.js"),i=Object(r.default)((function(e){e.setTime(e-e.getMilliseconds()-e.getSeconds()*o.durationSecond)}),(function(e,t){e.setTime(+e+t*o.durationMinute)}),(function(e,t){return(t-e)/o.durationMinute}),(function(e){return e.getMinutes()}));t.default=i;var s=i.range},"./node_modules/d3-time/src/month.js": -/*!*******************************************!*\ - !*** ./node_modules/d3-time/src/month.js ***! - \*******************************************/ -/*! exports provided: default, months */function(e,t,n){"use strict";n.r(t),n.d(t,"months",(function(){return i}));var r=n(/*! ./interval.js */"./node_modules/d3-time/src/interval.js"),o=Object(r.default)((function(e){e.setDate(1),e.setHours(0,0,0,0)}),(function(e,t){e.setMonth(e.getMonth()+t)}),(function(e,t){return t.getMonth()-e.getMonth()+12*(t.getFullYear()-e.getFullYear())}),(function(e){return e.getMonth()}));t.default=o;var i=o.range},"./node_modules/d3-time/src/second.js": -/*!********************************************!*\ - !*** ./node_modules/d3-time/src/second.js ***! - \********************************************/ -/*! exports provided: default, seconds */function(e,t,n){"use strict";n.r(t),n.d(t,"seconds",(function(){return s}));var r=n(/*! ./interval.js */"./node_modules/d3-time/src/interval.js"),o=n(/*! ./duration.js */"./node_modules/d3-time/src/duration.js"),i=Object(r.default)((function(e){e.setTime(e-e.getMilliseconds())}),(function(e,t){e.setTime(+e+t*o.durationSecond)}),(function(e,t){return(t-e)/o.durationSecond}),(function(e){return e.getUTCSeconds()}));t.default=i;var s=i.range},"./node_modules/d3-time/src/utcDay.js": -/*!********************************************!*\ - !*** ./node_modules/d3-time/src/utcDay.js ***! - \********************************************/ -/*! exports provided: default, utcDays */function(e,t,n){"use strict";n.r(t),n.d(t,"utcDays",(function(){return s}));var r=n(/*! ./interval.js */"./node_modules/d3-time/src/interval.js"),o=n(/*! ./duration.js */"./node_modules/d3-time/src/duration.js"),i=Object(r.default)((function(e){e.setUTCHours(0,0,0,0)}),(function(e,t){e.setUTCDate(e.getUTCDate()+t)}),(function(e,t){return(t-e)/o.durationDay}),(function(e){return e.getUTCDate()-1}));t.default=i;var s=i.range},"./node_modules/d3-time/src/utcHour.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-time/src/utcHour.js ***! - \*********************************************/ -/*! exports provided: default, utcHours */function(e,t,n){"use strict";n.r(t),n.d(t,"utcHours",(function(){return s}));var r=n(/*! ./interval.js */"./node_modules/d3-time/src/interval.js"),o=n(/*! ./duration.js */"./node_modules/d3-time/src/duration.js"),i=Object(r.default)((function(e){e.setUTCMinutes(0,0,0)}),(function(e,t){e.setTime(+e+t*o.durationHour)}),(function(e,t){return(t-e)/o.durationHour}),(function(e){return e.getUTCHours()}));t.default=i;var s=i.range},"./node_modules/d3-time/src/utcMinute.js": -/*!***********************************************!*\ - !*** ./node_modules/d3-time/src/utcMinute.js ***! - \***********************************************/ -/*! exports provided: default, utcMinutes */function(e,t,n){"use strict";n.r(t),n.d(t,"utcMinutes",(function(){return s}));var r=n(/*! ./interval.js */"./node_modules/d3-time/src/interval.js"),o=n(/*! ./duration.js */"./node_modules/d3-time/src/duration.js"),i=Object(r.default)((function(e){e.setUTCSeconds(0,0)}),(function(e,t){e.setTime(+e+t*o.durationMinute)}),(function(e,t){return(t-e)/o.durationMinute}),(function(e){return e.getUTCMinutes()}));t.default=i;var s=i.range},"./node_modules/d3-time/src/utcMonth.js": -/*!**********************************************!*\ - !*** ./node_modules/d3-time/src/utcMonth.js ***! - \**********************************************/ -/*! exports provided: default, utcMonths */function(e,t,n){"use strict";n.r(t),n.d(t,"utcMonths",(function(){return i}));var r=n(/*! ./interval.js */"./node_modules/d3-time/src/interval.js"),o=Object(r.default)((function(e){e.setUTCDate(1),e.setUTCHours(0,0,0,0)}),(function(e,t){e.setUTCMonth(e.getUTCMonth()+t)}),(function(e,t){return t.getUTCMonth()-e.getUTCMonth()+12*(t.getUTCFullYear()-e.getUTCFullYear())}),(function(e){return e.getUTCMonth()}));t.default=o;var i=o.range},"./node_modules/d3-time/src/utcWeek.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-time/src/utcWeek.js ***! - \*********************************************/ -/*! exports provided: utcSunday, utcMonday, utcTuesday, utcWednesday, utcThursday, utcFriday, utcSaturday, utcSundays, utcMondays, utcTuesdays, utcWednesdays, utcThursdays, utcFridays, utcSaturdays */function(e,t,n){"use strict";n.r(t),n.d(t,"utcSunday",(function(){return s})),n.d(t,"utcMonday",(function(){return a})),n.d(t,"utcTuesday",(function(){return c})),n.d(t,"utcWednesday",(function(){return u})),n.d(t,"utcThursday",(function(){return d})),n.d(t,"utcFriday",(function(){return l})),n.d(t,"utcSaturday",(function(){return f})),n.d(t,"utcSundays",(function(){return h})),n.d(t,"utcMondays",(function(){return p})),n.d(t,"utcTuesdays",(function(){return m})),n.d(t,"utcWednesdays",(function(){return g})),n.d(t,"utcThursdays",(function(){return y})),n.d(t,"utcFridays",(function(){return b})),n.d(t,"utcSaturdays",(function(){return _}));var r=n(/*! ./interval.js */"./node_modules/d3-time/src/interval.js"),o=n(/*! ./duration.js */"./node_modules/d3-time/src/duration.js");function i(e){return Object(r.default)((function(t){t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7),t.setUTCHours(0,0,0,0)}),(function(e,t){e.setUTCDate(e.getUTCDate()+7*t)}),(function(e,t){return(t-e)/o.durationWeek}))}var s=i(0),a=i(1),c=i(2),u=i(3),d=i(4),l=i(5),f=i(6),h=s.range,p=a.range,m=c.range,g=u.range,y=d.range,b=l.range,_=f.range},"./node_modules/d3-time/src/utcYear.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-time/src/utcYear.js ***! - \*********************************************/ -/*! exports provided: default, utcYears */function(e,t,n){"use strict";n.r(t),n.d(t,"utcYears",(function(){return i}));var r=n(/*! ./interval.js */"./node_modules/d3-time/src/interval.js"),o=Object(r.default)((function(e){e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)}),(function(e,t){e.setUTCFullYear(e.getUTCFullYear()+t)}),(function(e,t){return t.getUTCFullYear()-e.getUTCFullYear()}),(function(e){return e.getUTCFullYear()}));o.every=function(e){return isFinite(e=Math.floor(e))&&e>0?Object(r.default)((function(t){t.setUTCFullYear(Math.floor(t.getUTCFullYear()/e)*e),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)}),(function(t,n){t.setUTCFullYear(t.getUTCFullYear()+n*e)})):null},t.default=o;var i=o.range},"./node_modules/d3-time/src/week.js": -/*!******************************************!*\ - !*** ./node_modules/d3-time/src/week.js ***! - \******************************************/ -/*! exports provided: sunday, monday, tuesday, wednesday, thursday, friday, saturday, sundays, mondays, tuesdays, wednesdays, thursdays, fridays, saturdays */function(e,t,n){"use strict";n.r(t),n.d(t,"sunday",(function(){return s})),n.d(t,"monday",(function(){return a})),n.d(t,"tuesday",(function(){return c})),n.d(t,"wednesday",(function(){return u})),n.d(t,"thursday",(function(){return d})),n.d(t,"friday",(function(){return l})),n.d(t,"saturday",(function(){return f})),n.d(t,"sundays",(function(){return h})),n.d(t,"mondays",(function(){return p})),n.d(t,"tuesdays",(function(){return m})),n.d(t,"wednesdays",(function(){return g})),n.d(t,"thursdays",(function(){return y})),n.d(t,"fridays",(function(){return b})),n.d(t,"saturdays",(function(){return _}));var r=n(/*! ./interval.js */"./node_modules/d3-time/src/interval.js"),o=n(/*! ./duration.js */"./node_modules/d3-time/src/duration.js");function i(e){return Object(r.default)((function(t){t.setDate(t.getDate()-(t.getDay()+7-e)%7),t.setHours(0,0,0,0)}),(function(e,t){e.setDate(e.getDate()+7*t)}),(function(e,t){return(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*o.durationMinute)/o.durationWeek}))}var s=i(0),a=i(1),c=i(2),u=i(3),d=i(4),l=i(5),f=i(6),h=s.range,p=a.range,m=c.range,g=u.range,y=d.range,b=l.range,_=f.range},"./node_modules/d3-time/src/year.js": -/*!******************************************!*\ - !*** ./node_modules/d3-time/src/year.js ***! - \******************************************/ -/*! exports provided: default, years */function(e,t,n){"use strict";n.r(t),n.d(t,"years",(function(){return i}));var r=n(/*! ./interval.js */"./node_modules/d3-time/src/interval.js"),o=Object(r.default)((function(e){e.setMonth(0,1),e.setHours(0,0,0,0)}),(function(e,t){e.setFullYear(e.getFullYear()+t)}),(function(e,t){return t.getFullYear()-e.getFullYear()}),(function(e){return e.getFullYear()}));o.every=function(e){return isFinite(e=Math.floor(e))&&e>0?Object(r.default)((function(t){t.setFullYear(Math.floor(t.getFullYear()/e)*e),t.setMonth(0,1),t.setHours(0,0,0,0)}),(function(t,n){t.setFullYear(t.getFullYear()+n*e)})):null},t.default=o;var i=o.range},"./node_modules/d3-timer/src/index.js": -/*!********************************************!*\ - !*** ./node_modules/d3-timer/src/index.js ***! - \********************************************/ -/*! exports provided: now, timer, timerFlush, timeout, interval */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./timer.js */"./node_modules/d3-timer/src/timer.js");n.d(t,"now",(function(){return r.now})),n.d(t,"timer",(function(){return r.timer})),n.d(t,"timerFlush",(function(){return r.timerFlush}));var o=n(/*! ./timeout.js */"./node_modules/d3-timer/src/timeout.js");n.d(t,"timeout",(function(){return o.default}));var i=n(/*! ./interval.js */"./node_modules/d3-timer/src/interval.js");n.d(t,"interval",(function(){return i.default}))},"./node_modules/d3-timer/src/interval.js": -/*!***********************************************!*\ - !*** ./node_modules/d3-timer/src/interval.js ***! - \***********************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./timer.js */"./node_modules/d3-timer/src/timer.js");t.default=function(e,t,n){var o=new r.Timer,i=t;return null==t?(o.restart(e,t,n),o):(t=+t,n=null==n?Object(r.now)():+n,o.restart((function r(s){s+=i,o.restart(r,i+=t,n),e(s)}),t,n),o)}},"./node_modules/d3-timer/src/timeout.js": -/*!**********************************************!*\ - !*** ./node_modules/d3-timer/src/timeout.js ***! - \**********************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./timer.js */"./node_modules/d3-timer/src/timer.js");t.default=function(e,t,n){var o=new r.Timer;return t=null==t?0:+t,o.restart((function(n){o.stop(),e(n+t)}),t,n),o}},"./node_modules/d3-timer/src/timer.js": -/*!********************************************!*\ - !*** ./node_modules/d3-timer/src/timer.js ***! - \********************************************/ -/*! exports provided: now, Timer, timer, timerFlush */function(e,t,n){"use strict";n.r(t),n.d(t,"now",(function(){return h})),n.d(t,"Timer",(function(){return m})),n.d(t,"timer",(function(){return g})),n.d(t,"timerFlush",(function(){return y}));var r,o,i=0,s=0,a=0,c=0,u=0,d=0,l="object"==typeof performance&&performance.now?performance:Date,f="object"==typeof window&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(e){setTimeout(e,17)};function h(){return u||(f(p),u=l.now()+d)}function p(){u=0}function m(){this._call=this._time=this._next=null}function g(e,t,n){var r=new m;return r.restart(e,t,n),r}function y(){h(),++i;for(var e,t=r;t;)(e=u-t._time)>=0&&t._call.call(null,e),t=t._next;--i}function b(){u=(c=l.now())+d,i=s=0;try{y()}finally{i=0,function(){for(var e,t,n=r,i=1/0;n;)n._call?(i>n._time&&(i=n._time),e=n,n=n._next):(t=n._next,n._next=null,n=e?e._next=t:r=t);o=e,v(i)}(),u=0}}function _(){var e=l.now(),t=e-c;t>1e3&&(d-=t,c=e)}function v(e){i||(s&&(s=clearTimeout(s)),e-u>24?(e<1/0&&(s=setTimeout(b,e-l.now()-d)),a&&(a=clearInterval(a))):(a||(c=l.now(),a=setInterval(_,1e3)),i=1,f(b)))}m.prototype=g.prototype={constructor:m,restart:function(e,t,n){if("function"!=typeof e)throw new TypeError("callback is not a function");n=(null==n?h():+n)+(null==t?0:+t),this._next||o===this||(o?o._next=this:r=this,o=this),this._call=e,this._time=n,v()},stop:function(){this._call&&(this._call=null,this._time=1/0,v())}}},"./node_modules/d3-transition/src/active.js": -/*!**************************************************!*\ - !*** ./node_modules/d3-transition/src/active.js ***! - \**************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./transition/index.js */"./node_modules/d3-transition/src/transition/index.js"),o=n(/*! ./transition/schedule.js */"./node_modules/d3-transition/src/transition/schedule.js"),i=[null];t.default=function(e,t){var n,s,a=e.__transition;if(a)for(s in t=null==t?null:t+"",a)if((n=a[s]).state>o.SCHEDULED&&n.name===t)return new r.Transition([[e]],i,t,+s);return null}},"./node_modules/d3-transition/src/index.js": -/*!*************************************************!*\ - !*** ./node_modules/d3-transition/src/index.js ***! - \*************************************************/ -/*! exports provided: transition, active, interrupt */function(e,t,n){"use strict";n.r(t),n(/*! ./selection/index.js */"./node_modules/d3-transition/src/selection/index.js");var r=n(/*! ./transition/index.js */"./node_modules/d3-transition/src/transition/index.js");n.d(t,"transition",(function(){return r.default}));var o=n(/*! ./active.js */"./node_modules/d3-transition/src/active.js");n.d(t,"active",(function(){return o.default}));var i=n(/*! ./interrupt.js */"./node_modules/d3-transition/src/interrupt.js");n.d(t,"interrupt",(function(){return i.default}))},"./node_modules/d3-transition/src/interrupt.js": -/*!*****************************************************!*\ - !*** ./node_modules/d3-transition/src/interrupt.js ***! - \*****************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./transition/schedule.js */"./node_modules/d3-transition/src/transition/schedule.js");t.default=function(e,t){var n,o,i,s=e.__transition,a=!0;if(s){for(i in t=null==t?null:t+"",s)(n=s[i]).name===t?(o=n.state>r.STARTING&&n.state=0&&(e=e.slice(0,t)),!e||"start"===e}))}(t)?r.init:r.set;return function(){var r=s(this,e),a=r.on;a!==o&&(i=(o=a).copy()).on(t,n),r.on=i}}t.default=function(e,t){var n=this._id;return arguments.length<2?Object(r.get)(this.node(),n).on.on(e):this.each(o(n,e,t))}},"./node_modules/d3-transition/src/transition/remove.js": -/*!*************************************************************!*\ - !*** ./node_modules/d3-transition/src/transition/remove.js ***! - \*************************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(){return this.on("end.remove",(e=this._id,function(){var t=this.parentNode;for(var n in this.__transition)if(+n!==e)return;t&&t.removeChild(this)}));var e}},"./node_modules/d3-transition/src/transition/schedule.js": -/*!***************************************************************!*\ - !*** ./node_modules/d3-transition/src/transition/schedule.js ***! - \***************************************************************/ -/*! exports provided: CREATED, SCHEDULED, STARTING, STARTED, RUNNING, ENDING, ENDED, default, init, set, get */function(e,t,n){"use strict";n.r(t),n.d(t,"CREATED",(function(){return a})),n.d(t,"SCHEDULED",(function(){return c})),n.d(t,"STARTING",(function(){return u})),n.d(t,"STARTED",(function(){return d})),n.d(t,"RUNNING",(function(){return l})),n.d(t,"ENDING",(function(){return f})),n.d(t,"ENDED",(function(){return h})),n.d(t,"init",(function(){return p})),n.d(t,"set",(function(){return m})),n.d(t,"get",(function(){return g}));var r=n(/*! d3-dispatch */"./node_modules/d3-dispatch/src/index.js"),o=n(/*! d3-timer */"./node_modules/d3-timer/src/index.js"),i=Object(r.dispatch)("start","end","cancel","interrupt"),s=[],a=0,c=1,u=2,d=3,l=4,f=5,h=6;function p(e,t){var n=g(e,t);if(n.state>a)throw new Error("too late; already scheduled");return n}function m(e,t){var n=g(e,t);if(n.state>d)throw new Error("too late; already running");return n}function g(e,t){var n=e.__transition;if(!n||!(n=n[t]))throw new Error("transition not found");return n}t.default=function(e,t,n,r,p,m){var g=e.__transition;if(g){if(n in g)return}else e.__transition={};!function(e,t,n){var r,i=e.__transition;function s(f){var m,g,y,b;if(n.state!==c)return p();for(m in i)if((b=i[m]).name===n.name){if(b.state===d)return Object(o.timeout)(s);b.state===l?(b.state=h,b.timer.stop(),b.on.call("interrupt",e,e.__data__,b.index,b.group),delete i[m]):+ma.epsilon)f=f.L;else{if(!((c=u-m(f,l))>a.epsilon)){r>-a.epsilon?(t=f.P,n=f):c>-a.epsilon?(t=f,n=f.N):t=n=f;break}if(!f.R){t=f;break}f=f.R}Object(o.createCell)(e);var h=d(e);if(a.beaches.insert(t,h),t||n){if(t===n)return Object(i.detachCircle)(t),n=d(t.site),a.beaches.insert(h,n),h.edge=n.edge=Object(s.createEdge)(t.site,h.site),Object(i.attachCircle)(t),void Object(i.attachCircle)(n);if(n){Object(i.detachCircle)(t),Object(i.detachCircle)(n);var g=t.site,y=g[0],b=g[1],_=e[0]-y,v=e[1]-b,j=n.site,x=j[0]-y,k=j[1]-b,w=2*(_*k-v*x),O=_*_+v*v,C=x*x+k*k,E=[(k*O-v*C)/w+y,(_*C-x*O)/w+b];Object(s.setEdgeEnd)(n.edge,g,j,E),h.edge=Object(s.createEdge)(g,e,null,E),n.edge=Object(s.createEdge)(e,j,null,E),Object(i.attachCircle)(t),Object(i.attachCircle)(n)}else h.edge=Object(s.createEdge)(t.site,h.site)}}function p(e,t){var n=e.site,r=n[0],o=n[1],i=o-t;if(!i)return r;var s=e.P;if(!s)return-1/0;var a=(n=s.site)[0],c=n[1],u=c-t;if(!u)return a;var d=a-r,l=1/i-1/u,f=d/u;return l?(-f+Math.sqrt(f*f-2*l*(d*d/(-2*u)-c+u/2+o-i/2)))/l+r:(r+a)/2}function m(e,t){var n=e.N;if(n)return p(n,t);var r=e.site;return r[1]===t?r[0]:1/0}},"./node_modules/d3-voronoi/src/Cell.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-voronoi/src/Cell.js ***! - \*********************************************/ -/*! exports provided: createCell, cellHalfedgeStart, cellHalfedgeEnd, sortCellHalfedges, clipCells */function(e,t,n){"use strict";n.r(t),n.d(t,"createCell",(function(){return i})),n.d(t,"cellHalfedgeStart",(function(){return a})),n.d(t,"cellHalfedgeEnd",(function(){return c})),n.d(t,"sortCellHalfedges",(function(){return u})),n.d(t,"clipCells",(function(){return d}));var r=n(/*! ./Edge */"./node_modules/d3-voronoi/src/Edge.js"),o=n(/*! ./Diagram */"./node_modules/d3-voronoi/src/Diagram.js");function i(e){return o.cells[e.index]={site:e,halfedges:[]}}function s(e,t){var n=e.site,r=t.left,o=t.right;return n===o&&(o=r,r=n),o?Math.atan2(o[1]-r[1],o[0]-r[0]):(n===r?(r=t[1],o=t[0]):(r=t[0],o=t[1]),Math.atan2(r[0]-o[0],o[1]-r[1]))}function a(e,t){return t[+(t.left!==e.site)]}function c(e,t){return t[+(t.left===e.site)]}function u(){for(var e,t,n,r,i=0,a=o.cells.length;io.epsilon||Math.abs(_-g)>o.epsilon)&&(f.splice(l,0,o.edges.push(Object(r.createBorderEdge)(d,y,Math.abs(b-e)o.epsilon?[e,Math.abs(m-e)o.epsilon?[Math.abs(g-i)o.epsilon?[n,Math.abs(m-n)o.epsilon?[Math.abs(g-t)=-i.epsilon2)){var y=f*f+h*h,b=p*p+m*m,_=(m*y-h*b)/g,v=(f*b-p*y)/g,j=s.pop()||new a;j.arc=e,j.site=c,j.x=_+d,j.y=(j.cy=v+l)+Math.sqrt(_*_+v*v),e.circle=j;for(var x=null,k=i.circles._;k;)if(j.y=a)return null;var c=e-o.site[0],u=t-o.site[1],d=c*c+u*u;do{o=i.cells[r=s],s=null,o.halfedges.forEach((function(n){var r=i.edges[n],a=r.left;if(a!==o.site&&a||(a=r.right)){var c=e-a[0],u=t-a[1],l=c*c+u*u;l0)){if(i/=f,f<0){if(i0){if(i>l)return;i>d&&(d=i)}if(i=r-c,f||!(i<0)){if(i/=f,f<0){if(i>l)return;i>d&&(d=i)}else if(f>0){if(i0)){if(i/=h,h<0){if(i0){if(i>l)return;i>d&&(d=i)}if(i=o-u,h||!(i<0)){if(i/=h,h<0){if(i>l)return;i>d&&(d=i)}else if(h>0){if(i0||l<1)||(d>0&&(e[0]=[c+d*f,u+d*h]),l<1&&(e[1]=[c+l*f,u+l*h]),!0)}}}}}function c(e,t,n,r,o){var i=e[1];if(i)return!0;var s,a,c=e[0],u=e.left,d=e.right,l=u[0],f=u[1],h=d[0],p=d[1],m=(l+h)/2,g=(f+p)/2;if(p===f){if(m=r)return;if(l>h){if(c){if(c[1]>=o)return}else c=[m,n];i=[m,o]}else{if(c){if(c[1]1)if(l>h){if(c){if(c[1]>=o)return}else c=[(n-a)/s,n];i=[(o-a)/s,o]}else{if(c){if(c[1]=r)return}else c=[t,s*t+a];i=[r,s*r+a]}else{if(c){if(c[0]r.epsilon||Math.abs(i[0][1]-i[1][1])>r.epsilon)||delete r.edges[s]}},"./node_modules/d3-voronoi/src/RedBlackTree.js": -/*!*****************************************************!*\ - !*** ./node_modules/d3-voronoi/src/RedBlackTree.js ***! - \*****************************************************/ -/*! exports provided: RedBlackNode, default */function(e,t,n){"use strict";function r(){this._=null}function o(e){e.U=e.C=e.L=e.R=e.P=e.N=null}function i(e,t){var n=t,r=t.R,o=n.U;o?o.L===n?o.L=r:o.R=r:e._=r,r.U=o,n.U=r,n.R=r.L,n.R&&(n.R.U=n),r.L=n}function s(e,t){var n=t,r=t.L,o=n.U;o?o.L===n?o.L=r:o.R=r:e._=r,r.U=o,n.U=r,n.L=r.R,n.L&&(n.L.U=n),r.R=n}function a(e){for(;e.L;)e=e.L;return e}n.r(t),n.d(t,"RedBlackNode",(function(){return o})),r.prototype={constructor:r,insert:function(e,t){var n,r,o;if(e){if(t.P=e,t.N=e.N,e.N&&(e.N.P=t),e.N=t,e.R){for(e=e.R;e.L;)e=e.L;e.L=t}else e.R=t;n=e}else this._?(e=a(this._),t.P=null,t.N=e,e.P=e.L=t,n=e):(t.P=t.N=null,this._=t,n=null);for(t.L=t.R=null,t.U=n,t.C=!0,e=t;n&&n.C;)n===(r=n.U).L?(o=r.R)&&o.C?(n.C=o.C=!1,r.C=!0,e=r):(e===n.R&&(i(this,n),n=(e=n).U),n.C=!1,r.C=!0,s(this,r)):(o=r.L)&&o.C?(n.C=o.C=!1,r.C=!0,e=r):(e===n.L&&(s(this,n),n=(e=n).U),n.C=!1,r.C=!0,i(this,r)),n=e.U;this._.C=!1},remove:function(e){e.N&&(e.N.P=e.P),e.P&&(e.P.N=e.N),e.N=e.P=null;var t,n,r,o=e.U,c=e.L,u=e.R;if(n=c?u?a(u):c:u,o?o.L===e?o.L=n:o.R=n:this._=n,c&&u?(r=n.C,n.C=e.C,n.L=c,c.U=n,n!==u?(o=n.U,n.U=e.U,e=n.R,o.L=e,n.R=u,u.U=n):(n.U=o,o=n,e=n.R)):(r=e.C,e=n),e&&(e.U=o),!r)if(e&&e.C)e.C=!1;else{do{if(e===this._)break;if(e===o.L){if((t=o.R).C&&(t.C=!1,o.C=!0,i(this,o),t=o.R),t.L&&t.L.C||t.R&&t.R.C){t.R&&t.R.C||(t.L.C=!1,t.C=!0,s(this,t),t=o.R),t.C=o.C,o.C=t.R.C=!1,i(this,o),e=this._;break}}else if((t=o.L).C&&(t.C=!1,o.C=!0,s(this,o),t=o.L),t.L&&t.L.C||t.R&&t.R.C){t.L&&t.L.C||(t.R.C=!1,t.C=!0,i(this,t),t=o.L),t.C=o.C,o.C=t.L.C=!1,s(this,o),e=this._;break}t.C=!0,e=o,o=o.U}while(!e.C);e&&(e.C=!1)}}},t.default=r},"./node_modules/d3-voronoi/src/constant.js": -/*!*************************************************!*\ - !*** ./node_modules/d3-voronoi/src/constant.js ***! - \*************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(e){return function(){return e}}},"./node_modules/d3-voronoi/src/index.js": -/*!**********************************************!*\ - !*** ./node_modules/d3-voronoi/src/index.js ***! - \**********************************************/ -/*! exports provided: voronoi */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./voronoi */"./node_modules/d3-voronoi/src/voronoi.js");n.d(t,"voronoi",(function(){return r.default}))},"./node_modules/d3-voronoi/src/point.js": -/*!**********************************************!*\ - !*** ./node_modules/d3-voronoi/src/point.js ***! - \**********************************************/ -/*! exports provided: x, y */function(e,t,n){"use strict";function r(e){return e[0]}function o(e){return e[1]}n.r(t),n.d(t,"x",(function(){return r})),n.d(t,"y",(function(){return o}))},"./node_modules/d3-voronoi/src/voronoi.js": -/*!************************************************!*\ - !*** ./node_modules/d3-voronoi/src/voronoi.js ***! - \************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./constant */"./node_modules/d3-voronoi/src/constant.js"),o=n(/*! ./point */"./node_modules/d3-voronoi/src/point.js"),i=n(/*! ./Diagram */"./node_modules/d3-voronoi/src/Diagram.js");t.default=function(){var e=o.x,t=o.y,n=null;function s(r){return new i.default(r.map((function(n,o){var s=[Math.round(e(n,o,r)/i.epsilon)*i.epsilon,Math.round(t(n,o,r)/i.epsilon)*i.epsilon];return s.index=o,s.data=n,s})),n)}return s.polygons=function(e){return s(e).polygons()},s.links=function(e){return s(e).links()},s.triangles=function(e){return s(e).triangles()},s.x=function(t){return arguments.length?(e="function"==typeof t?t:Object(r.default)(+t),s):e},s.y=function(e){return arguments.length?(t="function"==typeof e?e:Object(r.default)(+e),s):t},s.extent=function(e){return arguments.length?(n=null==e?null:[[+e[0][0],+e[0][1]],[+e[1][0],+e[1][1]]],s):n&&[[n[0][0],n[0][1]],[n[1][0],n[1][1]]]},s.size=function(e){return arguments.length?(n=null==e?null:[[0,0],[+e[0],+e[1]]],s):n&&[n[1][0]-n[0][0],n[1][1]-n[0][1]]},s}},"./node_modules/d3-zoom/src/constant.js": -/*!**********************************************!*\ - !*** ./node_modules/d3-zoom/src/constant.js ***! - \**********************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(e){return function(){return e}}},"./node_modules/d3-zoom/src/event.js": -/*!*******************************************!*\ - !*** ./node_modules/d3-zoom/src/event.js ***! - \*******************************************/ -/*! exports provided: default */function(e,t,n){"use strict";function r(e,t,n){this.target=e,this.type=t,this.transform=n}n.r(t),n.d(t,"default",(function(){return r}))},"./node_modules/d3-zoom/src/index.js": -/*!*******************************************!*\ - !*** ./node_modules/d3-zoom/src/index.js ***! - \*******************************************/ -/*! exports provided: zoom, zoomTransform, zoomIdentity */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./zoom.js */"./node_modules/d3-zoom/src/zoom.js");n.d(t,"zoom",(function(){return r.default}));var o=n(/*! ./transform.js */"./node_modules/d3-zoom/src/transform.js");n.d(t,"zoomTransform",(function(){return o.default})),n.d(t,"zoomIdentity",(function(){return o.identity}))},"./node_modules/d3-zoom/src/noevent.js": -/*!*********************************************!*\ - !*** ./node_modules/d3-zoom/src/noevent.js ***! - \*********************************************/ -/*! exports provided: nopropagation, default */function(e,t,n){"use strict";n.r(t),n.d(t,"nopropagation",(function(){return o}));var r=n(/*! d3-selection */"./node_modules/d3-selection/src/index.js");function o(){r.event.stopImmediatePropagation()}t.default=function(){r.event.preventDefault(),r.event.stopImmediatePropagation()}},"./node_modules/d3-zoom/src/transform.js": -/*!***********************************************!*\ - !*** ./node_modules/d3-zoom/src/transform.js ***! - \***********************************************/ -/*! exports provided: Transform, identity, default */function(e,t,n){"use strict";function r(e,t,n){this.k=e,this.x=t,this.y=n}n.r(t),n.d(t,"Transform",(function(){return r})),n.d(t,"identity",(function(){return o})),n.d(t,"default",(function(){return i})),r.prototype={constructor:r,scale:function(e){return 1===e?this:new r(this.k*e,this.x,this.y)},translate:function(e,t){return 0===e&0===t?this:new r(this.k,this.x+this.k*e,this.y+this.k*t)},apply:function(e){return[e[0]*this.k+this.x,e[1]*this.k+this.y]},applyX:function(e){return e*this.k+this.x},applyY:function(e){return e*this.k+this.y},invert:function(e){return[(e[0]-this.x)/this.k,(e[1]-this.y)/this.k]},invertX:function(e){return(e-this.x)/this.k},invertY:function(e){return(e-this.y)/this.k},rescaleX:function(e){return e.copy().domain(e.range().map(this.invertX,this).map(e.invert,e))},rescaleY:function(e){return e.copy().domain(e.range().map(this.invertY,this).map(e.invert,e))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};var o=new r(1,0,0);function i(e){for(;!e.__zoom;)if(!(e=e.parentNode))return o;return e.__zoom}i.prototype=r.prototype},"./node_modules/d3-zoom/src/zoom.js": -/*!******************************************!*\ - !*** ./node_modules/d3-zoom/src/zoom.js ***! - \******************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! d3-dispatch */"./node_modules/d3-dispatch/src/index.js"),o=n(/*! d3-drag */"./node_modules/d3-drag/src/index.js"),i=n(/*! d3-interpolate */"./node_modules/d3-interpolate/src/index.js"),s=n(/*! d3-selection */"./node_modules/d3-selection/src/index.js"),a=n(/*! d3-transition */"./node_modules/d3-transition/src/index.js"),c=n(/*! ./constant.js */"./node_modules/d3-zoom/src/constant.js"),u=n(/*! ./event.js */"./node_modules/d3-zoom/src/event.js"),d=n(/*! ./transform.js */"./node_modules/d3-zoom/src/transform.js"),l=n(/*! ./noevent.js */"./node_modules/d3-zoom/src/noevent.js");function f(){return!s.event.ctrlKey&&!s.event.button}function h(){var e=this;return e instanceof SVGElement?(e=e.ownerSVGElement||e).hasAttribute("viewBox")?[[(e=e.viewBox.baseVal).x,e.y],[e.x+e.width,e.y+e.height]]:[[0,0],[e.width.baseVal.value,e.height.baseVal.value]]:[[0,0],[e.clientWidth,e.clientHeight]]}function p(){return this.__zoom||d.identity}function m(){return-s.event.deltaY*(1===s.event.deltaMode?.05:s.event.deltaMode?1:.002)}function g(){return navigator.maxTouchPoints||"ontouchstart"in this}function y(e,t,n){var r=e.invertX(t[0][0])-n[0][0],o=e.invertX(t[1][0])-n[1][0],i=e.invertY(t[0][1])-n[0][1],s=e.invertY(t[1][1])-n[1][1];return e.translate(o>r?(r+o)/2:Math.min(0,r)||Math.max(0,o),s>i?(i+s)/2:Math.min(0,i)||Math.max(0,s))}t.default=function(){var e,t,n=f,b=h,_=y,v=m,j=g,x=[0,1/0],k=[[-1/0,-1/0],[1/0,1/0]],w=250,O=i.interpolateZoom,C=Object(r.dispatch)("start","zoom","end"),E=0;function T(e){e.property("__zoom",p).on("wheel.zoom",L).on("mousedown.zoom",P).on("dblclick.zoom",I).filter(j).on("touchstart.zoom",R).on("touchmove.zoom",F).on("touchend.zoom touchcancel.zoom",Y).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function S(e,t){return(t=Math.max(x[0],Math.min(x[1],t)))===e.k?e:new d.Transform(t,e.x,e.y)}function A(e,t,n){var r=t[0]-n[0]*e.k,o=t[1]-n[1]*e.k;return r===e.x&&o===e.y?e:new d.Transform(e.k,r,o)}function M(e){return[(+e[0][0]+ +e[1][0])/2,(+e[0][1]+ +e[1][1])/2]}function D(e,t,n){e.on("start.zoom",(function(){B(this,arguments).start()})).on("interrupt.zoom end.zoom",(function(){B(this,arguments).end()})).tween("zoom",(function(){var e=this,r=arguments,o=B(e,r),i=b.apply(e,r),s=null==n?M(i):"function"==typeof n?n.apply(e,r):n,a=Math.max(i[1][0]-i[0][0],i[1][1]-i[0][1]),c=e.__zoom,u="function"==typeof t?t.apply(e,r):t,l=O(c.invert(s).concat(a/c.k),u.invert(s).concat(a/u.k));return function(e){if(1===e)e=u;else{var t=l(e),n=a/t[2];e=new d.Transform(n,s[0]-t[0]*n,s[1]-t[1]*n)}o.zoom(null,e)}}))}function B(e,t,n){return!n&&e.__zooming||new N(e,t)}function N(e,t){this.that=e,this.args=t,this.active=0,this.extent=b.apply(e,t),this.taps=0}function L(){if(n.apply(this,arguments)){var e=B(this,arguments),t=this.__zoom,r=Math.max(x[0],Math.min(x[1],t.k*Math.pow(2,v.apply(this,arguments)))),o=Object(s.mouse)(this);if(e.wheel)e.mouse[0][0]===o[0]&&e.mouse[0][1]===o[1]||(e.mouse[1]=t.invert(e.mouse[0]=o)),clearTimeout(e.wheel);else{if(t.k===r)return;e.mouse=[o,t.invert(o)],Object(a.interrupt)(this),e.start()}Object(l.default)(),e.wheel=setTimeout(i,150),e.zoom("mouse",_(A(S(t,r),e.mouse[0],e.mouse[1]),e.extent,k))}function i(){e.wheel=null,e.end()}}function P(){if(!t&&n.apply(this,arguments)){var e=B(this,arguments,!0),r=Object(s.select)(s.event.view).on("mousemove.zoom",d,!0).on("mouseup.zoom",f,!0),i=Object(s.mouse)(this),c=s.event.clientX,u=s.event.clientY;Object(o.dragDisable)(s.event.view),Object(l.nopropagation)(),e.mouse=[i,this.__zoom.invert(i)],Object(a.interrupt)(this),e.start()}function d(){if(Object(l.default)(),!e.moved){var t=s.event.clientX-c,n=s.event.clientY-u;e.moved=t*t+n*n>E}e.zoom("mouse",_(A(e.that.__zoom,e.mouse[0]=Object(s.mouse)(e.that),e.mouse[1]),e.extent,k))}function f(){r.on("mousemove.zoom mouseup.zoom",null),Object(o.dragEnable)(s.event.view,e.moved),Object(l.default)(),e.end()}}function I(){if(n.apply(this,arguments)){var e=this.__zoom,t=Object(s.mouse)(this),r=e.invert(t),o=e.k*(s.event.shiftKey?.5:2),i=_(A(S(e,o),t,r),b.apply(this,arguments),k);Object(l.default)(),w>0?Object(s.select)(this).transition().duration(w).call(D,i,t):Object(s.select)(this).call(T.transform,i)}}function R(){if(n.apply(this,arguments)){var t,r,o,i,c=s.event.touches,u=c.length,d=B(this,arguments,s.event.changedTouches.length===u);for(Object(l.nopropagation)(),r=0;r dist/package.js && rollup -c",test:"tape 'test/**/*-test.js'",prepublishOnly:"yarn test",postpublish:'git push && git push --tags && cd ../d3.github.com && git pull && cp ../d3/dist/d3.js d3.v5.js && cp ../d3/dist/d3.min.js d3.v5.min.js && git add d3.v5.js d3.v5.min.js && git commit -m "d3 ${npm_package_version}" && git push && cd - && cd ../d3-bower && git pull && cp ../d3/LICENSE ../d3/README.md ../d3/dist/d3.js ../d3/dist/d3.min.js . && git add -- LICENSE README.md d3.js d3.min.js && git commit -m "${npm_package_version}" && git tag -am "${npm_package_version}" v${npm_package_version} && git push && git push --tags && cd - && zip -j dist/d3.zip -- LICENSE README.md API.md CHANGES.md dist/d3.js dist/d3.min.js'},g={json2module:"0.0",rimraf:"2",rollup:"1","rollup-plugin-ascii":"0.0","rollup-plugin-node-resolve":"3","rollup-plugin-terser":"5",tape:"4"},y={"d3-array":"1","d3-axis":"1","d3-brush":"1","d3-chord":"1","d3-collection":"1","d3-color":"1","d3-contour":"1","d3-dispatch":"1","d3-drag":"1","d3-dsv":"1","d3-ease":"1","d3-fetch":"1","d3-force":"1","d3-format":"1","d3-geo":"1","d3-hierarchy":"1","d3-interpolate":"1","d3-path":"1","d3-polygon":"1","d3-quadtree":"1","d3-random":"1","d3-scale":"2","d3-scale-chromatic":"1","d3-selection":"1","d3-shape":"1","d3-time":"1","d3-time-format":"2","d3-timer":"1","d3-transition":"1","d3-voronoi":"1","d3-zoom":"1"}},"./node_modules/d3/index.js": -/*!**********************************!*\ - !*** ./node_modules/d3/index.js ***! - \**********************************/ -/*! exports provided: version, bisect, bisectRight, bisectLeft, ascending, bisector, cross, descending, deviation, extent, histogram, thresholdFreedmanDiaconis, thresholdScott, thresholdSturges, max, mean, median, merge, min, pairs, permute, quantile, range, scan, shuffle, sum, ticks, tickIncrement, tickStep, transpose, variance, zip, axisTop, axisRight, axisBottom, axisLeft, brush, brushX, brushY, brushSelection, chord, ribbon, nest, set, map, keys, values, entries, color, rgb, hsl, lab, hcl, lch, gray, cubehelix, contours, contourDensity, dispatch, drag, dragDisable, dragEnable, dsvFormat, csvParse, csvParseRows, csvFormat, csvFormatBody, csvFormatRows, csvFormatRow, csvFormatValue, tsvParse, tsvParseRows, tsvFormat, tsvFormatBody, tsvFormatRows, tsvFormatRow, tsvFormatValue, autoType, easeLinear, easeQuad, easeQuadIn, easeQuadOut, easeQuadInOut, easeCubic, easeCubicIn, easeCubicOut, easeCubicInOut, easePoly, easePolyIn, easePolyOut, easePolyInOut, easeSin, easeSinIn, easeSinOut, easeSinInOut, easeExp, easeExpIn, easeExpOut, easeExpInOut, easeCircle, easeCircleIn, easeCircleOut, easeCircleInOut, easeBounce, easeBounceIn, easeBounceOut, easeBounceInOut, easeBack, easeBackIn, easeBackOut, easeBackInOut, easeElastic, easeElasticIn, easeElasticOut, easeElasticInOut, blob, buffer, dsv, csv, tsv, image, json, text, xml, html, svg, forceCenter, forceCollide, forceLink, forceManyBody, forceRadial, forceSimulation, forceX, forceY, formatDefaultLocale, format, formatPrefix, formatLocale, formatSpecifier, FormatSpecifier, precisionFixed, precisionPrefix, precisionRound, geoArea, geoBounds, geoCentroid, geoCircle, geoClipAntimeridian, geoClipCircle, geoClipExtent, geoClipRectangle, geoContains, geoDistance, geoGraticule, geoGraticule10, geoInterpolate, geoLength, geoPath, geoAlbers, geoAlbersUsa, geoAzimuthalEqualArea, geoAzimuthalEqualAreaRaw, geoAzimuthalEquidistant, geoAzimuthalEquidistantRaw, geoConicConformal, geoConicConformalRaw, geoConicEqualArea, geoConicEqualAreaRaw, geoConicEquidistant, geoConicEquidistantRaw, geoEqualEarth, geoEqualEarthRaw, geoEquirectangular, geoEquirectangularRaw, geoGnomonic, geoGnomonicRaw, geoIdentity, geoProjection, geoProjectionMutator, geoMercator, geoMercatorRaw, geoNaturalEarth1, geoNaturalEarth1Raw, geoOrthographic, geoOrthographicRaw, geoStereographic, geoStereographicRaw, geoTransverseMercator, geoTransverseMercatorRaw, geoRotation, geoStream, geoTransform, cluster, hierarchy, pack, packSiblings, packEnclose, partition, stratify, tree, treemap, treemapBinary, treemapDice, treemapSlice, treemapSliceDice, treemapSquarify, treemapResquarify, interpolate, interpolateArray, interpolateBasis, interpolateBasisClosed, interpolateDate, interpolateDiscrete, interpolateHue, interpolateNumber, interpolateNumberArray, interpolateObject, interpolateRound, interpolateString, interpolateTransformCss, interpolateTransformSvg, interpolateZoom, interpolateRgb, interpolateRgbBasis, interpolateRgbBasisClosed, interpolateHsl, interpolateHslLong, interpolateLab, interpolateHcl, interpolateHclLong, interpolateCubehelix, interpolateCubehelixLong, piecewise, quantize, path, polygonArea, polygonCentroid, polygonHull, polygonContains, polygonLength, quadtree, randomUniform, randomNormal, randomLogNormal, randomBates, randomIrwinHall, randomExponential, scaleBand, scalePoint, scaleIdentity, scaleLinear, scaleLog, scaleSymlog, scaleOrdinal, scaleImplicit, scalePow, scaleSqrt, scaleQuantile, scaleQuantize, scaleThreshold, scaleTime, scaleUtc, scaleSequential, scaleSequentialLog, scaleSequentialPow, scaleSequentialSqrt, scaleSequentialSymlog, scaleSequentialQuantile, scaleDiverging, scaleDivergingLog, scaleDivergingPow, scaleDivergingSqrt, scaleDivergingSymlog, tickFormat, schemeCategory10, schemeAccent, schemeDark2, schemePaired, schemePastel1, schemePastel2, schemeSet1, schemeSet2, schemeSet3, schemeTableau10, interpolateBrBG, schemeBrBG, interpolatePRGn, schemePRGn, interpolatePiYG, schemePiYG, interpolatePuOr, schemePuOr, interpolateRdBu, schemeRdBu, interpolateRdGy, schemeRdGy, interpolateRdYlBu, schemeRdYlBu, interpolateRdYlGn, schemeRdYlGn, interpolateSpectral, schemeSpectral, interpolateBuGn, schemeBuGn, interpolateBuPu, schemeBuPu, interpolateGnBu, schemeGnBu, interpolateOrRd, schemeOrRd, interpolatePuBuGn, schemePuBuGn, interpolatePuBu, schemePuBu, interpolatePuRd, schemePuRd, interpolateRdPu, schemeRdPu, interpolateYlGnBu, schemeYlGnBu, interpolateYlGn, schemeYlGn, interpolateYlOrBr, schemeYlOrBr, interpolateYlOrRd, schemeYlOrRd, interpolateBlues, schemeBlues, interpolateGreens, schemeGreens, interpolateGreys, schemeGreys, interpolatePurples, schemePurples, interpolateReds, schemeReds, interpolateOranges, schemeOranges, interpolateCividis, interpolateCubehelixDefault, interpolateRainbow, interpolateWarm, interpolateCool, interpolateSinebow, interpolateTurbo, interpolateViridis, interpolateMagma, interpolateInferno, interpolatePlasma, create, creator, local, matcher, mouse, namespace, namespaces, clientPoint, select, selectAll, selection, selector, selectorAll, style, touch, touches, window, event, customEvent, arc, area, line, pie, areaRadial, radialArea, lineRadial, radialLine, pointRadial, linkHorizontal, linkVertical, linkRadial, symbol, symbols, symbolCircle, symbolCross, symbolDiamond, symbolSquare, symbolStar, symbolTriangle, symbolWye, curveBasisClosed, curveBasisOpen, curveBasis, curveBundle, curveCardinalClosed, curveCardinalOpen, curveCardinal, curveCatmullRomClosed, curveCatmullRomOpen, curveCatmullRom, curveLinearClosed, curveLinear, curveMonotoneX, curveMonotoneY, curveNatural, curveStep, curveStepAfter, curveStepBefore, stack, stackOffsetExpand, stackOffsetDiverging, stackOffsetNone, stackOffsetSilhouette, stackOffsetWiggle, stackOrderAppearance, stackOrderAscending, stackOrderDescending, stackOrderInsideOut, stackOrderNone, stackOrderReverse, timeInterval, timeMillisecond, timeMilliseconds, utcMillisecond, utcMilliseconds, timeSecond, timeSeconds, utcSecond, utcSeconds, timeMinute, timeMinutes, timeHour, timeHours, timeDay, timeDays, timeWeek, timeWeeks, timeSunday, timeSundays, timeMonday, timeMondays, timeTuesday, timeTuesdays, timeWednesday, timeWednesdays, timeThursday, timeThursdays, timeFriday, timeFridays, timeSaturday, timeSaturdays, timeMonth, timeMonths, timeYear, timeYears, utcMinute, utcMinutes, utcHour, utcHours, utcDay, utcDays, utcWeek, utcWeeks, utcSunday, utcSundays, utcMonday, utcMondays, utcTuesday, utcTuesdays, utcWednesday, utcWednesdays, utcThursday, utcThursdays, utcFriday, utcFridays, utcSaturday, utcSaturdays, utcMonth, utcMonths, utcYear, utcYears, timeFormatDefaultLocale, timeFormat, timeParse, utcFormat, utcParse, timeFormatLocale, isoFormat, isoParse, now, timer, timerFlush, timeout, interval, transition, active, interrupt, voronoi, zoom, zoomTransform, zoomIdentity */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./dist/package.js */"./node_modules/d3/dist/package.js");n.d(t,"version",(function(){return r.version}));var o=n(/*! d3-array */"./node_modules/d3-array/src/index.js");n.d(t,"bisect",(function(){return o.bisect})),n.d(t,"bisectRight",(function(){return o.bisectRight})),n.d(t,"bisectLeft",(function(){return o.bisectLeft})),n.d(t,"ascending",(function(){return o.ascending})),n.d(t,"bisector",(function(){return o.bisector})),n.d(t,"cross",(function(){return o.cross})),n.d(t,"descending",(function(){return o.descending})),n.d(t,"deviation",(function(){return o.deviation})),n.d(t,"extent",(function(){return o.extent})),n.d(t,"histogram",(function(){return o.histogram})),n.d(t,"thresholdFreedmanDiaconis",(function(){return o.thresholdFreedmanDiaconis})),n.d(t,"thresholdScott",(function(){return o.thresholdScott})),n.d(t,"thresholdSturges",(function(){return o.thresholdSturges})),n.d(t,"max",(function(){return o.max})),n.d(t,"mean",(function(){return o.mean})),n.d(t,"median",(function(){return o.median})),n.d(t,"merge",(function(){return o.merge})),n.d(t,"min",(function(){return o.min})),n.d(t,"pairs",(function(){return o.pairs})),n.d(t,"permute",(function(){return o.permute})),n.d(t,"quantile",(function(){return o.quantile})),n.d(t,"range",(function(){return o.range})),n.d(t,"scan",(function(){return o.scan})),n.d(t,"shuffle",(function(){return o.shuffle})),n.d(t,"sum",(function(){return o.sum})),n.d(t,"ticks",(function(){return o.ticks})),n.d(t,"tickIncrement",(function(){return o.tickIncrement})),n.d(t,"tickStep",(function(){return o.tickStep})),n.d(t,"transpose",(function(){return o.transpose})),n.d(t,"variance",(function(){return o.variance})),n.d(t,"zip",(function(){return o.zip}));var i=n(/*! d3-axis */"./node_modules/d3-axis/src/index.js");n.d(t,"axisTop",(function(){return i.axisTop})),n.d(t,"axisRight",(function(){return i.axisRight})),n.d(t,"axisBottom",(function(){return i.axisBottom})),n.d(t,"axisLeft",(function(){return i.axisLeft}));var s=n(/*! d3-brush */"./node_modules/d3-brush/src/index.js");n.d(t,"brush",(function(){return s.brush})),n.d(t,"brushX",(function(){return s.brushX})),n.d(t,"brushY",(function(){return s.brushY})),n.d(t,"brushSelection",(function(){return s.brushSelection}));var a=n(/*! d3-chord */"./node_modules/d3-chord/src/index.js");n.d(t,"chord",(function(){return a.chord})),n.d(t,"ribbon",(function(){return a.ribbon}));var c=n(/*! d3-collection */"./node_modules/d3-collection/src/index.js");n.d(t,"nest",(function(){return c.nest})),n.d(t,"set",(function(){return c.set})),n.d(t,"map",(function(){return c.map})),n.d(t,"keys",(function(){return c.keys})),n.d(t,"values",(function(){return c.values})),n.d(t,"entries",(function(){return c.entries}));var u=n(/*! d3-color */"./node_modules/d3-color/src/index.js");n.d(t,"color",(function(){return u.color})),n.d(t,"rgb",(function(){return u.rgb})),n.d(t,"hsl",(function(){return u.hsl})),n.d(t,"lab",(function(){return u.lab})),n.d(t,"hcl",(function(){return u.hcl})),n.d(t,"lch",(function(){return u.lch})),n.d(t,"gray",(function(){return u.gray})),n.d(t,"cubehelix",(function(){return u.cubehelix}));var d=n(/*! d3-contour */"./node_modules/d3-contour/src/index.js");n.d(t,"contours",(function(){return d.contours})),n.d(t,"contourDensity",(function(){return d.contourDensity}));var l=n(/*! d3-dispatch */"./node_modules/d3-dispatch/src/index.js");n.d(t,"dispatch",(function(){return l.dispatch}));var f=n(/*! d3-drag */"./node_modules/d3-drag/src/index.js");n.d(t,"drag",(function(){return f.drag})),n.d(t,"dragDisable",(function(){return f.dragDisable})),n.d(t,"dragEnable",(function(){return f.dragEnable}));var h=n(/*! d3-dsv */"./node_modules/d3-dsv/src/index.js");n.d(t,"dsvFormat",(function(){return h.dsvFormat})),n.d(t,"csvParse",(function(){return h.csvParse})),n.d(t,"csvParseRows",(function(){return h.csvParseRows})),n.d(t,"csvFormat",(function(){return h.csvFormat})),n.d(t,"csvFormatBody",(function(){return h.csvFormatBody})),n.d(t,"csvFormatRows",(function(){return h.csvFormatRows})),n.d(t,"csvFormatRow",(function(){return h.csvFormatRow})),n.d(t,"csvFormatValue",(function(){return h.csvFormatValue})),n.d(t,"tsvParse",(function(){return h.tsvParse})),n.d(t,"tsvParseRows",(function(){return h.tsvParseRows})),n.d(t,"tsvFormat",(function(){return h.tsvFormat})),n.d(t,"tsvFormatBody",(function(){return h.tsvFormatBody})),n.d(t,"tsvFormatRows",(function(){return h.tsvFormatRows})),n.d(t,"tsvFormatRow",(function(){return h.tsvFormatRow})),n.d(t,"tsvFormatValue",(function(){return h.tsvFormatValue})),n.d(t,"autoType",(function(){return h.autoType}));var p=n(/*! d3-ease */"./node_modules/d3-ease/src/index.js");n.d(t,"easeLinear",(function(){return p.easeLinear})),n.d(t,"easeQuad",(function(){return p.easeQuad})),n.d(t,"easeQuadIn",(function(){return p.easeQuadIn})),n.d(t,"easeQuadOut",(function(){return p.easeQuadOut})),n.d(t,"easeQuadInOut",(function(){return p.easeQuadInOut})),n.d(t,"easeCubic",(function(){return p.easeCubic})),n.d(t,"easeCubicIn",(function(){return p.easeCubicIn})),n.d(t,"easeCubicOut",(function(){return p.easeCubicOut})),n.d(t,"easeCubicInOut",(function(){return p.easeCubicInOut})),n.d(t,"easePoly",(function(){return p.easePoly})),n.d(t,"easePolyIn",(function(){return p.easePolyIn})),n.d(t,"easePolyOut",(function(){return p.easePolyOut})),n.d(t,"easePolyInOut",(function(){return p.easePolyInOut})),n.d(t,"easeSin",(function(){return p.easeSin})),n.d(t,"easeSinIn",(function(){return p.easeSinIn})),n.d(t,"easeSinOut",(function(){return p.easeSinOut})),n.d(t,"easeSinInOut",(function(){return p.easeSinInOut})),n.d(t,"easeExp",(function(){return p.easeExp})),n.d(t,"easeExpIn",(function(){return p.easeExpIn})),n.d(t,"easeExpOut",(function(){return p.easeExpOut})),n.d(t,"easeExpInOut",(function(){return p.easeExpInOut})),n.d(t,"easeCircle",(function(){return p.easeCircle})),n.d(t,"easeCircleIn",(function(){return p.easeCircleIn})),n.d(t,"easeCircleOut",(function(){return p.easeCircleOut})),n.d(t,"easeCircleInOut",(function(){return p.easeCircleInOut})),n.d(t,"easeBounce",(function(){return p.easeBounce})),n.d(t,"easeBounceIn",(function(){return p.easeBounceIn})),n.d(t,"easeBounceOut",(function(){return p.easeBounceOut})),n.d(t,"easeBounceInOut",(function(){return p.easeBounceInOut})),n.d(t,"easeBack",(function(){return p.easeBack})),n.d(t,"easeBackIn",(function(){return p.easeBackIn})),n.d(t,"easeBackOut",(function(){return p.easeBackOut})),n.d(t,"easeBackInOut",(function(){return p.easeBackInOut})),n.d(t,"easeElastic",(function(){return p.easeElastic})),n.d(t,"easeElasticIn",(function(){return p.easeElasticIn})),n.d(t,"easeElasticOut",(function(){return p.easeElasticOut})),n.d(t,"easeElasticInOut",(function(){return p.easeElasticInOut}));var m=n(/*! d3-fetch */"./node_modules/d3-fetch/src/index.js");n.d(t,"blob",(function(){return m.blob})),n.d(t,"buffer",(function(){return m.buffer})),n.d(t,"dsv",(function(){return m.dsv})),n.d(t,"csv",(function(){return m.csv})),n.d(t,"tsv",(function(){return m.tsv})),n.d(t,"image",(function(){return m.image})),n.d(t,"json",(function(){return m.json})),n.d(t,"text",(function(){return m.text})),n.d(t,"xml",(function(){return m.xml})),n.d(t,"html",(function(){return m.html})),n.d(t,"svg",(function(){return m.svg}));var g=n(/*! d3-force */"./node_modules/d3-force/src/index.js");n.d(t,"forceCenter",(function(){return g.forceCenter})),n.d(t,"forceCollide",(function(){return g.forceCollide})),n.d(t,"forceLink",(function(){return g.forceLink})),n.d(t,"forceManyBody",(function(){return g.forceManyBody})),n.d(t,"forceRadial",(function(){return g.forceRadial})),n.d(t,"forceSimulation",(function(){return g.forceSimulation})),n.d(t,"forceX",(function(){return g.forceX})),n.d(t,"forceY",(function(){return g.forceY}));var y=n(/*! d3-format */"./node_modules/d3-format/src/index.js");n.d(t,"formatDefaultLocale",(function(){return y.formatDefaultLocale})),n.d(t,"format",(function(){return y.format})),n.d(t,"formatPrefix",(function(){return y.formatPrefix})),n.d(t,"formatLocale",(function(){return y.formatLocale})),n.d(t,"formatSpecifier",(function(){return y.formatSpecifier})),n.d(t,"FormatSpecifier",(function(){return y.FormatSpecifier})),n.d(t,"precisionFixed",(function(){return y.precisionFixed})),n.d(t,"precisionPrefix",(function(){return y.precisionPrefix})),n.d(t,"precisionRound",(function(){return y.precisionRound}));var b=n(/*! d3-geo */"./node_modules/d3-geo/src/index.js");n.d(t,"geoArea",(function(){return b.geoArea})),n.d(t,"geoBounds",(function(){return b.geoBounds})),n.d(t,"geoCentroid",(function(){return b.geoCentroid})),n.d(t,"geoCircle",(function(){return b.geoCircle})),n.d(t,"geoClipAntimeridian",(function(){return b.geoClipAntimeridian})),n.d(t,"geoClipCircle",(function(){return b.geoClipCircle})),n.d(t,"geoClipExtent",(function(){return b.geoClipExtent})),n.d(t,"geoClipRectangle",(function(){return b.geoClipRectangle})),n.d(t,"geoContains",(function(){return b.geoContains})),n.d(t,"geoDistance",(function(){return b.geoDistance})),n.d(t,"geoGraticule",(function(){return b.geoGraticule})),n.d(t,"geoGraticule10",(function(){return b.geoGraticule10})),n.d(t,"geoInterpolate",(function(){return b.geoInterpolate})),n.d(t,"geoLength",(function(){return b.geoLength})),n.d(t,"geoPath",(function(){return b.geoPath})),n.d(t,"geoAlbers",(function(){return b.geoAlbers})),n.d(t,"geoAlbersUsa",(function(){return b.geoAlbersUsa})),n.d(t,"geoAzimuthalEqualArea",(function(){return b.geoAzimuthalEqualArea})),n.d(t,"geoAzimuthalEqualAreaRaw",(function(){return b.geoAzimuthalEqualAreaRaw})),n.d(t,"geoAzimuthalEquidistant",(function(){return b.geoAzimuthalEquidistant})),n.d(t,"geoAzimuthalEquidistantRaw",(function(){return b.geoAzimuthalEquidistantRaw})),n.d(t,"geoConicConformal",(function(){return b.geoConicConformal})),n.d(t,"geoConicConformalRaw",(function(){return b.geoConicConformalRaw})),n.d(t,"geoConicEqualArea",(function(){return b.geoConicEqualArea})),n.d(t,"geoConicEqualAreaRaw",(function(){return b.geoConicEqualAreaRaw})),n.d(t,"geoConicEquidistant",(function(){return b.geoConicEquidistant})),n.d(t,"geoConicEquidistantRaw",(function(){return b.geoConicEquidistantRaw})),n.d(t,"geoEqualEarth",(function(){return b.geoEqualEarth})),n.d(t,"geoEqualEarthRaw",(function(){return b.geoEqualEarthRaw})),n.d(t,"geoEquirectangular",(function(){return b.geoEquirectangular})),n.d(t,"geoEquirectangularRaw",(function(){return b.geoEquirectangularRaw})),n.d(t,"geoGnomonic",(function(){return b.geoGnomonic})),n.d(t,"geoGnomonicRaw",(function(){return b.geoGnomonicRaw})),n.d(t,"geoIdentity",(function(){return b.geoIdentity})),n.d(t,"geoProjection",(function(){return b.geoProjection})),n.d(t,"geoProjectionMutator",(function(){return b.geoProjectionMutator})),n.d(t,"geoMercator",(function(){return b.geoMercator})),n.d(t,"geoMercatorRaw",(function(){return b.geoMercatorRaw})),n.d(t,"geoNaturalEarth1",(function(){return b.geoNaturalEarth1})),n.d(t,"geoNaturalEarth1Raw",(function(){return b.geoNaturalEarth1Raw})),n.d(t,"geoOrthographic",(function(){return b.geoOrthographic})),n.d(t,"geoOrthographicRaw",(function(){return b.geoOrthographicRaw})),n.d(t,"geoStereographic",(function(){return b.geoStereographic})),n.d(t,"geoStereographicRaw",(function(){return b.geoStereographicRaw})),n.d(t,"geoTransverseMercator",(function(){return b.geoTransverseMercator})),n.d(t,"geoTransverseMercatorRaw",(function(){return b.geoTransverseMercatorRaw})),n.d(t,"geoRotation",(function(){return b.geoRotation})),n.d(t,"geoStream",(function(){return b.geoStream})),n.d(t,"geoTransform",(function(){return b.geoTransform}));var _=n(/*! d3-hierarchy */"./node_modules/d3-hierarchy/src/index.js");n.d(t,"cluster",(function(){return _.cluster})),n.d(t,"hierarchy",(function(){return _.hierarchy})),n.d(t,"pack",(function(){return _.pack})),n.d(t,"packSiblings",(function(){return _.packSiblings})),n.d(t,"packEnclose",(function(){return _.packEnclose})),n.d(t,"partition",(function(){return _.partition})),n.d(t,"stratify",(function(){return _.stratify})),n.d(t,"tree",(function(){return _.tree})),n.d(t,"treemap",(function(){return _.treemap})),n.d(t,"treemapBinary",(function(){return _.treemapBinary})),n.d(t,"treemapDice",(function(){return _.treemapDice})),n.d(t,"treemapSlice",(function(){return _.treemapSlice})),n.d(t,"treemapSliceDice",(function(){return _.treemapSliceDice})),n.d(t,"treemapSquarify",(function(){return _.treemapSquarify})),n.d(t,"treemapResquarify",(function(){return _.treemapResquarify}));var v=n(/*! d3-interpolate */"./node_modules/d3-interpolate/src/index.js");n.d(t,"interpolate",(function(){return v.interpolate})),n.d(t,"interpolateArray",(function(){return v.interpolateArray})),n.d(t,"interpolateBasis",(function(){return v.interpolateBasis})),n.d(t,"interpolateBasisClosed",(function(){return v.interpolateBasisClosed})),n.d(t,"interpolateDate",(function(){return v.interpolateDate})),n.d(t,"interpolateDiscrete",(function(){return v.interpolateDiscrete})),n.d(t,"interpolateHue",(function(){return v.interpolateHue})),n.d(t,"interpolateNumber",(function(){return v.interpolateNumber})),n.d(t,"interpolateNumberArray",(function(){return v.interpolateNumberArray})),n.d(t,"interpolateObject",(function(){return v.interpolateObject})),n.d(t,"interpolateRound",(function(){return v.interpolateRound})),n.d(t,"interpolateString",(function(){return v.interpolateString})),n.d(t,"interpolateTransformCss",(function(){return v.interpolateTransformCss})),n.d(t,"interpolateTransformSvg",(function(){return v.interpolateTransformSvg})),n.d(t,"interpolateZoom",(function(){return v.interpolateZoom})),n.d(t,"interpolateRgb",(function(){return v.interpolateRgb})),n.d(t,"interpolateRgbBasis",(function(){return v.interpolateRgbBasis})),n.d(t,"interpolateRgbBasisClosed",(function(){return v.interpolateRgbBasisClosed})),n.d(t,"interpolateHsl",(function(){return v.interpolateHsl})),n.d(t,"interpolateHslLong",(function(){return v.interpolateHslLong})),n.d(t,"interpolateLab",(function(){return v.interpolateLab})),n.d(t,"interpolateHcl",(function(){return v.interpolateHcl})),n.d(t,"interpolateHclLong",(function(){return v.interpolateHclLong})),n.d(t,"interpolateCubehelix",(function(){return v.interpolateCubehelix})),n.d(t,"interpolateCubehelixLong",(function(){return v.interpolateCubehelixLong})),n.d(t,"piecewise",(function(){return v.piecewise})),n.d(t,"quantize",(function(){return v.quantize}));var j=n(/*! d3-path */"./node_modules/d3-path/src/index.js");n.d(t,"path",(function(){return j.path}));var x=n(/*! d3-polygon */"./node_modules/d3-polygon/src/index.js");n.d(t,"polygonArea",(function(){return x.polygonArea})),n.d(t,"polygonCentroid",(function(){return x.polygonCentroid})),n.d(t,"polygonHull",(function(){return x.polygonHull})),n.d(t,"polygonContains",(function(){return x.polygonContains})),n.d(t,"polygonLength",(function(){return x.polygonLength}));var k=n(/*! d3-quadtree */"./node_modules/d3-quadtree/src/index.js");n.d(t,"quadtree",(function(){return k.quadtree}));var w=n(/*! d3-random */"./node_modules/d3-random/src/index.js");n.d(t,"randomUniform",(function(){return w.randomUniform})),n.d(t,"randomNormal",(function(){return w.randomNormal})),n.d(t,"randomLogNormal",(function(){return w.randomLogNormal})),n.d(t,"randomBates",(function(){return w.randomBates})),n.d(t,"randomIrwinHall",(function(){return w.randomIrwinHall})),n.d(t,"randomExponential",(function(){return w.randomExponential}));var O=n(/*! d3-scale */"./node_modules/d3-scale/src/index.js");n.d(t,"scaleBand",(function(){return O.scaleBand})),n.d(t,"scalePoint",(function(){return O.scalePoint})),n.d(t,"scaleIdentity",(function(){return O.scaleIdentity})),n.d(t,"scaleLinear",(function(){return O.scaleLinear})),n.d(t,"scaleLog",(function(){return O.scaleLog})),n.d(t,"scaleSymlog",(function(){return O.scaleSymlog})),n.d(t,"scaleOrdinal",(function(){return O.scaleOrdinal})),n.d(t,"scaleImplicit",(function(){return O.scaleImplicit})),n.d(t,"scalePow",(function(){return O.scalePow})),n.d(t,"scaleSqrt",(function(){return O.scaleSqrt})),n.d(t,"scaleQuantile",(function(){return O.scaleQuantile})),n.d(t,"scaleQuantize",(function(){return O.scaleQuantize})),n.d(t,"scaleThreshold",(function(){return O.scaleThreshold})),n.d(t,"scaleTime",(function(){return O.scaleTime})),n.d(t,"scaleUtc",(function(){return O.scaleUtc})),n.d(t,"scaleSequential",(function(){return O.scaleSequential})),n.d(t,"scaleSequentialLog",(function(){return O.scaleSequentialLog})),n.d(t,"scaleSequentialPow",(function(){return O.scaleSequentialPow})),n.d(t,"scaleSequentialSqrt",(function(){return O.scaleSequentialSqrt})),n.d(t,"scaleSequentialSymlog",(function(){return O.scaleSequentialSymlog})),n.d(t,"scaleSequentialQuantile",(function(){return O.scaleSequentialQuantile})),n.d(t,"scaleDiverging",(function(){return O.scaleDiverging})),n.d(t,"scaleDivergingLog",(function(){return O.scaleDivergingLog})),n.d(t,"scaleDivergingPow",(function(){return O.scaleDivergingPow})),n.d(t,"scaleDivergingSqrt",(function(){return O.scaleDivergingSqrt})),n.d(t,"scaleDivergingSymlog",(function(){return O.scaleDivergingSymlog})),n.d(t,"tickFormat",(function(){return O.tickFormat}));var C=n(/*! d3-scale-chromatic */"./node_modules/d3-scale-chromatic/src/index.js");n.d(t,"schemeCategory10",(function(){return C.schemeCategory10})),n.d(t,"schemeAccent",(function(){return C.schemeAccent})),n.d(t,"schemeDark2",(function(){return C.schemeDark2})),n.d(t,"schemePaired",(function(){return C.schemePaired})),n.d(t,"schemePastel1",(function(){return C.schemePastel1})),n.d(t,"schemePastel2",(function(){return C.schemePastel2})),n.d(t,"schemeSet1",(function(){return C.schemeSet1})),n.d(t,"schemeSet2",(function(){return C.schemeSet2})),n.d(t,"schemeSet3",(function(){return C.schemeSet3})),n.d(t,"schemeTableau10",(function(){return C.schemeTableau10})),n.d(t,"interpolateBrBG",(function(){return C.interpolateBrBG})),n.d(t,"schemeBrBG",(function(){return C.schemeBrBG})),n.d(t,"interpolatePRGn",(function(){return C.interpolatePRGn})),n.d(t,"schemePRGn",(function(){return C.schemePRGn})),n.d(t,"interpolatePiYG",(function(){return C.interpolatePiYG})),n.d(t,"schemePiYG",(function(){return C.schemePiYG})),n.d(t,"interpolatePuOr",(function(){return C.interpolatePuOr})),n.d(t,"schemePuOr",(function(){return C.schemePuOr})),n.d(t,"interpolateRdBu",(function(){return C.interpolateRdBu})),n.d(t,"schemeRdBu",(function(){return C.schemeRdBu})),n.d(t,"interpolateRdGy",(function(){return C.interpolateRdGy})),n.d(t,"schemeRdGy",(function(){return C.schemeRdGy})),n.d(t,"interpolateRdYlBu",(function(){return C.interpolateRdYlBu})),n.d(t,"schemeRdYlBu",(function(){return C.schemeRdYlBu})),n.d(t,"interpolateRdYlGn",(function(){return C.interpolateRdYlGn})),n.d(t,"schemeRdYlGn",(function(){return C.schemeRdYlGn})),n.d(t,"interpolateSpectral",(function(){return C.interpolateSpectral})),n.d(t,"schemeSpectral",(function(){return C.schemeSpectral})),n.d(t,"interpolateBuGn",(function(){return C.interpolateBuGn})),n.d(t,"schemeBuGn",(function(){return C.schemeBuGn})),n.d(t,"interpolateBuPu",(function(){return C.interpolateBuPu})),n.d(t,"schemeBuPu",(function(){return C.schemeBuPu})),n.d(t,"interpolateGnBu",(function(){return C.interpolateGnBu})),n.d(t,"schemeGnBu",(function(){return C.schemeGnBu})),n.d(t,"interpolateOrRd",(function(){return C.interpolateOrRd})),n.d(t,"schemeOrRd",(function(){return C.schemeOrRd})),n.d(t,"interpolatePuBuGn",(function(){return C.interpolatePuBuGn})),n.d(t,"schemePuBuGn",(function(){return C.schemePuBuGn})),n.d(t,"interpolatePuBu",(function(){return C.interpolatePuBu})),n.d(t,"schemePuBu",(function(){return C.schemePuBu})),n.d(t,"interpolatePuRd",(function(){return C.interpolatePuRd})),n.d(t,"schemePuRd",(function(){return C.schemePuRd})),n.d(t,"interpolateRdPu",(function(){return C.interpolateRdPu})),n.d(t,"schemeRdPu",(function(){return C.schemeRdPu})),n.d(t,"interpolateYlGnBu",(function(){return C.interpolateYlGnBu})),n.d(t,"schemeYlGnBu",(function(){return C.schemeYlGnBu})),n.d(t,"interpolateYlGn",(function(){return C.interpolateYlGn})),n.d(t,"schemeYlGn",(function(){return C.schemeYlGn})),n.d(t,"interpolateYlOrBr",(function(){return C.interpolateYlOrBr})),n.d(t,"schemeYlOrBr",(function(){return C.schemeYlOrBr})),n.d(t,"interpolateYlOrRd",(function(){return C.interpolateYlOrRd})),n.d(t,"schemeYlOrRd",(function(){return C.schemeYlOrRd})),n.d(t,"interpolateBlues",(function(){return C.interpolateBlues})),n.d(t,"schemeBlues",(function(){return C.schemeBlues})),n.d(t,"interpolateGreens",(function(){return C.interpolateGreens})),n.d(t,"schemeGreens",(function(){return C.schemeGreens})),n.d(t,"interpolateGreys",(function(){return C.interpolateGreys})),n.d(t,"schemeGreys",(function(){return C.schemeGreys})),n.d(t,"interpolatePurples",(function(){return C.interpolatePurples})),n.d(t,"schemePurples",(function(){return C.schemePurples})),n.d(t,"interpolateReds",(function(){return C.interpolateReds})),n.d(t,"schemeReds",(function(){return C.schemeReds})),n.d(t,"interpolateOranges",(function(){return C.interpolateOranges})),n.d(t,"schemeOranges",(function(){return C.schemeOranges})),n.d(t,"interpolateCividis",(function(){return C.interpolateCividis})),n.d(t,"interpolateCubehelixDefault",(function(){return C.interpolateCubehelixDefault})),n.d(t,"interpolateRainbow",(function(){return C.interpolateRainbow})),n.d(t,"interpolateWarm",(function(){return C.interpolateWarm})),n.d(t,"interpolateCool",(function(){return C.interpolateCool})),n.d(t,"interpolateSinebow",(function(){return C.interpolateSinebow})),n.d(t,"interpolateTurbo",(function(){return C.interpolateTurbo})),n.d(t,"interpolateViridis",(function(){return C.interpolateViridis})),n.d(t,"interpolateMagma",(function(){return C.interpolateMagma})),n.d(t,"interpolateInferno",(function(){return C.interpolateInferno})),n.d(t,"interpolatePlasma",(function(){return C.interpolatePlasma}));var E=n(/*! d3-selection */"./node_modules/d3-selection/src/index.js");n.d(t,"create",(function(){return E.create})),n.d(t,"creator",(function(){return E.creator})),n.d(t,"local",(function(){return E.local})),n.d(t,"matcher",(function(){return E.matcher})),n.d(t,"mouse",(function(){return E.mouse})),n.d(t,"namespace",(function(){return E.namespace})),n.d(t,"namespaces",(function(){return E.namespaces})),n.d(t,"clientPoint",(function(){return E.clientPoint})),n.d(t,"select",(function(){return E.select})),n.d(t,"selectAll",(function(){return E.selectAll})),n.d(t,"selection",(function(){return E.selection})),n.d(t,"selector",(function(){return E.selector})),n.d(t,"selectorAll",(function(){return E.selectorAll})),n.d(t,"style",(function(){return E.style})),n.d(t,"touch",(function(){return E.touch})),n.d(t,"touches",(function(){return E.touches})),n.d(t,"window",(function(){return E.window})),n.d(t,"event",(function(){return E.event})),n.d(t,"customEvent",(function(){return E.customEvent}));var T=n(/*! d3-shape */"./node_modules/d3-shape/src/index.js");n.d(t,"arc",(function(){return T.arc})),n.d(t,"area",(function(){return T.area})),n.d(t,"line",(function(){return T.line})),n.d(t,"pie",(function(){return T.pie})),n.d(t,"areaRadial",(function(){return T.areaRadial})),n.d(t,"radialArea",(function(){return T.radialArea})),n.d(t,"lineRadial",(function(){return T.lineRadial})),n.d(t,"radialLine",(function(){return T.radialLine})),n.d(t,"pointRadial",(function(){return T.pointRadial})),n.d(t,"linkHorizontal",(function(){return T.linkHorizontal})),n.d(t,"linkVertical",(function(){return T.linkVertical})),n.d(t,"linkRadial",(function(){return T.linkRadial})),n.d(t,"symbol",(function(){return T.symbol})),n.d(t,"symbols",(function(){return T.symbols})),n.d(t,"symbolCircle",(function(){return T.symbolCircle})),n.d(t,"symbolCross",(function(){return T.symbolCross})),n.d(t,"symbolDiamond",(function(){return T.symbolDiamond})),n.d(t,"symbolSquare",(function(){return T.symbolSquare})),n.d(t,"symbolStar",(function(){return T.symbolStar})),n.d(t,"symbolTriangle",(function(){return T.symbolTriangle})),n.d(t,"symbolWye",(function(){return T.symbolWye})),n.d(t,"curveBasisClosed",(function(){return T.curveBasisClosed})),n.d(t,"curveBasisOpen",(function(){return T.curveBasisOpen})),n.d(t,"curveBasis",(function(){return T.curveBasis})),n.d(t,"curveBundle",(function(){return T.curveBundle})),n.d(t,"curveCardinalClosed",(function(){return T.curveCardinalClosed})),n.d(t,"curveCardinalOpen",(function(){return T.curveCardinalOpen})),n.d(t,"curveCardinal",(function(){return T.curveCardinal})),n.d(t,"curveCatmullRomClosed",(function(){return T.curveCatmullRomClosed})),n.d(t,"curveCatmullRomOpen",(function(){return T.curveCatmullRomOpen})),n.d(t,"curveCatmullRom",(function(){return T.curveCatmullRom})),n.d(t,"curveLinearClosed",(function(){return T.curveLinearClosed})),n.d(t,"curveLinear",(function(){return T.curveLinear})),n.d(t,"curveMonotoneX",(function(){return T.curveMonotoneX})),n.d(t,"curveMonotoneY",(function(){return T.curveMonotoneY})),n.d(t,"curveNatural",(function(){return T.curveNatural})),n.d(t,"curveStep",(function(){return T.curveStep})),n.d(t,"curveStepAfter",(function(){return T.curveStepAfter})),n.d(t,"curveStepBefore",(function(){return T.curveStepBefore})),n.d(t,"stack",(function(){return T.stack})),n.d(t,"stackOffsetExpand",(function(){return T.stackOffsetExpand})),n.d(t,"stackOffsetDiverging",(function(){return T.stackOffsetDiverging})),n.d(t,"stackOffsetNone",(function(){return T.stackOffsetNone})),n.d(t,"stackOffsetSilhouette",(function(){return T.stackOffsetSilhouette})),n.d(t,"stackOffsetWiggle",(function(){return T.stackOffsetWiggle})),n.d(t,"stackOrderAppearance",(function(){return T.stackOrderAppearance})),n.d(t,"stackOrderAscending",(function(){return T.stackOrderAscending})),n.d(t,"stackOrderDescending",(function(){return T.stackOrderDescending})),n.d(t,"stackOrderInsideOut",(function(){return T.stackOrderInsideOut})),n.d(t,"stackOrderNone",(function(){return T.stackOrderNone})),n.d(t,"stackOrderReverse",(function(){return T.stackOrderReverse}));var S=n(/*! d3-time */"./node_modules/d3-time/src/index.js");n.d(t,"timeInterval",(function(){return S.timeInterval})),n.d(t,"timeMillisecond",(function(){return S.timeMillisecond})),n.d(t,"timeMilliseconds",(function(){return S.timeMilliseconds})),n.d(t,"utcMillisecond",(function(){return S.utcMillisecond})),n.d(t,"utcMilliseconds",(function(){return S.utcMilliseconds})),n.d(t,"timeSecond",(function(){return S.timeSecond})),n.d(t,"timeSeconds",(function(){return S.timeSeconds})),n.d(t,"utcSecond",(function(){return S.utcSecond})),n.d(t,"utcSeconds",(function(){return S.utcSeconds})),n.d(t,"timeMinute",(function(){return S.timeMinute})),n.d(t,"timeMinutes",(function(){return S.timeMinutes})),n.d(t,"timeHour",(function(){return S.timeHour})),n.d(t,"timeHours",(function(){return S.timeHours})),n.d(t,"timeDay",(function(){return S.timeDay})),n.d(t,"timeDays",(function(){return S.timeDays})),n.d(t,"timeWeek",(function(){return S.timeWeek})),n.d(t,"timeWeeks",(function(){return S.timeWeeks})),n.d(t,"timeSunday",(function(){return S.timeSunday})),n.d(t,"timeSundays",(function(){return S.timeSundays})),n.d(t,"timeMonday",(function(){return S.timeMonday})),n.d(t,"timeMondays",(function(){return S.timeMondays})),n.d(t,"timeTuesday",(function(){return S.timeTuesday})),n.d(t,"timeTuesdays",(function(){return S.timeTuesdays})),n.d(t,"timeWednesday",(function(){return S.timeWednesday})),n.d(t,"timeWednesdays",(function(){return S.timeWednesdays})),n.d(t,"timeThursday",(function(){return S.timeThursday})),n.d(t,"timeThursdays",(function(){return S.timeThursdays})),n.d(t,"timeFriday",(function(){return S.timeFriday})),n.d(t,"timeFridays",(function(){return S.timeFridays})),n.d(t,"timeSaturday",(function(){return S.timeSaturday})),n.d(t,"timeSaturdays",(function(){return S.timeSaturdays})),n.d(t,"timeMonth",(function(){return S.timeMonth})),n.d(t,"timeMonths",(function(){return S.timeMonths})),n.d(t,"timeYear",(function(){return S.timeYear})),n.d(t,"timeYears",(function(){return S.timeYears})),n.d(t,"utcMinute",(function(){return S.utcMinute})),n.d(t,"utcMinutes",(function(){return S.utcMinutes})),n.d(t,"utcHour",(function(){return S.utcHour})),n.d(t,"utcHours",(function(){return S.utcHours})),n.d(t,"utcDay",(function(){return S.utcDay})),n.d(t,"utcDays",(function(){return S.utcDays})),n.d(t,"utcWeek",(function(){return S.utcWeek})),n.d(t,"utcWeeks",(function(){return S.utcWeeks})),n.d(t,"utcSunday",(function(){return S.utcSunday})),n.d(t,"utcSundays",(function(){return S.utcSundays})),n.d(t,"utcMonday",(function(){return S.utcMonday})),n.d(t,"utcMondays",(function(){return S.utcMondays})),n.d(t,"utcTuesday",(function(){return S.utcTuesday})),n.d(t,"utcTuesdays",(function(){return S.utcTuesdays})),n.d(t,"utcWednesday",(function(){return S.utcWednesday})),n.d(t,"utcWednesdays",(function(){return S.utcWednesdays})),n.d(t,"utcThursday",(function(){return S.utcThursday})),n.d(t,"utcThursdays",(function(){return S.utcThursdays})),n.d(t,"utcFriday",(function(){return S.utcFriday})),n.d(t,"utcFridays",(function(){return S.utcFridays})),n.d(t,"utcSaturday",(function(){return S.utcSaturday})),n.d(t,"utcSaturdays",(function(){return S.utcSaturdays})),n.d(t,"utcMonth",(function(){return S.utcMonth})),n.d(t,"utcMonths",(function(){return S.utcMonths})),n.d(t,"utcYear",(function(){return S.utcYear})),n.d(t,"utcYears",(function(){return S.utcYears}));var A=n(/*! d3-time-format */"./node_modules/d3-time-format/src/index.js");n.d(t,"timeFormatDefaultLocale",(function(){return A.timeFormatDefaultLocale})),n.d(t,"timeFormat",(function(){return A.timeFormat})),n.d(t,"timeParse",(function(){return A.timeParse})),n.d(t,"utcFormat",(function(){return A.utcFormat})),n.d(t,"utcParse",(function(){return A.utcParse})),n.d(t,"timeFormatLocale",(function(){return A.timeFormatLocale})),n.d(t,"isoFormat",(function(){return A.isoFormat})),n.d(t,"isoParse",(function(){return A.isoParse}));var M=n(/*! d3-timer */"./node_modules/d3-timer/src/index.js");n.d(t,"now",(function(){return M.now})),n.d(t,"timer",(function(){return M.timer})),n.d(t,"timerFlush",(function(){return M.timerFlush})),n.d(t,"timeout",(function(){return M.timeout})),n.d(t,"interval",(function(){return M.interval}));var D=n(/*! d3-transition */"./node_modules/d3-transition/src/index.js");n.d(t,"transition",(function(){return D.transition})),n.d(t,"active",(function(){return D.active})),n.d(t,"interrupt",(function(){return D.interrupt}));var B=n(/*! d3-voronoi */"./node_modules/d3-voronoi/src/index.js");n.d(t,"voronoi",(function(){return B.voronoi}));var N=n(/*! d3-zoom */"./node_modules/d3-zoom/src/index.js");n.d(t,"zoom",(function(){return N.zoom})),n.d(t,"zoomTransform",(function(){return N.zoomTransform})),n.d(t,"zoomIdentity",(function(){return N.zoomIdentity}))},"./node_modules/dagre-d3/index.js": -/*!****************************************!*\ - !*** ./node_modules/dagre-d3/index.js ***! - \****************************************/ -/*! no static exports found */function(e,t,n){ -/** - * @license - * Copyright (c) 2012-2013 Chris Pettitt - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -e.exports={graphlib:n(/*! ./lib/graphlib */"./node_modules/dagre-d3/lib/graphlib.js"),dagre:n(/*! ./lib/dagre */"./node_modules/dagre-d3/lib/dagre.js"),intersect:n(/*! ./lib/intersect */"./node_modules/dagre-d3/lib/intersect/index.js"),render:n(/*! ./lib/render */"./node_modules/dagre-d3/lib/render.js"),util:n(/*! ./lib/util */"./node_modules/dagre-d3/lib/util.js"),version:n(/*! ./lib/version */"./node_modules/dagre-d3/lib/version.js")}},"./node_modules/dagre-d3/lib/arrows.js": -/*!*********************************************!*\ - !*** ./node_modules/dagre-d3/lib/arrows.js ***! - \*********************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./util */"./node_modules/dagre-d3/lib/util.js");function o(e,t,n,o){var i=e.append("marker").attr("id",t).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").style("stroke-width",1).style("stroke-dasharray","1,0");r.applyStyle(i,n[o+"Style"]),n[o+"Class"]&&i.attr("class",n[o+"Class"])}e.exports={default:o,normal:o,vee:function(e,t,n,o){var i=e.append("marker").attr("id",t).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 L 4 5 z").style("stroke-width",1).style("stroke-dasharray","1,0");r.applyStyle(i,n[o+"Style"]),n[o+"Class"]&&i.attr("class",n[o+"Class"])},undirected:function(e,t,n,o){var i=e.append("marker").attr("id",t).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","strokeWidth").attr("markerWidth",8).attr("markerHeight",6).attr("orient","auto").append("path").attr("d","M 0 5 L 10 5").style("stroke-width",1).style("stroke-dasharray","1,0");r.applyStyle(i,n[o+"Style"]),n[o+"Class"]&&i.attr("class",n[o+"Class"])}}},"./node_modules/dagre-d3/lib/create-clusters.js": -/*!******************************************************!*\ - !*** ./node_modules/dagre-d3/lib/create-clusters.js ***! - \******************************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./util */"./node_modules/dagre-d3/lib/util.js"),o=n(/*! ./d3 */"./node_modules/dagre-d3/lib/d3.js"),i=n(/*! ./label/add-label */"./node_modules/dagre-d3/lib/label/add-label.js");e.exports=function(e,t){var n,s=t.nodes().filter((function(e){return r.isSubgraph(t,e)})),a=e.selectAll("g.cluster").data(s,(function(e){return e}));return a.selectAll("*").remove(),a.enter().append("g").attr("class","cluster").attr("id",(function(e){return t.node(e).id})).style("opacity",0),a=e.selectAll("g.cluster"),r.applyTransition(a,t).style("opacity",1),a.each((function(e){var n=t.node(e),r=o.select(this);o.select(this).append("rect");var s=r.append("g").attr("class","label");i(s,n,n.clusterLabelPos)})),a.selectAll("rect").each((function(e){var n=t.node(e),i=o.select(this);r.applyStyle(i,n.style)})),n=a.exit?a.exit():a.selectAll(null),r.applyTransition(n,t).style("opacity",0).remove(),a}},"./node_modules/dagre-d3/lib/create-edge-labels.js": -/*!*********************************************************!*\ - !*** ./node_modules/dagre-d3/lib/create-edge-labels.js ***! - \*********************************************************/ -/*! no static exports found */function(e,t,n){"use strict";var r=n(/*! ./lodash */"./node_modules/dagre-d3/lib/lodash.js"),o=n(/*! ./label/add-label */"./node_modules/dagre-d3/lib/label/add-label.js"),i=n(/*! ./util */"./node_modules/dagre-d3/lib/util.js"),s=n(/*! ./d3 */"./node_modules/dagre-d3/lib/d3.js");e.exports=function(e,t){var n,a=e.selectAll("g.edgeLabel").data(t.edges(),(function(e){return i.edgeToId(e)})).classed("update",!0);return a.exit().remove(),a.enter().append("g").classed("edgeLabel",!0).style("opacity",0),(a=e.selectAll("g.edgeLabel")).each((function(e){var n=s.select(this);n.select(".label").remove();var i=t.edge(e),a=o(n,t.edge(e),0,0).classed("label",!0),c=a.node().getBBox();i.labelId&&a.attr("id",i.labelId),r.has(i,"width")||(i.width=c.width),r.has(i,"height")||(i.height=c.height)})),n=a.exit?a.exit():a.selectAll(null),i.applyTransition(n,t).style("opacity",0).remove(),a}},"./node_modules/dagre-d3/lib/create-edge-paths.js": -/*!********************************************************!*\ - !*** ./node_modules/dagre-d3/lib/create-edge-paths.js ***! - \********************************************************/ -/*! no static exports found */function(e,t,n){"use strict";var r=n(/*! ./lodash */"./node_modules/dagre-d3/lib/lodash.js"),o=n(/*! ./intersect/intersect-node */"./node_modules/dagre-d3/lib/intersect/intersect-node.js"),i=n(/*! ./util */"./node_modules/dagre-d3/lib/util.js"),s=n(/*! ./d3 */"./node_modules/dagre-d3/lib/d3.js");function a(e,t){var n=(s.line||s.svg.line)().x((function(e){return e.x})).y((function(e){return e.y}));return(n.curve||n.interpolate)(e.curve),n(t)}e.exports=function(e,t,n){var c=e.selectAll("g.edgePath").data(t.edges(),(function(e){return i.edgeToId(e)})).classed("update",!0),u=function(e,t){var n=e.enter().append("g").attr("class","edgePath").style("opacity",0);return n.append("path").attr("class","path").attr("d",(function(e){var n=t.edge(e),o=t.node(e.v).elem;return a(n,r.range(n.points.length).map((function(){return t=(e=o).getBBox(),{x:(n=e.ownerSVGElement.getScreenCTM().inverse().multiply(e.getScreenCTM()).translate(t.width/2,t.height/2)).e,y:n.f};var e,t,n})))})),n.append("defs"),n}(c,t);!function(e,t){var n=e.exit();i.applyTransition(n,t).style("opacity",0).remove()}(c,t);var d=void 0!==c.merge?c.merge(u):c;return i.applyTransition(d,t).style("opacity",1),d.each((function(e){var n=s.select(this),r=t.edge(e);r.elem=this,r.id&&n.attr("id",r.id),i.applyClass(n,r.class,(n.classed("update")?"update ":"")+"edgePath")})),d.selectAll("path.path").each((function(e){var n=t.edge(e);n.arrowheadId=r.uniqueId("arrowhead");var c=s.select(this).attr("marker-end",(function(){return"url("+(e=location.href,t=n.arrowheadId,e.split("#")[0]+"#"+t+")");var e,t})).style("fill","none");i.applyTransition(c,t).attr("d",(function(e){return function(e,t){var n=e.edge(t),r=e.node(t.v),i=e.node(t.w),s=n.points.slice(1,n.points.length-1);return s.unshift(o(r,s[0])),s.push(o(i,s[s.length-1])),a(n,s)}(t,e)})),i.applyStyle(c,n.style)})),d.selectAll("defs *").remove(),d.selectAll("defs").each((function(e){var r=t.edge(e);(0,n[r.arrowhead])(s.select(this),r.arrowheadId,r,"arrowhead")})),d}},"./node_modules/dagre-d3/lib/create-nodes.js": -/*!***************************************************!*\ - !*** ./node_modules/dagre-d3/lib/create-nodes.js ***! - \***************************************************/ -/*! no static exports found */function(e,t,n){"use strict";var r=n(/*! ./lodash */"./node_modules/dagre-d3/lib/lodash.js"),o=n(/*! ./label/add-label */"./node_modules/dagre-d3/lib/label/add-label.js"),i=n(/*! ./util */"./node_modules/dagre-d3/lib/util.js"),s=n(/*! ./d3 */"./node_modules/dagre-d3/lib/d3.js");e.exports=function(e,t,n){var a,c=t.nodes().filter((function(e){return!i.isSubgraph(t,e)})),u=e.selectAll("g.node").data(c,(function(e){return e})).classed("update",!0);return u.exit().remove(),u.enter().append("g").attr("class","node").style("opacity",0),(u=e.selectAll("g.node")).each((function(e){var a=t.node(e),c=s.select(this);i.applyClass(c,a.class,(c.classed("update")?"update ":"")+"node"),c.select("g.label").remove();var u=c.append("g").attr("class","label"),d=o(u,a),l=n[a.shape],f=r.pick(d.node().getBBox(),"width","height");a.elem=this,a.id&&c.attr("id",a.id),a.labelId&&u.attr("id",a.labelId),r.has(a,"width")&&(f.width=a.width),r.has(a,"height")&&(f.height=a.height),f.width+=a.paddingLeft+a.paddingRight,f.height+=a.paddingTop+a.paddingBottom,u.attr("transform","translate("+(a.paddingLeft-a.paddingRight)/2+","+(a.paddingTop-a.paddingBottom)/2+")");var h=s.select(this);h.select(".label-container").remove();var p=l(h,f,a).classed("label-container",!0);i.applyStyle(p,a.style);var m=p.node().getBBox();a.width=m.width,a.height=m.height})),a=u.exit?u.exit():u.selectAll(null),i.applyTransition(a,t).style("opacity",0).remove(),u}},"./node_modules/dagre-d3/lib/d3.js": -/*!*****************************************!*\ - !*** ./node_modules/dagre-d3/lib/d3.js ***! - \*****************************************/ -/*! no static exports found */function(e,t,n){var r;if(!r)try{r=n(/*! d3 */"./node_modules/d3/index.js")}catch(e){}r||(r=window.d3),e.exports=r},"./node_modules/dagre-d3/lib/dagre.js": -/*!********************************************!*\ - !*** ./node_modules/dagre-d3/lib/dagre.js ***! - \********************************************/ -/*! no static exports found */function(e,t,n){var r;try{r=n(/*! dagre */"./node_modules/dagre/index.js")}catch(e){}r||(r=window.dagre),e.exports=r},"./node_modules/dagre-d3/lib/graphlib.js": -/*!***********************************************!*\ - !*** ./node_modules/dagre-d3/lib/graphlib.js ***! - \***********************************************/ -/*! no static exports found */function(e,t,n){var r;try{r=n(/*! graphlib */"./node_modules/graphlib/index.js")}catch(e){}r||(r=window.graphlib),e.exports=r},"./node_modules/dagre-d3/lib/intersect/index.js": -/*!******************************************************!*\ - !*** ./node_modules/dagre-d3/lib/intersect/index.js ***! - \******************************************************/ -/*! no static exports found */function(e,t,n){e.exports={node:n(/*! ./intersect-node */"./node_modules/dagre-d3/lib/intersect/intersect-node.js"),circle:n(/*! ./intersect-circle */"./node_modules/dagre-d3/lib/intersect/intersect-circle.js"),ellipse:n(/*! ./intersect-ellipse */"./node_modules/dagre-d3/lib/intersect/intersect-ellipse.js"),polygon:n(/*! ./intersect-polygon */"./node_modules/dagre-d3/lib/intersect/intersect-polygon.js"),rect:n(/*! ./intersect-rect */"./node_modules/dagre-d3/lib/intersect/intersect-rect.js")}},"./node_modules/dagre-d3/lib/intersect/intersect-circle.js": -/*!*****************************************************************!*\ - !*** ./node_modules/dagre-d3/lib/intersect/intersect-circle.js ***! - \*****************************************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./intersect-ellipse */"./node_modules/dagre-d3/lib/intersect/intersect-ellipse.js");e.exports=function(e,t,n){return r(e,t,t,n)}},"./node_modules/dagre-d3/lib/intersect/intersect-ellipse.js": -/*!******************************************************************!*\ - !*** ./node_modules/dagre-d3/lib/intersect/intersect-ellipse.js ***! - \******************************************************************/ -/*! no static exports found */function(e,t){e.exports=function(e,t,n,r){var o=e.x,i=e.y,s=o-r.x,a=i-r.y,c=Math.sqrt(t*t*a*a+n*n*s*s),u=Math.abs(t*n*s/c);r.x0}e.exports=function(e,t,r,o){var i,s,a,c,u,d,l,f,h,p,m,g,y;if(!(i=t.y-e.y,a=e.x-t.x,u=t.x*e.y-e.x*t.y,h=i*r.x+a*r.y+u,p=i*o.x+a*o.y+u,0!==h&&0!==p&&n(h,p)||(s=o.y-r.y,c=r.x-o.x,d=o.x*r.y-r.x*o.y,l=s*e.x+c*e.y+d,f=s*t.x+c*t.y+d,0!==l&&0!==f&&n(l,f)||0==(m=i*c-s*a))))return g=Math.abs(m/2),{x:(y=a*d-c*u)<0?(y-g)/m:(y+g)/m,y:(y=s*u-i*d)<0?(y-g)/m:(y+g)/m}}},"./node_modules/dagre-d3/lib/intersect/intersect-node.js": -/*!***************************************************************!*\ - !*** ./node_modules/dagre-d3/lib/intersect/intersect-node.js ***! - \***************************************************************/ -/*! no static exports found */function(e,t){e.exports=function(e,t){return e.intersect(t)}},"./node_modules/dagre-d3/lib/intersect/intersect-polygon.js": -/*!******************************************************************!*\ - !*** ./node_modules/dagre-d3/lib/intersect/intersect-polygon.js ***! - \******************************************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./intersect-line */"./node_modules/dagre-d3/lib/intersect/intersect-line.js");e.exports=function(e,t,n){var o=e.x,i=e.y,s=[],a=Number.POSITIVE_INFINITY,c=Number.POSITIVE_INFINITY;t.forEach((function(e){a=Math.min(a,e.x),c=Math.min(c,e.y)}));for(var u=o-e.width/2-a,d=i-e.height/2-c,l=0;l1&&s.sort((function(e,t){var r=e.x-n.x,o=e.y-n.y,i=Math.sqrt(r*r+o*o),s=t.x-n.x,a=t.y-n.y,c=Math.sqrt(s*s+a*a);return iMath.abs(s)*u?(a<0&&(u=-u),n=0===a?0:u*s/a,r=u):(s<0&&(c=-c),n=c,r=0===s?0:c*a/s),{x:o+n,y:i+r}}},"./node_modules/dagre-d3/lib/label/add-html-label.js": -/*!***********************************************************!*\ - !*** ./node_modules/dagre-d3/lib/label/add-html-label.js ***! - \***********************************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ../util */"./node_modules/dagre-d3/lib/util.js");e.exports=function(e,t){var n=e.append("foreignObject").attr("width","100000"),o=n.append("xhtml:div");o.attr("xmlns","http://www.w3.org/1999/xhtml");var i=t.label;switch(typeof i){case"function":o.insert(i);break;case"object":o.insert((function(){return i}));break;default:o.html(i)}r.applyStyle(o,t.labelStyle),o.style("display","inline-block"),o.style("white-space","nowrap");var s=o.node().getBoundingClientRect();return n.attr("width",s.width).attr("height",s.height),n}},"./node_modules/dagre-d3/lib/label/add-label.js": -/*!******************************************************!*\ - !*** ./node_modules/dagre-d3/lib/label/add-label.js ***! - \******************************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./add-text-label */"./node_modules/dagre-d3/lib/label/add-text-label.js"),o=n(/*! ./add-html-label */"./node_modules/dagre-d3/lib/label/add-html-label.js"),i=n(/*! ./add-svg-label */"./node_modules/dagre-d3/lib/label/add-svg-label.js");e.exports=function(e,t,n){var s=t.label,a=e.append("g");"svg"===t.labelType?i(a,t):"string"!=typeof s||"html"===t.labelType?o(a,t):r(a,t);var c,u=a.node().getBBox();switch(n){case"top":c=-t.height/2;break;case"bottom":c=t.height/2-u.height;break;default:c=-u.height/2}return a.attr("transform","translate("+-u.width/2+","+c+")"),a}},"./node_modules/dagre-d3/lib/label/add-svg-label.js": -/*!**********************************************************!*\ - !*** ./node_modules/dagre-d3/lib/label/add-svg-label.js ***! - \**********************************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ../util */"./node_modules/dagre-d3/lib/util.js");e.exports=function(e,t){var n=e;return n.node().appendChild(t.label),r.applyStyle(n,t.labelStyle),n}},"./node_modules/dagre-d3/lib/label/add-text-label.js": -/*!***********************************************************!*\ - !*** ./node_modules/dagre-d3/lib/label/add-text-label.js ***! - \***********************************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ../util */"./node_modules/dagre-d3/lib/util.js");e.exports=function(e,t){for(var n=e.append("text"),o=function(e){for(var t,n="",r=!1,o=0;o0;--c)if(r=t[c].dequeue()){o=o.concat(a(e,t,n,r,!0));break}}return o}(n.graph,n.buckets,n.zeroIdx);return r.flatten(r.map(u,(function(t){return e.outEdges(t.v,t.w)})),!0)};var s=r.constant(1);function a(e,t,n,o,i){var s=i?[]:void 0;return r.forEach(e.inEdges(o.v),(function(r){var o=e.edge(r),a=e.node(r.v);i&&s.push({v:r.v,w:r.w}),a.out-=o,c(t,n,a)})),r.forEach(e.outEdges(o.v),(function(r){var o=e.edge(r),i=r.w,s=e.node(i);s.in-=o,c(t,n,s)})),e.removeNode(o.v),s}function c(e,t,n){n.out?n.in?e[n.out-n.in+t].enqueue(n):e[e.length-1].enqueue(n):e[0].enqueue(n)}},"./node_modules/dagre/lib/layout.js": -/*!******************************************!*\ - !*** ./node_modules/dagre/lib/layout.js ***! - \******************************************/ -/*! no static exports found */function(e,t,n){"use strict";var r=n(/*! ./lodash */"./node_modules/dagre/lib/lodash.js"),o=n(/*! ./acyclic */"./node_modules/dagre/lib/acyclic.js"),i=n(/*! ./normalize */"./node_modules/dagre/lib/normalize.js"),s=n(/*! ./rank */"./node_modules/dagre/lib/rank/index.js"),a=n(/*! ./util */"./node_modules/dagre/lib/util.js").normalizeRanks,c=n(/*! ./parent-dummy-chains */"./node_modules/dagre/lib/parent-dummy-chains.js"),u=n(/*! ./util */"./node_modules/dagre/lib/util.js").removeEmptyRanks,d=n(/*! ./nesting-graph */"./node_modules/dagre/lib/nesting-graph.js"),l=n(/*! ./add-border-segments */"./node_modules/dagre/lib/add-border-segments.js"),f=n(/*! ./coordinate-system */"./node_modules/dagre/lib/coordinate-system.js"),h=n(/*! ./order */"./node_modules/dagre/lib/order/index.js"),p=n(/*! ./position */"./node_modules/dagre/lib/position/index.js"),m=n(/*! ./util */"./node_modules/dagre/lib/util.js"),g=n(/*! ./graphlib */"./node_modules/dagre/lib/graphlib.js").Graph;e.exports=function(e,t){var n=t&&t.debugTiming?m.time:m.notime;n("layout",(function(){var t=n(" buildLayoutGraph",(function(){return function(e){var t=new g({multigraph:!0,compound:!0}),n=C(e.graph());return t.setGraph(r.merge({},b,O(n,y),r.pick(n,_))),r.forEach(e.nodes(),(function(n){var o=C(e.node(n));t.setNode(n,r.defaults(O(o,v),j)),t.setParent(n,e.parent(n))})),r.forEach(e.edges(),(function(n){var o=C(e.edge(n));t.setEdge(n,r.merge({},k,O(o,x),r.pick(o,w)))})),t}(e)}));n(" runLayout",(function(){!function(e,t){t(" makeSpaceForEdgeLabels",(function(){!function(e){var t=e.graph();t.ranksep/=2,r.forEach(e.edges(),(function(n){var r=e.edge(n);r.minlen*=2,"c"!==r.labelpos.toLowerCase()&&("TB"===t.rankdir||"BT"===t.rankdir?r.width+=r.labeloffset:r.height+=r.labeloffset)}))}(e)})),t(" removeSelfEdges",(function(){!function(e){r.forEach(e.edges(),(function(t){if(t.v===t.w){var n=e.node(t.v);n.selfEdges||(n.selfEdges=[]),n.selfEdges.push({e:t,label:e.edge(t)}),e.removeEdge(t)}}))}(e)})),t(" acyclic",(function(){o.run(e)})),t(" nestingGraph.run",(function(){d.run(e)})),t(" rank",(function(){s(m.asNonCompoundGraph(e))})),t(" injectEdgeLabelProxies",(function(){!function(e){r.forEach(e.edges(),(function(t){var n=e.edge(t);if(n.width&&n.height){var r=e.node(t.v),o={rank:(e.node(t.w).rank-r.rank)/2+r.rank,e:t};m.addDummyNode(e,"edge-proxy",o,"_ep")}}))}(e)})),t(" removeEmptyRanks",(function(){u(e)})),t(" nestingGraph.cleanup",(function(){d.cleanup(e)})),t(" normalizeRanks",(function(){a(e)})),t(" assignRankMinMax",(function(){!function(e){var t=0;r.forEach(e.nodes(),(function(n){var o=e.node(n);o.borderTop&&(o.minRank=e.node(o.borderTop).rank,o.maxRank=e.node(o.borderBottom).rank,t=r.max(t,o.maxRank))})),e.graph().maxRank=t}(e)})),t(" removeEdgeLabelProxies",(function(){!function(e){r.forEach(e.nodes(),(function(t){var n=e.node(t);"edge-proxy"===n.dummy&&(e.edge(n.e).labelRank=n.rank,e.removeNode(t))}))}(e)})),t(" normalize.run",(function(){i.run(e)})),t(" parentDummyChains",(function(){c(e)})),t(" addBorderSegments",(function(){l(e)})),t(" order",(function(){h(e)})),t(" insertSelfEdges",(function(){!function(e){var t=m.buildLayerMatrix(e);r.forEach(t,(function(t){var n=0;r.forEach(t,(function(t,o){var i=e.node(t);i.order=o+n,r.forEach(i.selfEdges,(function(t){m.addDummyNode(e,"selfedge",{width:t.label.width,height:t.label.height,rank:i.rank,order:o+ ++n,e:t.e,label:t.label},"_se")})),delete i.selfEdges}))}))}(e)})),t(" adjustCoordinateSystem",(function(){f.adjust(e)})),t(" position",(function(){p(e)})),t(" positionSelfEdges",(function(){!function(e){r.forEach(e.nodes(),(function(t){var n=e.node(t);if("selfedge"===n.dummy){var r=e.node(n.e.v),o=r.x+r.width/2,i=r.y,s=n.x-o,a=r.height/2;e.setEdge(n.e,n.label),e.removeNode(t),n.label.points=[{x:o+2*s/3,y:i-a},{x:o+5*s/6,y:i-a},{x:o+s,y:i},{x:o+5*s/6,y:i+a},{x:o+2*s/3,y:i+a}],n.label.x=n.x,n.label.y=n.y}}))}(e)})),t(" removeBorderNodes",(function(){!function(e){r.forEach(e.nodes(),(function(t){if(e.children(t).length){var n=e.node(t),o=e.node(n.borderTop),i=e.node(n.borderBottom),s=e.node(r.last(n.borderLeft)),a=e.node(r.last(n.borderRight));n.width=Math.abs(a.x-s.x),n.height=Math.abs(i.y-o.y),n.x=s.x+n.width/2,n.y=o.y+n.height/2}})),r.forEach(e.nodes(),(function(t){"border"===e.node(t).dummy&&e.removeNode(t)}))}(e)})),t(" normalize.undo",(function(){i.undo(e)})),t(" fixupEdgeLabelCoords",(function(){!function(e){r.forEach(e.edges(),(function(t){var n=e.edge(t);if(r.has(n,"x"))switch("l"!==n.labelpos&&"r"!==n.labelpos||(n.width-=n.labeloffset),n.labelpos){case"l":n.x-=n.width/2+n.labeloffset;break;case"r":n.x+=n.width/2+n.labeloffset}}))}(e)})),t(" undoCoordinateSystem",(function(){f.undo(e)})),t(" translateGraph",(function(){!function(e){var t=Number.POSITIVE_INFINITY,n=0,o=Number.POSITIVE_INFINITY,i=0,s=e.graph(),a=s.marginx||0,c=s.marginy||0;function u(e){var r=e.x,s=e.y,a=e.width,c=e.height;t=Math.min(t,r-a/2),n=Math.max(n,r+a/2),o=Math.min(o,s-c/2),i=Math.max(i,s+c/2)}r.forEach(e.nodes(),(function(t){u(e.node(t))})),r.forEach(e.edges(),(function(t){var n=e.edge(t);r.has(n,"x")&&u(n)})),t-=a,o-=c,r.forEach(e.nodes(),(function(n){var r=e.node(n);r.x-=t,r.y-=o})),r.forEach(e.edges(),(function(n){var i=e.edge(n);r.forEach(i.points,(function(e){e.x-=t,e.y-=o})),r.has(i,"x")&&(i.x-=t),r.has(i,"y")&&(i.y-=o)})),s.width=n-t+a,s.height=i-o+c}(e)})),t(" assignNodeIntersects",(function(){!function(e){r.forEach(e.edges(),(function(t){var n,r,o=e.edge(t),i=e.node(t.v),s=e.node(t.w);o.points?(n=o.points[0],r=o.points[o.points.length-1]):(o.points=[],n=s,r=i),o.points.unshift(m.intersectRect(i,n)),o.points.push(m.intersectRect(s,r))}))}(e)})),t(" reversePoints",(function(){!function(e){r.forEach(e.edges(),(function(t){var n=e.edge(t);n.reversed&&n.points.reverse()}))}(e)})),t(" acyclic.undo",(function(){o.undo(e)}))}(t,n)})),n(" updateInputGraph",(function(){!function(e,t){r.forEach(e.nodes(),(function(n){var r=e.node(n),o=t.node(n);r&&(r.x=o.x,r.y=o.y,t.children(n).length&&(r.width=o.width,r.height=o.height))})),r.forEach(e.edges(),(function(n){var o=e.edge(n),i=t.edge(n);o.points=i.points,r.has(i,"x")&&(o.x=i.x,o.y=i.y)})),e.graph().width=t.graph().width,e.graph().height=t.graph().height}(e,t)}))}))};var y=["nodesep","edgesep","ranksep","marginx","marginy"],b={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb"},_=["acyclicer","ranker","rankdir","align"],v=["width","height"],j={width:0,height:0},x=["minlen","weight","width","height","labeloffset"],k={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},w=["labelpos"];function O(e,t){return r.mapValues(r.pick(e,t),Number)}function C(e){var t={};return r.forEach(e,(function(e,n){t[n.toLowerCase()]=e})),t}},"./node_modules/dagre/lib/lodash.js": -/*!******************************************!*\ - !*** ./node_modules/dagre/lib/lodash.js ***! - \******************************************/ -/*! no static exports found */function(e,t,n){var r;try{r={cloneDeep:n(/*! lodash/cloneDeep */"./node_modules/lodash/cloneDeep.js"),constant:n(/*! lodash/constant */"./node_modules/lodash/constant.js"),defaults:n(/*! lodash/defaults */"./node_modules/lodash/defaults.js"),each:n(/*! lodash/each */"./node_modules/lodash/each.js"),filter:n(/*! lodash/filter */"./node_modules/lodash/filter.js"),find:n(/*! lodash/find */"./node_modules/lodash/find.js"),flatten:n(/*! lodash/flatten */"./node_modules/lodash/flatten.js"),forEach:n(/*! lodash/forEach */"./node_modules/lodash/forEach.js"),forIn:n(/*! lodash/forIn */"./node_modules/lodash/forIn.js"),has:n(/*! lodash/has */"./node_modules/lodash/has.js"),isUndefined:n(/*! lodash/isUndefined */"./node_modules/lodash/isUndefined.js"),last:n(/*! lodash/last */"./node_modules/lodash/last.js"),map:n(/*! lodash/map */"./node_modules/lodash/map.js"),mapValues:n(/*! lodash/mapValues */"./node_modules/lodash/mapValues.js"),max:n(/*! lodash/max */"./node_modules/lodash/max.js"),merge:n(/*! lodash/merge */"./node_modules/lodash/merge.js"),min:n(/*! lodash/min */"./node_modules/lodash/min.js"),minBy:n(/*! lodash/minBy */"./node_modules/lodash/minBy.js"),now:n(/*! lodash/now */"./node_modules/lodash/now.js"),pick:n(/*! lodash/pick */"./node_modules/lodash/pick.js"),range:n(/*! lodash/range */"./node_modules/lodash/range.js"),reduce:n(/*! lodash/reduce */"./node_modules/lodash/reduce.js"),sortBy:n(/*! lodash/sortBy */"./node_modules/lodash/sortBy.js"),uniqueId:n(/*! lodash/uniqueId */"./node_modules/lodash/uniqueId.js"),values:n(/*! lodash/values */"./node_modules/lodash/values.js"),zipObject:n(/*! lodash/zipObject */"./node_modules/lodash/zipObject.js")}}catch(e){}r||(r=window._),e.exports=r},"./node_modules/dagre/lib/nesting-graph.js": -/*!*************************************************!*\ - !*** ./node_modules/dagre/lib/nesting-graph.js ***! - \*************************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./lodash */"./node_modules/dagre/lib/lodash.js"),o=n(/*! ./util */"./node_modules/dagre/lib/util.js");e.exports={run:function(e){var t=o.addDummyNode(e,"root",{},"_root"),n=function(e){var t={};return r.forEach(e.children(),(function(n){!function n(o,i){var s=e.children(o);s&&s.length&&r.forEach(s,(function(e){n(e,i+1)})),t[o]=i}(n,1)})),t}(e),i=r.max(r.values(n))-1,s=2*i+1;e.graph().nestingRoot=t,r.forEach(e.edges(),(function(t){e.edge(t).minlen*=s}));var a=function(e){return r.reduce(e.edges(),(function(t,n){return t+e.edge(n).weight}),0)}(e)+1;r.forEach(e.children(),(function(c){!function e(t,n,i,s,a,c,u){var d=t.children(u);if(d.length){var l=o.addBorderNode(t,"_bt"),f=o.addBorderNode(t,"_bb"),h=t.node(u);t.setParent(l,u),h.borderTop=l,t.setParent(f,u),h.borderBottom=f,r.forEach(d,(function(r){e(t,n,i,s,a,c,r);var o=t.node(r),d=o.borderTop?o.borderTop:r,h=o.borderBottom?o.borderBottom:r,p=o.borderTop?s:2*s,m=d!==h?1:a-c[u]+1;t.setEdge(l,d,{weight:p,minlen:m,nestingEdge:!0}),t.setEdge(h,f,{weight:p,minlen:m,nestingEdge:!0})})),t.parent(u)||t.setEdge(n,l,{weight:0,minlen:a+c[u]})}else u!==n&&t.setEdge(n,u,{weight:0,minlen:i})}(e,t,s,a,i,n,c)})),e.graph().nodeRankFactor=s},cleanup:function(e){var t=e.graph();e.removeNode(t.nestingRoot),delete t.nestingRoot,r.forEach(e.edges(),(function(t){e.edge(t).nestingEdge&&e.removeEdge(t)}))}}},"./node_modules/dagre/lib/normalize.js": -/*!*********************************************!*\ - !*** ./node_modules/dagre/lib/normalize.js ***! - \*********************************************/ -/*! no static exports found */function(e,t,n){"use strict";var r=n(/*! ./lodash */"./node_modules/dagre/lib/lodash.js"),o=n(/*! ./util */"./node_modules/dagre/lib/util.js");e.exports={run:function(e){e.graph().dummyChains=[],r.forEach(e.edges(),(function(t){!function(e,t){var n,r,i,s=t.v,a=e.node(s).rank,c=t.w,u=e.node(c).rank,d=t.name,l=e.edge(t),f=l.labelRank;if(u!==a+1){for(e.removeEdge(t),i=0,++a;a0;)t%2&&(n+=c[t+1]),c[t=t-1>>1]+=e.weight;u+=e.weight*n}))),u}e.exports=function(e,t){for(var n=0,r=1;r=2),a=d.buildLayerMatrix(e);var g=i(e,a);g=e.barycenter)&&(o=t,i=0,s=0,(n=e).weight&&(i+=n.barycenter*n.weight,s+=n.weight),o.weight&&(i+=o.barycenter*o.weight,s+=o.weight),n.vs=o.vs.concat(n.vs),n.barycenter=i/s,n.weight=s,n.i=Math.min(o.i,n.i),o.merged=!0)}}function o(t){return function(n){n.in.push(t),0==--n.indegree&&e.push(n)}}for(;e.length;){var i=e.pop();t.push(i),r.forEach(i.in.reverse(),n(i)),r.forEach(i.out,o(i))}return r.map(r.filter(t,(function(e){return!e.merged})),(function(e){return r.pick(e,["vs","i","barycenter","weight"])}))}(r.filter(n,(function(e){return!e.indegree})))}},"./node_modules/dagre/lib/order/sort-subgraph.js": -/*!*******************************************************!*\ - !*** ./node_modules/dagre/lib/order/sort-subgraph.js ***! - \*******************************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ../lodash */"./node_modules/dagre/lib/lodash.js"),o=n(/*! ./barycenter */"./node_modules/dagre/lib/order/barycenter.js"),i=n(/*! ./resolve-conflicts */"./node_modules/dagre/lib/order/resolve-conflicts.js"),s=n(/*! ./sort */"./node_modules/dagre/lib/order/sort.js");e.exports=function e(t,n,a,c){var u=t.children(n),d=t.node(n),l=d?d.borderLeft:void 0,f=d?d.borderRight:void 0,h={};l&&(u=r.filter(u,(function(e){return e!==l&&e!==f})));var p=o(t,u);r.forEach(p,(function(n){if(t.children(n.v).length){var o=e(t,n.v,a,c);h[n.v]=o,r.has(o,"barycenter")&&(i=n,s=o,r.isUndefined(i.barycenter)?(i.barycenter=s.barycenter,i.weight=s.weight):(i.barycenter=(i.barycenter*i.weight+s.barycenter*s.weight)/(i.weight+s.weight),i.weight+=s.weight))}var i,s}));var m=i(p,a);!function(e,t){r.forEach(e,(function(e){e.vs=r.flatten(e.vs.map((function(e){return t[e]?t[e].vs:e})),!0)}))}(m,h);var g=s(m,c);if(l&&(g.vs=r.flatten([l,g.vs,f],!0),t.predecessors(l).length)){var y=t.node(t.predecessors(l)[0]),b=t.node(t.predecessors(f)[0]);r.has(g,"barycenter")||(g.barycenter=0,g.weight=0),g.barycenter=(g.barycenter*g.weight+y.order+b.order)/(g.weight+2),g.weight+=2}return g}},"./node_modules/dagre/lib/order/sort.js": -/*!**********************************************!*\ - !*** ./node_modules/dagre/lib/order/sort.js ***! - \**********************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ../lodash */"./node_modules/dagre/lib/lodash.js"),o=n(/*! ../util */"./node_modules/dagre/lib/util.js");function i(e,t,n){for(var o;t.length&&(o=r.last(t)).i<=n;)t.pop(),e.push(o.vs),n++;return n}e.exports=function(e,t){var n,s=o.partition(e,(function(e){return r.has(e,"barycenter")})),a=s.lhs,c=r.sortBy(s.rhs,(function(e){return-e.i})),u=[],d=0,l=0,f=0;a.sort((n=!!t,function(e,t){return e.barycentert.barycenter?1:n?t.i-e.i:e.i-t.i})),f=i(u,c,f),r.forEach(a,(function(e){f+=e.vs.length,u.push(e.vs),d+=e.barycenter*e.weight,l+=e.weight,f=i(u,c,f)}));var h={vs:r.flatten(u,!0)};return l&&(h.barycenter=d/l,h.weight=l),h}},"./node_modules/dagre/lib/parent-dummy-chains.js": -/*!*******************************************************!*\ - !*** ./node_modules/dagre/lib/parent-dummy-chains.js ***! - \*******************************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./lodash */"./node_modules/dagre/lib/lodash.js");e.exports=function(e){var t=function(e){var t={},n=0;return r.forEach(e.children(),(function o(i){var s=n;r.forEach(e.children(i),o),t[i]={low:s,lim:n++}})),t}(e);r.forEach(e.graph().dummyChains,(function(n){for(var r=e.node(n),o=r.edgeObj,i=function(e,t,n,r){var o,i,s=[],a=[],c=Math.min(t[n].low,t[r].low),u=Math.max(t[n].lim,t[r].lim);o=n;do{o=e.parent(o),s.push(o)}while(o&&(t[o].low>c||u>t[o].lim));for(i=o,o=r;(o=e.parent(o))!==i;)a.push(o);return{path:s.concat(a.reverse()),lca:i}}(e,t,o.v,o.w),s=i.path,a=i.lca,c=0,u=s[c],d=!0;n!==o.w;){if(r=e.node(n),d){for(;(u=s[c])!==a&&e.node(u).maxRanka)&&c(n,t,u)}))}))}return r.reduce(t,(function(t,n){var i,s=-1,a=0;return r.forEach(n,(function(r,c){if("border"===e.node(r).dummy){var u=e.predecessors(r);u.length&&(i=e.node(u[0]).order,o(n,a,c,s,i),a=c,s=i)}o(n,a,n.length,i,t.length)})),n})),n}function c(e,t,n){if(t>n){var r=t;t=n,n=r}var o=e[t];o||(e[t]=o={}),o[n]=!0}function u(e,t,n){if(t>n){var o=t;t=n,n=o}return r.has(e[t],n)}function d(e,t,n,o){var i={},s={},a={};return r.forEach(t,(function(e){r.forEach(e,(function(e,t){i[e]=e,s[e]=e,a[e]=t}))})),r.forEach(t,(function(e){var t=-1;r.forEach(e,(function(e){var c=o(e);if(c.length)for(var d=((c=r.sortBy(c,(function(e){return a[e]}))).length-1)/2,l=Math.floor(d),f=Math.ceil(d);l<=f;++l){var h=c[l];s[e]===e&&tc.lim&&(u=c,d=!0);var l=r.filter(t.edges(),(function(t){return d===b(0,e.node(t.v),u)&&d!==b(0,e.node(t.w),u)}));return r.minBy(l,(function(e){return i(t,e)}))}function y(e,t,n,o){var i=n.v,s=n.w;e.removeEdge(i,s),e.setEdge(o.v,o.w,{}),h(e),l(e,t),function(e,t){var n=r.find(e.nodes(),(function(e){return!t.node(e).parent})),o=a(e,n);o=o.slice(1),r.forEach(o,(function(n){var r=e.node(n).parent,o=t.edge(n,r),i=!1;o||(o=t.edge(r,n),i=!0),t.node(n).rank=t.node(r).rank+(i?o.minlen:-o.minlen)}))}(e,t)}function b(e,t,n){return n.low<=t.lim&&t.lim<=n.lim}e.exports=d,d.initLowLimValues=h,d.initCutValues=l,d.calcCutValue=f,d.leaveEdge=m,d.enterEdge=g,d.exchangeEdges=y},"./node_modules/dagre/lib/rank/util.js": -/*!*********************************************!*\ - !*** ./node_modules/dagre/lib/rank/util.js ***! - \*********************************************/ -/*! no static exports found */function(e,t,n){"use strict";var r=n(/*! ../lodash */"./node_modules/dagre/lib/lodash.js");e.exports={longestPath:function(e){var t={};r.forEach(e.sources(),(function n(o){var i=e.node(o);if(r.has(t,o))return i.rank;t[o]=!0;var s=r.min(r.map(e.outEdges(o),(function(t){return n(t.w)-e.edge(t).minlen})));return s!==Number.POSITIVE_INFINITY&&null!=s||(s=0),i.rank=s}))},slack:function(e,t){return e.node(t.w).rank-e.node(t.v).rank-e.edge(t).minlen}}},"./node_modules/dagre/lib/util.js": -/*!****************************************!*\ - !*** ./node_modules/dagre/lib/util.js ***! - \****************************************/ -/*! no static exports found */function(e,t,n){"use strict";var r=n(/*! ./lodash */"./node_modules/dagre/lib/lodash.js"),o=n(/*! ./graphlib */"./node_modules/dagre/lib/graphlib.js").Graph;function i(e,t,n,o){var i;do{i=r.uniqueId(o)}while(e.hasNode(i));return n.dummy=t,e.setNode(i,n),i}function s(e){return r.max(r.map(e.nodes(),(function(t){var n=e.node(t).rank;if(!r.isUndefined(n))return n})))}e.exports={addDummyNode:i,simplify:function(e){var t=(new o).setGraph(e.graph());return r.forEach(e.nodes(),(function(n){t.setNode(n,e.node(n))})),r.forEach(e.edges(),(function(n){var r=t.edge(n.v,n.w)||{weight:0,minlen:1},o=e.edge(n);t.setEdge(n.v,n.w,{weight:r.weight+o.weight,minlen:Math.max(r.minlen,o.minlen)})})),t},asNonCompoundGraph:function(e){var t=new o({multigraph:e.isMultigraph()}).setGraph(e.graph());return r.forEach(e.nodes(),(function(n){e.children(n).length||t.setNode(n,e.node(n))})),r.forEach(e.edges(),(function(n){t.setEdge(n,e.edge(n))})),t},successorWeights:function(e){var t=r.map(e.nodes(),(function(t){var n={};return r.forEach(e.outEdges(t),(function(t){n[t.w]=(n[t.w]||0)+e.edge(t).weight})),n}));return r.zipObject(e.nodes(),t)},predecessorWeights:function(e){var t=r.map(e.nodes(),(function(t){var n={};return r.forEach(e.inEdges(t),(function(t){n[t.v]=(n[t.v]||0)+e.edge(t).weight})),n}));return r.zipObject(e.nodes(),t)},intersectRect:function(e,t){var n,r,o=e.x,i=e.y,s=t.x-o,a=t.y-i,c=e.width/2,u=e.height/2;if(!s&&!a)throw new Error("Not possible to find intersection inside of the rectangle");return Math.abs(a)*c>Math.abs(s)*u?(a<0&&(u=-u),n=u*s/a,r=u):(s<0&&(c=-c),n=c,r=c*a/s),{x:o+n,y:i+r}},buildLayerMatrix:function(e){var t=r.map(r.range(s(e)+1),(function(){return[]}));return r.forEach(e.nodes(),(function(n){var o=e.node(n),i=o.rank;r.isUndefined(i)||(t[i][o.order]=n)})),t},normalizeRanks:function(e){var t=r.min(r.map(e.nodes(),(function(t){return e.node(t).rank})));r.forEach(e.nodes(),(function(n){var o=e.node(n);r.has(o,"rank")&&(o.rank-=t)}))},removeEmptyRanks:function(e){var t=r.min(r.map(e.nodes(),(function(t){return e.node(t).rank}))),n=[];r.forEach(e.nodes(),(function(r){var o=e.node(r).rank-t;n[o]||(n[o]=[]),n[o].push(r)}));var o=0,i=e.graph().nodeRankFactor;r.forEach(n,(function(t,n){r.isUndefined(t)&&n%i!=0?--o:o&&r.forEach(t,(function(t){e.node(t).rank+=o}))}))},addBorderNode:function(e,t,n,r){var o={width:0,height:0};return arguments.length>=4&&(o.rank=n,o.order=r),i(e,"border",o,t)},maxRank:s,partition:function(e,t){var n={lhs:[],rhs:[]};return r.forEach(e,(function(e){t(e)?n.lhs.push(e):n.rhs.push(e)})),n},time:function(e,t){var n=r.now();try{return t()}finally{console.log(e+" time: "+(r.now()-n)+"ms")}},notime:function(e,t){return t()}}},"./node_modules/dagre/lib/version.js": -/*!*******************************************!*\ - !*** ./node_modules/dagre/lib/version.js ***! - \*******************************************/ -/*! no static exports found */function(e,t){e.exports="0.8.5"},"./node_modules/entity-decode/browser.js": -/*!***********************************************!*\ - !*** ./node_modules/entity-decode/browser.js ***! - \***********************************************/ -/*! exports provided: default */function(e,t,n){"use strict";var r;function o(e){return r=r||document.createElement("div"),e=escape(e).replace(/%26/g,"&").replace(/%23/g,"#").replace(/%3B/g,";"),r.innerHTML=e,unescape(r.textContent)}n.r(t),n.d(t,"default",(function(){return o}))},"./node_modules/graphlib/index.js": -/*!****************************************!*\ - !*** ./node_modules/graphlib/index.js ***! - \****************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./lib */"./node_modules/graphlib/lib/index.js");e.exports={Graph:r.Graph,json:n(/*! ./lib/json */"./node_modules/graphlib/lib/json.js"),alg:n(/*! ./lib/alg */"./node_modules/graphlib/lib/alg/index.js"),version:r.version}},"./node_modules/graphlib/lib/alg/components.js": -/*!*****************************************************!*\ - !*** ./node_modules/graphlib/lib/alg/components.js ***! - \*****************************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ../lodash */"./node_modules/graphlib/lib/lodash.js");e.exports=function(e){var t,n={},o=[];function i(o){r.has(n,o)||(n[o]=!0,t.push(o),r.each(e.successors(o),i),r.each(e.predecessors(o),i))}return r.each(e.nodes(),(function(e){t=[],i(e),t.length&&o.push(t)})),o}},"./node_modules/graphlib/lib/alg/dfs.js": -/*!**********************************************!*\ - !*** ./node_modules/graphlib/lib/alg/dfs.js ***! - \**********************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ../lodash */"./node_modules/graphlib/lib/lodash.js");e.exports=function(e,t,n){r.isArray(t)||(t=[t]);var o=(e.isDirected()?e.successors:e.neighbors).bind(e),i=[],s={};return r.each(t,(function(t){if(!e.hasNode(t))throw new Error("Graph does not have node: "+t);!function e(t,n,o,i,s,a){r.has(i,n)||(i[n]=!0,o||a.push(n),r.each(s(n),(function(n){e(t,n,o,i,s,a)})),o&&a.push(n))}(e,t,"post"===n,s,o,i)})),i}},"./node_modules/graphlib/lib/alg/dijkstra-all.js": -/*!*******************************************************!*\ - !*** ./node_modules/graphlib/lib/alg/dijkstra-all.js ***! - \*******************************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./dijkstra */"./node_modules/graphlib/lib/alg/dijkstra.js"),o=n(/*! ../lodash */"./node_modules/graphlib/lib/lodash.js");e.exports=function(e,t,n){return o.transform(e.nodes(),(function(o,i){o[i]=r(e,i,t,n)}),{})}},"./node_modules/graphlib/lib/alg/dijkstra.js": -/*!***************************************************!*\ - !*** ./node_modules/graphlib/lib/alg/dijkstra.js ***! - \***************************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ../lodash */"./node_modules/graphlib/lib/lodash.js"),o=n(/*! ../data/priority-queue */"./node_modules/graphlib/lib/data/priority-queue.js");e.exports=function(e,t,n,r){return function(e,t,n,r){var i,s,a={},c=new o,u=function(e){var t=e.v!==i?e.v:e.w,r=a[t],o=n(e),u=s.distance+o;if(o<0)throw new Error("dijkstra does not allow negative edge weights. Bad edge: "+e+" Weight: "+o);u0&&(i=c.removeMin(),(s=a[i]).distance!==Number.POSITIVE_INFINITY);)r(i).forEach(u);return a}(e,String(t),n||i,r||function(t){return e.outEdges(t)})};var i=r.constant(1)},"./node_modules/graphlib/lib/alg/find-cycles.js": -/*!******************************************************!*\ - !*** ./node_modules/graphlib/lib/alg/find-cycles.js ***! - \******************************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ../lodash */"./node_modules/graphlib/lib/lodash.js"),o=n(/*! ./tarjan */"./node_modules/graphlib/lib/alg/tarjan.js");e.exports=function(e){return r.filter(o(e),(function(t){return t.length>1||1===t.length&&e.hasEdge(t[0],t[0])}))}},"./node_modules/graphlib/lib/alg/floyd-warshall.js": -/*!*********************************************************!*\ - !*** ./node_modules/graphlib/lib/alg/floyd-warshall.js ***! - \*********************************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ../lodash */"./node_modules/graphlib/lib/lodash.js");e.exports=function(e,t,n){return function(e,t,n){var r={},o=e.nodes();return o.forEach((function(e){r[e]={},r[e][e]={distance:0},o.forEach((function(t){e!==t&&(r[e][t]={distance:Number.POSITIVE_INFINITY})})),n(e).forEach((function(n){var o=n.v===e?n.w:n.v,i=t(n);r[e][o]={distance:i,predecessor:e}}))})),o.forEach((function(e){var t=r[e];o.forEach((function(n){var i=r[n];o.forEach((function(n){var r=i[e],o=t[n],s=i[n],a=r.distance+o.distance;a0;){if(n=c.removeMin(),r.has(a,n))s.setEdge(n,a[n]);else{if(d)throw new Error("Input graph is not connected: "+e);d=!0}e.nodeEdges(n).forEach(u)}return s}},"./node_modules/graphlib/lib/alg/tarjan.js": -/*!*************************************************!*\ - !*** ./node_modules/graphlib/lib/alg/tarjan.js ***! - \*************************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ../lodash */"./node_modules/graphlib/lib/lodash.js");e.exports=function(e){var t=0,n=[],o={},i=[];return e.nodes().forEach((function(s){r.has(o,s)||function s(a){var c=o[a]={onStack:!0,lowlink:t,index:t++};if(n.push(a),e.successors(a).forEach((function(e){r.has(o,e)?o[e].onStack&&(c.lowlink=Math.min(c.lowlink,o[e].index)):(s(e),c.lowlink=Math.min(c.lowlink,o[e].lowlink))})),c.lowlink===c.index){var u,d=[];do{u=n.pop(),o[u].onStack=!1,d.push(u)}while(a!==u);i.push(d)}}(s)})),i}},"./node_modules/graphlib/lib/alg/topsort.js": -/*!**************************************************!*\ - !*** ./node_modules/graphlib/lib/alg/topsort.js ***! - \**************************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ../lodash */"./node_modules/graphlib/lib/lodash.js");function o(e){var t={},n={},o=[];if(r.each(e.sinks(),(function s(a){if(r.has(n,a))throw new i;r.has(t,a)||(n[a]=!0,t[a]=!0,r.each(e.predecessors(a),s),delete n[a],o.push(a))})),r.size(t)!==e.nodeCount())throw new i;return o}function i(){}e.exports=o,o.CycleException=i,i.prototype=new Error},"./node_modules/graphlib/lib/data/priority-queue.js": -/*!**********************************************************!*\ - !*** ./node_modules/graphlib/lib/data/priority-queue.js ***! - \**********************************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ../lodash */"./node_modules/graphlib/lib/lodash.js");function o(){this._arr=[],this._keyIndices={}}e.exports=o,o.prototype.size=function(){return this._arr.length},o.prototype.keys=function(){return this._arr.map((function(e){return e.key}))},o.prototype.has=function(e){return r.has(this._keyIndices,e)},o.prototype.priority=function(e){var t=this._keyIndices[e];if(void 0!==t)return this._arr[t].priority},o.prototype.min=function(){if(0===this.size())throw new Error("Queue underflow");return this._arr[0].key},o.prototype.add=function(e,t){var n=this._keyIndices;if(e=String(e),!r.has(n,e)){var o=this._arr,i=o.length;return n[e]=i,o.push({key:e,priority:t}),this._decrease(i),!0}return!1},o.prototype.removeMin=function(){this._swap(0,this._arr.length-1);var e=this._arr.pop();return delete this._keyIndices[e.key],this._heapify(0),e.key},o.prototype.decrease=function(e,t){var n=this._keyIndices[e];if(t>this._arr[n].priority)throw new Error("New priority is greater than current priority. Key: "+e+" Old: "+this._arr[n].priority+" New: "+t);this._arr[n].priority=t,this._decrease(n)},o.prototype._heapify=function(e){var t=this._arr,n=2*e,r=n+1,o=e;n>1].prioritys){var a=i;i=s,s=a}return i+""+s+""+(r.isUndefined(o)?"\0":o)}function c(e,t,n,r){var o=""+t,i=""+n;if(!e&&o>i){var s=o;o=i,i=s}var a={v:o,w:i};return r&&(a.name=r),a}function u(e,t){return a(e,t.v,t.w,t.name)}e.exports=o,o.prototype._nodeCount=0,o.prototype._edgeCount=0,o.prototype.isDirected=function(){return this._isDirected},o.prototype.isMultigraph=function(){return this._isMultigraph},o.prototype.isCompound=function(){return this._isCompound},o.prototype.setGraph=function(e){return this._label=e,this},o.prototype.graph=function(){return this._label},o.prototype.setDefaultNodeLabel=function(e){return r.isFunction(e)||(e=r.constant(e)),this._defaultNodeLabelFn=e,this},o.prototype.nodeCount=function(){return this._nodeCount},o.prototype.nodes=function(){return r.keys(this._nodes)},o.prototype.sources=function(){var e=this;return r.filter(this.nodes(),(function(t){return r.isEmpty(e._in[t])}))},o.prototype.sinks=function(){var e=this;return r.filter(this.nodes(),(function(t){return r.isEmpty(e._out[t])}))},o.prototype.setNodes=function(e,t){var n=arguments,o=this;return r.each(e,(function(e){n.length>1?o.setNode(e,t):o.setNode(e)})),this},o.prototype.setNode=function(e,t){return r.has(this._nodes,e)?(arguments.length>1&&(this._nodes[e]=t),this):(this._nodes[e]=arguments.length>1?t:this._defaultNodeLabelFn(e),this._isCompound&&(this._parent[e]="\0",this._children[e]={},this._children["\0"][e]=!0),this._in[e]={},this._preds[e]={},this._out[e]={},this._sucs[e]={},++this._nodeCount,this)},o.prototype.node=function(e){return this._nodes[e]},o.prototype.hasNode=function(e){return r.has(this._nodes,e)},o.prototype.removeNode=function(e){var t=this;if(r.has(this._nodes,e)){var n=function(e){t.removeEdge(t._edgeObjs[e])};delete this._nodes[e],this._isCompound&&(this._removeFromParentsChildList(e),delete this._parent[e],r.each(this.children(e),(function(e){t.setParent(e)})),delete this._children[e]),r.each(r.keys(this._in[e]),n),delete this._in[e],delete this._preds[e],r.each(r.keys(this._out[e]),n),delete this._out[e],delete this._sucs[e],--this._nodeCount}return this},o.prototype.setParent=function(e,t){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(r.isUndefined(t))t="\0";else{for(var n=t+="";!r.isUndefined(n);n=this.parent(n))if(n===e)throw new Error("Setting "+t+" as parent of "+e+" would create a cycle");this.setNode(t)}return this.setNode(e),this._removeFromParentsChildList(e),this._parent[e]=t,this._children[t][e]=!0,this},o.prototype._removeFromParentsChildList=function(e){delete this._children[this._parent[e]][e]},o.prototype.parent=function(e){if(this._isCompound){var t=this._parent[e];if("\0"!==t)return t}},o.prototype.children=function(e){if(r.isUndefined(e)&&(e="\0"),this._isCompound){var t=this._children[e];if(t)return r.keys(t)}else{if("\0"===e)return this.nodes();if(this.hasNode(e))return[]}},o.prototype.predecessors=function(e){var t=this._preds[e];if(t)return r.keys(t)},o.prototype.successors=function(e){var t=this._sucs[e];if(t)return r.keys(t)},o.prototype.neighbors=function(e){var t=this.predecessors(e);if(t)return r.union(t,this.successors(e))},o.prototype.isLeaf=function(e){return 0===(this.isDirected()?this.successors(e):this.neighbors(e)).length},o.prototype.filterNodes=function(e){var t=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});t.setGraph(this.graph());var n=this;r.each(this._nodes,(function(n,r){e(r)&&t.setNode(r,n)})),r.each(this._edgeObjs,(function(e){t.hasNode(e.v)&&t.hasNode(e.w)&&t.setEdge(e,n.edge(e))}));var o={};return this._isCompound&&r.each(t.nodes(),(function(e){t.setParent(e,function e(r){var i=n.parent(r);return void 0===i||t.hasNode(i)?(o[r]=i,i):i in o?o[i]:e(i)}(e))})),t},o.prototype.setDefaultEdgeLabel=function(e){return r.isFunction(e)||(e=r.constant(e)),this._defaultEdgeLabelFn=e,this},o.prototype.edgeCount=function(){return this._edgeCount},o.prototype.edges=function(){return r.values(this._edgeObjs)},o.prototype.setPath=function(e,t){var n=this,o=arguments;return r.reduce(e,(function(e,r){return o.length>1?n.setEdge(e,r,t):n.setEdge(e,r),r})),this},o.prototype.setEdge=function(){var e,t,n,o,s=!1,u=arguments[0];"object"==typeof u&&null!==u&&"v"in u?(e=u.v,t=u.w,n=u.name,2===arguments.length&&(o=arguments[1],s=!0)):(e=u,t=arguments[1],n=arguments[3],arguments.length>2&&(o=arguments[2],s=!0)),e=""+e,t=""+t,r.isUndefined(n)||(n=""+n);var d=a(this._isDirected,e,t,n);if(r.has(this._edgeLabels,d))return s&&(this._edgeLabels[d]=o),this;if(!r.isUndefined(n)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(e),this.setNode(t),this._edgeLabels[d]=s?o:this._defaultEdgeLabelFn(e,t,n);var l=c(this._isDirected,e,t,n);return e=l.v,t=l.w,Object.freeze(l),this._edgeObjs[d]=l,i(this._preds[t],e),i(this._sucs[e],t),this._in[t][d]=l,this._out[e][d]=l,this._edgeCount++,this},o.prototype.edge=function(e,t,n){var r=1===arguments.length?u(this._isDirected,arguments[0]):a(this._isDirected,e,t,n);return this._edgeLabels[r]},o.prototype.hasEdge=function(e,t,n){var o=1===arguments.length?u(this._isDirected,arguments[0]):a(this._isDirected,e,t,n);return r.has(this._edgeLabels,o)},o.prototype.removeEdge=function(e,t,n){var r=1===arguments.length?u(this._isDirected,arguments[0]):a(this._isDirected,e,t,n),o=this._edgeObjs[r];return o&&(e=o.v,t=o.w,delete this._edgeLabels[r],delete this._edgeObjs[r],s(this._preds[t],e),s(this._sucs[e],t),delete this._in[t][r],delete this._out[e][r],this._edgeCount--),this},o.prototype.inEdges=function(e,t){var n=this._in[e];if(n){var o=r.values(n);return t?r.filter(o,(function(e){return e.v===t})):o}},o.prototype.outEdges=function(e,t){var n=this._out[e];if(n){var o=r.values(n);return t?r.filter(o,(function(e){return e.w===t})):o}},o.prototype.nodeEdges=function(e,t){var n=this.inEdges(e,t);if(n)return n.concat(this.outEdges(e,t))}},"./node_modules/graphlib/lib/index.js": -/*!********************************************!*\ - !*** ./node_modules/graphlib/lib/index.js ***! - \********************************************/ -/*! no static exports found */function(e,t,n){e.exports={Graph:n(/*! ./graph */"./node_modules/graphlib/lib/graph.js"),version:n(/*! ./version */"./node_modules/graphlib/lib/version.js")}},"./node_modules/graphlib/lib/json.js": -/*!*******************************************!*\ - !*** ./node_modules/graphlib/lib/json.js ***! - \*******************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./lodash */"./node_modules/graphlib/lib/lodash.js"),o=n(/*! ./graph */"./node_modules/graphlib/lib/graph.js");function i(e){return r.map(e.nodes(),(function(t){var n=e.node(t),o=e.parent(t),i={v:t};return r.isUndefined(n)||(i.value=n),r.isUndefined(o)||(i.parent=o),i}))}function s(e){return r.map(e.edges(),(function(t){var n=e.edge(t),o={v:t.v,w:t.w};return r.isUndefined(t.name)||(o.name=t.name),r.isUndefined(n)||(o.value=n),o}))}e.exports={write:function(e){var t={options:{directed:e.isDirected(),multigraph:e.isMultigraph(),compound:e.isCompound()},nodes:i(e),edges:s(e)};return r.isUndefined(e.graph())||(t.value=r.clone(e.graph())),t},read:function(e){var t=new o(e.options).setGraph(e.value);return r.each(e.nodes,(function(e){t.setNode(e.v,e.value),e.parent&&t.setParent(e.v,e.parent)})),r.each(e.edges,(function(e){t.setEdge({v:e.v,w:e.w,name:e.name},e.value)})),t}}},"./node_modules/graphlib/lib/lodash.js": -/*!*********************************************!*\ - !*** ./node_modules/graphlib/lib/lodash.js ***! - \*********************************************/ -/*! no static exports found */function(e,t,n){var r;try{r={clone:n(/*! lodash/clone */"./node_modules/lodash/clone.js"),constant:n(/*! lodash/constant */"./node_modules/lodash/constant.js"),each:n(/*! lodash/each */"./node_modules/lodash/each.js"),filter:n(/*! lodash/filter */"./node_modules/lodash/filter.js"),has:n(/*! lodash/has */"./node_modules/lodash/has.js"),isArray:n(/*! lodash/isArray */"./node_modules/lodash/isArray.js"),isEmpty:n(/*! lodash/isEmpty */"./node_modules/lodash/isEmpty.js"),isFunction:n(/*! lodash/isFunction */"./node_modules/lodash/isFunction.js"),isUndefined:n(/*! lodash/isUndefined */"./node_modules/lodash/isUndefined.js"),keys:n(/*! lodash/keys */"./node_modules/lodash/keys.js"),map:n(/*! lodash/map */"./node_modules/lodash/map.js"),reduce:n(/*! lodash/reduce */"./node_modules/lodash/reduce.js"),size:n(/*! lodash/size */"./node_modules/lodash/size.js"),transform:n(/*! lodash/transform */"./node_modules/lodash/transform.js"),union:n(/*! lodash/union */"./node_modules/lodash/union.js"),values:n(/*! lodash/values */"./node_modules/lodash/values.js")}}catch(e){}r||(r=window._),e.exports=r},"./node_modules/graphlib/lib/version.js": -/*!**********************************************!*\ - !*** ./node_modules/graphlib/lib/version.js ***! - \**********************************************/ -/*! no static exports found */function(e,t){e.exports="2.1.8"},"./node_modules/khroma/dist/channels/index.js": -/*!****************************************************!*\ - !*** ./node_modules/khroma/dist/channels/index.js ***! - \****************************************************/ -/*! no static exports found */function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(/*! ../utils */"./node_modules/khroma/dist/utils/index.js"),o=n(/*! ../types */"./node_modules/khroma/dist/types.js"),i=n(/*! ./type */"./node_modules/khroma/dist/channels/type.js"),s=function(){function e(e,t){this.color=t,this.changed=!1,this.data=e,this.type=new i.default}return e.prototype.set=function(e,t){return this.color=t,this.changed=!1,this.data=e,this.type.type=o.TYPE.ALL,this},e.prototype._ensureHSL=function(){void 0===this.data.h&&(this.data.h=r.default.channel.rgb2hsl(this.data,"h")),void 0===this.data.s&&(this.data.s=r.default.channel.rgb2hsl(this.data,"s")),void 0===this.data.l&&(this.data.l=r.default.channel.rgb2hsl(this.data,"l"))},e.prototype._ensureRGB=function(){void 0===this.data.r&&(this.data.r=r.default.channel.hsl2rgb(this.data,"r")),void 0===this.data.g&&(this.data.g=r.default.channel.hsl2rgb(this.data,"g")),void 0===this.data.b&&(this.data.b=r.default.channel.hsl2rgb(this.data,"b"))},Object.defineProperty(e.prototype,"r",{get:function(){return this.type.is(o.TYPE.HSL)||void 0===this.data.r?(this._ensureHSL(),r.default.channel.hsl2rgb(this.data,"r")):this.data.r},set:function(e){this.type.set(o.TYPE.RGB),this.changed=!0,this.data.r=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"g",{get:function(){return this.type.is(o.TYPE.HSL)||void 0===this.data.g?(this._ensureHSL(),r.default.channel.hsl2rgb(this.data,"g")):this.data.g},set:function(e){this.type.set(o.TYPE.RGB),this.changed=!0,this.data.g=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"b",{get:function(){return this.type.is(o.TYPE.HSL)||void 0===this.data.b?(this._ensureHSL(),r.default.channel.hsl2rgb(this.data,"b")):this.data.b},set:function(e){this.type.set(o.TYPE.RGB),this.changed=!0,this.data.b=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"h",{get:function(){return this.type.is(o.TYPE.RGB)||void 0===this.data.h?(this._ensureRGB(),r.default.channel.rgb2hsl(this.data,"h")):this.data.h},set:function(e){this.type.set(o.TYPE.HSL),this.changed=!0,this.data.h=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"s",{get:function(){return this.type.is(o.TYPE.RGB)||void 0===this.data.s?(this._ensureRGB(),r.default.channel.rgb2hsl(this.data,"s")):this.data.s},set:function(e){this.type.set(o.TYPE.HSL),this.changed=!0,this.data.s=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"l",{get:function(){return this.type.is(o.TYPE.RGB)||void 0===this.data.l?(this._ensureRGB(),r.default.channel.rgb2hsl(this.data,"l")):this.data.l},set:function(e){this.type.set(o.TYPE.HSL),this.changed=!0,this.data.l=e},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"a",{get:function(){return this.data.a},set:function(e){this.changed=!0,this.data.a=e},enumerable:!0,configurable:!0}),e}();t.default=s},"./node_modules/khroma/dist/channels/reusable.js": -/*!*******************************************************!*\ - !*** ./node_modules/khroma/dist/channels/reusable.js ***! - \*******************************************************/ -/*! no static exports found */function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=new(n(/*! . */"./node_modules/khroma/dist/channels/index.js").default)({r:0,g:0,b:0,a:0},"transparent");t.default=r},"./node_modules/khroma/dist/channels/type.js": -/*!***************************************************!*\ - !*** ./node_modules/khroma/dist/channels/type.js ***! - \***************************************************/ -/*! no static exports found */function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(/*! ../types */"./node_modules/khroma/dist/types.js"),o=function(){function e(){this.type=r.TYPE.ALL}return e.prototype.get=function(){return this.type},e.prototype.set=function(e){if(this.type&&this.type!==e)throw new Error("Cannot change both RGB and HSL channels at the same time");this.type=e},e.prototype.reset=function(){this.type=r.TYPE.ALL},e.prototype.is=function(e){return this.type===e},e}();t.default=o},"./node_modules/khroma/dist/color/hex.js": -/*!***********************************************!*\ - !*** ./node_modules/khroma/dist/color/hex.js ***! - \***********************************************/ -/*! no static exports found */function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(/*! ../utils */"./node_modules/khroma/dist/utils/index.js"),o=n(/*! ../channels/reusable */"./node_modules/khroma/dist/channels/reusable.js"),i=n(/*! ../consts */"./node_modules/khroma/dist/consts.js"),s={re:/^#((?:[a-f0-9]{2}){2,4}|[a-f0-9]{3})$/i,parse:function(e){if(35===e.charCodeAt(0)){var t=e.match(s.re);if(t){var n=t[1],r=parseInt(n,16),i=n.length,a=i%4==0,c=i>4,u=c?1:17,d=c?8:4,l=a?0:-1,f=c?255:15;return o.default.set({r:(r>>d*(l+3)&f)*u,g:(r>>d*(l+2)&f)*u,b:(r>>d*(l+1)&f)*u,a:a?(r&f)*u/255:1},e)}}},stringify:function(e){return e.a<1?"#"+i.DEC2HEX[Math.round(e.r)]+i.DEC2HEX[Math.round(e.g)]+i.DEC2HEX[Math.round(e.b)]+r.default.unit.frac2hex(e.a):"#"+i.DEC2HEX[Math.round(e.r)]+i.DEC2HEX[Math.round(e.g)]+i.DEC2HEX[Math.round(e.b)]}};t.default=s},"./node_modules/khroma/dist/color/hsl.js": -/*!***********************************************!*\ - !*** ./node_modules/khroma/dist/color/hsl.js ***! - \***********************************************/ -/*! no static exports found */function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(/*! ../utils */"./node_modules/khroma/dist/utils/index.js"),o=n(/*! ../channels/reusable */"./node_modules/khroma/dist/channels/reusable.js"),i={re:/^hsla?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(?:deg|grad|rad|turn)?)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(%)?))?\s*?\)$/i,hueRe:/^(.+?)(deg|grad|rad|turn)$/i,_hue2deg:function(e){var t=e.match(i.hueRe);if(t){var n=t[1];switch(t[2]){case"grad":return r.default.channel.clamp.h(.9*parseFloat(n));case"rad":return r.default.channel.clamp.h(180*parseFloat(n)/Math.PI);case"turn":return r.default.channel.clamp.h(360*parseFloat(n))}}return r.default.channel.clamp.h(parseFloat(e))},parse:function(e){var t=e.charCodeAt(0);if(104===t||72===t){var n=e.match(i.re);if(n){var s=n[1],a=n[2],c=n[3],u=n[4],d=n[5];return o.default.set({h:i._hue2deg(s),s:r.default.channel.clamp.s(parseFloat(a)),l:r.default.channel.clamp.l(parseFloat(c)),a:u?r.default.channel.clamp.a(d?parseFloat(u)/100:parseFloat(u)):1},e)}}},stringify:function(e){return e.a<1?"hsla("+r.default.lang.round(e.h)+", "+r.default.lang.round(e.s)+"%, "+r.default.lang.round(e.l)+"%, "+e.a+")":"hsl("+r.default.lang.round(e.h)+", "+r.default.lang.round(e.s)+"%, "+r.default.lang.round(e.l)+"%)"}};t.default=i},"./node_modules/khroma/dist/color/index.js": -/*!*************************************************!*\ - !*** ./node_modules/khroma/dist/color/index.js ***! - \*************************************************/ -/*! no static exports found */function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(/*! ../types */"./node_modules/khroma/dist/types.js"),o=n(/*! ./hex */"./node_modules/khroma/dist/color/hex.js"),i=n(/*! ./keyword */"./node_modules/khroma/dist/color/keyword.js"),s=n(/*! ./rgb */"./node_modules/khroma/dist/color/rgb.js"),a=n(/*! ./hsl */"./node_modules/khroma/dist/color/hsl.js"),c={format:{keyword:i.default,hex:o.default,rgb:s.default,rgba:s.default,hsl:a.default,hsla:a.default},parse:function(e){if("string"!=typeof e)return e;var t=o.default.parse(e)||s.default.parse(e)||a.default.parse(e)||i.default.parse(e);if(t)return t;throw new Error('Unsupported color format: "'+e+'"')},stringify:function(e){return!e.changed&&e.color?e.color:e.type.is(r.TYPE.HSL)||void 0===e.data.r?a.default.stringify(e):e.a<1||!Number.isInteger(e.r)||!Number.isInteger(e.g)||!Number.isInteger(e.b)?s.default.stringify(e):o.default.stringify(e)}};t.default=c},"./node_modules/khroma/dist/color/keyword.js": -/*!***************************************************!*\ - !*** ./node_modules/khroma/dist/color/keyword.js ***! - \***************************************************/ -/*! no static exports found */function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(/*! ./hex */"./node_modules/khroma/dist/color/hex.js"),o={colors:{aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyanaqua:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",transparent:"#00000000",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},parse:function(e){e=e.toLowerCase();var t=o.colors[e];if(t)return r.default.parse(t)},stringify:function(e){var t=r.default.stringify(e);for(var n in o.colors)if(o.colors[n]===t)return n}};t.default=o},"./node_modules/khroma/dist/color/rgb.js": -/*!***********************************************!*\ - !*** ./node_modules/khroma/dist/color/rgb.js ***! - \***********************************************/ -/*! no static exports found */function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(/*! ../utils */"./node_modules/khroma/dist/utils/index.js"),o=n(/*! ../channels/reusable */"./node_modules/khroma/dist/channels/reusable.js"),i={re:/^rgba?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?)))?\s*?\)$/i,parse:function(e){var t=e.charCodeAt(0);if(114===t||82===t){var n=e.match(i.re);if(n){var s=n[1],a=n[2],c=n[3],u=n[4],d=n[5],l=n[6],f=n[7],h=n[8];return o.default.set({r:r.default.channel.clamp.r(a?2.55*parseFloat(s):parseFloat(s)),g:r.default.channel.clamp.g(u?2.55*parseFloat(c):parseFloat(c)),b:r.default.channel.clamp.b(l?2.55*parseFloat(d):parseFloat(d)),a:f?r.default.channel.clamp.a(h?parseFloat(f)/100:parseFloat(f)):1},e)}}},stringify:function(e){return e.a<1?"rgba("+r.default.lang.round(e.r)+", "+r.default.lang.round(e.g)+", "+r.default.lang.round(e.b)+", "+r.default.lang.round(e.a)+")":"rgb("+r.default.lang.round(e.r)+", "+r.default.lang.round(e.g)+", "+r.default.lang.round(e.b)+")"}};t.default=i},"./node_modules/khroma/dist/consts.js": -/*!********************************************!*\ - !*** ./node_modules/khroma/dist/consts.js ***! - \********************************************/ -/*! no static exports found */function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(/*! ./utils */"./node_modules/khroma/dist/utils/index.js"),o={};t.DEC2HEX=o;for(var i=0;i<=255;i++)o[i]=r.default.unit.dec2hex(i)},"./node_modules/khroma/dist/index.js": -/*!*******************************************!*\ - !*** ./node_modules/khroma/dist/index.js ***! - \*******************************************/ -/*! no static exports found */function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){for(var n in e)t.hasOwnProperty(n)||(t[n]=e[n])}(n(/*! ./methods */"./node_modules/khroma/dist/methods/index.js"))},"./node_modules/khroma/dist/methods/adjust.js": -/*!****************************************************!*\ - !*** ./node_modules/khroma/dist/methods/adjust.js ***! - \****************************************************/ -/*! no static exports found */function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(/*! ../color */"./node_modules/khroma/dist/color/index.js"),o=n(/*! ./change */"./node_modules/khroma/dist/methods/change.js");t.default=function(e,t){var n=r.default.parse(e),i={};for(var s in t)t[s]&&(i[s]=n[s]+t[s]);return o.default(e,i)}},"./node_modules/khroma/dist/methods/adjust_channel.js": -/*!************************************************************!*\ - !*** ./node_modules/khroma/dist/methods/adjust_channel.js ***! - \************************************************************/ -/*! no static exports found */function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(/*! ../utils */"./node_modules/khroma/dist/utils/index.js"),o=n(/*! ../color */"./node_modules/khroma/dist/color/index.js");t.default=function(e,t,n){var i=o.default.parse(e),s=i[t],a=r.default.channel.clamp[t](s+n);return s!==a&&(i[t]=a),o.default.stringify(i)}},"./node_modules/khroma/dist/methods/alpha.js": -/*!***************************************************!*\ - !*** ./node_modules/khroma/dist/methods/alpha.js ***! - \***************************************************/ -/*! no static exports found */function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(/*! ./channel */"./node_modules/khroma/dist/methods/channel.js");t.default=function(e){return r.default(e,"a")}},"./node_modules/khroma/dist/methods/blue.js": -/*!**************************************************!*\ - !*** ./node_modules/khroma/dist/methods/blue.js ***! - \**************************************************/ -/*! no static exports found */function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(/*! ./channel */"./node_modules/khroma/dist/methods/channel.js");t.default=function(e){return r.default(e,"b")}},"./node_modules/khroma/dist/methods/change.js": -/*!****************************************************!*\ - !*** ./node_modules/khroma/dist/methods/change.js ***! - \****************************************************/ -/*! no static exports found */function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(/*! ../utils */"./node_modules/khroma/dist/utils/index.js"),o=n(/*! ../color */"./node_modules/khroma/dist/color/index.js");t.default=function(e,t){var n=o.default.parse(e);for(var i in t)n[i]=r.default.channel.clamp[i](t[i]);return o.default.stringify(n)}},"./node_modules/khroma/dist/methods/channel.js": -/*!*****************************************************!*\ - !*** ./node_modules/khroma/dist/methods/channel.js ***! - \*****************************************************/ -/*! no static exports found */function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(/*! ../utils */"./node_modules/khroma/dist/utils/index.js"),o=n(/*! ../color */"./node_modules/khroma/dist/color/index.js");t.default=function(e,t){return r.default.lang.round(o.default.parse(e)[t])}},"./node_modules/khroma/dist/methods/complement.js": -/*!********************************************************!*\ - !*** ./node_modules/khroma/dist/methods/complement.js ***! - \********************************************************/ -/*! no static exports found */function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(/*! ./adjust_channel */"./node_modules/khroma/dist/methods/adjust_channel.js");t.default=function(e){return r.default(e,"h",180)}},"./node_modules/khroma/dist/methods/darken.js": -/*!****************************************************!*\ - !*** ./node_modules/khroma/dist/methods/darken.js ***! - \****************************************************/ -/*! no static exports found */function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(/*! ./adjust_channel */"./node_modules/khroma/dist/methods/adjust_channel.js");t.default=function(e,t){return r.default(e,"l",-t)}},"./node_modules/khroma/dist/methods/desaturate.js": -/*!********************************************************!*\ - !*** ./node_modules/khroma/dist/methods/desaturate.js ***! - \********************************************************/ -/*! no static exports found */function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(/*! ./adjust_channel */"./node_modules/khroma/dist/methods/adjust_channel.js");t.default=function(e,t){return r.default(e,"s",-t)}},"./node_modules/khroma/dist/methods/grayscale.js": -/*!*******************************************************!*\ - !*** ./node_modules/khroma/dist/methods/grayscale.js ***! - \*******************************************************/ -/*! no static exports found */function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(/*! ./change */"./node_modules/khroma/dist/methods/change.js");t.default=function(e){return r.default(e,{s:0})}},"./node_modules/khroma/dist/methods/green.js": -/*!***************************************************!*\ - !*** ./node_modules/khroma/dist/methods/green.js ***! - \***************************************************/ -/*! no static exports found */function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(/*! ./channel */"./node_modules/khroma/dist/methods/channel.js");t.default=function(e){return r.default(e,"g")}},"./node_modules/khroma/dist/methods/hsla.js": -/*!**************************************************!*\ - !*** ./node_modules/khroma/dist/methods/hsla.js ***! - \**************************************************/ -/*! no static exports found */function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(/*! ../utils */"./node_modules/khroma/dist/utils/index.js"),o=n(/*! ../channels/reusable */"./node_modules/khroma/dist/channels/reusable.js"),i=n(/*! ../color */"./node_modules/khroma/dist/color/index.js");t.default=function(e,t,n,s){void 0===s&&(s=1);var a=o.default.set({h:r.default.channel.clamp.h(e),s:r.default.channel.clamp.s(t),l:r.default.channel.clamp.l(n),a:r.default.channel.clamp.a(s)});return i.default.stringify(a)}},"./node_modules/khroma/dist/methods/hue.js": -/*!*************************************************!*\ - !*** ./node_modules/khroma/dist/methods/hue.js ***! - \*************************************************/ -/*! no static exports found */function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(/*! ./channel */"./node_modules/khroma/dist/methods/channel.js");t.default=function(e){return r.default(e,"h")}},"./node_modules/khroma/dist/methods/index.js": -/*!***************************************************!*\ - !*** ./node_modules/khroma/dist/methods/index.js ***! - \***************************************************/ -/*! no static exports found */function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(/*! ./rgba */"./node_modules/khroma/dist/methods/rgba.js");t.hex=r.default;var o=n(/*! ./rgba */"./node_modules/khroma/dist/methods/rgba.js");t.rgb=o.default;var i=n(/*! ./rgba */"./node_modules/khroma/dist/methods/rgba.js");t.rgba=i.default;var s=n(/*! ./hsla */"./node_modules/khroma/dist/methods/hsla.js");t.hsl=s.default;var a=n(/*! ./hsla */"./node_modules/khroma/dist/methods/hsla.js");t.hsla=a.default;var c=n(/*! ./channel */"./node_modules/khroma/dist/methods/channel.js");t.channel=c.default;var u=n(/*! ./red */"./node_modules/khroma/dist/methods/red.js");t.red=u.default;var d=n(/*! ./green */"./node_modules/khroma/dist/methods/green.js");t.green=d.default;var l=n(/*! ./blue */"./node_modules/khroma/dist/methods/blue.js");t.blue=l.default;var f=n(/*! ./hue */"./node_modules/khroma/dist/methods/hue.js");t.hue=f.default;var h=n(/*! ./saturation */"./node_modules/khroma/dist/methods/saturation.js");t.saturation=h.default;var p=n(/*! ./lightness */"./node_modules/khroma/dist/methods/lightness.js");t.lightness=p.default;var m=n(/*! ./alpha */"./node_modules/khroma/dist/methods/alpha.js");t.alpha=m.default;var g=n(/*! ./alpha */"./node_modules/khroma/dist/methods/alpha.js");t.opacity=g.default;var y=n(/*! ./luminance */"./node_modules/khroma/dist/methods/luminance.js");t.luminance=y.default;var b=n(/*! ./is_dark */"./node_modules/khroma/dist/methods/is_dark.js");t.isDark=b.default;var _=n(/*! ./is_light */"./node_modules/khroma/dist/methods/is_light.js");t.isLight=_.default;var v=n(/*! ./is_valid */"./node_modules/khroma/dist/methods/is_valid.js");t.isValid=v.default;var j=n(/*! ./saturate */"./node_modules/khroma/dist/methods/saturate.js");t.saturate=j.default;var x=n(/*! ./desaturate */"./node_modules/khroma/dist/methods/desaturate.js");t.desaturate=x.default;var k=n(/*! ./lighten */"./node_modules/khroma/dist/methods/lighten.js");t.lighten=k.default;var w=n(/*! ./darken */"./node_modules/khroma/dist/methods/darken.js");t.darken=w.default;var O=n(/*! ./opacify */"./node_modules/khroma/dist/methods/opacify.js");t.opacify=O.default;var C=n(/*! ./opacify */"./node_modules/khroma/dist/methods/opacify.js");t.fadeIn=C.default;var E=n(/*! ./transparentize */"./node_modules/khroma/dist/methods/transparentize.js");t.transparentize=E.default;var T=n(/*! ./transparentize */"./node_modules/khroma/dist/methods/transparentize.js");t.fadeOut=T.default;var S=n(/*! ./complement */"./node_modules/khroma/dist/methods/complement.js");t.complement=S.default;var A=n(/*! ./grayscale */"./node_modules/khroma/dist/methods/grayscale.js");t.grayscale=A.default;var M=n(/*! ./adjust */"./node_modules/khroma/dist/methods/adjust.js");t.adjust=M.default;var D=n(/*! ./change */"./node_modules/khroma/dist/methods/change.js");t.change=D.default;var B=n(/*! ./invert */"./node_modules/khroma/dist/methods/invert.js");t.invert=B.default;var N=n(/*! ./mix */"./node_modules/khroma/dist/methods/mix.js");t.mix=N.default;var L=n(/*! ./scale */"./node_modules/khroma/dist/methods/scale.js");t.scale=L.default},"./node_modules/khroma/dist/methods/invert.js": -/*!****************************************************!*\ - !*** ./node_modules/khroma/dist/methods/invert.js ***! - \****************************************************/ -/*! no static exports found */function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(/*! ../color */"./node_modules/khroma/dist/color/index.js"),o=n(/*! ./mix */"./node_modules/khroma/dist/methods/mix.js");t.default=function(e,t){void 0===t&&(t=100);var n=r.default.parse(e);return n.r=255-n.r,n.g=255-n.g,n.b=255-n.b,o.default(n,e,t)}},"./node_modules/khroma/dist/methods/is_dark.js": -/*!*****************************************************!*\ - !*** ./node_modules/khroma/dist/methods/is_dark.js ***! - \*****************************************************/ -/*! no static exports found */function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(/*! ./is_light */"./node_modules/khroma/dist/methods/is_light.js");t.default=function(e){return!r.default(e)}},"./node_modules/khroma/dist/methods/is_light.js": -/*!******************************************************!*\ - !*** ./node_modules/khroma/dist/methods/is_light.js ***! - \******************************************************/ -/*! no static exports found */function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(/*! ./luminance */"./node_modules/khroma/dist/methods/luminance.js");t.default=function(e){return r.default(e)>=.5}},"./node_modules/khroma/dist/methods/is_valid.js": -/*!******************************************************!*\ - !*** ./node_modules/khroma/dist/methods/is_valid.js ***! - \******************************************************/ -/*! no static exports found */function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(/*! ../color */"./node_modules/khroma/dist/color/index.js");t.default=function(e){try{return r.default.parse(e),!0}catch(e){return!1}}},"./node_modules/khroma/dist/methods/lighten.js": -/*!*****************************************************!*\ - !*** ./node_modules/khroma/dist/methods/lighten.js ***! - \*****************************************************/ -/*! no static exports found */function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(/*! ./adjust_channel */"./node_modules/khroma/dist/methods/adjust_channel.js");t.default=function(e,t){return r.default(e,"l",t)}},"./node_modules/khroma/dist/methods/lightness.js": -/*!*******************************************************!*\ - !*** ./node_modules/khroma/dist/methods/lightness.js ***! - \*******************************************************/ -/*! no static exports found */function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(/*! ./channel */"./node_modules/khroma/dist/methods/channel.js");t.default=function(e){return r.default(e,"l")}},"./node_modules/khroma/dist/methods/luminance.js": -/*!*******************************************************!*\ - !*** ./node_modules/khroma/dist/methods/luminance.js ***! - \*******************************************************/ -/*! no static exports found */function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(/*! ../utils */"./node_modules/khroma/dist/utils/index.js"),o=n(/*! ../color */"./node_modules/khroma/dist/color/index.js");t.default=function(e){var t=o.default.parse(e),n=t.r,i=t.g,s=t.b,a=.2126*r.default.channel.toLinear(n)+.7152*r.default.channel.toLinear(i)+.0722*r.default.channel.toLinear(s);return r.default.lang.round(a)}},"./node_modules/khroma/dist/methods/mix.js": -/*!*************************************************!*\ - !*** ./node_modules/khroma/dist/methods/mix.js ***! - \*************************************************/ -/*! no static exports found */function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(/*! ../color */"./node_modules/khroma/dist/color/index.js"),o=n(/*! ./rgba */"./node_modules/khroma/dist/methods/rgba.js");t.default=function(e,t,n){void 0===n&&(n=50);var i=r.default.parse(e),s=i.r,a=i.g,c=i.b,u=i.a,d=r.default.parse(t),l=d.r,f=d.g,h=d.b,p=d.a,m=n/100,g=2*m-1,y=u-p,b=((g*y==-1?g:(g+y)/(1+g*y))+1)/2,_=1-b,v=s*b+l*_,j=a*b+f*_,x=c*b+h*_,k=u*m+p*(1-m);return o.default(v,j,x,k)}},"./node_modules/khroma/dist/methods/opacify.js": -/*!*****************************************************!*\ - !*** ./node_modules/khroma/dist/methods/opacify.js ***! - \*****************************************************/ -/*! no static exports found */function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(/*! ./adjust_channel */"./node_modules/khroma/dist/methods/adjust_channel.js");t.default=function(e,t){return r.default(e,"a",t)}},"./node_modules/khroma/dist/methods/red.js": -/*!*************************************************!*\ - !*** ./node_modules/khroma/dist/methods/red.js ***! - \*************************************************/ -/*! no static exports found */function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(/*! ./channel */"./node_modules/khroma/dist/methods/channel.js");t.default=function(e){return r.default(e,"r")}},"./node_modules/khroma/dist/methods/rgba.js": -/*!**************************************************!*\ - !*** ./node_modules/khroma/dist/methods/rgba.js ***! - \**************************************************/ -/*! no static exports found */function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(/*! ../utils */"./node_modules/khroma/dist/utils/index.js"),o=n(/*! ../channels/reusable */"./node_modules/khroma/dist/channels/reusable.js"),i=n(/*! ../color */"./node_modules/khroma/dist/color/index.js"),s=n(/*! ./change */"./node_modules/khroma/dist/methods/change.js");t.default=function(e,t,n,a){if(void 0===n&&(n=0),void 0===a&&(a=1),"number"!=typeof e)return s.default(e,{a:t});var c=o.default.set({r:r.default.channel.clamp.r(e),g:r.default.channel.clamp.g(t),b:r.default.channel.clamp.b(n),a:r.default.channel.clamp.a(a)});return i.default.stringify(c)}},"./node_modules/khroma/dist/methods/saturate.js": -/*!******************************************************!*\ - !*** ./node_modules/khroma/dist/methods/saturate.js ***! - \******************************************************/ -/*! no static exports found */function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(/*! ./adjust_channel */"./node_modules/khroma/dist/methods/adjust_channel.js");t.default=function(e,t){return r.default(e,"s",t)}},"./node_modules/khroma/dist/methods/saturation.js": -/*!********************************************************!*\ - !*** ./node_modules/khroma/dist/methods/saturation.js ***! - \********************************************************/ -/*! no static exports found */function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(/*! ./channel */"./node_modules/khroma/dist/methods/channel.js");t.default=function(e){return r.default(e,"s")}},"./node_modules/khroma/dist/methods/scale.js": -/*!***************************************************!*\ - !*** ./node_modules/khroma/dist/methods/scale.js ***! - \***************************************************/ -/*! no static exports found */function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(/*! ../utils */"./node_modules/khroma/dist/utils/index.js"),o=n(/*! ../color */"./node_modules/khroma/dist/color/index.js"),i=n(/*! ./adjust */"./node_modules/khroma/dist/methods/adjust.js");t.default=function(e,t){var n,s,a,c=o.default.parse(e),u={};for(var d in t)u[d]=(n=c[d],s=t[d],a=r.default.channel.max[d],s>0?(a-n)*s/100:n*s/100);return i.default(e,u)}},"./node_modules/khroma/dist/methods/transparentize.js": -/*!************************************************************!*\ - !*** ./node_modules/khroma/dist/methods/transparentize.js ***! - \************************************************************/ -/*! no static exports found */function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(/*! ./adjust_channel */"./node_modules/khroma/dist/methods/adjust_channel.js");t.default=function(e,t){return r.default(e,"a",-t)}},"./node_modules/khroma/dist/types.js": -/*!*******************************************!*\ - !*** ./node_modules/khroma/dist/types.js ***! - \*******************************************/ -/*! no static exports found */function(e,t,n){"use strict";var r;Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.ALL=0]="ALL",e[e.RGB=1]="RGB",e[e.HSL=2]="HSL"}(r||(r={})),t.TYPE=r},"./node_modules/khroma/dist/utils/channel.js": -/*!***************************************************!*\ - !*** ./node_modules/khroma/dist/utils/channel.js ***! - \***************************************************/ -/*! no static exports found */function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r={min:{r:0,g:0,b:0,s:0,l:0,a:0},max:{r:255,g:255,b:255,h:360,s:100,l:100,a:1},clamp:{r:function(e){return e>=255?255:e<0?0:e},g:function(e){return e>=255?255:e<0?0:e},b:function(e){return e>=255?255:e<0?0:e},h:function(e){return e%360},s:function(e){return e>=100?100:e<0?0:e},l:function(e){return e>=100?100:e<0?0:e},a:function(e){return e>=1?1:e<0?0:e}},toLinear:function(e){var t=e/255;return e>.03928?Math.pow((t+.055)/1.055,2.4):t/12.92},hue2rgb:function(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+6*(t-e)*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e},hsl2rgb:function(e,t){var n=e.h,o=e.s,i=e.l;if(100===o)return 2.55*i;n/=360,o/=100;var s=(i/=100)<.5?i*(1+o):i+o-i*o,a=2*i-s;switch(t){case"r":return 255*r.hue2rgb(a,s,n+1/3);case"g":return 255*r.hue2rgb(a,s,n);case"b":return 255*r.hue2rgb(a,s,n-1/3)}},rgb2hsl:function(e,t){var n=e.r,r=e.g,o=e.b;n/=255,r/=255,o/=255;var i=Math.max(n,r,o),s=Math.min(n,r,o),a=(i+s)/2;if("l"===t)return 100*a;if(i===s)return 0;var c=i-s;if("s"===t)return 100*(a>.5?c/(2-i-s):c/(i+s));switch(i){case n:return 60*((r-o)/c+(r1?t:"0"+t},dec2hex:function(e){var t=Math.round(e).toString(16);return t.length>1?t:"0"+t}};t.default=r},"./node_modules/lodash/_DataView.js": -/*!******************************************!*\ - !*** ./node_modules/lodash/_DataView.js ***! - \******************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./_getNative */"./node_modules/lodash/_getNative.js")(n(/*! ./_root */"./node_modules/lodash/_root.js"),"DataView");e.exports=r},"./node_modules/lodash/_Hash.js": -/*!**************************************!*\ - !*** ./node_modules/lodash/_Hash.js ***! - \**************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./_hashClear */"./node_modules/lodash/_hashClear.js"),o=n(/*! ./_hashDelete */"./node_modules/lodash/_hashDelete.js"),i=n(/*! ./_hashGet */"./node_modules/lodash/_hashGet.js"),s=n(/*! ./_hashHas */"./node_modules/lodash/_hashHas.js"),a=n(/*! ./_hashSet */"./node_modules/lodash/_hashSet.js");function c(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t-1}},"./node_modules/lodash/_arrayIncludesWith.js": -/*!***************************************************!*\ - !*** ./node_modules/lodash/_arrayIncludesWith.js ***! - \***************************************************/ -/*! no static exports found */function(e,t){e.exports=function(e,t,n){for(var r=-1,o=null==e?0:e.length;++r0&&i(d)?n>1?e(d,n-1,i,s,a):r(a,d):s||(a[a.length]=d)}return a}},"./node_modules/lodash/_baseFor.js": -/*!*****************************************!*\ - !*** ./node_modules/lodash/_baseFor.js ***! - \*****************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./_createBaseFor */"./node_modules/lodash/_createBaseFor.js")();e.exports=r},"./node_modules/lodash/_baseForOwn.js": -/*!********************************************!*\ - !*** ./node_modules/lodash/_baseForOwn.js ***! - \********************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./_baseFor */"./node_modules/lodash/_baseFor.js"),o=n(/*! ./keys */"./node_modules/lodash/keys.js");e.exports=function(e,t){return e&&r(e,t,o)}},"./node_modules/lodash/_baseGet.js": -/*!*****************************************!*\ - !*** ./node_modules/lodash/_baseGet.js ***! - \*****************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./_castPath */"./node_modules/lodash/_castPath.js"),o=n(/*! ./_toKey */"./node_modules/lodash/_toKey.js");e.exports=function(e,t){for(var n=0,i=(t=r(t,e)).length;null!=e&&nt}},"./node_modules/lodash/_baseHas.js": -/*!*****************************************!*\ - !*** ./node_modules/lodash/_baseHas.js ***! - \*****************************************/ -/*! no static exports found */function(e,t){var n=Object.prototype.hasOwnProperty;e.exports=function(e,t){return null!=e&&n.call(e,t)}},"./node_modules/lodash/_baseHasIn.js": -/*!*******************************************!*\ - !*** ./node_modules/lodash/_baseHasIn.js ***! - \*******************************************/ -/*! no static exports found */function(e,t){e.exports=function(e,t){return null!=e&&t in Object(e)}},"./node_modules/lodash/_baseIndexOf.js": -/*!*********************************************!*\ - !*** ./node_modules/lodash/_baseIndexOf.js ***! - \*********************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./_baseFindIndex */"./node_modules/lodash/_baseFindIndex.js"),o=n(/*! ./_baseIsNaN */"./node_modules/lodash/_baseIsNaN.js"),i=n(/*! ./_strictIndexOf */"./node_modules/lodash/_strictIndexOf.js");e.exports=function(e,t,n){return t==t?i(e,t,n):r(e,o,n)}},"./node_modules/lodash/_baseIsArguments.js": -/*!*************************************************!*\ - !*** ./node_modules/lodash/_baseIsArguments.js ***! - \*************************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./_baseGetTag */"./node_modules/lodash/_baseGetTag.js"),o=n(/*! ./isObjectLike */"./node_modules/lodash/isObjectLike.js");e.exports=function(e){return o(e)&&"[object Arguments]"==r(e)}},"./node_modules/lodash/_baseIsEqual.js": -/*!*********************************************!*\ - !*** ./node_modules/lodash/_baseIsEqual.js ***! - \*********************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./_baseIsEqualDeep */"./node_modules/lodash/_baseIsEqualDeep.js"),o=n(/*! ./isObjectLike */"./node_modules/lodash/isObjectLike.js");e.exports=function e(t,n,i,s,a){return t===n||(null==t||null==n||!o(t)&&!o(n)?t!=t&&n!=n:r(t,n,i,s,e,a))}},"./node_modules/lodash/_baseIsEqualDeep.js": -/*!*************************************************!*\ - !*** ./node_modules/lodash/_baseIsEqualDeep.js ***! - \*************************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./_Stack */"./node_modules/lodash/_Stack.js"),o=n(/*! ./_equalArrays */"./node_modules/lodash/_equalArrays.js"),i=n(/*! ./_equalByTag */"./node_modules/lodash/_equalByTag.js"),s=n(/*! ./_equalObjects */"./node_modules/lodash/_equalObjects.js"),a=n(/*! ./_getTag */"./node_modules/lodash/_getTag.js"),c=n(/*! ./isArray */"./node_modules/lodash/isArray.js"),u=n(/*! ./isBuffer */"./node_modules/lodash/isBuffer.js"),d=n(/*! ./isTypedArray */"./node_modules/lodash/isTypedArray.js"),l="[object Object]",f=Object.prototype.hasOwnProperty;e.exports=function(e,t,n,h,p,m){var g=c(e),y=c(t),b=g?"[object Array]":a(e),_=y?"[object Array]":a(t),v=(b="[object Arguments]"==b?l:b)==l,j=(_="[object Arguments]"==_?l:_)==l,x=b==_;if(x&&u(e)){if(!u(t))return!1;g=!0,v=!1}if(x&&!v)return m||(m=new r),g||d(e)?o(e,t,n,h,p,m):i(e,t,b,n,h,p,m);if(!(1&n)){var k=v&&f.call(e,"__wrapped__"),w=j&&f.call(t,"__wrapped__");if(k||w){var O=k?e.value():e,C=w?t.value():t;return m||(m=new r),p(O,C,n,h,m)}}return!!x&&(m||(m=new r),s(e,t,n,h,p,m))}},"./node_modules/lodash/_baseIsMap.js": -/*!*******************************************!*\ - !*** ./node_modules/lodash/_baseIsMap.js ***! - \*******************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./_getTag */"./node_modules/lodash/_getTag.js"),o=n(/*! ./isObjectLike */"./node_modules/lodash/isObjectLike.js");e.exports=function(e){return o(e)&&"[object Map]"==r(e)}},"./node_modules/lodash/_baseIsMatch.js": -/*!*********************************************!*\ - !*** ./node_modules/lodash/_baseIsMatch.js ***! - \*********************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./_Stack */"./node_modules/lodash/_Stack.js"),o=n(/*! ./_baseIsEqual */"./node_modules/lodash/_baseIsEqual.js");e.exports=function(e,t,n,i){var s=n.length,a=s,c=!i;if(null==e)return!a;for(e=Object(e);s--;){var u=n[s];if(c&&u[2]?u[1]!==e[u[0]]:!(u[0]in e))return!1}for(;++s=200){var m=t?null:a(e);if(m)return c(m);f=!1,d=s,p=new r}else p=t?[]:h;e:for(;++ut||s&&a&&u&&!c&&!d||o&&a&&u||!n&&u||!i)return 1;if(!o&&!s&&!d&&e=c?u:u*("desc"==n[o]?-1:1)}return e.index-t.index}},"./node_modules/lodash/_copyArray.js": -/*!*******************************************!*\ - !*** ./node_modules/lodash/_copyArray.js ***! - \*******************************************/ -/*! no static exports found */function(e,t){e.exports=function(e,t){var n=-1,r=e.length;for(t||(t=Array(r));++n1?n[i-1]:void 0,a=i>2?n[2]:void 0;for(s=e.length>3&&"function"==typeof s?(i--,s):void 0,a&&o(n[0],n[1],a)&&(s=i<3?void 0:s,i=1),t=Object(t);++r-1?a[c?t[u]:u]:void 0}}},"./node_modules/lodash/_createRange.js": -/*!*********************************************!*\ - !*** ./node_modules/lodash/_createRange.js ***! - \*********************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./_baseRange */"./node_modules/lodash/_baseRange.js"),o=n(/*! ./_isIterateeCall */"./node_modules/lodash/_isIterateeCall.js"),i=n(/*! ./toFinite */"./node_modules/lodash/toFinite.js");e.exports=function(e){return function(t,n,s){return s&&"number"!=typeof s&&o(t,n,s)&&(n=s=void 0),t=i(t),void 0===n?(n=t,t=0):n=i(n),s=void 0===s?td))return!1;var f=c.get(e);if(f&&c.get(t))return f==t;var h=-1,p=!0,m=2&n?new r:void 0;for(c.set(e,t),c.set(t,e);++h-1&&e%1==0&&e-1}},"./node_modules/lodash/_listCacheSet.js": -/*!**********************************************!*\ - !*** ./node_modules/lodash/_listCacheSet.js ***! - \**********************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./_assocIndexOf */"./node_modules/lodash/_assocIndexOf.js");e.exports=function(e,t){var n=this.__data__,o=r(n,e);return o<0?(++this.size,n.push([e,t])):n[o][1]=t,this}},"./node_modules/lodash/_mapCacheClear.js": -/*!***********************************************!*\ - !*** ./node_modules/lodash/_mapCacheClear.js ***! - \***********************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./_Hash */"./node_modules/lodash/_Hash.js"),o=n(/*! ./_ListCache */"./node_modules/lodash/_ListCache.js"),i=n(/*! ./_Map */"./node_modules/lodash/_Map.js");e.exports=function(){this.size=0,this.__data__={hash:new r,map:new(i||o),string:new r}}},"./node_modules/lodash/_mapCacheDelete.js": -/*!************************************************!*\ - !*** ./node_modules/lodash/_mapCacheDelete.js ***! - \************************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./_getMapData */"./node_modules/lodash/_getMapData.js");e.exports=function(e){var t=r(this,e).delete(e);return this.size-=t?1:0,t}},"./node_modules/lodash/_mapCacheGet.js": -/*!*********************************************!*\ - !*** ./node_modules/lodash/_mapCacheGet.js ***! - \*********************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./_getMapData */"./node_modules/lodash/_getMapData.js");e.exports=function(e){return r(this,e).get(e)}},"./node_modules/lodash/_mapCacheHas.js": -/*!*********************************************!*\ - !*** ./node_modules/lodash/_mapCacheHas.js ***! - \*********************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./_getMapData */"./node_modules/lodash/_getMapData.js");e.exports=function(e){return r(this,e).has(e)}},"./node_modules/lodash/_mapCacheSet.js": -/*!*********************************************!*\ - !*** ./node_modules/lodash/_mapCacheSet.js ***! - \*********************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./_getMapData */"./node_modules/lodash/_getMapData.js");e.exports=function(e,t){var n=r(this,e),o=n.size;return n.set(e,t),this.size+=n.size==o?0:1,this}},"./node_modules/lodash/_mapToArray.js": -/*!********************************************!*\ - !*** ./node_modules/lodash/_mapToArray.js ***! - \********************************************/ -/*! no static exports found */function(e,t){e.exports=function(e){var t=-1,n=Array(e.size);return e.forEach((function(e,r){n[++t]=[r,e]})),n}},"./node_modules/lodash/_matchesStrictComparable.js": -/*!*********************************************************!*\ - !*** ./node_modules/lodash/_matchesStrictComparable.js ***! - \*********************************************************/ -/*! no static exports found */function(e,t){e.exports=function(e,t){return function(n){return null!=n&&n[e]===t&&(void 0!==t||e in Object(n))}}},"./node_modules/lodash/_memoizeCapped.js": -/*!***********************************************!*\ - !*** ./node_modules/lodash/_memoizeCapped.js ***! - \***********************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./memoize */"./node_modules/lodash/memoize.js");e.exports=function(e){var t=r(e,(function(e){return 500===n.size&&n.clear(),e})),n=t.cache;return t}},"./node_modules/lodash/_nativeCreate.js": -/*!**********************************************!*\ - !*** ./node_modules/lodash/_nativeCreate.js ***! - \**********************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./_getNative */"./node_modules/lodash/_getNative.js")(Object,"create");e.exports=r},"./node_modules/lodash/_nativeKeys.js": -/*!********************************************!*\ - !*** ./node_modules/lodash/_nativeKeys.js ***! - \********************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./_overArg */"./node_modules/lodash/_overArg.js")(Object.keys,Object);e.exports=r},"./node_modules/lodash/_nativeKeysIn.js": -/*!**********************************************!*\ - !*** ./node_modules/lodash/_nativeKeysIn.js ***! - \**********************************************/ -/*! no static exports found */function(e,t){e.exports=function(e){var t=[];if(null!=e)for(var n in Object(e))t.push(n);return t}},"./node_modules/lodash/_nodeUtil.js": -/*!******************************************!*\ - !*** ./node_modules/lodash/_nodeUtil.js ***! - \******************************************/ -/*! no static exports found */function(e,t,n){(function(e){var r=n(/*! ./_freeGlobal */"./node_modules/lodash/_freeGlobal.js"),o=t&&!t.nodeType&&t,i=o&&"object"==typeof e&&e&&!e.nodeType&&e,s=i&&i.exports===o&&r.process,a=function(){try{var e=i&&i.require&&i.require("util").types;return e||s&&s.binding&&s.binding("util")}catch(e){}}();e.exports=a}).call(this,n(/*! ./../webpack/buildin/module.js */"./node_modules/webpack/buildin/module.js")(e))},"./node_modules/lodash/_objectToString.js": -/*!************************************************!*\ - !*** ./node_modules/lodash/_objectToString.js ***! - \************************************************/ -/*! no static exports found */function(e,t){var n=Object.prototype.toString;e.exports=function(e){return n.call(e)}},"./node_modules/lodash/_overArg.js": -/*!*****************************************!*\ - !*** ./node_modules/lodash/_overArg.js ***! - \*****************************************/ -/*! no static exports found */function(e,t){e.exports=function(e,t){return function(n){return e(t(n))}}},"./node_modules/lodash/_overRest.js": -/*!******************************************!*\ - !*** ./node_modules/lodash/_overRest.js ***! - \******************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./_apply */"./node_modules/lodash/_apply.js"),o=Math.max;e.exports=function(e,t,n){return t=o(void 0===t?e.length-1:t,0),function(){for(var i=arguments,s=-1,a=o(i.length-t,0),c=Array(a);++s0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}},"./node_modules/lodash/_stackClear.js": -/*!********************************************!*\ - !*** ./node_modules/lodash/_stackClear.js ***! - \********************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./_ListCache */"./node_modules/lodash/_ListCache.js");e.exports=function(){this.__data__=new r,this.size=0}},"./node_modules/lodash/_stackDelete.js": -/*!*********************************************!*\ - !*** ./node_modules/lodash/_stackDelete.js ***! - \*********************************************/ -/*! no static exports found */function(e,t){e.exports=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}},"./node_modules/lodash/_stackGet.js": -/*!******************************************!*\ - !*** ./node_modules/lodash/_stackGet.js ***! - \******************************************/ -/*! no static exports found */function(e,t){e.exports=function(e){return this.__data__.get(e)}},"./node_modules/lodash/_stackHas.js": -/*!******************************************!*\ - !*** ./node_modules/lodash/_stackHas.js ***! - \******************************************/ -/*! no static exports found */function(e,t){e.exports=function(e){return this.__data__.has(e)}},"./node_modules/lodash/_stackSet.js": -/*!******************************************!*\ - !*** ./node_modules/lodash/_stackSet.js ***! - \******************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./_ListCache */"./node_modules/lodash/_ListCache.js"),o=n(/*! ./_Map */"./node_modules/lodash/_Map.js"),i=n(/*! ./_MapCache */"./node_modules/lodash/_MapCache.js");e.exports=function(e,t){var n=this.__data__;if(n instanceof r){var s=n.__data__;if(!o||s.length<199)return s.push([e,t]),this.size=++n.size,this;n=this.__data__=new i(s)}return n.set(e,t),this.size=n.size,this}},"./node_modules/lodash/_strictIndexOf.js": -/*!***********************************************!*\ - !*** ./node_modules/lodash/_strictIndexOf.js ***! - \***********************************************/ -/*! no static exports found */function(e,t){e.exports=function(e,t,n){for(var r=n-1,o=e.length;++r2?t[2]:void 0;for(u&&i(t[0],t[1],u)&&(r=1);++n-1&&e%1==0&&e<=9007199254740991}},"./node_modules/lodash/isMap.js": -/*!**************************************!*\ - !*** ./node_modules/lodash/isMap.js ***! - \**************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./_baseIsMap */"./node_modules/lodash/_baseIsMap.js"),o=n(/*! ./_baseUnary */"./node_modules/lodash/_baseUnary.js"),i=n(/*! ./_nodeUtil */"./node_modules/lodash/_nodeUtil.js"),s=i&&i.isMap,a=s?o(s):r;e.exports=a},"./node_modules/lodash/isObject.js": -/*!*****************************************!*\ - !*** ./node_modules/lodash/isObject.js ***! - \*****************************************/ -/*! no static exports found */function(e,t){e.exports=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}},"./node_modules/lodash/isObjectLike.js": -/*!*********************************************!*\ - !*** ./node_modules/lodash/isObjectLike.js ***! - \*********************************************/ -/*! no static exports found */function(e,t){e.exports=function(e){return null!=e&&"object"==typeof e}},"./node_modules/lodash/isPlainObject.js": -/*!**********************************************!*\ - !*** ./node_modules/lodash/isPlainObject.js ***! - \**********************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./_baseGetTag */"./node_modules/lodash/_baseGetTag.js"),o=n(/*! ./_getPrototype */"./node_modules/lodash/_getPrototype.js"),i=n(/*! ./isObjectLike */"./node_modules/lodash/isObjectLike.js"),s=Function.prototype,a=Object.prototype,c=s.toString,u=a.hasOwnProperty,d=c.call(Object);e.exports=function(e){if(!i(e)||"[object Object]"!=r(e))return!1;var t=o(e);if(null===t)return!0;var n=u.call(t,"constructor")&&t.constructor;return"function"==typeof n&&n instanceof n&&c.call(n)==d}},"./node_modules/lodash/isSet.js": -/*!**************************************!*\ - !*** ./node_modules/lodash/isSet.js ***! - \**************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./_baseIsSet */"./node_modules/lodash/_baseIsSet.js"),o=n(/*! ./_baseUnary */"./node_modules/lodash/_baseUnary.js"),i=n(/*! ./_nodeUtil */"./node_modules/lodash/_nodeUtil.js"),s=i&&i.isSet,a=s?o(s):r;e.exports=a},"./node_modules/lodash/isString.js": -/*!*****************************************!*\ - !*** ./node_modules/lodash/isString.js ***! - \*****************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./_baseGetTag */"./node_modules/lodash/_baseGetTag.js"),o=n(/*! ./isArray */"./node_modules/lodash/isArray.js"),i=n(/*! ./isObjectLike */"./node_modules/lodash/isObjectLike.js");e.exports=function(e){return"string"==typeof e||!o(e)&&i(e)&&"[object String]"==r(e)}},"./node_modules/lodash/isSymbol.js": -/*!*****************************************!*\ - !*** ./node_modules/lodash/isSymbol.js ***! - \*****************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./_baseGetTag */"./node_modules/lodash/_baseGetTag.js"),o=n(/*! ./isObjectLike */"./node_modules/lodash/isObjectLike.js");e.exports=function(e){return"symbol"==typeof e||o(e)&&"[object Symbol]"==r(e)}},"./node_modules/lodash/isTypedArray.js": -/*!*********************************************!*\ - !*** ./node_modules/lodash/isTypedArray.js ***! - \*********************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./_baseIsTypedArray */"./node_modules/lodash/_baseIsTypedArray.js"),o=n(/*! ./_baseUnary */"./node_modules/lodash/_baseUnary.js"),i=n(/*! ./_nodeUtil */"./node_modules/lodash/_nodeUtil.js"),s=i&&i.isTypedArray,a=s?o(s):r;e.exports=a},"./node_modules/lodash/isUndefined.js": -/*!********************************************!*\ - !*** ./node_modules/lodash/isUndefined.js ***! - \********************************************/ -/*! no static exports found */function(e,t){e.exports=function(e){return void 0===e}},"./node_modules/lodash/keys.js": -/*!*************************************!*\ - !*** ./node_modules/lodash/keys.js ***! - \*************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./_arrayLikeKeys */"./node_modules/lodash/_arrayLikeKeys.js"),o=n(/*! ./_baseKeys */"./node_modules/lodash/_baseKeys.js"),i=n(/*! ./isArrayLike */"./node_modules/lodash/isArrayLike.js");e.exports=function(e){return i(e)?r(e):o(e)}},"./node_modules/lodash/keysIn.js": -/*!***************************************!*\ - !*** ./node_modules/lodash/keysIn.js ***! - \***************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./_arrayLikeKeys */"./node_modules/lodash/_arrayLikeKeys.js"),o=n(/*! ./_baseKeysIn */"./node_modules/lodash/_baseKeysIn.js"),i=n(/*! ./isArrayLike */"./node_modules/lodash/isArrayLike.js");e.exports=function(e){return i(e)?r(e,!0):o(e)}},"./node_modules/lodash/last.js": -/*!*************************************!*\ - !*** ./node_modules/lodash/last.js ***! - \*************************************/ -/*! no static exports found */function(e,t){e.exports=function(e){var t=null==e?0:e.length;return t?e[t-1]:void 0}},"./node_modules/lodash/map.js": -/*!************************************!*\ - !*** ./node_modules/lodash/map.js ***! - \************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./_arrayMap */"./node_modules/lodash/_arrayMap.js"),o=n(/*! ./_baseIteratee */"./node_modules/lodash/_baseIteratee.js"),i=n(/*! ./_baseMap */"./node_modules/lodash/_baseMap.js"),s=n(/*! ./isArray */"./node_modules/lodash/isArray.js");e.exports=function(e,t){return(s(e)?r:i)(e,o(t,3))}},"./node_modules/lodash/mapValues.js": -/*!******************************************!*\ - !*** ./node_modules/lodash/mapValues.js ***! - \******************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./_baseAssignValue */"./node_modules/lodash/_baseAssignValue.js"),o=n(/*! ./_baseForOwn */"./node_modules/lodash/_baseForOwn.js"),i=n(/*! ./_baseIteratee */"./node_modules/lodash/_baseIteratee.js");e.exports=function(e,t){var n={};return t=i(t,3),o(e,(function(e,o,i){r(n,o,t(e,o,i))})),n}},"./node_modules/lodash/max.js": -/*!************************************!*\ - !*** ./node_modules/lodash/max.js ***! - \************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./_baseExtremum */"./node_modules/lodash/_baseExtremum.js"),o=n(/*! ./_baseGt */"./node_modules/lodash/_baseGt.js"),i=n(/*! ./identity */"./node_modules/lodash/identity.js");e.exports=function(e){return e&&e.length?r(e,i,o):void 0}},"./node_modules/lodash/memoize.js": -/*!****************************************!*\ - !*** ./node_modules/lodash/memoize.js ***! - \****************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./_MapCache */"./node_modules/lodash/_MapCache.js");function o(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError("Expected a function");var n=function(){var r=arguments,o=t?t.apply(this,r):r[0],i=n.cache;if(i.has(o))return i.get(o);var s=e.apply(this,r);return n.cache=i.set(o,s)||i,s};return n.cache=new(o.Cache||r),n}o.Cache=r,e.exports=o},"./node_modules/lodash/merge.js": -/*!**************************************!*\ - !*** ./node_modules/lodash/merge.js ***! - \**************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./_baseMerge */"./node_modules/lodash/_baseMerge.js"),o=n(/*! ./_createAssigner */"./node_modules/lodash/_createAssigner.js")((function(e,t,n){r(e,t,n)}));e.exports=o},"./node_modules/lodash/min.js": -/*!************************************!*\ - !*** ./node_modules/lodash/min.js ***! - \************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./_baseExtremum */"./node_modules/lodash/_baseExtremum.js"),o=n(/*! ./_baseLt */"./node_modules/lodash/_baseLt.js"),i=n(/*! ./identity */"./node_modules/lodash/identity.js");e.exports=function(e){return e&&e.length?r(e,i,o):void 0}},"./node_modules/lodash/minBy.js": -/*!**************************************!*\ - !*** ./node_modules/lodash/minBy.js ***! - \**************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./_baseExtremum */"./node_modules/lodash/_baseExtremum.js"),o=n(/*! ./_baseIteratee */"./node_modules/lodash/_baseIteratee.js"),i=n(/*! ./_baseLt */"./node_modules/lodash/_baseLt.js");e.exports=function(e,t){return e&&e.length?r(e,o(t,2),i):void 0}},"./node_modules/lodash/noop.js": -/*!*************************************!*\ - !*** ./node_modules/lodash/noop.js ***! - \*************************************/ -/*! no static exports found */function(e,t){e.exports=function(){}},"./node_modules/lodash/now.js": -/*!************************************!*\ - !*** ./node_modules/lodash/now.js ***! - \************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./_root */"./node_modules/lodash/_root.js");e.exports=function(){return r.Date.now()}},"./node_modules/lodash/pick.js": -/*!*************************************!*\ - !*** ./node_modules/lodash/pick.js ***! - \*************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./_basePick */"./node_modules/lodash/_basePick.js"),o=n(/*! ./_flatRest */"./node_modules/lodash/_flatRest.js")((function(e,t){return null==e?{}:r(e,t)}));e.exports=o},"./node_modules/lodash/property.js": -/*!*****************************************!*\ - !*** ./node_modules/lodash/property.js ***! - \*****************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./_baseProperty */"./node_modules/lodash/_baseProperty.js"),o=n(/*! ./_basePropertyDeep */"./node_modules/lodash/_basePropertyDeep.js"),i=n(/*! ./_isKey */"./node_modules/lodash/_isKey.js"),s=n(/*! ./_toKey */"./node_modules/lodash/_toKey.js");e.exports=function(e){return i(e)?r(s(e)):o(e)}},"./node_modules/lodash/range.js": -/*!**************************************!*\ - !*** ./node_modules/lodash/range.js ***! - \**************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./_createRange */"./node_modules/lodash/_createRange.js")();e.exports=r},"./node_modules/lodash/reduce.js": -/*!***************************************!*\ - !*** ./node_modules/lodash/reduce.js ***! - \***************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./_arrayReduce */"./node_modules/lodash/_arrayReduce.js"),o=n(/*! ./_baseEach */"./node_modules/lodash/_baseEach.js"),i=n(/*! ./_baseIteratee */"./node_modules/lodash/_baseIteratee.js"),s=n(/*! ./_baseReduce */"./node_modules/lodash/_baseReduce.js"),a=n(/*! ./isArray */"./node_modules/lodash/isArray.js");e.exports=function(e,t,n){var c=a(e)?r:s,u=arguments.length<3;return c(e,i(t,4),n,u,o)}},"./node_modules/lodash/size.js": -/*!*************************************!*\ - !*** ./node_modules/lodash/size.js ***! - \*************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./_baseKeys */"./node_modules/lodash/_baseKeys.js"),o=n(/*! ./_getTag */"./node_modules/lodash/_getTag.js"),i=n(/*! ./isArrayLike */"./node_modules/lodash/isArrayLike.js"),s=n(/*! ./isString */"./node_modules/lodash/isString.js"),a=n(/*! ./_stringSize */"./node_modules/lodash/_stringSize.js");e.exports=function(e){if(null==e)return 0;if(i(e))return s(e)?a(e):e.length;var t=o(e);return"[object Map]"==t||"[object Set]"==t?e.size:r(e).length}},"./node_modules/lodash/sortBy.js": -/*!***************************************!*\ - !*** ./node_modules/lodash/sortBy.js ***! - \***************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./_baseFlatten */"./node_modules/lodash/_baseFlatten.js"),o=n(/*! ./_baseOrderBy */"./node_modules/lodash/_baseOrderBy.js"),i=n(/*! ./_baseRest */"./node_modules/lodash/_baseRest.js"),s=n(/*! ./_isIterateeCall */"./node_modules/lodash/_isIterateeCall.js"),a=i((function(e,t){if(null==e)return[];var n=t.length;return n>1&&s(e,t[0],t[1])?t=[]:n>2&&s(t[0],t[1],t[2])&&(t=[t[0]]),o(e,r(t,1),[])}));e.exports=a},"./node_modules/lodash/stubArray.js": -/*!******************************************!*\ - !*** ./node_modules/lodash/stubArray.js ***! - \******************************************/ -/*! no static exports found */function(e,t){e.exports=function(){return[]}},"./node_modules/lodash/stubFalse.js": -/*!******************************************!*\ - !*** ./node_modules/lodash/stubFalse.js ***! - \******************************************/ -/*! no static exports found */function(e,t){e.exports=function(){return!1}},"./node_modules/lodash/toFinite.js": -/*!*****************************************!*\ - !*** ./node_modules/lodash/toFinite.js ***! - \*****************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./toNumber */"./node_modules/lodash/toNumber.js");e.exports=function(e){return e?(e=r(e))===1/0||e===-1/0?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0}},"./node_modules/lodash/toInteger.js": -/*!******************************************!*\ - !*** ./node_modules/lodash/toInteger.js ***! - \******************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./toFinite */"./node_modules/lodash/toFinite.js");e.exports=function(e){var t=r(e),n=t%1;return t==t?n?t-n:t:0}},"./node_modules/lodash/toNumber.js": -/*!*****************************************!*\ - !*** ./node_modules/lodash/toNumber.js ***! - \*****************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./isObject */"./node_modules/lodash/isObject.js"),o=n(/*! ./isSymbol */"./node_modules/lodash/isSymbol.js"),i=/^\s+|\s+$/g,s=/^[-+]0x[0-9a-f]+$/i,a=/^0b[01]+$/i,c=/^0o[0-7]+$/i,u=parseInt;e.exports=function(e){if("number"==typeof e)return e;if(o(e))return NaN;if(r(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=r(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=e.replace(i,"");var n=a.test(e);return n||c.test(e)?u(e.slice(2),n?2:8):s.test(e)?NaN:+e}},"./node_modules/lodash/toPlainObject.js": -/*!**********************************************!*\ - !*** ./node_modules/lodash/toPlainObject.js ***! - \**********************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./_copyObject */"./node_modules/lodash/_copyObject.js"),o=n(/*! ./keysIn */"./node_modules/lodash/keysIn.js");e.exports=function(e){return r(e,o(e))}},"./node_modules/lodash/toString.js": -/*!*****************************************!*\ - !*** ./node_modules/lodash/toString.js ***! - \*****************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./_baseToString */"./node_modules/lodash/_baseToString.js");e.exports=function(e){return null==e?"":r(e)}},"./node_modules/lodash/transform.js": -/*!******************************************!*\ - !*** ./node_modules/lodash/transform.js ***! - \******************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./_arrayEach */"./node_modules/lodash/_arrayEach.js"),o=n(/*! ./_baseCreate */"./node_modules/lodash/_baseCreate.js"),i=n(/*! ./_baseForOwn */"./node_modules/lodash/_baseForOwn.js"),s=n(/*! ./_baseIteratee */"./node_modules/lodash/_baseIteratee.js"),a=n(/*! ./_getPrototype */"./node_modules/lodash/_getPrototype.js"),c=n(/*! ./isArray */"./node_modules/lodash/isArray.js"),u=n(/*! ./isBuffer */"./node_modules/lodash/isBuffer.js"),d=n(/*! ./isFunction */"./node_modules/lodash/isFunction.js"),l=n(/*! ./isObject */"./node_modules/lodash/isObject.js"),f=n(/*! ./isTypedArray */"./node_modules/lodash/isTypedArray.js");e.exports=function(e,t,n){var h=c(e),p=h||u(e)||f(e);if(t=s(t,4),null==n){var m=e&&e.constructor;n=p?h?new m:[]:l(e)&&d(m)?o(a(e)):{}}return(p?r:i)(e,(function(e,r,o){return t(n,e,r,o)})),n}},"./node_modules/lodash/union.js": -/*!**************************************!*\ - !*** ./node_modules/lodash/union.js ***! - \**************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./_baseFlatten */"./node_modules/lodash/_baseFlatten.js"),o=n(/*! ./_baseRest */"./node_modules/lodash/_baseRest.js"),i=n(/*! ./_baseUniq */"./node_modules/lodash/_baseUniq.js"),s=n(/*! ./isArrayLikeObject */"./node_modules/lodash/isArrayLikeObject.js"),a=o((function(e){return i(r(e,1,s,!0))}));e.exports=a},"./node_modules/lodash/uniqueId.js": -/*!*****************************************!*\ - !*** ./node_modules/lodash/uniqueId.js ***! - \*****************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./toString */"./node_modules/lodash/toString.js"),o=0;e.exports=function(e){var t=++o;return r(e)+t}},"./node_modules/lodash/values.js": -/*!***************************************!*\ - !*** ./node_modules/lodash/values.js ***! - \***************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./_baseValues */"./node_modules/lodash/_baseValues.js"),o=n(/*! ./keys */"./node_modules/lodash/keys.js");e.exports=function(e){return null==e?[]:r(e,o(e))}},"./node_modules/lodash/zipObject.js": -/*!******************************************!*\ - !*** ./node_modules/lodash/zipObject.js ***! - \******************************************/ -/*! no static exports found */function(e,t,n){var r=n(/*! ./_assignValue */"./node_modules/lodash/_assignValue.js"),o=n(/*! ./_baseZipObject */"./node_modules/lodash/_baseZipObject.js");e.exports=function(e,t){return o(e||[],t||[],r)}},"./node_modules/moment-mini/locale sync recursive ^\\.\\/.*$": -/*!*******************************************************!*\ - !*** ./node_modules/moment-mini/locale sync ^\.\/.*$ ***! - \*******************************************************/ -/*! no static exports found */function(e,t,n){var r={"./locale":"./node_modules/moment-mini/locale/locale.js","./locale.js":"./node_modules/moment-mini/locale/locale.js"};function o(e){var t=i(e);return n(t)}function i(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=i,e.exports=o,o.id="./node_modules/moment-mini/locale sync recursive ^\\.\\/.*$"},"./node_modules/moment-mini/locale/locale.js": -/*!***************************************************!*\ - !*** ./node_modules/moment-mini/locale/locale.js ***! - \***************************************************/ -/*! no static exports found */function(e,t){},"./node_modules/moment-mini/moment.min.js": -/*!************************************************!*\ - !*** ./node_modules/moment-mini/moment.min.js ***! - \************************************************/ -/*! no static exports found */function(e,t,n){(function(e){e.exports=function(){"use strict";var t,r;function o(){return t.apply(null,arguments)}function i(e){return e instanceof Array||"[object Array]"===Object.prototype.toString.call(e)}function s(e){return null!=e&&"[object Object]"===Object.prototype.toString.call(e)}function a(e){return void 0===e}function c(e){return"number"==typeof e||"[object Number]"===Object.prototype.toString.call(e)}function u(e){return e instanceof Date||"[object Date]"===Object.prototype.toString.call(e)}function d(e,t){var n,r=[];for(n=0;n>>0,r=0;rge(e)?(i=e+1,a-ge(e)):(i=e,a),{year:i,dayOfYear:s}}function Le(e,t,n){var r,o,i=Be(e.year(),t,n),s=Math.floor((e.dayOfYear()-i-1)/7)+1;return s<1?r=s+Pe(o=e.year()-1,t,n):s>Pe(e.year(),t,n)?(r=s-Pe(e.year(),t,n),o=e.year()+1):(o=e.year(),r=s),{week:r,year:o}}function Pe(e,t,n){var r=Be(e,t,n),o=Be(e+1,t,n);return(ge(e)-r+o)/7}function Ie(e,t){return e.slice(t,7).concat(e.slice(0,t))}U("w",["ww",2],"wo","week"),U("W",["WW",2],"Wo","isoWeek"),N("week","w"),N("isoWeek","W"),R("week",5),R("isoWeek",5),de("w",Q),de("ww",Q,V),de("W",Q),de("WW",Q,V),me(["w","ww","W","WW"],(function(e,t,n,r){t[r.substr(0,1)]=k(e)})),U("d",0,"do","day"),U("dd",0,0,(function(e){return this.localeData().weekdaysMin(this,e)})),U("ddd",0,0,(function(e){return this.localeData().weekdaysShort(this,e)})),U("dddd",0,0,(function(e){return this.localeData().weekdays(this,e)})),U("e",0,0,"weekday"),U("E",0,0,"isoWeekday"),N("day","d"),N("weekday","e"),N("isoWeekday","E"),R("day",11),R("weekday",11),R("isoWeekday",11),de("d",Q),de("e",Q),de("E",Q),de("dd",(function(e,t){return t.weekdaysMinRegex(e)})),de("ddd",(function(e,t){return t.weekdaysShortRegex(e)})),de("dddd",(function(e,t){return t.weekdaysRegex(e)})),me(["dd","ddd","dddd"],(function(e,t,n,r){var o=n._locale.weekdaysParse(e,r,n._strict);null!=o?t.d=o:p(n).invalidWeekday=e})),me(["d","e","E"],(function(e,t,n,r){t[r]=k(e)}));var Re="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Fe="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Ye="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),ze=ce,qe=ce,Ge=ce;function Ue(){function e(e,t){return t.length-e.length}var t,n,r,o,i,s=[],a=[],c=[],u=[];for(t=0;t<7;t++)n=h([2e3,1]).day(t),r=this.weekdaysMin(n,""),o=this.weekdaysShort(n,""),i=this.weekdays(n,""),s.push(r),a.push(o),c.push(i),u.push(r),u.push(o),u.push(i);for(s.sort(e),a.sort(e),c.sort(e),u.sort(e),t=0;t<7;t++)a[t]=fe(a[t]),c[t]=fe(c[t]),u[t]=fe(u[t]);this._weekdaysRegex=new RegExp("^("+u.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+c.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+a.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+s.join("|")+")","i")}function We(){return this.hours()%12||12}function He(e,t){U(e,0,0,(function(){return this.localeData().meridiem(this.hours(),this.minutes(),t)}))}function $e(e,t){return t._meridiemParse}U("H",["HH",2],0,"hour"),U("h",["hh",2],0,We),U("k",["kk",2],0,(function(){return this.hours()||24})),U("hmm",0,0,(function(){return""+We.apply(this)+F(this.minutes(),2)})),U("hmmss",0,0,(function(){return""+We.apply(this)+F(this.minutes(),2)+F(this.seconds(),2)})),U("Hmm",0,0,(function(){return""+this.hours()+F(this.minutes(),2)})),U("Hmmss",0,0,(function(){return""+this.hours()+F(this.minutes(),2)+F(this.seconds(),2)})),He("a",!0),He("A",!1),N("hour","h"),R("hour",13),de("a",$e),de("A",$e),de("H",Q),de("h",Q),de("k",Q),de("HH",Q,V),de("hh",Q,V),de("kk",Q,V),de("hmm",J),de("hmmss",ee),de("Hmm",J),de("Hmmss",ee),pe(["H","HH"],3),pe(["k","kk"],(function(e,t,n){var r=k(e);t[3]=24===r?0:r})),pe(["a","A"],(function(e,t,n){n._isPm=n._locale.isPM(e),n._meridiem=e})),pe(["h","hh"],(function(e,t,n){t[3]=k(e),p(n).bigHour=!0})),pe("hmm",(function(e,t,n){var r=e.length-2;t[3]=k(e.substr(0,r)),t[4]=k(e.substr(r)),p(n).bigHour=!0})),pe("hmmss",(function(e,t,n){var r=e.length-4,o=e.length-2;t[3]=k(e.substr(0,r)),t[4]=k(e.substr(r,2)),t[5]=k(e.substr(o)),p(n).bigHour=!0})),pe("Hmm",(function(e,t,n){var r=e.length-2;t[3]=k(e.substr(0,r)),t[4]=k(e.substr(r))})),pe("Hmmss",(function(e,t,n){var r=e.length-4,o=e.length-2;t[3]=k(e.substr(0,r)),t[4]=k(e.substr(r,2)),t[5]=k(e.substr(o))}));var Ve,Xe=ve("Hours",!0),Ze={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:Oe,monthsShort:Ce,week:{dow:0,doy:6},weekdays:Re,weekdaysMin:Ye,weekdaysShort:Fe,meridiemParse:/[ap]\.?m?\.?/i},Ke={},Qe={};function Je(e){return e?e.toLowerCase().replace("_","-"):e}function et(t){var r=null;if(!Ke[t]&&void 0!==e&&e&&e.exports)try{r=Ve._abbr,n("./node_modules/moment-mini/locale sync recursive ^\\.\\/.*$")("./"+t),tt(r)}catch(t){}return Ke[t]}function tt(e,t){var n;return e&&((n=a(t)?rt(e):nt(e,t))?Ve=n:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+e+" not found. Did you forget to load it?")),Ve._abbr}function nt(e,t){if(null===t)return delete Ke[e],null;var n,r=Ze;if(t.abbr=e,null!=Ke[e])S("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),r=Ke[e]._config;else if(null!=t.parentLocale)if(null!=Ke[t.parentLocale])r=Ke[t.parentLocale]._config;else{if(null==(n=et(t.parentLocale)))return Qe[t.parentLocale]||(Qe[t.parentLocale]=[]),Qe[t.parentLocale].push({name:e,config:t}),null;r=n._config}return Ke[e]=new D(M(r,t)),Qe[e]&&Qe[e].forEach((function(e){nt(e.name,e.config)})),tt(e),Ke[e]}function rt(e){var t;if(e&&e._locale&&e._locale._abbr&&(e=e._locale._abbr),!e)return Ve;if(!i(e)){if(t=et(e))return t;e=[e]}return function(e){for(var t,n,r,o,i=0;i=t&&w(o,n,!0)>=t-1)break;t--}i++}return Ve}(e)}function ot(e){var t,n=e._a;return n&&-2===p(e).overflow&&(t=n[1]<0||11ke(n[0],n[1])?2:n[3]<0||24Pe(n,i,s)?p(e)._overflowWeeks=!0:null!=c?p(e)._overflowWeekday=!0:(a=Ne(n,r,o,i,s),e._a[0]=a.year,e._dayOfYear=a.dayOfYear)}(e),null!=e._dayOfYear&&(s=it(e._a[0],r[0]),(e._dayOfYear>ge(s)||0===e._dayOfYear)&&(p(e)._overflowDayOfYear=!0),n=De(s,0,e._dayOfYear),e._a[1]=n.getUTCMonth(),e._a[2]=n.getUTCDate()),t=0;t<3&&null==e._a[t];++t)e._a[t]=a[t]=r[t];for(;t<7;t++)e._a[t]=a[t]=null==e._a[t]?2===t?1:0:e._a[t];24===e._a[3]&&0===e._a[4]&&0===e._a[5]&&0===e._a[6]&&(e._nextDay=!0,e._a[3]=0),e._d=(e._useUTC?De:function(e,t,n,r,o,i,s){var a;return e<100&&0<=e?(a=new Date(e+400,t,n,r,o,i,s),isFinite(a.getFullYear())&&a.setFullYear(e)):a=new Date(e,t,n,r,o,i,s),a}).apply(null,a),i=e._useUTC?e._d.getUTCDay():e._d.getDay(),null!=e._tzm&&e._d.setUTCMinutes(e._d.getUTCMinutes()-e._tzm),e._nextDay&&(e._a[3]=24),e._w&&void 0!==e._w.d&&e._w.d!==i&&(p(e).weekdayMismatch=!0)}}var at=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,ct=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,ut=/Z|[+-]\d\d(?::?\d\d)?/,dt=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],lt=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],ft=/^\/?Date\((\-?\d+)/i;function ht(e){var t,n,r,o,i,s,a=e._i,c=at.exec(a)||ct.exec(a);if(c){for(p(e).iso=!0,t=0,n=dt.length;tn.valueOf():n.valueOf()this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},sn.isLocal=function(){return!!this.isValid()&&!this._isUTC},sn.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},sn.isUtc=Bt,sn.isUTC=Bt,sn.zoneAbbr=function(){return this._isUTC?"UTC":""},sn.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},sn.dates=C("dates accessor is deprecated. Use date instead.",Jt),sn.months=C("months accessor is deprecated. Use month instead",Te),sn.years=C("years accessor is deprecated. Use year instead",_e),sn.zone=C("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",(function(e,t){return null!=e?("string"!=typeof e&&(e=-e),this.utcOffset(e,t),this):-this.utcOffset()})),sn.isDSTShifted=C("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",(function(){if(!a(this._isDSTShifted))return this._isDSTShifted;var e={};if(b(e,this),(e=bt(e))._a){var t=e._isUTC?h(e._a):vt(e._a);this._isDSTShifted=this.isValid()&&0=0;r--){var o=e[r];"."===o?e.splice(r,1):".."===o?(e.splice(r,1),n++):n&&(e.splice(r,1),n--)}if(t)for(;n--;n)e.unshift("..");return e}function r(e,t){if(e.filter)return e.filter(t);for(var n=[],r=0;r=-1&&!o;i--){var s=i>=0?arguments[i]:e.cwd();if("string"!=typeof s)throw new TypeError("Arguments to path.resolve must be strings");s&&(t=s+"/"+t,o="/"===s.charAt(0))}return(o?"/":"")+(t=n(r(t.split("/"),(function(e){return!!e})),!o).join("/"))||"."},t.normalize=function(e){var i=t.isAbsolute(e),s="/"===o(e,-1);return(e=n(r(e.split("/"),(function(e){return!!e})),!i).join("/"))||i||(e="."),e&&s&&(e+="/"),(i?"/":"")+e},t.isAbsolute=function(e){return"/"===e.charAt(0)},t.join=function(){var e=Array.prototype.slice.call(arguments,0);return t.normalize(r(e,(function(e,t){if("string"!=typeof e)throw new TypeError("Arguments to path.join must be strings");return e})).join("/"))},t.relative=function(e,n){function r(e){for(var t=0;t=0&&""===e[n];n--);return t>n?[]:e.slice(t,n-t+1)}e=t.resolve(e).substr(1),n=t.resolve(n).substr(1);for(var o=r(e.split("/")),i=r(n.split("/")),s=Math.min(o.length,i.length),a=s,c=0;c=1;--i)if(47===(t=e.charCodeAt(i))){if(!o){r=i;break}}else o=!1;return-1===r?n?"/":".":n&&1===r?"/":e.slice(0,r)},t.basename=function(e,t){var n=function(e){"string"!=typeof e&&(e+="");var t,n=0,r=-1,o=!0;for(t=e.length-1;t>=0;--t)if(47===e.charCodeAt(t)){if(!o){n=t+1;break}}else-1===r&&(o=!1,r=t+1);return-1===r?"":e.slice(n,r)}(e);return t&&n.substr(-1*t.length)===t&&(n=n.substr(0,n.length-t.length)),n},t.extname=function(e){"string"!=typeof e&&(e+="");for(var t=-1,n=0,r=-1,o=!0,i=0,s=e.length-1;s>=0;--s){var a=e.charCodeAt(s);if(47!==a)-1===r&&(o=!1,r=s+1),46===a?-1===t?t=s:1!==i&&(i=1):-1!==t&&(i=-1);else if(!o){n=s+1;break}}return-1===t||-1===r||0===i||1===i&&t===r-1&&t===n+1?"":e.slice(t,r)};var o="b"==="ab".substr(-1)?function(e,t,n){return e.substr(t,n)}:function(e,t,n){return t<0&&(t=e.length+t),e.substr(t,n)}}).call(this,n(/*! ./../process/browser.js */"./node_modules/process/browser.js"))},"./node_modules/process/browser.js": -/*!*****************************************!*\ - !*** ./node_modules/process/browser.js ***! - \*****************************************/ -/*! no static exports found */function(e,t){var n,r,o=e.exports={};function i(){throw new Error("setTimeout has not been defined")}function s(){throw new Error("clearTimeout has not been defined")}function a(e){if(n===setTimeout)return setTimeout(e,0);if((n===i||!n)&&setTimeout)return n=setTimeout,setTimeout(e,0);try{return n(e,0)}catch(t){try{return n.call(null,e,0)}catch(t){return n.call(this,e,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:i}catch(e){n=i}try{r="function"==typeof clearTimeout?clearTimeout:s}catch(e){r=s}}();var c,u=[],d=!1,l=-1;function f(){d&&c&&(d=!1,c.length?u=c.concat(u):l=-1,u.length&&h())}function h(){if(!d){var e=a(f);d=!0;for(var t=u.length;t;){for(c=u,u=[];++l1)for(var n=1;n])/g,b=/([[}=:>])\s+/g,_=/(\{[^{]+?);(?=\})/g,v=/\s{2,}/g,j=/([^\(])(:+) */g,x=/[svh]\w+-[tblr]{2}/,k=/\(\s*(.*)\s*\)/g,w=/([\s\S]*?);/g,O=/-self|flex-/g,C=/[^]*?(:[rp][el]a[\w-]+)[^]*/,E=/stretch|:\s*\w+\-(?:conte|avail)/,T=/([^-])(image-set\()/,S="-webkit-",A="-moz-",M="-ms-",D=1,B=1,N=0,L=1,P=1,I=1,R=0,F=0,Y=0,z=[],q=[],G=0,U=null,W=0,H=1,$="",V="",X="";function Z(e,t,o,i,s){for(var a,c,d=0,l=0,f=0,h=0,y=0,b=0,_=0,v=0,x=0,w=0,O=0,C=0,E=0,T=0,A=0,M=0,R=0,q=0,U=0,Q=o.length,oe=Q-1,ie="",se="",ae="",ce="",ue="",de="";A0&&(se=se.replace(r,"")),se.trim().length>0)){switch(_){case 32:case 9:case 59:case 13:case 10:break;default:se+=o.charAt(A)}_=59}if(1===R)switch(_){case 123:case 125:case 59:case 34:case 39:case 40:case 41:case 44:R=0;case 9:case 13:case 10:case 32:break;default:for(R=0,U=A,y=_,A--,_=59;U0&&(++A,_=y);case 123:U=Q}}switch(_){case 123:for(y=(se=se.trim()).charCodeAt(0),O=1,U=++A;A0&&(se=se.replace(r,"")),b=se.charCodeAt(1)){case 100:case 109:case 115:case 45:a=t;break;default:a=z}if(U=(ae=Z(t,a,ae,b,s+1)).length,Y>0&&0===U&&(U=se.length),G>0&&(c=ne(3,ae,a=K(z,se,q),t,B,D,U,b,s,i),se=a.join(""),void 0!==c&&0===(U=(ae=c.trim()).length)&&(b=0,ae="")),U>0)switch(b){case 115:se=se.replace(k,te);case 100:case 109:case 45:ae=se+"{"+ae+"}";break;case 107:ae=(se=se.replace(p,"$1 $2"+(H>0?$:"")))+"{"+ae+"}",ae=1===P||2===P&&ee("@"+ae,3)?"@"+S+ae+"@"+ae:"@"+ae;break;default:ae=se+ae,112===i&&(ce+=ae,ae="")}else ae="";break;default:ae=Z(t,K(t,se,q),ae,i,s+1)}ue+=ae,C=0,R=0,T=0,M=0,q=0,E=0,se="",ae="",_=o.charCodeAt(++A);break;case 125:case 59:if((U=(se=(M>0?se.replace(r,""):se).trim()).length)>1)switch(0===T&&(45===(y=se.charCodeAt(0))||y>96&&y<123)&&(U=(se=se.replace(" ",":")).length),G>0&&void 0!==(c=ne(1,se,t,e,B,D,ce.length,i,s,i))&&0===(U=(se=c.trim()).length)&&(se="\0\0"),y=se.charCodeAt(0),b=se.charCodeAt(1),y){case 0:break;case 64:if(105===b||99===b){de+=se+o.charAt(A);break}default:if(58===se.charCodeAt(U-1))break;ce+=J(se,y,b,se.charCodeAt(2))}C=0,R=0,T=0,M=0,q=0,se="",_=o.charCodeAt(++A)}}switch(_){case 13:case 10:if(l+h+f+d+F===0)switch(w){case 41:case 39:case 34:case 64:case 126:case 62:case 42:case 43:case 47:case 45:case 58:case 44:case 59:case 123:case 125:break;default:T>0&&(R=1)}47===l?l=0:L+C===0&&107!==i&&se.length>0&&(M=1,se+="\0"),G*W>0&&ne(0,se,t,e,B,D,ce.length,i,s,i),D=1,B++;break;case 59:case 125:if(l+h+f+d===0){D++;break}default:switch(D++,ie=o.charAt(A),_){case 9:case 32:if(h+d+l===0)switch(v){case 44:case 58:case 9:case 32:ie="";break;default:32!==_&&(ie=" ")}break;case 0:ie="\\0";break;case 12:ie="\\f";break;case 11:ie="\\v";break;case 38:h+l+d===0&&L>0&&(q=1,M=1,ie="\f"+ie);break;case 108:if(h+l+d+N===0&&T>0)switch(A-T){case 2:112===v&&58===o.charCodeAt(A-3)&&(N=v);case 8:111===x&&(N=x)}break;case 58:h+l+d===0&&(T=A);break;case 44:l+f+h+d===0&&(M=1,ie+="\r");break;case 34:case 39:0===l&&(h=h===_?0:0===h?_:h);break;case 91:h+l+f===0&&d++;break;case 93:h+l+f===0&&d--;break;case 41:h+l+d===0&&f--;break;case 40:if(h+l+d===0){if(0===C)switch(2*v+3*x){case 533:break;default:O=0,C=1}f++}break;case 64:l+f+h+d+T+E===0&&(E=1);break;case 42:case 47:if(h+d+f>0)break;switch(l){case 0:switch(2*_+3*o.charCodeAt(A+1)){case 235:l=47;break;case 220:U=A,l=42}break;case 42:47===_&&42===v&&U+2!==A&&(33===o.charCodeAt(U+2)&&(ce+=o.substring(U,A+1)),ie="",l=0)}}if(0===l){if(L+h+d+E===0&&107!==i&&59!==_)switch(_){case 44:case 126:case 62:case 43:case 41:case 40:if(0===C){switch(v){case 9:case 32:case 10:case 13:ie+="\0";break;default:ie="\0"+ie+(44===_?"":"\0")}M=1}else switch(_){case 40:T+7===A&&108===v&&(T=0),C=++O;break;case 41:0==(C=--O)&&(M=1,ie+="\0")}break;case 9:case 32:switch(v){case 0:case 123:case 125:case 59:case 44:case 12:case 9:case 32:case 10:case 13:break;default:0===C&&(M=1,ie+="\0")}}se+=ie,32!==_&&9!==_&&(w=_)}}x=v,v=_,A++}if(U=ce.length,Y>0&&0===U&&0===ue.length&&0===t[0].length==0&&(109!==i||1===t.length&&(L>0?V:X)===t[0])&&(U=t.join(",").length+2),U>0){if(a=0===L&&107!==i?function(e){for(var t,n,o=0,i=e.length,s=Array(i);o1)){if(f=c.charCodeAt(c.length-1),h=n.charCodeAt(0),t="",0!==d)switch(f){case 42:case 126:case 62:case 43:case 32:case 40:break;default:t=" "}switch(h){case 38:n=t+V;case 126:case 62:case 43:case 32:case 41:case 40:break;case 91:n=t+n+V;break;case 58:switch(2*n.charCodeAt(1)+3*n.charCodeAt(2)){case 530:if(I>0){n=t+n.substring(8,l-1);break}default:(d<1||a[d-1].length<1)&&(n=t+V+n)}break;case 44:t="";default:n=l>1&&n.indexOf(":")>0?t+n.replace(j,"$1"+V+"$2"):t+n+V}c+=n}s[o]=c.replace(r,"").trim()}return s}(t):t,G>0&&void 0!==(c=ne(2,ce,a,e,B,D,U,i,s,i))&&0===(ce=c).length)return de+ce+ue;if(ce=a.join(",")+"{"+ce+"}",P*N!=0){switch(2!==P||ee(ce,2)||(N=0),N){case 111:ce=ce.replace(g,":-moz-$1")+ce;break;case 112:ce=ce.replace(m,"::"+S+"input-$1")+ce.replace(m,"::-moz-$1")+ce.replace(m,":-ms-input-$1")+ce}N=0}}return de+ce+ue}function K(e,t,n){var r=t.trim().split(d),o=r,i=r.length,s=e.length;switch(s){case 0:case 1:for(var a=0,c=0===s?"":e[0]+" ";a0&&L>0)return o.replace(f,"$1").replace(l,"$1"+X);break;default:return e.trim()+o.replace(l,"$1"+e.trim())}default:if(n*L>0&&o.indexOf("\f")>0)return o.replace(l,(58===e.charCodeAt(0)?"":"$1")+e.trim())}return e+o}function J(e,t,n,r){var u,d=0,l=e+";",f=2*t+3*n+4*r;if(944===f)return function(e){var t=e.length,n=e.indexOf(":",9)+1,r=e.substring(0,n).trim(),o=e.substring(n,t-1).trim();switch(e.charCodeAt(9)*H){case 0:break;case 45:if(110!==e.charCodeAt(10))break;default:var i=o.split((o="",a)),s=0;for(n=0,t=i.length;s64&&l<90||l>96&&l<123||95===l||45===l&&45!==u.charCodeAt(1)))switch(isNaN(parseFloat(u))+(-1!==u.indexOf("("))){case 1:switch(u){case"infinite":case"alternate":case"backwards":case"running":case"normal":case"forwards":case"both":case"none":case"linear":case"ease":case"ease-in":case"ease-out":case"ease-in-out":case"paused":case"reverse":case"alternate-reverse":case"inherit":case"initial":case"unset":case"step-start":case"step-end":break;default:u+=$}}d[n++]=u}o+=(0===s?"":",")+d.join(" ")}}return o=r+o+";",1===P||2===P&&ee(o,1)?S+o+o:o}(l);if(0===P||2===P&&!ee(l,1))return l;switch(f){case 1015:return 97===l.charCodeAt(10)?S+l+l:l;case 951:return 116===l.charCodeAt(3)?S+l+l:l;case 963:return 110===l.charCodeAt(5)?S+l+l:l;case 1009:if(100!==l.charCodeAt(4))break;case 969:case 942:return S+l+l;case 978:return S+l+A+l+l;case 1019:case 983:return S+l+A+l+M+l+l;case 883:return 45===l.charCodeAt(8)?S+l+l:l.indexOf("image-set(",11)>0?l.replace(T,"$1"+S+"$2")+l:l;case 932:if(45===l.charCodeAt(4))switch(l.charCodeAt(5)){case 103:return S+"box-"+l.replace("-grow","")+S+l+M+l.replace("grow","positive")+l;case 115:return S+l+M+l.replace("shrink","negative")+l;case 98:return S+l+M+l.replace("basis","preferred-size")+l}return S+l+M+l+l;case 964:return S+l+M+"flex-"+l+l;case 1023:if(99!==l.charCodeAt(8))break;return u=l.substring(l.indexOf(":",15)).replace("flex-","").replace("space-between","justify"),S+"box-pack"+u+S+l+M+"flex-pack"+u+l;case 1005:return i.test(l)?l.replace(o,":"+S)+l.replace(o,":"+A)+l:l;case 1e3:switch(d=(u=l.substring(13).trim()).indexOf("-")+1,u.charCodeAt(0)+u.charCodeAt(d)){case 226:u=l.replace(x,"tb");break;case 232:u=l.replace(x,"tb-rl");break;case 220:u=l.replace(x,"lr");break;default:return l}return S+l+M+u+l;case 1017:if(-1===l.indexOf("sticky",9))return l;case 975:switch(d=(l=e).length-10,f=(u=(33===l.charCodeAt(d)?l.substring(0,d):l).substring(e.indexOf(":",7)+1).trim()).charCodeAt(0)+(0|u.charCodeAt(7))){case 203:if(u.charCodeAt(8)<111)break;case 115:l=l.replace(u,S+u)+";"+l;break;case 207:case 102:l=l.replace(u,S+(f>102?"inline-":"")+"box")+";"+l.replace(u,S+u)+";"+l.replace(u,M+u+"box")+";"+l}return l+";";case 938:if(45===l.charCodeAt(5))switch(l.charCodeAt(6)){case 105:return u=l.replace("-items",""),S+l+S+"box-"+u+M+"flex-"+u+l;case 115:return S+l+M+"flex-item-"+l.replace(O,"")+l;default:return S+l+M+"flex-line-pack"+l.replace("align-content","").replace(O,"")+l}break;case 973:case 989:if(45!==l.charCodeAt(3)||122===l.charCodeAt(4))break;case 931:case 953:if(!0===E.test(e))return 115===(u=e.substring(e.indexOf(":")+1)).charCodeAt(0)?J(e.replace("stretch","fill-available"),t,n,r).replace(":fill-available",":stretch"):l.replace(u,S+u)+l.replace(u,A+u.replace("fill-",""))+l;break;case 962:if(l=S+l+(102===l.charCodeAt(5)?M+l:"")+l,n+r===211&&105===l.charCodeAt(13)&&l.indexOf("transform",10)>0)return l.substring(0,l.indexOf(";",27)+1).replace(s,"$1"+S+"$2")+l}return l}function ee(e,t){var n=e.indexOf(1===t?":":"{"),r=e.substring(0,3!==t?n:10),o=e.substring(n+1,e.length-1);return U(2!==t?r:r.replace(C,"$1"),o,t)}function te(e,t){var n=J(t,t.charCodeAt(0),t.charCodeAt(1),t.charCodeAt(2));return n!==t+";"?n.replace(w," or ($1)").substring(4):"("+t+")"}function ne(e,t,n,r,o,i,s,a,c,u){for(var d,l=0,f=t;l0&&($=o.replace(h,91===i?"":"-")),i=1,1===L?X=o:V=o;var s,a=[X];G>0&&void 0!==(s=ne(-1,n,a,a,B,D,0,0,0,0))&&"string"==typeof s&&(n=s);var c=Z(z,a,n,0,0);return G>0&&void 0!==(s=ne(-2,c,a,a,B,D,c.length,0,0,0))&&"string"!=typeof(c=s)&&(i=0),$="",X="",V="",N=0,B=1,D=1,R*i==0?c:function(e){return e.replace(r,"").replace(y,"").replace(b,"$1").replace(_,"$1").replace(v," ")}(c)}return ie.use=function e(t){switch(t){case void 0:case null:G=q.length=0;break;default:if("function"==typeof t)q[G++]=t;else if("object"==typeof t)for(var n=0,r=t.length;n docs/Setup.md","build:watch":"yarn build --watch","minify":"minify ./dist/mermaid.js > ./dist/mermaid.min.js","release":"yarn build","lint":"eslint src","e2e:depr":"yarn lint && jest e2e --config e2e/jest.config.js","cypress":"percy exec -- cypress run","e2e":"start-server-and-test dev http://localhost:9000/ cypress","e2e-upd":"yarn lint && jest e2e -u --config e2e/jest.config.js","dev":"webpack-dev-server --config webpack.config.e2e.js","test":"yarn lint && jest src/.*","test:watch":"jest --watch src","prepublishOnly":"yarn build && yarn test","prepare":"yarn build"},"repository":{"type":"git","url":"https://github.com/knsv/mermaid"},"author":"Knut Sveidqvist","license":"MIT","standard":{"ignore":["**/parser/*.js","dist/**/*.js","cypress/**/*.js"],"globals":["page"]},"dependencies":{"@braintree/sanitize-url":"^3.1.0","d3":"^5.7.0","dagre":"^0.8.4","dagre-d3":"^0.6.4","entity-decode":"^2.0.2","graphlib":"^2.1.7","he":"^1.2.0","khroma":"^1.1.0","minify":"^4.1.1","moment-mini":"^2.22.1","stylis":"^3.5.2"},"devDependencies":{"@babel/core":"^7.2.2","@babel/preset-env":"^7.8.4","@babel/register":"^7.0.0","@percy/cypress":"*","babel-core":"7.0.0-bridge.0","babel-eslint":"^10.1.0","babel-jest":"^24.9.0","babel-loader":"^8.0.4","coveralls":"^3.0.2","css-loader":"^2.0.1","css-to-string-loader":"^0.1.3","cypress":"4.0.1","documentation":"^12.0.1","eslint":"^6.3.0","eslint-config-prettier":"^6.3.0","eslint-plugin-prettier":"^3.1.0","husky":"^1.2.1","identity-obj-proxy":"^3.0.0","jest":"^24.9.0","jison":"^0.4.18","moment":"^2.23.0","node-sass":"^4.12.0","prettier":"^1.18.2","puppeteer":"^1.17.0","sass-loader":"^7.1.0","start-server-and-test":"^1.10.6","terser-webpack-plugin":"^2.2.2","webpack":"^4.41.2","webpack-bundle-analyzer":"^3.7.0","webpack-cli":"^3.1.2","webpack-dev-server":"^3.4.1","webpack-node-externals":"^1.7.2","yarn-upgrade-all":"^0.5.0"},"files":["dist"],"yarn-upgrade-all":{"ignore":["babel-core"]},"sideEffects":["**/*.css","**/*.scss"],"husky":{"hooks":{"pre-push":"yarn test"}}}')},"./src/config.js": -/*!***********************!*\ - !*** ./src/config.js ***! - \***********************/ -/*! exports provided: defaultConfig, updateCurrentConfig, setSiteConfig, setSiteConfigDelta, updateSiteConfig, getSiteConfig, setConfig, getConfig, sanitize, addDirective, reset */function(e,t,n){"use strict";n.r(t),n.d(t,"defaultConfig",(function(){return c})),n.d(t,"updateCurrentConfig",(function(){return f})),n.d(t,"setSiteConfig",(function(){return h})),n.d(t,"setSiteConfigDelta",(function(){return p})),n.d(t,"updateSiteConfig",(function(){return m})),n.d(t,"getSiteConfig",(function(){return g})),n.d(t,"setConfig",(function(){return y})),n.d(t,"getConfig",(function(){return b})),n.d(t,"sanitize",(function(){return _})),n.d(t,"addDirective",(function(){return v})),n.d(t,"reset",(function(){return j}));var r,o=n(/*! ./utils */"./src/utils.js"),i=n(/*! ./logger */"./src/logger.js"),s=n(/*! ./themes */"./src/themes/index.js"),a=n(/*! ./defaultConfig */"./src/defaultConfig.js"),c=Object.freeze(a.default),u=Object(o.assignWithDepth)({},c),d=[],l=Object(o.assignWithDepth)({},c),f=function(e,t){for(var n=Object(o.assignWithDepth)({},e),i={},a=0;a"),o.logger.info("vertexText"+a),function(e){var t,n,o=Object(r.select)(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),i=o.append("xhtml:div"),s=e.label,a=e.isNode?"nodeLabel":"edgeLabel";return i.html(''+s+""),t=i,(n=e.labelStyle)&&t.attr("style",n),i.style("display","inline-block"),i.style("white-space","nowrap"),i.attr("xmlns","http://www.w3.org/1999/xhtml"),o.node()}({isNode:s,label:a.replace(/fa[lrsb]?:fa-[\w-]+/g,(function(e){return"")})),labelStyle:t.replace("fill:","color:")});var c=document.createElementNS("http://www.w3.org/2000/svg","text");c.setAttribute("style",t.replace("color:","fill:"));var u=[];u="string"==typeof a?a.split(/\\n|\n|/gi):Array.isArray(a)?a:[];for(var d=0;d=s||i>=a},p=function(e,t,n){r.logger.warn("intersection calc o:",t," i:",n,e);var o=e.x,i=e.y,s=Math.abs(o-n.x),a=e.width/2,c=n.xMath.abs(o-t.x)*u){var g=n.y=0;v--){var j=u[v],x=o[n.fromCluster].node;if(h(x,j)||_)r.logger.trace("Outside point",j),_||b.unshift(j);else{r.logger.warn("inside",n.fromCluster,j,x);var k=p(x,y,j);b.unshift(k),_=!0}y=j}u=b,d=!0}var w,O=u.filter((function(e){return!Number.isNaN(e.y)})),C=Object(i.line)().x((function(e){return e.x})).y((function(e){return e.y})).curve(i.curveBasis);switch(n.thickness){case"normal":w="edge-thickness-normal";break;case"thick":w="edge-thickness-thick";break;default:w=""}switch(n.pattern){case"solid":w+=" edge-pattern-solid";break;case"dotted":w+=" edge-pattern-dotted";break;case"dashed":w+=" edge-pattern-dashed"}var E=e.append("path").attr("d",C(O)).attr("id",n.id).attr("class"," "+w+(n.classes?" "+n.classes:"")).attr("style",n.style),T="";switch(Object(s.getConfig)().state.arrowMarkerAbsolute&&(T=(T=(T=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search).replace(/\(/g,"\\(")).replace(/\)/g,"\\)")),r.logger.info("arrowTypeStart",n.arrowTypeStart),r.logger.info("arrowTypeEnd",n.arrowTypeEnd),n.arrowTypeStart){case"arrow_cross":E.attr("marker-start","url("+T+"#"+a+"-crossStart)");break;case"arrow_point":E.attr("marker-start","url("+T+"#"+a+"-pointStart)");break;case"arrow_barb":E.attr("marker-start","url("+T+"#"+a+"-barbStart)");break;case"arrow_circle":E.attr("marker-start","url("+T+"#"+a+"-circleStart)");break;case"aggregation":E.attr("marker-start","url("+T+"#"+a+"-aggregationStart)");break;case"extension":E.attr("marker-start","url("+T+"#"+a+"-extensionStart)");break;case"composition":E.attr("marker-start","url("+T+"#"+a+"-compositionStart)");break;case"dependency":E.attr("marker-start","url("+T+"#"+a+"-dependencyStart)")}switch(n.arrowTypeEnd){case"arrow_cross":E.attr("marker-end","url("+T+"#"+a+"-crossEnd)");break;case"arrow_point":E.attr("marker-end","url("+T+"#"+a+"-pointEnd)");break;case"arrow_barb":E.attr("marker-end","url("+T+"#"+a+"-barbEnd)");break;case"arrow_circle":E.attr("marker-end","url("+T+"#"+a+"-circleEnd)");break;case"aggregation":E.attr("marker-end","url("+T+"#"+a+"-aggregationEnd)");break;case"extension":E.attr("marker-end","url("+T+"#"+a+"-extensionEnd)");break;case"composition":E.attr("marker-end","url("+T+"#"+a+"-compositionEnd)");break;case"dependency":E.attr("marker-end","url("+T+"#"+a+"-dependencyEnd)")}var S={};return d&&(S.updatedPath=u),S.originalPath=n.points,S}},"./src/dagre-wrapper/index.js": -/*!************************************!*\ - !*** ./src/dagre-wrapper/index.js ***! - \************************************/ -/*! exports provided: render */function(e,t,n){"use strict";n.r(t),n.d(t,"render",(function(){return p}));var r=n(/*! dagre */"./node_modules/dagre/index.js"),o=n.n(r),i=n(/*! graphlib */"./node_modules/graphlib/index.js"),s=n.n(i),a=n(/*! ./markers */"./src/dagre-wrapper/markers.js"),c=n(/*! ./shapes/util */"./src/dagre-wrapper/shapes/util.js"),u=n(/*! ./mermaid-graphlib */"./src/dagre-wrapper/mermaid-graphlib.js"),d=n(/*! ./nodes */"./src/dagre-wrapper/nodes.js"),l=n(/*! ./clusters */"./src/dagre-wrapper/clusters.js"),f=n(/*! ./edges */"./src/dagre-wrapper/edges.js"),h=n(/*! ../logger */"./src/logger.js"),p=function(e,t,n,r,i){Object(a.default)(e,n,r,i),Object(d.clear)(),Object(f.clear)(),Object(l.clear)(),Object(u.clear)(),h.logger.warn("Graph at first:",s.a.json.write(t)),Object(u.adjustClustersAndEdges)(t),h.logger.warn("Graph after:",s.a.json.write(t)),function e(t,n,r,i){h.logger.info("Graph in recursive render: XXX",s.a.json.write(n),i);var a=n.graph().rankdir;h.logger.warn("Dir in recursive render - dir:",a);var p=t.insert("g").attr("class","root");n.nodes()?h.logger.info("Recursive render XXX",n.nodes()):h.logger.info("No nodes found for",n),n.edges().length>0&&h.logger.info("Recursive edges",n.edge(n.edges()[0]));var m=p.insert("g").attr("class","clusters"),g=p.insert("g").attr("class","edgePaths"),y=p.insert("g").attr("class","edgeLabels"),b=p.insert("g").attr("class","nodes");return n.nodes().forEach((function(t){var o=n.node(t);if(void 0!==i){var s=JSON.parse(JSON.stringify(i.clusterData));h.logger.info("Setting data for cluster XXX (",t,") ",s,i),n.setNode(i.id,s),n.parent(t)||(h.logger.warn("Setting parent",t,i.id),n.setParent(t,i.id,s))}if(h.logger.info("(Insert) Node XXX"+t+": "+JSON.stringify(n.node(t))),o&&o.clusterNode){h.logger.info("Cluster identified",t,o,n.node(t));var l=e(b,o.graph,r,n.node(t));Object(c.updateNodeBounds)(o,l),Object(d.setNodeElem)(l,o),h.logger.warn("Recursive render complete",l,o)}else n.children(t).length>0?(h.logger.info("Cluster - the non recursive path XXX",t,o.id,o,n),h.logger.info(Object(u.findNonClusterChild)(o.id,n)),u.clusterDb[o.id]={id:Object(u.findNonClusterChild)(o.id,n),node:o}):(h.logger.info("Node - the non recursive path",t,o.id,o),Object(d.insertNode)(b,n.node(t),a))})),n.edges().forEach((function(e){var t=n.edge(e.v,e.w,e.name);h.logger.info("Edge "+e.v+" -> "+e.w+": "+JSON.stringify(e)),h.logger.info("Edge "+e.v+" -> "+e.w+": ",e," ",JSON.stringify(n.edge(e))),h.logger.info("Fix",u.clusterDb,"ids:",e.v,e.w,"Translateing: ",u.clusterDb[e.v],u.clusterDb[e.w]),Object(f.insertEdgeLabel)(y,t)})),n.edges().forEach((function(e){h.logger.info("Edge "+e.v+" -> "+e.w+": "+JSON.stringify(e))})),h.logger.info("#############################################"),h.logger.info("### Layout ###"),h.logger.info("#############################################"),h.logger.info(n),o.a.layout(n),h.logger.info("Graph after layout:",s.a.json.write(n)),Object(u.sortNodesByHierarchy)(n).forEach((function(e){var t=n.node(e);h.logger.info("Position "+e+": "+JSON.stringify(n.node(e))),h.logger.info("Position "+e+": ("+t.x,","+t.y,") width: ",t.width," height: ",t.height),t&&t.clusterNode?Object(d.positionNode)(t):n.children(e).length>0?(Object(l.insertCluster)(m,t),u.clusterDb[t.id].node=t):Object(d.positionNode)(t)})),n.edges().forEach((function(e){var t=n.edge(e);h.logger.info("Edge "+e.v+" -> "+e.w+": "+JSON.stringify(t),t);var o=Object(f.insertEdge)(g,e,t,u.clusterDb,r,n);Object(f.positionEdgeLabel)(t,o)})),p}(e,t,r)}},"./src/dagre-wrapper/intersect/index.js": -/*!**********************************************!*\ - !*** ./src/dagre-wrapper/intersect/index.js ***! - \**********************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./intersect-node.js */"./src/dagre-wrapper/intersect/intersect-node.js"),o=n.n(r),i=n(/*! ./intersect-circle.js */"./src/dagre-wrapper/intersect/intersect-circle.js"),s=n(/*! ./intersect-ellipse.js */"./src/dagre-wrapper/intersect/intersect-ellipse.js"),a=n(/*! ./intersect-polygon.js */"./src/dagre-wrapper/intersect/intersect-polygon.js"),c=n(/*! ./intersect-rect.js */"./src/dagre-wrapper/intersect/intersect-rect.js");t.default={node:o.a,circle:i.default,ellipse:s.default,polygon:a.default,rect:c.default}},"./src/dagre-wrapper/intersect/intersect-circle.js": -/*!*********************************************************!*\ - !*** ./src/dagre-wrapper/intersect/intersect-circle.js ***! - \*********************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./intersect-ellipse */"./src/dagre-wrapper/intersect/intersect-ellipse.js");t.default=function(e,t,n){return Object(r.default)(e,t,t,n)}},"./src/dagre-wrapper/intersect/intersect-ellipse.js": -/*!**********************************************************!*\ - !*** ./src/dagre-wrapper/intersect/intersect-ellipse.js ***! - \**********************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(e,t,n,r){var o=e.x,i=e.y,s=o-r.x,a=i-r.y,c=Math.sqrt(t*t*a*a+n*n*s*s),u=Math.abs(t*n*s/c);r.x0}n.r(t),t.default=function(e,t,n,o){var i,s,a,c,u,d,l,f,h,p,m,g,y;if(i=t.y-e.y,a=e.x-t.x,u=t.x*e.y-e.x*t.y,h=i*n.x+a*n.y+u,p=i*o.x+a*o.y+u,!(0!==h&&0!==p&&r(h,p)||(s=o.y-n.y,c=n.x-o.x,d=o.x*n.y-n.x*o.y,l=s*e.x+c*e.y+d,f=s*t.x+c*t.y+d,0!==l&&0!==f&&r(l,f)||0==(m=i*c-s*a))))return g=Math.abs(m/2),{x:(y=a*d-c*u)<0?(y-g)/m:(y+g)/m,y:(y=s*u-i*d)<0?(y-g)/m:(y+g)/m}}},"./src/dagre-wrapper/intersect/intersect-node.js": -/*!*******************************************************!*\ - !*** ./src/dagre-wrapper/intersect/intersect-node.js ***! - \*******************************************************/ -/*! no static exports found */function(e,t){e.exports=function(e,t){return e.intersect(t)}},"./src/dagre-wrapper/intersect/intersect-polygon.js": -/*!**********************************************************!*\ - !*** ./src/dagre-wrapper/intersect/intersect-polygon.js ***! - \**********************************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./intersect-line */"./src/dagre-wrapper/intersect/intersect-line.js");t.default=function(e,t,n){var o=e.x,i=e.y,s=[],a=Number.POSITIVE_INFINITY,c=Number.POSITIVE_INFINITY;"function"==typeof t.forEach?t.forEach((function(e){a=Math.min(a,e.x),c=Math.min(c,e.y)})):(a=Math.min(a,t.x),c=Math.min(c,t.y));for(var u=o-e.width/2-a,d=i-e.height/2-c,l=0;l1&&s.sort((function(e,t){var r=e.x-n.x,o=e.y-n.y,i=Math.sqrt(r*r+o*o),s=t.x-n.x,a=t.y-n.y,c=Math.sqrt(s*s+a*a);return iMath.abs(s)*u?(a<0&&(u=-u),n=0===a?0:u*s/a,r=u):(s<0&&(c=-c),n=c,r=0===s?0:c*a/s),{x:o+n,y:i+r}}},"./src/dagre-wrapper/markers.js": -/*!**************************************!*\ - !*** ./src/dagre-wrapper/markers.js ***! - \**************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ../logger */"./src/logger.js"),o={extension:function(e,t,n){r.logger.trace("Making markers for ",n),e.append("defs").append("marker").attr("id",t+"-extensionStart").attr("class","marker extension "+t).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 1,7 L18,13 V 1 Z"),e.append("defs").append("marker").attr("id",t+"-extensionEnd").attr("class","marker extension "+t).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 1,1 V 13 L18,7 Z")},composition:function(e,t){e.append("defs").append("marker").attr("id",t+"-compositionStart").attr("class","marker composition "+t).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),e.append("defs").append("marker").attr("id",t+"-compositionEnd").attr("class","marker composition "+t).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},aggregation:function(e,t){e.append("defs").append("marker").attr("id",t+"-aggregationStart").attr("class","marker aggregation "+t).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z"),e.append("defs").append("marker").attr("id",t+"-aggregationEnd").attr("class","marker aggregation "+t).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L1,7 L9,1 Z")},dependency:function(e,t){e.append("defs").append("marker").attr("id",t+"-dependencyStart").attr("class","marker dependency "+t).attr("refX",0).attr("refY",7).attr("markerWidth",190).attr("markerHeight",240).attr("orient","auto").append("path").attr("d","M 5,7 L9,13 L1,7 L9,1 Z"),e.append("defs").append("marker").attr("id",t+"-dependencyEnd").attr("class","marker dependency "+t).attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},point:function(e,t){e.append("marker").attr("id",t+"-pointEnd").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),e.append("marker").attr("id",t+"-pointStart").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",0).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 5 L 10 10 L 10 0 z").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},circle:function(e,t){e.append("marker").attr("id",t+"-circleEnd").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",11).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0"),e.append("marker").attr("id",t+"-circleStart").attr("class","marker "+t).attr("viewBox","0 0 10 10").attr("refX",-1).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("circle").attr("cx","5").attr("cy","5").attr("r","5").attr("class","arrowMarkerPath").style("stroke-width",1).style("stroke-dasharray","1,0")},cross:function(e,t){e.append("marker").attr("id",t+"-crossEnd").attr("class","marker cross "+t).attr("viewBox","0 0 11 11").attr("refX",12).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0"),e.append("marker").attr("id",t+"-crossStart").attr("class","marker cross "+t).attr("viewBox","0 0 11 11").attr("refX",-1).attr("refY",5.2).attr("markerUnits","userSpaceOnUse").attr("markerWidth",11).attr("markerHeight",11).attr("orient","auto").append("path").attr("d","M 1,1 l 9,9 M 10,1 l -9,9").attr("class","arrowMarkerPath").style("stroke-width",2).style("stroke-dasharray","1,0")},barb:function(e,t){e.append("defs").append("marker").attr("id",t+"-barbEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",14).attr("markerUnits","strokeWidth").attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z")}};t.default=function(e,t,n,r){t.forEach((function(t){o[t](e,n,r)}))}},"./src/dagre-wrapper/mermaid-graphlib.js": -/*!***********************************************!*\ - !*** ./src/dagre-wrapper/mermaid-graphlib.js ***! - \***********************************************/ -/*! exports provided: clusterDb, clear, extractDecendants, validate, findNonClusterChild, adjustClustersAndEdges, extractor, sortNodesByHierarchy */function(e,t,n){"use strict";n.r(t),n.d(t,"clusterDb",(function(){return s})),n.d(t,"clear",(function(){return u})),n.d(t,"extractDecendants",(function(){return f})),n.d(t,"validate",(function(){return h})),n.d(t,"findNonClusterChild",(function(){return p})),n.d(t,"adjustClustersAndEdges",(function(){return g})),n.d(t,"extractor",(function(){return y})),n.d(t,"sortNodesByHierarchy",(function(){return b}));var r=n(/*! ../logger */"./src/logger.js"),o=n(/*! graphlib */"./node_modules/graphlib/index.js"),i=n.n(o),s={},a={},c={},u=function(){a={},c={},s={}},d=function(e,t){return r.logger.debug("In isDecendant",t," ",e," = ",a[t].indexOf(e)>=0),a[t].indexOf(e)>=0},l=function e(t,n,o,i){r.logger.warn("Copying children of ",t,"root",i,"data",n.node(t),i);var s=n.children(t)||[];t!==i&&s.push(t),r.logger.warn("Copying (nodes) clusterId",t,"nodes",s),s.forEach((function(s){if(n.children(s).length>0)e(s,n,o,i);else{var c=n.node(s);r.logger.info("cp ",s," to ",i," with parent ",t),o.setNode(s,c),i!==n.parent(s)&&(r.logger.warn("Setting parent",s,n.parent(s)),o.setParent(s,n.parent(s))),t!==i&&s!==t?(r.logger.debug("Setting parent",s,t),o.setParent(s,t)):(r.logger.info("In copy ",t,"root",i,"data",n.node(t),i),r.logger.debug("Not Setting parent for node=",s,"cluster!==rootId",t!==i,"node!==clusterId",s!==t));var u=n.edges(s);r.logger.debug("Copying Edges",u),u.forEach((function(e){r.logger.info("Edge",e);var s=n.edge(e.v,e.w,e.name);r.logger.info("Edge data",s,i);try{!function(e,t){return r.logger.info("Decendants of ",t," is ",a[t]),r.logger.info("Edge is ",e),e.v!==t&&e.w!==t&&(a[t]?(r.logger.info("Here "),a[t].indexOf(e.v)>=0||!!d(e.v,t)||!!d(e.w,t)||a[t].indexOf(e.w)>=0):(r.logger.debug("Tilt, ",t,",not in decendants"),!1))}(e,i)?r.logger.info("Skipping copy of edge ",e.v,"--\x3e",e.w," rootId: ",i," clusterId:",t):(r.logger.info("Copying as ",e.v,e.w,s,e.name),o.setEdge(e.v,e.w,s,e.name),r.logger.info("newGraph edges ",o.edges(),o.edge(o.edges()[0])))}catch(e){r.logger.error(e)}}))}r.logger.debug("Removing node",s),n.removeNode(s)}))},f=function e(t,n){for(var r=n.children(t),o=[].concat(r),i=0;i0)return r.logger.trace("The node ",t[n].v," is part of and edge even though it has children"),!1;if(e.children(t[n].w).length>0)return r.logger.trace("The node ",t[n].w," is part of and edge even though it has children"),!1}return!0},p=function e(t,n){r.logger.trace("Searching",t);var o=n.children(t);if(r.logger.trace("Searching children of id ",t,o),o.length<1)return r.logger.trace("This is a valid node",t),t;for(var i=0;i ",s),s}},m=function(e){return s[e]&&s[e].externalConnections&&s[e]?s[e].id:e},g=function(e,t){!e||t>10?r.logger.debug("Opting out, no graph "):(r.logger.debug("Opting in, graph "),e.nodes().forEach((function(t){e.children(t).length>0&&(r.logger.warn("Cluster identified",t," Replacement id in edges: ",p(t,e)),a[t]=f(t,e),s[t]={id:p(t,e),clusterData:e.node(t)})})),e.nodes().forEach((function(t){var n=e.children(t),o=e.edges();n.length>0?(r.logger.debug("Cluster identified",t,a),o.forEach((function(e){e.v!==t&&e.w!==t&&d(e.v,t)^d(e.w,t)&&(r.logger.warn("Edge: ",e," leaves cluster ",t),r.logger.warn("Decendants of XXX ",t,": ",a[t]),s[t].externalConnections=!0)}))):r.logger.debug("Not a cluster ",t,a)})),e.edges().forEach((function(t){var n=e.edge(t);r.logger.warn("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(t)),r.logger.warn("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(e.edge(t)));var o=t.v,i=t.w;r.logger.warn("Fix XXX",s,"ids:",t.v,t.w,"Translateing: ",s[t.v]," --- ",s[t.w]),(s[t.v]||s[t.w])&&(r.logger.warn("Fixing and trixing - removing XXX",t.v,t.w,t.name),o=m(t.v),i=m(t.w),e.removeEdge(t.v,t.w,t.name),o!==t.v&&(n.fromCluster=t.v),i!==t.w&&(n.toCluster=t.w),r.logger.warn("Fix Replacing with XXX",o,i,t.name),e.setEdge(o,i,n,t.name))})),r.logger.warn("Adjusted Graph",i.a.json.write(e)),y(e,0),r.logger.trace(s))},y=function e(t,n){if(r.logger.warn("extractor - ",n,i.a.json.write(t),t.children("D")),n>10)r.logger.error("Bailing out");else{for(var o=t.nodes(),a=!1,c=0;c0}if(a){r.logger.debug("Nodes = ",o,n);for(var f=0;f0){r.logger.warn("Cluster without external connections, without a parent and with children",h,n);var p=t.graph(),m=new i.a.Graph({multigraph:!0,compound:!0}).setGraph({rankdir:"TB"===p.rankdir?"LR":"TB",nodesep:50,ranksep:50,marginx:8,marginy:8}).setDefaultEdgeLabel((function(){return{}}));r.logger.warn("Old graph before copy",i.a.json.write(t)),l(h,t,m,h),t.setNode(h,{clusterNode:!0,id:h,clusterData:s[h].clusterData,labelText:s[h].labelText,graph:m}),r.logger.warn("New graph after copy node: (",h,")",i.a.json.write(m)),r.logger.debug("Old graph after copy",i.a.json.write(t))}else r.logger.warn("Cluster ** ",h," **not meeting the criteria !externalConnections:",!s[h].externalConnections," no parent: ",!t.parent(h)," children ",t.children(h)&&t.children(h).length>0,t.children("D"),n),r.logger.debug(s);else r.logger.debug("Not a cluster",h,n)}o=t.nodes(),r.logger.warn("New list of nodes",o);for(var g=0;g"),t.labelStyle,!0,!0));if(Object(s.getConfig)().flowchart.htmlLabels){var j=v.children[0],x=Object(r.select)(v);p=j.getBoundingClientRect(),x.attr("width",p.width),x.attr("height",p.height)}var k=t.padding/2;return Object(r.select)(v).attr("transform","translate( "+(p.width>_.width?0:(_.width-p.width)/2)+", "+(_.height+k+5)+")"),Object(r.select)(m).attr("transform","translate( "+(p.width<_.width?0:-(_.width-p.width)/2)+", 0)"),p=f.node().getBBox(),f.attr("transform","translate("+-p.width/2+", "+(-p.height/2-k+3)+")"),d.attr("class","outer title-state").attr("x",-p.width/2-k).attr("y",-p.height/2-k).attr("width",p.width+t.padding).attr("height",p.height+t.padding),l.attr("class","divider").attr("x1",-p.width/2-k).attr("x2",p.width/2+k).attr("y1",-p.height/2-k+_.height+k).attr("y2",-p.height/2-k+_.height+k),Object(i.updateNodeBounds)(t,d),t.intersect=function(e){return a.default.rect(t,e)},u},circle:function(e,t){var n=Object(i.labelHelper)(e,t,void 0,!0),r=n.shapeSvg,s=n.bbox,c=n.halfPadding,u=r.insert("circle",":first-child");return u.attr("rx",t.rx).attr("ry",t.ry).attr("r",s.width/2+c).attr("width",s.width+t.padding).attr("height",s.height+t.padding),o.logger.info("Circle main"),Object(i.updateNodeBounds)(t,u),t.intersect=function(e){return o.logger.info("Circle intersect",t,s.width/2+c,e),a.default.circle(t,s.width/2+c,e)},r},stadium:function(e,t){var n=Object(i.labelHelper)(e,t,void 0,!0),r=n.shapeSvg,o=n.bbox,s=o.height+t.padding,c=o.width+s/4+t.padding,u=r.insert("rect",":first-child").attr("rx",s/2).attr("ry",s/2).attr("x",-c/2).attr("y",-s/2).attr("width",c).attr("height",s);return Object(i.updateNodeBounds)(t,u),t.intersect=function(e){return a.default.rect(t,e)},r},hexagon:function(e,t){var n=Object(i.labelHelper)(e,t,void 0,!0),r=n.shapeSvg,o=n.bbox,s=o.height+t.padding,c=s/4,u=o.width+2*c+t.padding,d=[{x:c,y:0},{x:u-c,y:0},{x:u,y:-s/2},{x:u-c,y:-s},{x:c,y:-s},{x:0,y:-s/2}],l=Object(i.insertPolygonShape)(r,u,s,d);return Object(i.updateNodeBounds)(t,l),t.intersect=function(e){return a.default.polygon(t,e)},r},rect_left_inv_arrow:function(e,t){var n=Object(i.labelHelper)(e,t,void 0,!0),r=n.shapeSvg,o=n.bbox,s=o.width+t.padding,c=o.height+t.padding,u=[{x:-c/2,y:0},{x:s,y:0},{x:s,y:-c},{x:-c/2,y:-c},{x:0,y:-c/2}],d=Object(i.insertPolygonShape)(r,s,c,u);return Object(i.updateNodeBounds)(t,d),t.intersect=function(e){return a.default.polygon(t,e)},r},lean_right:function(e,t){var n=Object(i.labelHelper)(e,t,void 0,!0),r=n.shapeSvg,o=n.bbox,s=o.width+t.padding,c=o.height+t.padding,u=[{x:-2*c/6,y:0},{x:s-c/6,y:0},{x:s+2*c/6,y:-c},{x:c/6,y:-c}],d=Object(i.insertPolygonShape)(r,s,c,u);return Object(i.updateNodeBounds)(t,d),t.intersect=function(e){return a.default.polygon(t,e)},r},lean_left:function(e,t){var n=Object(i.labelHelper)(e,t,void 0,!0),r=n.shapeSvg,o=n.bbox,s=o.width+t.padding,c=o.height+t.padding,u=[{x:2*c/6,y:0},{x:s+c/6,y:0},{x:s-2*c/6,y:-c},{x:-c/6,y:-c}],d=Object(i.insertPolygonShape)(r,s,c,u);return Object(i.updateNodeBounds)(t,d),t.intersect=function(e){return a.default.polygon(t,e)},r},trapezoid:function(e,t){var n=Object(i.labelHelper)(e,t,void 0,!0),r=n.shapeSvg,o=n.bbox,s=o.width+t.padding,c=o.height+t.padding,u=[{x:-2*c/6,y:0},{x:s+2*c/6,y:0},{x:s-c/6,y:-c},{x:c/6,y:-c}],d=Object(i.insertPolygonShape)(r,s,c,u);return Object(i.updateNodeBounds)(t,d),t.intersect=function(e){return a.default.polygon(t,e)},r},inv_trapezoid:function(e,t){var n=Object(i.labelHelper)(e,t,void 0,!0),r=n.shapeSvg,o=n.bbox,s=o.width+t.padding,c=o.height+t.padding,u=[{x:c/6,y:0},{x:s-c/6,y:0},{x:s+2*c/6,y:-c},{x:-2*c/6,y:-c}],d=Object(i.insertPolygonShape)(r,s,c,u);return Object(i.updateNodeBounds)(t,d),t.intersect=function(e){return a.default.polygon(t,e)},r},rect_right_inv_arrow:function(e,t){var n=Object(i.labelHelper)(e,t,void 0,!0),r=n.shapeSvg,o=n.bbox,s=o.width+t.padding,c=o.height+t.padding,u=[{x:0,y:0},{x:s+c/2,y:0},{x:s,y:-c/2},{x:s+c/2,y:-c},{x:0,y:-c}],d=Object(i.insertPolygonShape)(r,s,c,u);return Object(i.updateNodeBounds)(t,d),t.intersect=function(e){return a.default.polygon(t,e)},r},cylinder:function(e,t){var n=Object(i.labelHelper)(e,t,void 0,!0),r=n.shapeSvg,o=n.bbox,s=o.width+t.padding,c=s/2,u=c/(2.5+s/50),d=o.height+u+t.padding,l="M 0,"+u+" a "+c+","+u+" 0,0,0 "+s+" 0 a "+c+","+u+" 0,0,0 "+-s+" 0 l 0,"+d+" a "+c+","+u+" 0,0,0 "+s+" 0 l 0,"+-d,f=r.attr("label-offset-y",u).insert("path",":first-child").attr("d",l).attr("transform","translate("+-s/2+","+-(d/2+u)+")");return Object(i.updateNodeBounds)(t,f),t.intersect=function(e){var n=a.default.rect(t,e),r=n.x-t.x;if(0!=c&&(Math.abs(r)t.height/2-u)){var o=u*u*(1-r*r/(c*c));0!=o&&(o=Math.sqrt(o)),o=u-o,e.y-t.y>0&&(o=-o),n.y+=o}return n},r},start:function(e,t){var n=e.insert("g").attr("class","node default").attr("id",t.domId||t.id),r=n.insert("circle",":first-child");return r.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),Object(i.updateNodeBounds)(t,r),t.intersect=function(e){return a.default.circle(t,7,e)},n},end:function(e,t){var n=e.insert("g").attr("class","node default").attr("id",t.domId||t.id),r=n.insert("circle",":first-child"),o=n.insert("circle",":first-child");return o.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),r.attr("class","state-end").attr("r",5).attr("width",10).attr("height",10),Object(i.updateNodeBounds)(t,o),t.intersect=function(e){return a.default.circle(t,7,e)},n},note:u.default,subroutine:function(e,t){var n=Object(i.labelHelper)(e,t,void 0,!0),r=n.shapeSvg,o=n.bbox,s=o.width+t.padding,c=o.height+t.padding,u=[{x:0,y:0},{x:s,y:0},{x:s,y:-c},{x:0,y:-c},{x:0,y:0},{x:-8,y:0},{x:s+8,y:0},{x:s+8,y:-c},{x:-8,y:-c},{x:-8,y:0}],d=Object(i.insertPolygonShape)(r,s,c,u);return Object(i.updateNodeBounds)(t,d),t.intersect=function(e){return a.default.polygon(t,e)},r},fork:l,join:l,class_box:function(e,t){var n,o=t.padding/2;n=t.classes?"node "+t.classes:"node default";var u=e.insert("g").attr("class",n).attr("id",t.domId||t.id),l=u.insert("rect",":first-child"),f=u.insert("line"),h=u.insert("line"),p=0,m=4,g=u.insert("g").attr("class","label"),y=0,b=t.classData.annotations&&t.classData.annotations[0],_=t.classData.annotations[0]?"«"+t.classData.annotations[0]+"»":"",v=g.node().appendChild(Object(c.default)(_,t.labelStyle,!0,!0)),j=v.getBBox();if(Object(s.getConfig)().flowchart.htmlLabels){var x=v.children[0],k=Object(r.select)(v);j=x.getBoundingClientRect(),k.attr("width",j.width),k.attr("height",j.height)}t.classData.annotations[0]&&(m+=j.height+4,p+=j.width);var w=t.classData.id;void 0!==t.classData.type&&""!==t.classData.type&&(w+="<"+t.classData.type+">");var O=g.node().appendChild(Object(c.default)(w,t.labelStyle,!0,!0));Object(r.select)(O).attr("class","classTitle");var C=O.getBBox();if(Object(s.getConfig)().flowchart.htmlLabels){var E=O.children[0],T=Object(r.select)(O);C=E.getBoundingClientRect(),T.attr("width",C.width),T.attr("height",C.height)}m+=C.height+4,C.width>p&&(p=C.width);var S=[];t.classData.members.forEach((function(e){var n=Object(d.parseMember)(e).displayText,o=g.node().appendChild(Object(c.default)(n,t.labelStyle,!0,!0)),i=o.getBBox();if(Object(s.getConfig)().flowchart.htmlLabels){var a=o.children[0],u=Object(r.select)(o);i=a.getBoundingClientRect(),u.attr("width",i.width),u.attr("height",i.height)}i.width>p&&(p=i.width),m+=i.height+4,S.push(o)})),m+=8;var A=[];if(t.classData.methods.forEach((function(e){var n=Object(d.parseMember)(e).displayText,o=g.node().appendChild(Object(c.default)(n,t.labelStyle,!0,!0)),i=o.getBBox();if(Object(s.getConfig)().flowchart.htmlLabels){var a=o.children[0],u=Object(r.select)(o);i=a.getBoundingClientRect(),u.attr("width",i.width),u.attr("height",i.height)}i.width>p&&(p=i.width),m+=i.height+4,A.push(o)})),m+=8,b){var M=(p-j.width)/2;Object(r.select)(v).attr("transform","translate( "+(-1*p/2+M)+", "+-1*m/2+")"),y=j.height+4}var D=(p-C.width)/2;return Object(r.select)(O).attr("transform","translate( "+(-1*p/2+D)+", "+(-1*m/2+y)+")"),y+=C.height+4,f.attr("class","divider").attr("x1",-p/2-o).attr("x2",p/2+o).attr("y1",-m/2-o+8+y).attr("y2",-m/2-o+8+y),y+=8,S.forEach((function(e){Object(r.select)(e).attr("transform","translate( "+-p/2+", "+(-1*m/2+y+4)+")"),y+=C.height+4})),y+=8,h.attr("class","divider").attr("x1",-p/2-o).attr("x2",p/2+o).attr("y1",-m/2-o+8+y).attr("y2",-m/2-o+8+y),y+=8,A.forEach((function(e){Object(r.select)(e).attr("transform","translate( "+-p/2+", "+(-1*m/2+y)+")"),y+=C.height+4})),l.attr("class","outer title-state").attr("x",-p/2-o).attr("y",-m/2-o).attr("width",p+t.padding).attr("height",m+t.padding),Object(i.updateNodeBounds)(t,l),t.intersect=function(e){return a.default.rect(t,e)},u}},h={},p=function(e,t,n){var r,o;t.link?(r=e.insert("svg:a").attr("xlink:href",t.link).attr("target",t.linkTarget||"_blank"),o=f[t.shape](r,t,n)):r=o=f[t.shape](e,t,n),t.tooltip&&o.attr("title",t.tooltip),t.class&&o.attr("class","node default "+t.class),h[t.id]=r,t.haveCallback&&h[t.id].attr("class",h[t.id].attr("class")+" clickable")},m=function(e,t){h[t.id]=e},g=function(){h={}},y=function(e){var t=h[e.id];o.logger.trace("Transforming node",e,"translate("+(e.x-e.width/2-5)+", "+(e.y-e.height/2-5)+")"),e.clusterNode?t.attr("transform","translate("+(e.x-e.width/2-8)+", "+(e.y-e.height/2-8)+")"):t.attr("transform","translate("+e.x+", "+e.y+")")}},"./src/dagre-wrapper/shapes/note.js": -/*!******************************************!*\ - !*** ./src/dagre-wrapper/shapes/note.js ***! - \******************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./util */"./src/dagre-wrapper/shapes/util.js"),o=n(/*! ../../logger */"./src/logger.js"),i=n(/*! ../intersect/index.js */"./src/dagre-wrapper/intersect/index.js");t.default=function(e,t){var n=Object(r.labelHelper)(e,t,"node "+t.classes,!0),s=n.shapeSvg,a=n.bbox,c=n.halfPadding;o.logger.info("Classes = ",t.classes);var u=s.insert("rect",":first-child");return u.attr("rx",t.rx).attr("ry",t.ry).attr("x",-a.width/2-c).attr("y",-a.height/2-c).attr("width",a.width+t.padding).attr("height",a.height+t.padding),Object(r.updateNodeBounds)(t,u),t.intersect=function(e){return i.default.rect(t,e)},s}},"./src/dagre-wrapper/shapes/util.js": -/*!******************************************!*\ - !*** ./src/dagre-wrapper/shapes/util.js ***! - \******************************************/ -/*! exports provided: labelHelper, updateNodeBounds, insertPolygonShape */function(e,t,n){"use strict";n.r(t),n.d(t,"labelHelper",(function(){return s})),n.d(t,"updateNodeBounds",(function(){return a})),n.d(t,"insertPolygonShape",(function(){return c}));var r=n(/*! ../createLabel */"./src/dagre-wrapper/createLabel.js"),o=n(/*! ../../config */"./src/config.js"),i=n(/*! d3 */"./node_modules/d3/index.js"),s=function(e,t,n,s){var a;a=n||"node default";var c=e.insert("g").attr("class",a).attr("id",t.domId||t.id),u=c.insert("g").attr("class","label").attr("style",t.labelStyle),d=u.node().appendChild(Object(r.default)(t.labelText,t.labelStyle,!1,s)),l=d.getBBox();if(Object(o.getConfig)().flowchart.htmlLabels){var f=d.children[0],h=Object(i.select)(d);l=f.getBoundingClientRect(),h.attr("width",l.width),h.attr("height",l.height)}var p=t.padding/2;return u.attr("transform","translate("+-l.width/2+", "+-l.height/2+")"),{shapeSvg:c,bbox:l,halfPadding:p,label:u}},a=function(e,t){var n=t.node().getBBox();e.width=n.width,e.height=n.height};function c(e,t,n,r){return e.insert("polygon",":first-child").attr("points",r.map((function(e){return e.x+","+e.y})).join(" ")).attr("class","label-container").attr("transform","translate("+-t/2+","+n/2+")")}},"./src/defaultConfig.js": -/*!******************************!*\ - !*** ./src/defaultConfig.js ***! - \******************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r={theme:"default",themeVariables:n(/*! ./themes */"./src/themes/index.js").default.default.getThemeVariables(),themeCSS:void 0,maxTextSize:5e4,fontFamily:'"trebuchet ms", verdana, arial, sans-serif;',logLevel:5,securityLevel:"strict",startOnLoad:!0,arrowMarkerAbsolute:!1,secure:["secure","securityLevel","startOnLoad","maxTextSize"],deterministicIds:!1,deterministicIDSeed:void 0,flowchart:{diagramPadding:8,htmlLabels:!0,nodeSpacing:50,rankSpacing:50,curve:"linear",padding:15,useMaxWidth:!0},sequence:{activationWidth:10,diagramMarginX:50,diagramMarginY:10,actorMargin:50,width:150,height:65,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",mirrorActors:!0,bottomMarginAdj:1,useMaxWidth:!0,rightAngles:!1,showSequenceNumbers:!1,actorFontSize:14,actorFontFamily:'"Open-Sans", "sans-serif"',actorFontWeight:400,noteFontSize:14,noteFontFamily:'"trebuchet ms", verdana, arial, sans-serif',noteFontWeight:400,noteAlign:"center",messageFontSize:16,messageFontFamily:'"trebuchet ms", verdana, arial, sans-serif',messageFontWeight:400,wrap:!1,wrapPadding:10,labelBoxWidth:50,labelBoxHeight:20,messageFont:function(){return{fontFamily:this.messageFontFamily,fontSize:this.messageFontSize,fontWeight:this.messageFontWeight}},noteFont:function(){return{fontFamily:this.noteFontFamily,fontSize:this.noteFontSize,fontWeight:this.noteFontWeight}},actorFont:function(){return{fontFamily:this.actorFontFamily,fontSize:this.actorFontSize,fontWeight:this.actorFontWeight}}},gantt:{titleTopMargin:25,barHeight:20,barGap:4,topPadding:50,leftPadding:75,gridLineStartPadding:35,fontSize:11,fontFamily:'"Open-Sans", "sans-serif"',numberSectionStyles:4,axisFormat:"%Y-%m-%d",useMaxWidth:!0,useWidth:void 0},journey:{diagramMarginX:50,diagramMarginY:10,actorMargin:50,width:150,height:65,boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,useMaxWidth:!0,rightAngles:!1},class:{arrowMarkerAbsolute:!1,useMaxWidth:!0},git:{arrowMarkerAbsolute:!1,useWidth:void 0,useMaxWidth:!0},state:{dividerMargin:10,sizeUnit:5,padding:8,textHeight:10,titleShift:-15,noteMargin:10,forkWidth:70,forkHeight:7,miniPadding:2,fontSizeFactor:5.02,fontSize:24,labelHeight:16,edgeLengthFactor:"20",compositTitleSize:35,radius:5,useMaxWidth:!0},er:{diagramPadding:20,layoutDirection:"TB",minEntityWidth:100,minEntityHeight:75,entityPadding:15,stroke:"gray",fill:"honeydew",fontSize:12,useMaxWidth:!0},pie:{useWidth:void 0,useMaxWidth:!0}};r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute,r.git.arrowMarkerAbsolute=r.arrowMarkerAbsolute,t.default=r},"./src/diagrams/class/classDb.js": -/*!***************************************!*\ - !*** ./src/diagrams/class/classDb.js ***! - \***************************************/ -/*! exports provided: parseDirective, addClass, lookUpDomId, clear, getClass, getClasses, getRelations, addRelation, addAnnotation, addMember, addMembers, cleanupLabel, setCssClass, setLink, setClickEvent, bindFunctions, lineType, relationType, default */function(e,t,n){"use strict";n.r(t),n.d(t,"parseDirective",(function(){return p})),n.d(t,"addClass",(function(){return g})),n.d(t,"lookUpDomId",(function(){return y})),n.d(t,"clear",(function(){return b})),n.d(t,"getClass",(function(){return _})),n.d(t,"getClasses",(function(){return v})),n.d(t,"getRelations",(function(){return j})),n.d(t,"addRelation",(function(){return x})),n.d(t,"addAnnotation",(function(){return k})),n.d(t,"addMember",(function(){return w})),n.d(t,"addMembers",(function(){return O})),n.d(t,"cleanupLabel",(function(){return C})),n.d(t,"setCssClass",(function(){return E})),n.d(t,"setLink",(function(){return T})),n.d(t,"setClickEvent",(function(){return S})),n.d(t,"bindFunctions",(function(){return M})),n.d(t,"lineType",(function(){return D})),n.d(t,"relationType",(function(){return B}));var r=n(/*! d3 */"./node_modules/d3/index.js"),o=n(/*! ../../logger */"./src/logger.js"),i=n(/*! ../../config */"./src/config.js"),s=n(/*! ../common/common */"./src/diagrams/common/common.js"),a=n(/*! ../../utils */"./src/utils.js"),c=n(/*! ../../mermaidAPI */"./src/mermaidAPI.js");function u(e){return function(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);t0){var r=e.split("~");n=r[0],t=r[1]}return{className:n,type:t}},g=function(e){var t=m(e);void 0===l[t.className]&&(l[t.className]={id:t.className,type:t.type,cssClasses:[],methods:[],members:[],annotations:[],domId:"classid-"+t.className+"-"+f},f++)},y=function(e){for(var t=Object.keys(l),n=0;n>")?r.annotations.push(o.substring(2,o.length-2)):o.indexOf(")")>0?r.methods.push(o):o&&r.members.push(o)}},O=function(e,t){Array.isArray(t)&&(t.reverse(),t.forEach((function(t){return w(e,t)})))},C=function(e){return":"===e.substring(0,1)?e.substr(1).trim():e.trim()},E=function(e,t){e.split(",").forEach((function(e){var n=e;e[0].match(/\d/)&&(n="classid-"+n),void 0!==l[n]&&l[n].cssClasses.push(t)}))},T=function(e,t,n){var r=i.getConfig();e.split(",").forEach((function(e){var o=e;e[0].match(/\d/)&&(o="classid-"+o),void 0!==l[o]&&(l[o].link=a.default.formatUrl(t,r),l[o].linkTarget="string"==typeof n?n:"_blank")})),E(e,"clickable")},S=function(e,t,n){e.split(",").forEach((function(e){A(e,t,n),l[e].haveCallback=!0})),E(e,"clickable")},A=function(e,t,n){var r=i.getConfig(),o=e,s=y(o);if("loose"===r.securityLevel&&void 0!==t&&void 0!==l[o]){var c=[];if("string"==typeof n){c=n.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(var d=0;d0&&(o=o+" "+r.cssClasses.join(" "));var i={labelStyle:""},s=void 0!==r.text?r.text:r.id,a="";switch(r.type){case"class":a="class_box";break;default:a="class_box"}t.setNode(r.id,{labelStyle:i.labelStyle,shape:a,labelText:s,classData:r,rx:0,ry:0,class:o,style:i.style,id:r.id,domId:r.domId,haveCallback:r.haveCallback,link:r.link,width:"group"===r.type?500:void 0,type:r.type,padding:Object(f.getConfig)().flowchart.padding}),c.logger.info("setNode",{labelStyle:i.labelStyle,shape:a,labelText:s,rx:0,ry:0,class:o,style:i.style,id:r.id,width:"group"===r.type?500:void 0,type:r.type,padding:Object(f.getConfig)().flowchart.padding})}))},_=function(e,t){var n=0;e.forEach((function(o){n++;var i={classes:"relation"};i.pattern=1==o.relation.lineType?"dashed":"solid",i.id="id"+n,"arrow_open"===o.type?i.arrowhead="none":i.arrowhead="normal",c.logger.info(i,o),i.startLabelRight="none"===o.relationTitle1?"":o.relationTitle1,i.endLabelLeft="none"===o.relationTitle2?"":o.relationTitle2,i.arrowTypeStart=w(o.relation.type1),i.arrowTypeEnd=w(o.relation.type2);var s="",a="";if(void 0!==o.style){var u=Object(p.getStylesFromArray)(o.style);s=u.style,a=u.labelStyle}else s="fill:none";i.style=s,i.labelStyle=a,void 0!==o.interpolate?i.curve=Object(p.interpolateToCurve)(o.interpolate,r.curveLinear):void 0!==e.defaultInterpolate?i.curve=Object(p.interpolateToCurve)(e.defaultInterpolate,r.curveLinear):i.curve=Object(p.interpolateToCurve)(y.curve,r.curveLinear),o.text=o.title,void 0===o.text?void 0!==o.style&&(i.arrowheadStyle="fill: #333"):(i.arrowheadStyle="fill: #333",i.labelpos="c",Object(f.getConfig)().flowchart.htmlLabels,i.labelType="text",i.label=o.text.replace(m.default.lineBreakRegex,"\n"),void 0===o.style&&(i.style=i.style||"stroke: #333; stroke-width: 1.5px;fill:none"),i.labelStyle=i.labelStyle.replace("color:","fill:")),t.setEdge(o.id1,o.id2,i,n)}))},v=function(e){for(var t=Object.keys(g),n=0;n "+e.w+": "+JSON.stringify(o.edge(e))),l.default.drawEdge(n,o.edge(e),o.edge(e).relation,y))}));var j=n.node().getBBox(),x=j.width+40,k=j.height+40;Object(p.configureSvgSize)(n,k,x,y.useMaxWidth);var w="".concat(j.x-20," ").concat(j.y-20," ").concat(x," ").concat(k);c.logger.debug("viewBox ".concat(w)),n.attr("viewBox",w)},k=function(e,t){c.logger.info("Drawing class"),u.default.clear(),d.parser.parse(e);var n=Object(f.getConfig)().flowchart;c.logger.info("config:",n);var o=n.nodeSpacing||50,i=n.rankSpacing||50,s=new a.a.Graph({multigraph:!0,compound:!0}).setGraph({rankdir:"TD",nodesep:o,ranksep:i,marginx:8,marginy:8}).setDefaultEdgeLabel((function(){return{}})),l=u.default.getClasses(),m=u.default.getRelations();c.logger.info(m),b(l,s,t),_(m,s);var g=Object(r.select)('[id="'.concat(t,'"]'));g.attr("xmlns:xlink","http://www.w3.org/1999/xlink");var y=Object(r.select)("#"+t+" g");Object(h.render)(y,s,["aggregation","extension","composition","dependency"],"classDiagram",t);var v=g.node().getBBox(),j=v.width+16,x=v.height+16;if(c.logger.debug("new ViewBox 0 0 ".concat(j," ").concat(x),"translate(".concat(8-s._label.marginx,", ").concat(8-s._label.marginy,")")),Object(p.configureSvgSize)(g,x,j,n.useMaxWidth),g.attr("viewBox","0 0 ".concat(j," ").concat(x)),g.select("g").attr("transform","translate(".concat(8-s._label.marginx,", ").concat(8-v.y,")")),!n.htmlLabels)for(var k=document.querySelectorAll('[id="'+t+'"] .edgeLabel .label'),w=0;w "+e.w+": "+JSON.stringify(s.edge(e))),l.default.drawEdge(o,s.edge(e),s.edge(e).relation,p))}));var j=o.node().getBBox(),x=j.width+40,k=j.height+40;Object(f.configureSvgSize)(o,k,x,p.useMaxWidth);var w="".concat(j.x-20," ").concat(j.y-20," ").concat(x," ").concat(k);c.logger.debug("viewBox ".concat(w)),o.attr("viewBox",w)};t.default={setConf:g,draw:y}},"./src/diagrams/class/parser/classDiagram.jison": -/*!******************************************************!*\ - !*** ./src/diagrams/class/parser/classDiagram.jison ***! - \******************************************************/ -/*! no static exports found */function(e,t,n){(function(e,r){var o=function(){var e=function(e,t,n,r){for(n=n||{},r=e.length;r--;n[e[r]]=t);return n},t=[1,7],n=[1,6],r=[1,14],o=[1,25],i=[1,28],s=[1,26],a=[1,27],c=[1,29],u=[1,30],d=[1,31],l=[1,32],f=[1,34],h=[1,35],p=[1,36],m=[10,19],g=[1,48],y=[1,49],b=[1,50],_=[1,51],v=[1,52],j=[1,53],x=[10,19,25,32,33,41,44,45,46,47,48,49,54,56],k=[10,19,23,25,32,33,37,41,44,45,46,47,48,49,54,56,71,72,73],w=[10,13,17,19],O=[41,71,72,73],C=[41,48,49,71,72,73],E=[41,44,45,46,47,71,72,73],T=[10,19,25],S=[1,85],A={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,directive:5,graphConfig:6,openDirective:7,typeDirective:8,closeDirective:9,NEWLINE:10,":":11,argDirective:12,open_directive:13,type_directive:14,arg_directive:15,close_directive:16,CLASS_DIAGRAM:17,statements:18,EOF:19,statement:20,className:21,alphaNumToken:22,GENERICTYPE:23,relationStatement:24,LABEL:25,classStatement:26,methodStatement:27,annotationStatement:28,clickStatement:29,cssClassStatement:30,CLASS:31,STYLE_SEPARATOR:32,STRUCT_START:33,members:34,STRUCT_STOP:35,ANNOTATION_START:36,ANNOTATION_END:37,MEMBER:38,SEPARATOR:39,relation:40,STR:41,relationType:42,lineType:43,AGGREGATION:44,EXTENSION:45,COMPOSITION:46,DEPENDENCY:47,LINE:48,DOTTED_LINE:49,CALLBACK:50,LINK:51,LINK_TARGET:52,CLICK:53,CALLBACK_NAME:54,CALLBACK_ARGS:55,HREF:56,CSSCLASS:57,commentToken:58,textToken:59,graphCodeTokens:60,textNoTagsToken:61,TAGSTART:62,TAGEND:63,"==":64,"--":65,PCT:66,DEFAULT:67,SPACE:68,MINUS:69,keywords:70,UNICODE_TEXT:71,NUM:72,ALPHA:73,$accept:0,$end:1},terminals_:{2:"error",10:"NEWLINE",11:":",13:"open_directive",14:"type_directive",15:"arg_directive",16:"close_directive",17:"CLASS_DIAGRAM",19:"EOF",23:"GENERICTYPE",25:"LABEL",31:"CLASS",32:"STYLE_SEPARATOR",33:"STRUCT_START",35:"STRUCT_STOP",36:"ANNOTATION_START",37:"ANNOTATION_END",38:"MEMBER",39:"SEPARATOR",41:"STR",44:"AGGREGATION",45:"EXTENSION",46:"COMPOSITION",47:"DEPENDENCY",48:"LINE",49:"DOTTED_LINE",50:"CALLBACK",51:"LINK",52:"LINK_TARGET",53:"CLICK",54:"CALLBACK_NAME",55:"CALLBACK_ARGS",56:"HREF",57:"CSSCLASS",60:"graphCodeTokens",62:"TAGSTART",63:"TAGEND",64:"==",65:"--",66:"PCT",67:"DEFAULT",68:"SPACE",69:"MINUS",70:"keywords",71:"UNICODE_TEXT",72:"NUM",73:"ALPHA"},productions_:[0,[3,1],[3,2],[4,1],[5,4],[5,6],[7,1],[8,1],[12,1],[9,1],[6,4],[18,1],[18,2],[18,3],[21,1],[21,2],[21,3],[21,2],[20,1],[20,2],[20,1],[20,1],[20,1],[20,1],[20,1],[20,1],[26,2],[26,4],[26,5],[26,7],[28,4],[34,1],[34,2],[27,1],[27,2],[27,1],[27,1],[24,3],[24,4],[24,4],[24,5],[40,3],[40,2],[40,2],[40,1],[42,1],[42,1],[42,1],[42,1],[43,1],[43,1],[29,3],[29,4],[29,3],[29,4],[29,4],[29,5],[29,3],[29,4],[29,4],[29,5],[29,3],[29,4],[29,4],[29,5],[30,3],[58,1],[58,1],[59,1],[59,1],[59,1],[59,1],[59,1],[59,1],[59,1],[61,1],[61,1],[61,1],[61,1],[22,1],[22,1],[22,1]],performAction:function(e,t,n,r,o,i,s){var a=i.length-1;switch(o){case 6:r.parseDirective("%%{","open_directive");break;case 7:r.parseDirective(i[a],"type_directive");break;case 8:i[a]=i[a].trim().replace(/'/g,'"'),r.parseDirective(i[a],"arg_directive");break;case 9:r.parseDirective("}%%","close_directive","class");break;case 14:this.$=i[a];break;case 15:this.$=i[a-1]+i[a];break;case 16:this.$=i[a-2]+"~"+i[a-1]+i[a];break;case 17:this.$=i[a-1]+"~"+i[a];break;case 18:r.addRelation(i[a]);break;case 19:i[a-1].title=r.cleanupLabel(i[a]),r.addRelation(i[a-1]);break;case 26:r.addClass(i[a]);break;case 27:r.addClass(i[a-2]),r.setCssClass(i[a-2],i[a]);break;case 28:r.addClass(i[a-3]),r.addMembers(i[a-3],i[a-1]);break;case 29:r.addClass(i[a-5]),r.setCssClass(i[a-5],i[a-3]),r.addMembers(i[a-5],i[a-1]);break;case 30:r.addAnnotation(i[a],i[a-2]);break;case 31:this.$=[i[a]];break;case 32:i[a].push(i[a-1]),this.$=i[a];break;case 33:break;case 34:r.addMember(i[a-1],r.cleanupLabel(i[a]));break;case 35:case 36:break;case 37:this.$={id1:i[a-2],id2:i[a],relation:i[a-1],relationTitle1:"none",relationTitle2:"none"};break;case 38:this.$={id1:i[a-3],id2:i[a],relation:i[a-1],relationTitle1:i[a-2],relationTitle2:"none"};break;case 39:this.$={id1:i[a-3],id2:i[a],relation:i[a-2],relationTitle1:"none",relationTitle2:i[a-1]};break;case 40:this.$={id1:i[a-4],id2:i[a],relation:i[a-2],relationTitle1:i[a-3],relationTitle2:i[a-1]};break;case 41:this.$={type1:i[a-2],type2:i[a],lineType:i[a-1]};break;case 42:this.$={type1:"none",type2:i[a],lineType:i[a-1]};break;case 43:this.$={type1:i[a-1],type2:"none",lineType:i[a]};break;case 44:this.$={type1:"none",type2:"none",lineType:i[a]};break;case 45:this.$=r.relationType.AGGREGATION;break;case 46:this.$=r.relationType.EXTENSION;break;case 47:this.$=r.relationType.COMPOSITION;break;case 48:this.$=r.relationType.DEPENDENCY;break;case 49:this.$=r.lineType.LINE;break;case 50:this.$=r.lineType.DOTTED_LINE;break;case 51:case 57:this.$=i[a-2],r.setClickEvent(i[a-1],i[a]);break;case 52:case 58:this.$=i[a-3],r.setClickEvent(i[a-2],i[a-1]),r.setTooltip(i[a-2],i[a]);break;case 53:case 61:this.$=i[a-2],r.setLink(i[a-1],i[a]);break;case 54:this.$=i[a-3],r.setLink(i[a-2],i[a-1],i[a]);break;case 55:case 63:this.$=i[a-3],r.setLink(i[a-2],i[a-1]),r.setTooltip(i[a-2],i[a]);break;case 56:case 64:this.$=i[a-4],r.setLink(i[a-3],i[a-2],i[a]),r.setTooltip(i[a-3],i[a-1]);break;case 59:this.$=i[a-3],r.setClickEvent(i[a-2],i[a-1],i[a]);break;case 60:this.$=i[a-4],r.setClickEvent(i[a-3],i[a-2],i[a-1]),r.setTooltip(i[a-3],i[a]);break;case 62:this.$=i[a-3],r.setLink(i[a-2],i[a-1],i[a]);break;case 65:r.setCssClass(i[a-1],i[a])}},table:[{3:1,4:2,5:3,6:4,7:5,13:t,17:n},{1:[3]},{1:[2,1]},{3:8,4:2,5:3,6:4,7:5,13:t,17:n},{1:[2,3]},{8:9,14:[1,10]},{10:[1,11]},{14:[2,6]},{1:[2,2]},{9:12,11:[1,13],16:r},e([11,16],[2,7]),{5:23,7:5,13:t,18:15,20:16,21:24,22:33,24:17,26:18,27:19,28:20,29:21,30:22,31:o,36:i,38:s,39:a,50:c,51:u,53:d,57:l,71:f,72:h,73:p},{10:[1,37]},{12:38,15:[1,39]},{10:[2,9]},{19:[1,40]},{10:[1,41],19:[2,11]},e(m,[2,18],{25:[1,42]}),e(m,[2,20]),e(m,[2,21]),e(m,[2,22]),e(m,[2,23]),e(m,[2,24]),e(m,[2,25]),e(m,[2,33],{40:43,42:46,43:47,25:[1,45],41:[1,44],44:g,45:y,46:b,47:_,48:v,49:j}),{21:54,22:33,71:f,72:h,73:p},e(m,[2,35]),e(m,[2,36]),{22:55,71:f,72:h,73:p},{21:56,22:33,71:f,72:h,73:p},{21:57,22:33,71:f,72:h,73:p},{21:58,22:33,71:f,72:h,73:p},{41:[1,59]},e(x,[2,14],{22:33,21:60,23:[1,61],71:f,72:h,73:p}),e(k,[2,79]),e(k,[2,80]),e(k,[2,81]),e(w,[2,4]),{9:62,16:r},{16:[2,8]},{1:[2,10]},{5:23,7:5,13:t,18:63,19:[2,12],20:16,21:24,22:33,24:17,26:18,27:19,28:20,29:21,30:22,31:o,36:i,38:s,39:a,50:c,51:u,53:d,57:l,71:f,72:h,73:p},e(m,[2,19]),{21:64,22:33,41:[1,65],71:f,72:h,73:p},{40:66,42:46,43:47,44:g,45:y,46:b,47:_,48:v,49:j},e(m,[2,34]),{43:67,48:v,49:j},e(O,[2,44],{42:68,44:g,45:y,46:b,47:_}),e(C,[2,45]),e(C,[2,46]),e(C,[2,47]),e(C,[2,48]),e(E,[2,49]),e(E,[2,50]),e(m,[2,26],{32:[1,69],33:[1,70]}),{37:[1,71]},{41:[1,72]},{41:[1,73]},{54:[1,74],56:[1,75]},{22:76,71:f,72:h,73:p},e(x,[2,15]),e(x,[2,17],{22:33,21:77,71:f,72:h,73:p}),{10:[1,78]},{19:[2,13]},e(T,[2,37]),{21:79,22:33,71:f,72:h,73:p},{21:80,22:33,41:[1,81],71:f,72:h,73:p},e(O,[2,43],{42:82,44:g,45:y,46:b,47:_}),e(O,[2,42]),{22:83,71:f,72:h,73:p},{34:84,38:S},{21:86,22:33,71:f,72:h,73:p},e(m,[2,51],{41:[1,87]}),e(m,[2,53],{41:[1,89],52:[1,88]}),e(m,[2,57],{41:[1,90],55:[1,91]}),e(m,[2,61],{41:[1,93],52:[1,92]}),e(m,[2,65]),e(x,[2,16]),e(w,[2,5]),e(T,[2,39]),e(T,[2,38]),{21:94,22:33,71:f,72:h,73:p},e(O,[2,41]),e(m,[2,27],{33:[1,95]}),{35:[1,96]},{34:97,35:[2,31],38:S},e(m,[2,30]),e(m,[2,52]),e(m,[2,54]),e(m,[2,55],{52:[1,98]}),e(m,[2,58]),e(m,[2,59],{41:[1,99]}),e(m,[2,62]),e(m,[2,63],{52:[1,100]}),e(T,[2,40]),{34:101,38:S},e(m,[2,28]),{35:[2,32]},e(m,[2,56]),e(m,[2,60]),e(m,[2,64]),{35:[1,102]},e(m,[2,29])],defaultActions:{2:[2,1],4:[2,3],7:[2,6],8:[2,2],14:[2,9],39:[2,8],40:[2,10],63:[2,13],97:[2,32]},parseError:function(e,t){if(!t.recoverable){var n=new Error(e);throw n.hash=t,n}this.trace(e)},parse:function(e){var t=this,n=[0],r=[],o=[null],i=[],s=this.table,a="",c=0,u=0,d=0,l=2,f=1,h=i.slice.call(arguments,1),p=Object.create(this.lexer),m={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(m.yy[g]=this.yy[g]);p.setInput(e,m.yy),m.yy.lexer=p,m.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var y=p.yylloc;i.push(y);var b=p.options&&p.options.ranges;function _(){var e;return"number"!=typeof(e=r.pop()||p.lex()||f)&&(e instanceof Array&&(e=(r=e).pop()),e=t.symbols_[e]||e),e}"function"==typeof m.yy.parseError?this.parseError=m.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var v,j,x,k,w,O,C,E,T,S={};;){if(x=n[n.length-1],this.defaultActions[x]?k=this.defaultActions[x]:(null==v&&(v=_()),k=s[x]&&s[x][v]),void 0===k||!k.length||!k[0]){var A="";for(O in T=[],s[x])this.terminals_[O]&&O>l&&T.push("'"+this.terminals_[O]+"'");A=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+T.join(", ")+", got '"+(this.terminals_[v]||v)+"'":"Parse error on line "+(c+1)+": Unexpected "+(v==f?"end of input":"'"+(this.terminals_[v]||v)+"'"),this.parseError(A,{text:p.match,token:this.terminals_[v]||v,line:p.yylineno,loc:y,expected:T})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+x+", token: "+v);switch(k[0]){case 1:n.push(v),o.push(p.yytext),i.push(p.yylloc),n.push(k[1]),v=null,j?(v=j,j=null):(u=p.yyleng,a=p.yytext,c=p.yylineno,y=p.yylloc,d>0&&d--);break;case 2:if(C=this.productions_[k[1]][1],S.$=o[o.length-C],S._$={first_line:i[i.length-(C||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(C||1)].first_column,last_column:i[i.length-1].last_column},b&&(S._$.range=[i[i.length-(C||1)].range[0],i[i.length-1].range[1]]),void 0!==(w=this.performAction.apply(S,[a,u,c,m.yy,k[1],o,i].concat(h))))return w;C&&(n=n.slice(0,-1*C*2),o=o.slice(0,-1*C),i=i.slice(0,-1*C)),n.push(this.productions_[k[1]][0]),o.push(S.$),i.push(S._$),E=s[n[n.length-2]][n[n.length-1]],n.push(E);break;case 3:return!0}}return!0}},M={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,n=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var o=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[o[0],o[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var n,r,o;if(this.options.backtrack_lexer&&(o={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(o.yylloc.range=this.yylloc.range.slice(0))),(r=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],n=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var i in o)this[i]=o[i];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var o=this._currentRules(),i=0;it[0].length)){if(t=n,r=i,this.options.backtrack_lexer){if(!1!==(e=this.test_match(n,o[i])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,o[r]))&&e:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return e||this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(e){return(e=this.conditionStack.length-1-Math.abs(e||0))>=0?this.conditionStack[e]:"INITIAL"},pushState:function(e){this.begin(e)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(e,t,n,r){switch(n){case 0:return this.begin("open_directive"),13;case 1:return this.begin("type_directive"),14;case 2:return this.popState(),this.begin("arg_directive"),11;case 3:return this.popState(),this.popState(),16;case 4:return 15;case 5:case 6:break;case 7:return 10;case 8:break;case 9:case 10:return 17;case 11:return this.begin("struct"),33;case 12:return"EOF_IN_STRUCT";case 13:return"OPEN_IN_STRUCT";case 14:return this.popState(),35;case 15:break;case 16:return"MEMBER";case 17:return 31;case 18:return 57;case 19:return 50;case 20:return 51;case 21:return 53;case 22:return 36;case 23:return 37;case 24:this.begin("generic");break;case 25:this.popState();break;case 26:return"GENERICTYPE";case 27:this.begin("string");break;case 28:this.popState();break;case 29:return"STR";case 30:this.begin("href");break;case 31:this.popState();break;case 32:return 56;case 33:this.begin("callback_name");break;case 34:this.popState();break;case 35:this.popState(),this.begin("callback_args");break;case 36:return 54;case 37:this.popState();break;case 38:return 55;case 39:case 40:case 41:case 42:return 52;case 43:case 44:return 45;case 45:case 46:return 47;case 47:return 46;case 48:return 44;case 49:return 48;case 50:return 49;case 51:return 25;case 52:return 32;case 53:return 69;case 54:return"DOT";case 55:return"PLUS";case 56:return 66;case 57:case 58:return"EQUALS";case 59:return 73;case 60:return"PUNCTUATION";case 61:return 72;case 62:return 71;case 63:return 68;case 64:return 19}},rules:[/^(?:%%\{)/,/^(?:((?:(?!\}%%)[^:.])*))/,/^(?::)/,/^(?:\}%%)/,/^(?:((?:(?!\}%%).|\n)*))/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:(\r?\n)+)/,/^(?:\s+)/,/^(?:classDiagram-v2\b)/,/^(?:classDiagram\b)/,/^(?:[{])/,/^(?:$)/,/^(?:[{])/,/^(?:[}])/,/^(?:[\n])/,/^(?:[^{}\n]*)/,/^(?:class\b)/,/^(?:cssClass\b)/,/^(?:callback\b)/,/^(?:link\b)/,/^(?:click\b)/,/^(?:<<)/,/^(?:>>)/,/^(?:[~])/,/^(?:[~])/,/^(?:[^~]*)/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:href[\s]+["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:\s*<\|)/,/^(?:\s*\|>)/,/^(?:\s*>)/,/^(?:\s*<)/,/^(?:\s*\*)/,/^(?:\s*o\b)/,/^(?:--)/,/^(?:\.\.)/,/^(?::{1}[^:\n;]+)/,/^(?::{3})/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:\w+)/,/^(?:[!"#$%&'*+,-.`?\\/])/,/^(?:[0-9]+)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\s)/,/^(?:$)/],conditions:{arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},callback_args:{rules:[37,38],inclusive:!1},callback_name:{rules:[34,35,36],inclusive:!1},href:{rules:[31,32],inclusive:!1},struct:{rules:[12,13,14,15,16],inclusive:!1},generic:{rules:[25,26],inclusive:!1},string:{rules:[28,29],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,17,18,19,20,21,22,23,24,27,30,33,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64],inclusive:!0}}};function D(){this.yy={}}return A.lexer=M,D.prototype=A,A.Parser=D,new D}();t.parser=o,t.Parser=o.Parser,t.parse=function(){return o.parse.apply(o,arguments)},t.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),e.exit(1));var o=n(/*! fs */"./node_modules/node-libs-browser/mock/empty.js").readFileSync(n(/*! path */"./node_modules/path-browserify/index.js").normalize(r[1]),"utf8");return t.parser.parse(o)},n.c[n.s]===r&&t.main(e.argv.slice(1))}).call(this,n(/*! ./../../../../node_modules/process/browser.js */"./node_modules/process/browser.js"),n(/*! ./../../../../node_modules/webpack/buildin/module.js */"./node_modules/webpack/buildin/module.js")(e))},"./src/diagrams/class/styles.js": -/*!**************************************!*\ - !*** ./src/diagrams/class/styles.js ***! - \**************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(e){return"g.classGroup text {\n fill: ".concat(e.nodeBorder,";\n fill: ").concat(e.classText,";\n stroke: none;\n font-family: ").concat(e.fontFamily,";\n font-size: 10px;\n\n .title {\n font-weight: bolder;\n }\n\n}\n\n.classTitle {\n font-weight: bolder;\n}\n.node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ").concat(e.mainBkg,";\n stroke: ").concat(e.nodeBorder,";\n stroke-width: 1px;\n }\n\n\n.divider {\n stroke: ").concat(e.nodeBorder,";\n stroke: 1;\n}\n\ng.clickable {\n cursor: pointer;\n}\n\ng.classGroup rect {\n fill: ").concat(e.mainBkg,";\n stroke: ").concat(e.nodeBorder,";\n}\n\ng.classGroup line {\n stroke: ").concat(e.nodeBorder,";\n stroke-width: 1;\n}\n\n.classLabel .box {\n stroke: none;\n stroke-width: 0;\n fill: ").concat(e.mainBkg,";\n opacity: 0.5;\n}\n\n.classLabel .label {\n fill: ").concat(e.nodeBorder,";\n font-size: 10px;\n}\n\n.relation {\n stroke: ").concat(e.lineColor,";\n stroke-width: 1;\n fill: none;\n}\n\n.dashed-line{\n stroke-dasharray: 3;\n}\n\n#compositionStart, .composition {\n fill: ").concat(e.lineColor," !important;\n stroke: ").concat(e.lineColor," !important;\n stroke-width: 1;\n}\n\n#compositionEnd, .composition {\n fill: ").concat(e.lineColor," !important;\n stroke: ").concat(e.lineColor," !important;\n stroke-width: 1;\n}\n\n#dependencyStart, .dependency {\n fill: ").concat(e.lineColor," !important;\n stroke: ").concat(e.lineColor," !important;\n stroke-width: 1;\n}\n\n#dependencyStart, .dependency {\n fill: ").concat(e.lineColor," !important;\n stroke: ").concat(e.lineColor," !important;\n stroke-width: 1;\n}\n\n#extensionStart, .extension {\n fill: ").concat(e.lineColor," !important;\n stroke: ").concat(e.lineColor," !important;\n stroke-width: 1;\n}\n\n#extensionEnd, .extension {\n fill: ").concat(e.lineColor," !important;\n stroke: ").concat(e.lineColor," !important;\n stroke-width: 1;\n}\n\n#aggregationStart, .aggregation {\n fill: ").concat(e.mainBkg," !important;\n stroke: ").concat(e.lineColor," !important;\n stroke-width: 1;\n}\n\n#aggregationEnd, .aggregation {\n fill: ").concat(e.mainBkg," !important;\n stroke: ").concat(e.lineColor," !important;\n stroke-width: 1;\n}\n\n.edgeTerminals {\n font-size: 11px;\n}\n\n")}},"./src/diagrams/class/svgDraw.js": -/*!***************************************!*\ - !*** ./src/diagrams/class/svgDraw.js ***! - \***************************************/ -/*! exports provided: drawEdge, drawClass, parseMember, default */function(e,t,n){"use strict";n.r(t),n.d(t,"drawEdge",(function(){return c})),n.d(t,"drawClass",(function(){return u})),n.d(t,"parseMember",(function(){return d}));var r=n(/*! d3 */"./node_modules/d3/index.js"),o=n(/*! ./classDb */"./src/diagrams/class/classDb.js"),i=n(/*! ../../utils */"./src/utils.js"),s=n(/*! ../../logger */"./src/logger.js"),a=0,c=function(e,t,n,c){var u=function(e){switch(e){case o.relationType.AGGREGATION:return"aggregation";case o.relationType.EXTENSION:return"extension";case o.relationType.COMPOSITION:return"composition";case o.relationType.DEPENDENCY:return"dependency"}};t.points=t.points.filter((function(e){return!Number.isNaN(e.y)}));var d,l,f=t.points,h=Object(r.line)().x((function(e){return e.x})).y((function(e){return e.y})).curve(r.curveBasis),p=e.append("path").attr("d",h(f)).attr("id","edge"+a).attr("class","relation"),m="";c.arrowMarkerAbsolute&&(m=(m=(m=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search).replace(/\(/g,"\\(")).replace(/\)/g,"\\)")),1==n.relation.lineType&&p.attr("class","relation dashed-line"),"none"!==n.relation.type1&&p.attr("marker-start","url("+m+"#"+u(n.relation.type1)+"Start)"),"none"!==n.relation.type2&&p.attr("marker-end","url("+m+"#"+u(n.relation.type2)+"End)");var g,y,b,_,v=t.points.length,j=i.default.calcLabelPosition(t.points);if(d=j.x,l=j.y,v%2!=0&&v>1){var x=i.default.calcCardinalityPosition("none"!==n.relation.type1,t.points,t.points[0]),k=i.default.calcCardinalityPosition("none"!==n.relation.type2,t.points,t.points[v-1]);s.logger.debug("cardinality_1_point "+JSON.stringify(x)),s.logger.debug("cardinality_2_point "+JSON.stringify(k)),g=x.x,y=x.y,b=k.x,_=k.y}if(void 0!==n.title){var w=e.append("g").attr("class","classLabel"),O=w.append("text").attr("class","label").attr("x",d).attr("y",l).attr("fill","red").attr("text-anchor","middle").text(n.title);window.label=O;var C=O.node().getBBox();w.insert("rect",":first-child").attr("class","box").attr("x",C.x-c.padding/2).attr("y",C.y-c.padding/2).attr("width",C.width+c.padding).attr("height",C.height+c.padding)}s.logger.info("Rendering relation "+JSON.stringify(n)),void 0!==n.relationTitle1&&"none"!==n.relationTitle1&&e.append("g").attr("class","cardinality").append("text").attr("class","type1").attr("x",g).attr("y",y).attr("fill","black").attr("font-size","6").text(n.relationTitle1),void 0!==n.relationTitle2&&"none"!==n.relationTitle2&&e.append("g").attr("class","cardinality").append("text").attr("class","type2").attr("x",b).attr("y",_).attr("fill","black").attr("font-size","6").text(n.relationTitle2),a++},u=function(e,t,n){s.logger.info("Rendering class "+t);var r,i=t.id,a={id:i,label:t.id,width:0,height:0},c=e.append("g").attr("id",Object(o.lookUpDomId)(i)).attr("class","classGroup");r=t.link?c.append("svg:a").attr("xlink:href",t.link).attr("target",t.linkTarget).append("text").attr("y",n.textHeight+n.padding).attr("x",0):c.append("text").attr("y",n.textHeight+n.padding).attr("x",0);var u=!0;t.annotations.forEach((function(e){var t=r.append("tspan").text("«"+e+"»");u||t.attr("dy",n.textHeight),u=!1}));var d=t.id;void 0!==t.type&&""!==t.type&&(d+="<"+t.type+">");var l=r.append("tspan").text(d).attr("class","title");u||l.attr("dy",n.textHeight);var f=r.node().getBBox().height,h=c.append("line").attr("x1",0).attr("y1",n.padding+f+n.dividerMargin/2).attr("y2",n.padding+f+n.dividerMargin/2),m=c.append("text").attr("x",n.padding).attr("y",f+n.dividerMargin+n.textHeight).attr("fill","white").attr("class","classText");u=!0,t.members.forEach((function(e){p(m,e,u,n),u=!1}));var g=m.node().getBBox(),y=c.append("line").attr("x1",0).attr("y1",n.padding+f+n.dividerMargin+g.height).attr("y2",n.padding+f+n.dividerMargin+g.height),b=c.append("text").attr("x",n.padding).attr("y",f+2*n.dividerMargin+g.height+n.textHeight).attr("fill","white").attr("class","classText");u=!0,t.methods.forEach((function(e){p(b,e,u,n),u=!1}));var _=c.node().getBBox(),v=" ";t.cssClasses.length>0&&(v+=t.cssClasses.join(" "));var j=c.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",_.width+2*n.padding).attr("height",_.height+n.padding+.5*n.dividerMargin).attr("class",v).node().getBBox().width;return r.node().childNodes.forEach((function(e){e.setAttribute("x",(j-e.getBBox().width)/2)})),t.tooltip&&r.insert("title").text(t.tooltip),h.attr("x2",j),y.attr("x2",j),a.width=j,a.height=_.height+n.padding+.5*n.dividerMargin,a},d=function(e){var t=e.match(/(\+|-|~|#)?(\w+)(~\w+~|\[\])?\s+(\w+)/),n=e.match(/^([+|\-|~|#])?(\w+) *\( *(.*)\) *(\*|\$)? *(\w*[~|[\]]*\s*\w*~?)$/);return t&&!n?l(t):n?f(n):h(e)},l=function(e){var t="";try{t=(e[1]?e[1].trim():"")+(e[2]?e[2].trim():"")+(e[3]?m(e[3].trim()):"")+" "+(e[4]?e[4].trim():"")}catch(n){t=e}return{displayText:t,cssStyle:""}},f=function(e){var t="",n="";try{var r=e[1]?e[1].trim():"",o=e[2]?e[2].trim():"",i=e[3]?m(e[3].trim()):"",s=e[4]?e[4].trim():"";n=r+o+"("+i+")"+(e[5]?" : "+m(e[5]).trim():""),t=g(s)}catch(t){n=e}return{displayText:n,cssStyle:t}},h=function(e){var t="",n="",r="",o=e.indexOf("("),i=e.indexOf(")");if(o>1&&i>o&&i<=e.length){var s="",a="",c=e.substring(0,1);c.match(/\w/)?a=e.substring(0,o).trim():(c.match(/\+|-|~|#/)&&(s=c),a=e.substring(1,o).trim());var u=e.substring(o+1,i),d=e.substring(i+1,1);n=g(d),t=s+a+"("+m(u.trim())+")",i<"".length&&""!==(r=e.substring(i+2).trim())&&(r=" : "+m(r))}else t=m(e);return{displayText:t,cssStyle:n}},p=function(e,t,n,r){var o=d(t),i=e.append("tspan").attr("x",r.padding).text(o.displayText);""!==o.cssStyle&&i.attr("style",o.cssStyle),n||i.attr("dy",r.textHeight)},m=function e(t){var n=t;return-1!=t.indexOf("~")?e(n=(n=n.replace("~","<")).replace("~",">")):n},g=function(e){switch(e){case"*":return"font-style:italic;";case"$":return"text-decoration:underline;";default:return""}};t.default={drawClass:u,drawEdge:c,parseMember:d}},"./src/diagrams/common/common.js": -/*!***************************************!*\ - !*** ./src/diagrams/common/common.js ***! - \***************************************/ -/*! exports provided: getRows, removeScript, sanitizeText, lineBreakRegex, hasBreaks, splitBreaks, default */function(e,t,n){"use strict";n.r(t),n.d(t,"getRows",(function(){return r})),n.d(t,"removeScript",(function(){return o})),n.d(t,"sanitizeText",(function(){return i})),n.d(t,"lineBreakRegex",(function(){return s})),n.d(t,"hasBreaks",(function(){return a})),n.d(t,"splitBreaks",(function(){return c}));var r=function(e){if(!e)return 1;var t=u(e);return(t=t.replace(/\\n/g,"#br#")).split("#br#")},o=function(e){for(var t="",n=0;n>=0;){if(!((n=e.indexOf("=0)){t+=e,n=-1;break}t+=e.substr(0,n),(n=(e=e.substr(n+1)).indexOf("<\/script>"))>=0&&(n+=9,e=e.substr(n))}return t},i=function(e,t){var n=e,r=!0;if(!t.flowchart||!1!==t.flowchart.htmlLabels&&"false"!==t.flowchart.htmlLabels||(r=!1),r){var i=t.securityLevel;"antiscript"===i?n=o(n):"loose"!==i&&(n=(n=(n=u(n)).replace(//g,">")).replace(/=/g,"="),n=d(n))}return n},s=//gi,a=function(e){return//gi.test(e)},c=function(e){return e.split(//gi)},u=function(e){return e.replace(s,"#br#")},d=function(e){return e.replace(/#br#/g,"
")};t.default={getRows:r,sanitizeText:i,hasBreaks:a,splitBreaks:c,lineBreakRegex:s,removeScript:o}},"./src/diagrams/er/erDb.js": -/*!*********************************!*\ - !*** ./src/diagrams/er/erDb.js ***! - \*********************************/ -/*! exports provided: parseDirective, default */function(e,t,n){"use strict";n.r(t),n.d(t,"parseDirective",(function(){return u}));var r=n(/*! ../../logger */"./src/logger.js"),o=n(/*! ../../mermaidAPI */"./src/mermaidAPI.js"),i=n(/*! ../../config */"./src/config.js"),s={},a=[],c="",u=function(e,t,n){o.default.parseDirective(this,e,t,n)},d=function(e){return void 0===s[e]&&(s[e]={attributes:[]},r.logger.info("Added new entity :",e)),s[e]};t.default={Cardinality:{ZERO_OR_ONE:"ZERO_OR_ONE",ZERO_OR_MORE:"ZERO_OR_MORE",ONE_OR_MORE:"ONE_OR_MORE",ONLY_ONE:"ONLY_ONE"},Identification:{NON_IDENTIFYING:"NON_IDENTIFYING",IDENTIFYING:"IDENTIFYING"},parseDirective:u,getConfig:function(){return i.getConfig().er},addEntity:d,addAttributes:function(e,t){var n,o=d(e);for(n=t.length-1;n>=0;n--)o.attributes.push(t[n]),r.logger.debug("Added attribute ",t[n].attributeName)},getEntities:function(){return s},addRelationship:function(e,t,n,o){var i={entityA:e,roleA:t,entityB:n,relSpec:o};a.push(i),r.logger.debug("Added new relationship :",i)},getRelationships:function(){return a},clear:function(){s={},a=[],c=""},setTitle:function(e){c=e},getTitle:function(){return c}}},"./src/diagrams/er/erMarkers.js": -/*!**************************************!*\ - !*** ./src/diagrams/er/erMarkers.js ***! - \**************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r={ONLY_ONE_START:"ONLY_ONE_START",ONLY_ONE_END:"ONLY_ONE_END",ZERO_OR_ONE_START:"ZERO_OR_ONE_START",ZERO_OR_ONE_END:"ZERO_OR_ONE_END",ONE_OR_MORE_START:"ONE_OR_MORE_START",ONE_OR_MORE_END:"ONE_OR_MORE_END",ZERO_OR_MORE_START:"ZERO_OR_MORE_START",ZERO_OR_MORE_END:"ZERO_OR_MORE_END"};t.default={ERMarkers:r,insertMarkers:function(e,t){var n;e.append("defs").append("marker").attr("id",r.ONLY_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",t.stroke).attr("fill","none").attr("d","M9,0 L9,18 M15,0 L15,18"),e.append("defs").append("marker").attr("id",r.ONLY_ONE_END).attr("refX",18).attr("refY",9).attr("markerWidth",18).attr("markerHeight",18).attr("orient","auto").append("path").attr("stroke",t.stroke).attr("fill","none").attr("d","M3,0 L3,18 M9,0 L9,18"),(n=e.append("defs").append("marker").attr("id",r.ZERO_OR_ONE_START).attr("refX",0).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto")).append("circle").attr("stroke",t.stroke).attr("fill","white").attr("cx",21).attr("cy",9).attr("r",6),n.append("path").attr("stroke",t.stroke).attr("fill","none").attr("d","M9,0 L9,18"),(n=e.append("defs").append("marker").attr("id",r.ZERO_OR_ONE_END).attr("refX",30).attr("refY",9).attr("markerWidth",30).attr("markerHeight",18).attr("orient","auto")).append("circle").attr("stroke",t.stroke).attr("fill","white").attr("cx",9).attr("cy",9).attr("r",6),n.append("path").attr("stroke",t.stroke).attr("fill","none").attr("d","M21,0 L21,18"),e.append("defs").append("marker").attr("id",r.ONE_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",t.stroke).attr("fill","none").attr("d","M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27"),e.append("defs").append("marker").attr("id",r.ONE_OR_MORE_END).attr("refX",27).attr("refY",18).attr("markerWidth",45).attr("markerHeight",36).attr("orient","auto").append("path").attr("stroke",t.stroke).attr("fill","none").attr("d","M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18"),(n=e.append("defs").append("marker").attr("id",r.ZERO_OR_MORE_START).attr("refX",18).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto")).append("circle").attr("stroke",t.stroke).attr("fill","white").attr("cx",48).attr("cy",18).attr("r",6),n.append("path").attr("stroke",t.stroke).attr("fill","none").attr("d","M0,18 Q18,0 36,18 Q18,36 0,18"),(n=e.append("defs").append("marker").attr("id",r.ZERO_OR_MORE_END).attr("refX",39).attr("refY",18).attr("markerWidth",57).attr("markerHeight",36).attr("orient","auto")).append("circle").attr("stroke",t.stroke).attr("fill","white").attr("cx",9).attr("cy",18).attr("r",6),n.append("path").attr("stroke",t.stroke).attr("fill","none").attr("d","M21,18 Q39,0 57,18 Q39,36 21,18")}}},"./src/diagrams/er/erRenderer.js": -/*!***************************************!*\ - !*** ./src/diagrams/er/erRenderer.js ***! - \***************************************/ -/*! exports provided: setConf, draw, default */function(e,t,n){"use strict";n.r(t),n.d(t,"setConf",(function(){return g})),n.d(t,"draw",(function(){return v}));var r=n(/*! graphlib */"./node_modules/graphlib/index.js"),o=n.n(r),i=n(/*! d3 */"./node_modules/d3/index.js"),s=n(/*! ./erDb */"./src/diagrams/er/erDb.js"),a=n(/*! ./parser/erDiagram */"./src/diagrams/er/parser/erDiagram.jison"),c=n.n(a),u=n(/*! dagre */"./node_modules/dagre/index.js"),d=n.n(u),l=n(/*! ../../config */"./src/config.js"),f=n(/*! ../../logger */"./src/logger.js"),h=n(/*! ./erMarkers */"./src/diagrams/er/erMarkers.js"),p=n(/*! ../../utils */"./src/utils.js"),m={},g=function(e){for(var t=Object.keys(e),n=0;n0?d:Math.max(m.minEntityHeight,s.height+2*m.entityPadding)},p=Math.max(0,h.width-(c+u)-4*o);if(n.length>0){t.attr("transform","translate("+h.width/2+","+(r+s.height/2)+")");var g=s.height+2*r,y="attributeBoxOdd";a.forEach((function(t){var n=g+r+Math.max(t.tn.node().getBBox().height,t.nn.node().getBBox().height)/2;t.tn.attr("transform","translate("+o+","+n+")");var i=e.insert("rect","#"+t.tn.node().id).attr("class","er ".concat(y)).attr("fill",m.fill).attr("fill-opacity","100%").attr("stroke",m.stroke).attr("x",0).attr("y",g).attr("width",c+2*o+p/2).attr("height",t.tn.node().getBBox().height+2*r);t.nn.attr("transform","translate("+(parseFloat(i.attr("width"))+o)+","+n+")"),e.insert("rect","#"+t.nn.node().id).attr("class","er ".concat(y)).attr("fill",m.fill).attr("fill-opacity","100%").attr("stroke",m.stroke).attr("x","".concat(i.attr("x")+i.attr("width"))).attr("y",g).attr("width",u+2*o+p/2).attr("height",t.nn.node().getBBox().height+2*r),g+=Math.max(t.tn.node().getBBox().height,t.nn.node().getBBox().height)+2*r,y="attributeBoxOdd"==y?"attributeBoxEven":"attributeBoxOdd"}))}else h.height=Math.max(m.minEntityHeight,d),t.attr("transform","translate("+h.width/2+","+h.height/2+")");return h}(i,a,t[o].attributes),u=c.width,d=c.height,f=i.insert("rect","#"+s).attr("class","er entityBox").attr("fill",m.fill).attr("fill-opacity","100%").attr("stroke",m.stroke).attr("x",0).attr("y",0).attr("width",u).attr("height",d).node().getBBox();n.setNode(o,{width:f.width,height:f.height,shape:"rect",id:o})})),r},b=function(e){return(e.entityA+e.roleA+e.entityB).replace(/\s/g,"")},_=0,v=function(e,t){f.logger.info("Drawing ER diagram"),s.default.clear();var n=c.a.parser;n.yy=s.default;try{n.parse(e)}catch(e){f.logger.debug("Parsing failed")}var r,a=Object(i.select)("[id='".concat(t,"']"));h.default.insertMarkers(a,m),r=new o.a.Graph({multigraph:!0,directed:!0,compound:!1}).setGraph({rankdir:m.layoutDirection,marginx:20,marginy:20,nodesep:100,edgesep:100,ranksep:100}).setDefaultEdgeLabel((function(){return{}}));var u,g,v=y(a,s.default.getEntities(),r),j=function(e,t){return e.forEach((function(e){t.setEdge(e.entityA,e.entityB,{relationship:e},b(e))})),e}(s.default.getRelationships(),r);d.a.layout(r),u=a,(g=r).nodes().forEach((function(e){void 0!==e&&void 0!==g.node(e)&&u.select("#"+e).attr("transform","translate("+(g.node(e).x-g.node(e).width/2)+","+(g.node(e).y-g.node(e).height/2)+" )")})),j.forEach((function(e){!function(e,t,n,r){_++;var o=n.edge(t.entityA,t.entityB,b(t)),a=Object(i.line)().x((function(e){return e.x})).y((function(e){return e.y})).curve(i.curveBasis),c=e.insert("path","#"+r).attr("class","er relationshipLine").attr("d",a(o.points)).attr("stroke",m.stroke).attr("fill","none");t.relSpec.relType===s.default.Identification.NON_IDENTIFYING&&c.attr("stroke-dasharray","8,8");var u="";switch(m.arrowMarkerAbsolute&&(u=(u=(u=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search).replace(/\(/g,"\\(")).replace(/\)/g,"\\)")),t.relSpec.cardA){case s.default.Cardinality.ZERO_OR_ONE:c.attr("marker-end","url("+u+"#"+h.default.ERMarkers.ZERO_OR_ONE_END+")");break;case s.default.Cardinality.ZERO_OR_MORE:c.attr("marker-end","url("+u+"#"+h.default.ERMarkers.ZERO_OR_MORE_END+")");break;case s.default.Cardinality.ONE_OR_MORE:c.attr("marker-end","url("+u+"#"+h.default.ERMarkers.ONE_OR_MORE_END+")");break;case s.default.Cardinality.ONLY_ONE:c.attr("marker-end","url("+u+"#"+h.default.ERMarkers.ONLY_ONE_END+")")}switch(t.relSpec.cardB){case s.default.Cardinality.ZERO_OR_ONE:c.attr("marker-start","url("+u+"#"+h.default.ERMarkers.ZERO_OR_ONE_START+")");break;case s.default.Cardinality.ZERO_OR_MORE:c.attr("marker-start","url("+u+"#"+h.default.ERMarkers.ZERO_OR_MORE_START+")");break;case s.default.Cardinality.ONE_OR_MORE:c.attr("marker-start","url("+u+"#"+h.default.ERMarkers.ONE_OR_MORE_START+")");break;case s.default.Cardinality.ONLY_ONE:c.attr("marker-start","url("+u+"#"+h.default.ERMarkers.ONLY_ONE_START+")")}var d=c.node().getTotalLength(),f=c.node().getPointAtLength(.5*d),p="rel"+_,g=e.append("text").attr("class","er relationshipLabel").attr("id",p).attr("x",f.x).attr("y",f.y).attr("text-anchor","middle").attr("dominant-baseline","middle").attr("style","font-family: "+Object(l.getConfig)().fontFamily+"; font-size: "+m.fontSize+"px").text(t.roleA).node().getBBox();e.insert("rect","#"+p).attr("class","er relationshipLabelBox").attr("x",f.x-g.width/2).attr("y",f.y-g.height/2).attr("width",g.width).attr("height",g.height).attr("fill","white").attr("fill-opacity","85%")}(a,e,r,v)}));var x=m.diagramPadding,k=a.node().getBBox(),w=k.width+2*x,O=k.height+2*x;Object(p.configureSvgSize)(a,O,w,m.useMaxWidth),a.attr("viewBox","".concat(k.x-x," ").concat(k.y-x," ").concat(w," ").concat(O))};t.default={setConf:g,draw:v}},"./src/diagrams/er/parser/erDiagram.jison": -/*!************************************************!*\ - !*** ./src/diagrams/er/parser/erDiagram.jison ***! - \************************************************/ -/*! no static exports found */function(e,t,n){(function(e,r){var o=function(){var e=function(e,t,n,r){for(n=n||{},r=e.length;r--;n[e[r]]=t);return n},t=[1,2],n=[1,5],r=[6,9,11,23,37],o=[1,17],i=[1,20],s=[1,25],a=[1,26],c=[1,27],u=[1,28],d=[1,37],l=[23,34,35],f=[4,6,9,11,23,37],h=[30,31,32,33],p=[22,27],m={trace:function(){},yy:{},symbols_:{error:2,start:3,ER_DIAGRAM:4,document:5,EOF:6,directive:7,line:8,SPACE:9,statement:10,NEWLINE:11,openDirective:12,typeDirective:13,closeDirective:14,":":15,argDirective:16,entityName:17,relSpec:18,role:19,BLOCK_START:20,attributes:21,BLOCK_STOP:22,ALPHANUM:23,attribute:24,attributeType:25,attributeName:26,ATTRIBUTE_WORD:27,cardinality:28,relType:29,ZERO_OR_ONE:30,ZERO_OR_MORE:31,ONE_OR_MORE:32,ONLY_ONE:33,NON_IDENTIFYING:34,IDENTIFYING:35,WORD:36,open_directive:37,type_directive:38,arg_directive:39,close_directive:40,$accept:0,$end:1},terminals_:{2:"error",4:"ER_DIAGRAM",6:"EOF",9:"SPACE",11:"NEWLINE",15:":",20:"BLOCK_START",22:"BLOCK_STOP",23:"ALPHANUM",27:"ATTRIBUTE_WORD",30:"ZERO_OR_ONE",31:"ZERO_OR_MORE",32:"ONE_OR_MORE",33:"ONLY_ONE",34:"NON_IDENTIFYING",35:"IDENTIFYING",36:"WORD",37:"open_directive",38:"type_directive",39:"arg_directive",40:"close_directive"},productions_:[0,[3,3],[3,2],[5,0],[5,2],[8,2],[8,1],[8,1],[8,1],[7,4],[7,6],[10,1],[10,5],[10,4],[10,3],[10,1],[17,1],[21,1],[21,2],[24,2],[25,1],[26,1],[18,3],[28,1],[28,1],[28,1],[28,1],[29,1],[29,1],[19,1],[19,1],[12,1],[13,1],[16,1],[14,1]],performAction:function(e,t,n,r,o,i,s){var a=i.length-1;switch(o){case 1:break;case 3:this.$=[];break;case 4:i[a-1].push(i[a]),this.$=i[a-1];break;case 5:case 6:this.$=i[a];break;case 7:case 8:this.$=[];break;case 12:r.addEntity(i[a-4]),r.addEntity(i[a-2]),r.addRelationship(i[a-4],i[a],i[a-2],i[a-3]);break;case 13:r.addEntity(i[a-3]),r.addAttributes(i[a-3],i[a-1]);break;case 14:r.addEntity(i[a-2]);break;case 15:r.addEntity(i[a]);break;case 16:this.$=i[a];break;case 17:this.$=[i[a]];break;case 18:i[a].push(i[a-1]),this.$=i[a];break;case 19:this.$={attributeType:i[a-1],attributeName:i[a]};break;case 20:case 21:this.$=i[a];break;case 22:this.$={cardA:i[a],relType:i[a-1],cardB:i[a-2]};break;case 23:this.$=r.Cardinality.ZERO_OR_ONE;break;case 24:this.$=r.Cardinality.ZERO_OR_MORE;break;case 25:this.$=r.Cardinality.ONE_OR_MORE;break;case 26:this.$=r.Cardinality.ONLY_ONE;break;case 27:this.$=r.Identification.NON_IDENTIFYING;break;case 28:this.$=r.Identification.IDENTIFYING;break;case 29:this.$=i[a].replace(/"/g,"");break;case 30:this.$=i[a];break;case 31:r.parseDirective("%%{","open_directive");break;case 32:r.parseDirective(i[a],"type_directive");break;case 33:i[a]=i[a].trim().replace(/'/g,'"'),r.parseDirective(i[a],"arg_directive");break;case 34:r.parseDirective("}%%","close_directive","er")}},table:[{3:1,4:t,7:3,12:4,37:n},{1:[3]},e(r,[2,3],{5:6}),{3:7,4:t,7:3,12:4,37:n},{13:8,38:[1,9]},{38:[2,31]},{6:[1,10],7:15,8:11,9:[1,12],10:13,11:[1,14],12:4,17:16,23:o,37:n},{1:[2,2]},{14:18,15:[1,19],40:i},e([15,40],[2,32]),e(r,[2,8],{1:[2,1]}),e(r,[2,4]),{7:15,10:21,12:4,17:16,23:o,37:n},e(r,[2,6]),e(r,[2,7]),e(r,[2,11]),e(r,[2,15],{18:22,28:24,20:[1,23],30:s,31:a,32:c,33:u}),e([6,9,11,15,20,23,30,31,32,33,37],[2,16]),{11:[1,29]},{16:30,39:[1,31]},{11:[2,34]},e(r,[2,5]),{17:32,23:o},{21:33,22:[1,34],24:35,25:36,27:d},{29:38,34:[1,39],35:[1,40]},e(l,[2,23]),e(l,[2,24]),e(l,[2,25]),e(l,[2,26]),e(f,[2,9]),{14:41,40:i},{40:[2,33]},{15:[1,42]},{22:[1,43]},e(r,[2,14]),{21:44,22:[2,17],24:35,25:36,27:d},{26:45,27:[1,46]},{27:[2,20]},{28:47,30:s,31:a,32:c,33:u},e(h,[2,27]),e(h,[2,28]),{11:[1,48]},{19:49,23:[1,51],36:[1,50]},e(r,[2,13]),{22:[2,18]},e(p,[2,19]),e(p,[2,21]),{23:[2,22]},e(f,[2,10]),e(r,[2,12]),e(r,[2,29]),e(r,[2,30])],defaultActions:{5:[2,31],7:[2,2],20:[2,34],31:[2,33],37:[2,20],44:[2,18],47:[2,22]},parseError:function(e,t){if(!t.recoverable){var n=new Error(e);throw n.hash=t,n}this.trace(e)},parse:function(e){var t=this,n=[0],r=[],o=[null],i=[],s=this.table,a="",c=0,u=0,d=0,l=2,f=1,h=i.slice.call(arguments,1),p=Object.create(this.lexer),m={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(m.yy[g]=this.yy[g]);p.setInput(e,m.yy),m.yy.lexer=p,m.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var y=p.yylloc;i.push(y);var b=p.options&&p.options.ranges;function _(){var e;return"number"!=typeof(e=r.pop()||p.lex()||f)&&(e instanceof Array&&(e=(r=e).pop()),e=t.symbols_[e]||e),e}"function"==typeof m.yy.parseError?this.parseError=m.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var v,j,x,k,w,O,C,E,T,S={};;){if(x=n[n.length-1],this.defaultActions[x]?k=this.defaultActions[x]:(null==v&&(v=_()),k=s[x]&&s[x][v]),void 0===k||!k.length||!k[0]){var A="";for(O in T=[],s[x])this.terminals_[O]&&O>l&&T.push("'"+this.terminals_[O]+"'");A=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+T.join(", ")+", got '"+(this.terminals_[v]||v)+"'":"Parse error on line "+(c+1)+": Unexpected "+(v==f?"end of input":"'"+(this.terminals_[v]||v)+"'"),this.parseError(A,{text:p.match,token:this.terminals_[v]||v,line:p.yylineno,loc:y,expected:T})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+x+", token: "+v);switch(k[0]){case 1:n.push(v),o.push(p.yytext),i.push(p.yylloc),n.push(k[1]),v=null,j?(v=j,j=null):(u=p.yyleng,a=p.yytext,c=p.yylineno,y=p.yylloc,d>0&&d--);break;case 2:if(C=this.productions_[k[1]][1],S.$=o[o.length-C],S._$={first_line:i[i.length-(C||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(C||1)].first_column,last_column:i[i.length-1].last_column},b&&(S._$.range=[i[i.length-(C||1)].range[0],i[i.length-1].range[1]]),void 0!==(w=this.performAction.apply(S,[a,u,c,m.yy,k[1],o,i].concat(h))))return w;C&&(n=n.slice(0,-1*C*2),o=o.slice(0,-1*C),i=i.slice(0,-1*C)),n.push(this.productions_[k[1]][0]),o.push(S.$),i.push(S._$),E=s[n[n.length-2]][n[n.length-1]],n.push(E);break;case 3:return!0}}return!0}},g={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,n=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var o=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[o[0],o[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var n,r,o;if(this.options.backtrack_lexer&&(o={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(o.yylloc.range=this.yylloc.range.slice(0))),(r=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],n=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var i in o)this[i]=o[i];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var o=this._currentRules(),i=0;it[0].length)){if(t=n,r=i,this.options.backtrack_lexer){if(!1!==(e=this.test_match(n,o[i])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,o[r]))&&e:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return e||this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(e){return(e=this.conditionStack.length-1-Math.abs(e||0))>=0?this.conditionStack[e]:"INITIAL"},pushState:function(e){this.begin(e)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(e,t,n,r){switch(n){case 0:return this.begin("open_directive"),37;case 1:return this.begin("type_directive"),38;case 2:return this.popState(),this.begin("arg_directive"),15;case 3:return this.popState(),this.popState(),40;case 4:return 39;case 5:case 6:break;case 7:return 11;case 8:break;case 9:return 9;case 10:return 36;case 11:return 4;case 12:return this.begin("block"),20;case 13:break;case 14:return 27;case 15:break;case 16:return this.popState(),22;case 17:return t.yytext[0];case 18:return 30;case 19:return 31;case 20:return 32;case 21:return 33;case 22:return 30;case 23:return 31;case 24:return 32;case 25:return 34;case 26:return 35;case 27:case 28:return 34;case 29:return 23;case 30:return t.yytext[0];case 31:return 6}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:[\s]+)/i,/^(?:"[^"]*")/i,/^(?:erDiagram\b)/i,/^(?:\{)/i,/^(?:\s+)/i,/^(?:[A-Za-z][A-Za-z0-9\-_]*)/i,/^(?:[\n]+)/i,/^(?:\})/i,/^(?:.)/i,/^(?:\|o\b)/i,/^(?:\}o\b)/i,/^(?:\}\|)/i,/^(?:\|\|)/i,/^(?:o\|)/i,/^(?:o\{)/i,/^(?:\|\{)/i,/^(?:\.\.)/i,/^(?:--)/i,/^(?:\.-)/i,/^(?:-\.)/i,/^(?:[A-Za-z][A-Za-z0-9\-_]*)/i,/^(?:.)/i,/^(?:$)/i],conditions:{open_directive:{rules:[1],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},block:{rules:[13,14,15,16,17],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,12,18,19,20,21,22,23,24,25,26,27,28,29,30,31],inclusive:!0}}};function y(){this.yy={}}return m.lexer=g,y.prototype=m,m.Parser=y,new y}();t.parser=o,t.Parser=o.Parser,t.parse=function(){return o.parse.apply(o,arguments)},t.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),e.exit(1));var o=n(/*! fs */"./node_modules/node-libs-browser/mock/empty.js").readFileSync(n(/*! path */"./node_modules/path-browserify/index.js").normalize(r[1]),"utf8");return t.parser.parse(o)},n.c[n.s]===r&&t.main(e.argv.slice(1))}).call(this,n(/*! ./../../../../node_modules/process/browser.js */"./node_modules/process/browser.js"),n(/*! ./../../../../node_modules/webpack/buildin/module.js */"./node_modules/webpack/buildin/module.js")(e))},"./src/diagrams/er/styles.js": -/*!***********************************!*\ - !*** ./src/diagrams/er/styles.js ***! - \***********************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(e){return"\n .entityBox {\n fill: ".concat(e.mainBkg,";\n stroke: ").concat(e.nodeBorder,";\n }\n\n .attributeBoxOdd {\n fill: #ffffff;\n stroke: ").concat(e.nodeBorder,";\n }\n\n .attributeBoxEven {\n fill: #f2f2f2;\n stroke: ").concat(e.nodeBorder,";\n }\n\n .relationshipLabelBox {\n fill: ").concat(e.tertiaryColor,";\n opacity: 0.7;\n background-color: ").concat(e.tertiaryColor,";\n rect {\n opacity: 0.5;\n }\n }\n\n .relationshipLine {\n stroke: ").concat(e.lineColor,";\n }\n")}},"./src/diagrams/flowchart/flowChartShapes.js": -/*!***************************************************!*\ - !*** ./src/diagrams/flowchart/flowChartShapes.js ***! - \***************************************************/ -/*! exports provided: addToRender, addToRenderV2, default */function(e,t,n){"use strict";n.r(t),n.d(t,"addToRender",(function(){return g})),n.d(t,"addToRenderV2",(function(){return y}));var r=n(/*! dagre-d3 */"./node_modules/dagre-d3/index.js"),o=n.n(r);function i(e,t,n){var r=.9*(t.width+t.height),i=[{x:r/2,y:0},{x:r,y:-r/2},{x:r/2,y:-r},{x:0,y:-r/2}],s=b(e,r,r,i);return n.intersect=function(e){return o.a.intersect.polygon(n,i,e)},s}function s(e,t,n){var r=t.height,i=r/4,s=t.width+2*i,a=[{x:i,y:0},{x:s-i,y:0},{x:s,y:-r/2},{x:s-i,y:-r},{x:i,y:-r},{x:0,y:-r/2}],c=b(e,s,r,a);return n.intersect=function(e){return o.a.intersect.polygon(n,a,e)},c}function a(e,t,n){var r=t.width,i=t.height,s=[{x:-i/2,y:0},{x:r,y:0},{x:r,y:-i},{x:-i/2,y:-i},{x:0,y:-i/2}],a=b(e,r,i,s);return n.intersect=function(e){return o.a.intersect.polygon(n,s,e)},a}function c(e,t,n){var r=t.width,i=t.height,s=[{x:-2*i/6,y:0},{x:r-i/6,y:0},{x:r+2*i/6,y:-i},{x:i/6,y:-i}],a=b(e,r,i,s);return n.intersect=function(e){return o.a.intersect.polygon(n,s,e)},a}function u(e,t,n){var r=t.width,i=t.height,s=[{x:2*i/6,y:0},{x:r+i/6,y:0},{x:r-2*i/6,y:-i},{x:-i/6,y:-i}],a=b(e,r,i,s);return n.intersect=function(e){return o.a.intersect.polygon(n,s,e)},a}function d(e,t,n){var r=t.width,i=t.height,s=[{x:-2*i/6,y:0},{x:r+2*i/6,y:0},{x:r-i/6,y:-i},{x:i/6,y:-i}],a=b(e,r,i,s);return n.intersect=function(e){return o.a.intersect.polygon(n,s,e)},a}function l(e,t,n){var r=t.width,i=t.height,s=[{x:i/6,y:0},{x:r-i/6,y:0},{x:r+2*i/6,y:-i},{x:-2*i/6,y:-i}],a=b(e,r,i,s);return n.intersect=function(e){return o.a.intersect.polygon(n,s,e)},a}function f(e,t,n){var r=t.width,i=t.height,s=[{x:0,y:0},{x:r+i/2,y:0},{x:r,y:-i/2},{x:r+i/2,y:-i},{x:0,y:-i}],a=b(e,r,i,s);return n.intersect=function(e){return o.a.intersect.polygon(n,s,e)},a}function h(e,t,n){var r=t.height,i=t.width+r/4,s=e.insert("rect",":first-child").attr("rx",r/2).attr("ry",r/2).attr("x",-i/2).attr("y",-r/2).attr("width",i).attr("height",r);return n.intersect=function(e){return o.a.intersect.rect(n,e)},s}function p(e,t,n){var r=t.width,i=t.height,s=[{x:0,y:0},{x:r,y:0},{x:r,y:-i},{x:0,y:-i},{x:0,y:0},{x:-8,y:0},{x:r+8,y:0},{x:r+8,y:-i},{x:-8,y:-i},{x:-8,y:0}],a=b(e,r,i,s);return n.intersect=function(e){return o.a.intersect.polygon(n,s,e)},a}function m(e,t,n){var r=t.width,i=r/2,s=i/(2.5+r/50),a=t.height+s,c="M 0,"+s+" a "+i+","+s+" 0,0,0 "+r+" 0 a "+i+","+s+" 0,0,0 "+-r+" 0 l 0,"+a+" a "+i+","+s+" 0,0,0 "+r+" 0 l 0,"+-a,u=e.attr("label-offset-y",s).insert("path",":first-child").attr("d",c).attr("transform","translate("+-r/2+","+-(a/2+s)+")");return n.intersect=function(e){var t=o.a.intersect.rect(n,e),r=t.x-n.x;if(0!=i&&(Math.abs(r)n.height/2-s)){var a=s*s*(1-r*r/(i*i));0!=a&&(a=Math.sqrt(a)),a=s-a,e.y-n.y>0&&(a=-a),t.y+=a}return t},u}function g(e){e.shapes().question=i,e.shapes().hexagon=s,e.shapes().stadium=h,e.shapes().subroutine=p,e.shapes().cylinder=m,e.shapes().rect_left_inv_arrow=a,e.shapes().lean_right=c,e.shapes().lean_left=u,e.shapes().trapezoid=d,e.shapes().inv_trapezoid=l,e.shapes().rect_right_inv_arrow=f}function y(e){e({question:i}),e({hexagon:s}),e({stadium:h}),e({subroutine:p}),e({cylinder:m}),e({rect_left_inv_arrow:a}),e({lean_right:c}),e({lean_left:u}),e({trapezoid:d}),e({inv_trapezoid:l}),e({rect_right_inv_arrow:f})}function b(e,t,n,r){return e.insert("polygon",":first-child").attr("points",r.map((function(e){return e.x+","+e.y})).join(" ")).attr("transform","translate("+-t/2+","+n/2+")")}t.default={addToRender:g,addToRenderV2:y}},"./src/diagrams/flowchart/flowDb.js": -/*!******************************************!*\ - !*** ./src/diagrams/flowchart/flowDb.js ***! - \******************************************/ -/*! exports provided: parseDirective, lookUpDomId, addVertex, addSingleLink, addLink, updateLinkInterpolate, updateLink, addClass, setDirection, setClass, setLink, getTooltip, setClickEvent, bindFunctions, getDirection, getVertices, getEdges, getClasses, clear, setGen, defaultStyle, addSubGraph, getDepthFirstPos, indexNodes, getSubGraphs, firstGraph, default */function(e,t,n){"use strict";n.r(t),n.d(t,"parseDirective",(function(){return w})),n.d(t,"lookUpDomId",(function(){return O})),n.d(t,"addVertex",(function(){return C})),n.d(t,"addSingleLink",(function(){return E})),n.d(t,"addLink",(function(){return T})),n.d(t,"updateLinkInterpolate",(function(){return S})),n.d(t,"updateLink",(function(){return A})),n.d(t,"addClass",(function(){return M})),n.d(t,"setDirection",(function(){return D})),n.d(t,"setClass",(function(){return B})),n.d(t,"setLink",(function(){return N})),n.d(t,"getTooltip",(function(){return L})),n.d(t,"setClickEvent",(function(){return P})),n.d(t,"bindFunctions",(function(){return I})),n.d(t,"getDirection",(function(){return R})),n.d(t,"getVertices",(function(){return F})),n.d(t,"getEdges",(function(){return Y})),n.d(t,"getClasses",(function(){return z})),n.d(t,"clear",(function(){return G})),n.d(t,"setGen",(function(){return U})),n.d(t,"defaultStyle",(function(){return W})),n.d(t,"addSubGraph",(function(){return H})),n.d(t,"getDepthFirstPos",(function(){return Z})),n.d(t,"indexNodes",(function(){return K})),n.d(t,"getSubGraphs",(function(){return Q})),n.d(t,"firstGraph",(function(){return J}));var r=n(/*! d3 */"./node_modules/d3/index.js"),o=n(/*! ../../utils */"./src/utils.js"),i=n(/*! ../../config */"./src/config.js"),s=n(/*! ../common/common */"./src/diagrams/common/common.js"),a=n(/*! ../../mermaidAPI */"./src/mermaidAPI.js"),c=n(/*! ../../logger */"./src/logger.js");function u(e){return(u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function d(e){return function(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);t/)&&(l="LR"),l.match(/.*v/)&&(l="TB")},B=function(e,t){e.split(",").forEach((function(e){var n=e;void 0!==m[n]&&m[n].classes.push(t),void 0!==_[n]&&_[n].classes.push(t)}))},N=function(e,t,n){e.split(",").forEach((function(e){void 0!==m[e]&&(m[e].link=o.default.formatUrl(t,p),m[e].linkTarget=n)})),B(e,"clickable")},L=function(e){return v[e]},P=function(e,t,n){e.split(",").forEach((function(e){!function(e,t,n){var r=O(e);if("loose"===i.getConfig().securityLevel&&void 0!==t){var s=[];if("string"==typeof n){s=n.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(var a=0;a=0)&&d.push(e))})),"gen-1"===f){c.logger.warn("LOOKING UP");for(var h=0;h0&&function e(t,n){var r=b[n].nodes;if(!((V+=1)>2e3)){if(X[V]=n,b[n].id===t)return{result:!0,count:0};for(var o=0,i=1;o=0){var a=e(t,s);if(a.result)return{result:!0,count:i+a.count};i+=a.count}o+=1}return{result:!1,count:i}}}("none",b.length-1)},Q=function(){return b},J=function(){return!!x&&(x=!1,!0)},ee=function(e,t){var n=!1;return e.forEach((function(e){e.nodes.indexOf(t)>=0&&(n=!0)})),n},te=function(e,t){var n=[];return e.nodes.forEach((function(r,o){ee(t,r)||n.push(e.nodes[o])})),{nodes:n}};t.default={parseDirective:w,defaultConfig:function(){return i.defaultConfig.flowchart},addVertex:C,lookUpDomId:O,addLink:T,updateLinkInterpolate:S,updateLink:A,addClass:M,setDirection:D,setClass:B,setTooltip:function(e,t){e.split(",").forEach((function(e){void 0!==t&&(v["gen-1"===f?O(e):e]=s.default.sanitizeText(t,p))}))},getTooltip:L,setClickEvent:P,setLink:N,bindFunctions:I,getDirection:R,getVertices:F,getEdges:Y,getClasses:z,clear:G,setGen:U,defaultStyle:W,addSubGraph:H,getDepthFirstPos:Z,indexNodes:K,getSubGraphs:Q,destructLink:function(e,t){var n,r=function(e){var t=e.trim(),n=t.slice(0,-1),r="arrow_open";switch(t.slice(-1)){case"x":r="arrow_cross","x"===t[0]&&(r="double_"+r,n=n.slice(1));break;case">":r="arrow_point","<"===t[0]&&(r="double_"+r,n=n.slice(1));break;case"o":r="arrow_circle","o"===t[0]&&(r="double_"+r,n=n.slice(1))}var o="normal",i=n.length-1;"="===n[0]&&(o="thick");var s=function(e,t){for(var n=t.length,r=0,o=0;o0&&(i=o.classes.join(" "));var a,c=Object(m.getStylesFromArray)(o.styles),d=void 0!==o.text?o.text:o.id;if(Object(u.getConfig)().flowchart.htmlLabels){var l={label:d.replace(/fa[lrsb]?:fa-[\w-]+/g,(function(e){return"")}))};(a=f()(r,l).node()).parentNode.removeChild(a)}else{var g=document.createElementNS("http://www.w3.org/2000/svg","text");g.setAttribute("style",c.labelStyle.replace("color:","fill:"));for(var y=d.split(p.default.lineBreakRegex),b=0;b=0;v--)a=y[v],h.logger.info("Subgraph - ",a),s.default.addVertex(a.id,a.title,"group",void 0,a.classes);var j=s.default.getVertices(),x=s.default.getEdges();h.logger.info(x);var k=0;for(k=y.length-1;k>=0;k--){a=y[k],Object(i.selectAll)("cluster").append("text");for(var w=0;w0&&(i=o.classes.join(" "));var a,c=Object(g.getStylesFromArray)(o.styles),d=void 0!==o.text?o.text:o.id;if(Object(u.getConfig)().flowchart.htmlLabels){var l={label:d.replace(/fa[lrsb]?:fa-[\w-]+/g,(function(e){return"")}))};(a=h()(r,l).node()).parentNode.removeChild(a)}else{var f=document.createElementNS("http://www.w3.org/2000/svg","text");f.setAttribute("style",c.labelStyle.replace("color:","fill:"));for(var y=d.split(m.default.lineBreakRegex),b=0;b').concat(a.text.replace(/fa[lrsb]?:fa-[\w-]+/g,(function(e){return"")})),"")):(f.labelType="text",f.label=a.text.replace(m.default.lineBreakRegex,"\n"),void 0===a.style&&(f.style=f.style||"stroke: #333; stroke-width: 1.5px;fill:none"),f.labelStyle=f.labelStyle.replace("color:","fill:"))),f.id=c,f.class=d+" "+l,f.minlen=a.length||1,t.setEdge(s.default.lookUpDomId(a.start),s.default.lookUpDomId(a.end),f,o)}))},x=function(e){p.logger.info("Extracting classes"),s.default.clear();try{var t=c.a.parser;return t.yy=s.default,t.parse(e),s.default.getClasses()}catch(e){return}},k=function(e,t){p.logger.info("Drawing flowchart"),s.default.clear(),s.default.setGen("gen-1");var n=c.a.parser;n.yy=s.default,n.parse(e);var r=s.default.getDirection();void 0===r&&(r="TD");for(var a,d=Object(u.getConfig)().flowchart,f=d.nodeSpacing||50,h=d.rankSpacing||50,m=new o.a.Graph({multigraph:!0,compound:!0}).setGraph({rankdir:r,nodesep:f,ranksep:h,marginx:8,marginy:8}).setDefaultEdgeLabel((function(){return{}})),b=s.default.getSubGraphs(),_=b.length-1;_>=0;_--)a=b[_],s.default.addVertex(a.id,a.title,"group",void 0,a.classes);var x=s.default.getVertices();p.logger.warn("Get vertices",x);var k=s.default.getEdges(),w=0;for(w=b.length-1;w>=0;w--){a=b[w],Object(i.selectAll)("cluster").append("text");for(var O=0;Ol&&T.push("'"+this.terminals_[O]+"'");A=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+T.join(", ")+", got '"+(this.terminals_[v]||v)+"'":"Parse error on line "+(c+1)+": Unexpected "+(v==f?"end of input":"'"+(this.terminals_[v]||v)+"'"),this.parseError(A,{text:p.match,token:this.terminals_[v]||v,line:p.yylineno,loc:y,expected:T})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+x+", token: "+v);switch(k[0]){case 1:n.push(v),o.push(p.yytext),i.push(p.yylloc),n.push(k[1]),v=null,j?(v=j,j=null):(u=p.yyleng,a=p.yytext,c=p.yylineno,y=p.yylloc,d>0&&d--);break;case 2:if(C=this.productions_[k[1]][1],S.$=o[o.length-C],S._$={first_line:i[i.length-(C||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(C||1)].first_column,last_column:i[i.length-1].last_column},b&&(S._$.range=[i[i.length-(C||1)].range[0],i[i.length-1].range[1]]),void 0!==(w=this.performAction.apply(S,[a,u,c,m.yy,k[1],o,i].concat(h))))return w;C&&(n=n.slice(0,-1*C*2),o=o.slice(0,-1*C),i=i.slice(0,-1*C)),n.push(this.productions_[k[1]][0]),o.push(S.$),i.push(S._$),E=s[n[n.length-2]][n[n.length-1]],n.push(E);break;case 3:return!0}}return!0}},Ve={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,n=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var o=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[o[0],o[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var n,r,o;if(this.options.backtrack_lexer&&(o={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(o.yylloc.range=this.yylloc.range.slice(0))),(r=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],n=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var i in o)this[i]=o[i];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var o=this._currentRules(),i=0;it[0].length)){if(t=n,r=i,this.options.backtrack_lexer){if(!1!==(e=this.test_match(n,o[i])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,o[r]))&&e:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return e||this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(e){return(e=this.conditionStack.length-1-Math.abs(e||0))>=0?this.conditionStack[e]:"INITIAL"},pushState:function(e){this.begin(e)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(e,t,n,r){switch(n){case 0:return this.begin("open_directive"),12;case 1:return this.begin("type_directive"),13;case 2:return this.popState(),this.begin("arg_directive"),10;case 3:return this.popState(),this.popState(),15;case 4:return 14;case 5:case 6:break;case 7:this.begin("string");break;case 8:this.popState();break;case 9:return"STR";case 10:return 75;case 11:return 84;case 12:return 76;case 13:return 93;case 14:return 77;case 15:return 78;case 16:this.begin("href");break;case 17:this.popState();break;case 18:return 89;case 19:this.begin("callbackname");break;case 20:this.popState();break;case 21:this.popState(),this.begin("callbackargs");break;case 22:return 87;case 23:this.popState();break;case 24:return 88;case 25:this.begin("click");break;case 26:this.popState();break;case 27:return 79;case 28:case 29:return e.lex.firstGraph()&&this.begin("dir"),24;case 30:return 38;case 31:return 42;case 32:case 33:case 34:case 35:return 90;case 36:return this.popState(),25;case 37:case 38:case 39:case 40:case 41:case 42:case 43:case 44:case 45:case 46:return this.popState(),26;case 47:return 94;case 48:return 102;case 49:return 47;case 50:return 99;case 51:return 46;case 52:return 20;case 53:return 95;case 54:return 113;case 55:case 56:case 57:return 70;case 58:case 59:case 60:return 69;case 61:return 51;case 62:return 52;case 63:return 53;case 64:return 54;case 65:return 55;case 66:return 56;case 67:return 57;case 68:return 58;case 69:return 100;case 70:return 103;case 71:return 114;case 72:return 111;case 73:return 104;case 74:case 75:return 112;case 76:return 105;case 77:return 61;case 78:return 81;case 79:return"SEP";case 80:return 80;case 81:return 98;case 82:return 63;case 83:return 62;case 84:return 65;case 85:return 64;case 86:return 109;case 87:return 110;case 88:return 71;case 89:return 49;case 90:return 50;case 91:return 40;case 92:return 41;case 93:return 59;case 94:return 60;case 95:return 120;case 96:return 21;case 97:return 22;case 98:return 23}},rules:[/^(?:%%\{)/,/^(?:((?:(?!\}%%)[^:.])*))/,/^(?::)/,/^(?:\}%%)/,/^(?:((?:(?!\}%%).|\n)*))/,/^(?:%%(?!\{)[^\n]*)/,/^(?:[^\}]%%[^\n]*)/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:style\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:href[\s]+["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:click[\s]+)/,/^(?:[\s\n])/,/^(?:[^\s\n]*)/,/^(?:graph\b)/,/^(?:flowchart\b)/,/^(?:subgraph\b)/,/^(?:end\b\s*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:(\r?\n)*\s*\n)/,/^(?:\s*LR\b)/,/^(?:\s*RL\b)/,/^(?:\s*TB\b)/,/^(?:\s*BT\b)/,/^(?:\s*TD\b)/,/^(?:\s*BR\b)/,/^(?:\s*<)/,/^(?:\s*>)/,/^(?:\s*\^)/,/^(?:\s*v\b)/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::::)/,/^(?::)/,/^(?:&)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:\(-)/,/^(?:-\))/,/^(?:\(\[)/,/^(?:\]\))/,/^(?:\[\[)/,/^(?:\]\])/,/^(?:\[\()/,/^(?:\)\])/,/^(?:-)/,/^(?:\.)/,/^(?:[\_])/,/^(?:\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:\\\|)/,/^(?:v\b)/,/^(?:[A-Za-z]+)/,/^(?:\\\])/,/^(?:\[\/)/,/^(?:\/\])/,/^(?:\[\\)/,/^(?:[!"#$%&'*+,-.`?\\_/])/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\|)/,/^(?:\()/,/^(?:\))/,/^(?:\[)/,/^(?:\])/,/^(?:\{)/,/^(?:\})/,/^(?:")/,/^(?:(\r?\n)+)/,/^(?:\s)/,/^(?:$)/],conditions:{close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},callbackargs:{rules:[23,24],inclusive:!1},callbackname:{rules:[20,21,22],inclusive:!1},href:{rules:[17,18],inclusive:!1},click:{rules:[26,27],inclusive:!1},vertex:{rules:[],inclusive:!1},dir:{rules:[36,37,38,39,40,41,42,43,44,45,46],inclusive:!1},string:{rules:[8,9],inclusive:!1},INITIAL:{rules:[0,5,6,7,10,11,12,13,14,15,16,19,25,28,29,30,31,32,33,34,35,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98],inclusive:!0}}};function Xe(){this.yy={}}return $e.lexer=Ve,Xe.prototype=$e,$e.Parser=Xe,new Xe}();t.parser=o,t.Parser=o.Parser,t.parse=function(){return o.parse.apply(o,arguments)},t.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),e.exit(1));var o=n(/*! fs */"./node_modules/node-libs-browser/mock/empty.js").readFileSync(n(/*! path */"./node_modules/path-browserify/index.js").normalize(r[1]),"utf8");return t.parser.parse(o)},n.c[n.s]===r&&t.main(e.argv.slice(1))}).call(this,n(/*! ./../../../../node_modules/process/browser.js */"./node_modules/process/browser.js"),n(/*! ./../../../../node_modules/webpack/buildin/module.js */"./node_modules/webpack/buildin/module.js")(e))},"./src/diagrams/flowchart/styles.js": -/*!******************************************!*\ - !*** ./src/diagrams/flowchart/styles.js ***! - \******************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(e){return".label {\n font-family: ".concat(e.fontFamily,";\n color: ").concat(e.nodeTextColor||e.textColor,";\n }\n\n .label text {\n fill: ").concat(e.nodeTextColor||e.textColor,";\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ").concat(e.mainBkg,";\n stroke: ").concat(e.nodeBorder,";\n stroke-width: 1px;\n }\n\n .node .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n .arrowheadPath {\n fill: ").concat(e.arrowheadColor,";\n }\n\n .edgePath .path {\n stroke: ").concat(e.lineColor,";\n stroke-width: 1.5px;\n }\n\n .flowchart-link {\n stroke: ").concat(e.lineColor,";\n fill: none;\n }\n\n .edgeLabel {\n background-color: ").concat(e.edgeLabelBackground,";\n rect {\n opacity: 0.5;\n background-color: ").concat(e.edgeLabelBackground,";\n fill: ").concat(e.edgeLabelBackground,";\n }\n text-align: center;\n }\n\n .cluster rect {\n fill: ").concat(e.clusterBkg,";\n stroke: ").concat(e.clusterBorder,";\n stroke-width: 1px;\n }\n\n .cluster text {\n fill: ").concat(e.titleColor,";\n }\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: ").concat(e.fontFamily,";\n font-size: 12px;\n background: ").concat(e.tertiaryColor,";\n border: 1px solid ").concat(e.border2,";\n border-radius: 2px;\n pointer-events: none;\n z-index: 100;\n }\n")}},"./src/diagrams/gantt/ganttDb.js": -/*!***************************************!*\ - !*** ./src/diagrams/gantt/ganttDb.js ***! - \***************************************/ -/*! exports provided: parseDirective, clear, setAxisFormat, getAxisFormat, setTodayMarker, getTodayMarker, setDateFormat, enableInclusiveEndDates, endDatesAreInclusive, getDateFormat, setExcludes, getExcludes, setTitle, getTitle, addSection, getSections, getTasks, addTask, findTaskById, addTaskOrg, setLink, setClass, setClickEvent, bindFunctions, default */function(e,t,n){"use strict";n.r(t),n.d(t,"parseDirective",(function(){return O})),n.d(t,"clear",(function(){return C})),n.d(t,"setAxisFormat",(function(){return E})),n.d(t,"getAxisFormat",(function(){return T})),n.d(t,"setTodayMarker",(function(){return S})),n.d(t,"getTodayMarker",(function(){return A})),n.d(t,"setDateFormat",(function(){return M})),n.d(t,"enableInclusiveEndDates",(function(){return D})),n.d(t,"endDatesAreInclusive",(function(){return B})),n.d(t,"getDateFormat",(function(){return N})),n.d(t,"setExcludes",(function(){return L})),n.d(t,"getExcludes",(function(){return P})),n.d(t,"setTitle",(function(){return I})),n.d(t,"getTitle",(function(){return R})),n.d(t,"addSection",(function(){return F})),n.d(t,"getSections",(function(){return Y})),n.d(t,"getTasks",(function(){return z})),n.d(t,"addTask",(function(){return Q})),n.d(t,"findTaskById",(function(){return J})),n.d(t,"addTaskOrg",(function(){return ee})),n.d(t,"setLink",(function(){return ne})),n.d(t,"setClass",(function(){return re})),n.d(t,"setClickEvent",(function(){return ie})),n.d(t,"bindFunctions",(function(){return se}));var r=n(/*! moment-mini */"./node_modules/moment-mini/moment.min.js"),o=n.n(r),i=n(/*! @braintree/sanitize-url */"./node_modules/@braintree/sanitize-url/index.js"),s=n(/*! ../../logger */"./src/logger.js"),a=n(/*! ../../config */"./src/config.js"),c=n(/*! ../../utils */"./src/utils.js"),u=n(/*! ../../mermaidAPI */"./src/mermaidAPI.js");function d(e){return function(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);t=6&&n.indexOf("weekends")>=0||n.indexOf(e.format("dddd").toLowerCase())>=0||n.indexOf(e.format(t.trim()))>=0},G=function(e,t,n){if(n.length&&!e.manualEndTime){var r=o()(e.startTime,t,!0);r.add(1,"d");var i=o()(e.endTime,t,!0),s=U(r,i,t,n);e.endTime=i.toDate(),e.renderEndTime=s}},U=function(e,t,n,r){for(var o=!1,i=null;e<=t;)o||(i=t.toDate()),(o=q(e,n,r))&&t.add(1,"d"),e.add(1,"d");return i},W=function(e,t,n){n=n.trim();var r=/^after\s+([\d\w- ]+)/.exec(n.trim());if(null!==r){var i=null;if(r[1].split(" ").forEach((function(e){var t=J(e);void 0!==t&&(i?t.endTime>i.endTime&&(i=t):i=t)})),i)return i.endTime;var a=new Date;return a.setHours(0,0,0,0),a}var c=o()(n,t.trim(),!0);return c.isValid()?c.toDate():(s.logger.debug("Invalid date:"+n),s.logger.debug("With date format:"+t.trim()),new Date)},H=function(e,t){if(null!==e)switch(e[2]){case"s":t.add(e[1],"seconds");break;case"m":t.add(e[1],"minutes");break;case"h":t.add(e[1],"hours");break;case"d":t.add(e[1],"days");break;case"w":t.add(e[1],"weeks")}return t.toDate()},$=function(e,t,n,r){r=r||!1,n=n.trim();var i=o()(n,t.trim(),!0);return i.isValid()?(r&&i.add(1,"d"),i.toDate()):H(/^([\d]+)([wdhms])/.exec(n.trim()),o()(e))},V=0,X=function(e){return void 0===e?"task"+(V+=1):e},Z=[],K={},Q=function(e,t){var n={section:v,type:v,processed:!1,manualEndTime:!1,renderEndTime:null,raw:{data:t},task:e,classes:[]},r=function(e,t){var n=(":"===t.substr(0,1)?t.substr(1,t.length):t).split(","),r={};ae(n,r,j);for(var o=0;or?o=1:n0&&(t=e.classes.join(" "));for(var n=0,r=0;rn-t?n+i+1.5*u.leftPadding>s?t+r-5:n+r+5:(n-t)/2+t+r})).attr("y",(function(e,r){return e.order*t+u.barHeight/2+(u.fontSize/2-2)+n})).attr("text-height",o).attr("class",(function(e){var t=h(e.startTime),n=h(e.endTime);e.milestone&&(n=t+o);var r=this.getBBox().width,i="";e.classes.length>0&&(i=e.classes.join(" "));for(var a=0,c=0;cn-t?n+r+1.5*u.leftPadding>s?i+" taskTextOutsideLeft taskTextOutside"+a+" "+d:i+" taskTextOutsideRight taskTextOutside"+a+" "+d+" width-"+r:i+" taskText taskText"+a+" "+d+" width-"+r}))}(g,v,j,x,_,0,y),function(e,t){for(var n=[],r=0,o=0;o0&&s.setAttribute("dy","1em"),s.textContent=t[o],r.appendChild(s)}return r})).attr("x",10).attr("y",(function(o,i){if(!(i>0))return o[1]*e/2+t;for(var s=0;sl&&T.push("'"+this.terminals_[O]+"'");A=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+T.join(", ")+", got '"+(this.terminals_[v]||v)+"'":"Parse error on line "+(c+1)+": Unexpected "+(v==f?"end of input":"'"+(this.terminals_[v]||v)+"'"),this.parseError(A,{text:p.match,token:this.terminals_[v]||v,line:p.yylineno,loc:y,expected:T})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+x+", token: "+v);switch(k[0]){case 1:n.push(v),o.push(p.yytext),i.push(p.yylloc),n.push(k[1]),v=null,j?(v=j,j=null):(u=p.yyleng,a=p.yytext,c=p.yylineno,y=p.yylloc,d>0&&d--);break;case 2:if(C=this.productions_[k[1]][1],S.$=o[o.length-C],S._$={first_line:i[i.length-(C||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(C||1)].first_column,last_column:i[i.length-1].last_column},b&&(S._$.range=[i[i.length-(C||1)].range[0],i[i.length-1].range[1]]),void 0!==(w=this.performAction.apply(S,[a,u,c,m.yy,k[1],o,i].concat(h))))return w;C&&(n=n.slice(0,-1*C*2),o=o.slice(0,-1*C),i=i.slice(0,-1*C)),n.push(this.productions_[k[1]][0]),o.push(S.$),i.push(S._$),E=s[n[n.length-2]][n[n.length-1]],n.push(E);break;case 3:return!0}}return!0}},g={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,n=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var o=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[o[0],o[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var n,r,o;if(this.options.backtrack_lexer&&(o={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(o.yylloc.range=this.yylloc.range.slice(0))),(r=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],n=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var i in o)this[i]=o[i];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var o=this._currentRules(),i=0;it[0].length)){if(t=n,r=i,this.options.backtrack_lexer){if(!1!==(e=this.test_match(n,o[i])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,o[r]))&&e:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return e||this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(e){return(e=this.conditionStack.length-1-Math.abs(e||0))>=0?this.conditionStack[e]:"INITIAL"},pushState:function(e){this.begin(e)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(e,t,n,r){switch(n){case 0:return this.begin("open_directive"),32;case 1:return this.begin("type_directive"),33;case 2:return this.popState(),this.begin("arg_directive"),25;case 3:return this.popState(),this.popState(),35;case 4:return 34;case 5:case 6:case 7:break;case 8:return 11;case 9:case 10:case 11:break;case 12:this.begin("href");break;case 13:this.popState();break;case 14:return 30;case 15:this.begin("callbackname");break;case 16:this.popState();break;case 17:this.popState(),this.begin("callbackargs");break;case 18:return 28;case 19:this.popState();break;case 20:return 29;case 21:this.begin("click");break;case 22:this.popState();break;case 23:return 27;case 24:return 5;case 25:return 12;case 26:return 13;case 27:return 14;case 28:return 15;case 29:return 16;case 30:return"date";case 31:return 17;case 32:return 18;case 33:return 20;case 34:return 21;case 35:return 25;case 36:return 7;case 37:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%%(?!\{)*[^\n]*)/i,/^(?:[^\}]%%*[^\n]*)/i,/^(?:%%*[^\n]*[\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:href[\s]+["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:call[\s]+)/i,/^(?:\([\s]*\))/i,/^(?:\()/i,/^(?:[^(]*)/i,/^(?:\))/i,/^(?:[^)]*)/i,/^(?:click[\s]+)/i,/^(?:[\s\n])/i,/^(?:[^\s\n]*)/i,/^(?:gantt\b)/i,/^(?:dateFormat\s[^#\n;]+)/i,/^(?:inclusiveEndDates\b)/i,/^(?:axisFormat\s[^#\n;]+)/i,/^(?:excludes\s[^#\n;]+)/i,/^(?:todayMarker\s[^\n;]+)/i,/^(?:\d\d\d\d-\d\d-\d\d\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},callbackargs:{rules:[19,20],inclusive:!1},callbackname:{rules:[16,17,18],inclusive:!1},href:{rules:[13,14],inclusive:!1},click:{rules:[22,23],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,12,15,21,24,25,26,27,28,29,30,31,32,33,34,35,36,37],inclusive:!0}}};function y(){this.yy={}}return m.lexer=g,y.prototype=m,m.Parser=y,new y}();t.parser=o,t.Parser=o.Parser,t.parse=function(){return o.parse.apply(o,arguments)},t.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),e.exit(1));var o=n(/*! fs */"./node_modules/node-libs-browser/mock/empty.js").readFileSync(n(/*! path */"./node_modules/path-browserify/index.js").normalize(r[1]),"utf8");return t.parser.parse(o)},n.c[n.s]===r&&t.main(e.argv.slice(1))}).call(this,n(/*! ./../../../../node_modules/process/browser.js */"./node_modules/process/browser.js"),n(/*! ./../../../../node_modules/webpack/buildin/module.js */"./node_modules/webpack/buildin/module.js")(e))},"./src/diagrams/gantt/styles.js": -/*!**************************************!*\ - !*** ./src/diagrams/gantt/styles.js ***! - \**************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(e){return'\n .mermaid-main-font {\n font-family: "trebuchet ms", verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n\n .section {\n stroke: none;\n opacity: 0.2;\n }\n\n .section0 {\n fill: '.concat(e.sectionBkgColor,";\n }\n\n .section2 {\n fill: ").concat(e.sectionBkgColor2,";\n }\n\n .section1,\n .section3 {\n fill: ").concat(e.altSectionBkgColor,";\n opacity: 0.2;\n }\n\n .sectionTitle0 {\n fill: ").concat(e.titleColor,";\n }\n\n .sectionTitle1 {\n fill: ").concat(e.titleColor,";\n }\n\n .sectionTitle2 {\n fill: ").concat(e.titleColor,";\n }\n\n .sectionTitle3 {\n fill: ").concat(e.titleColor,";\n }\n\n .sectionTitle {\n text-anchor: start;\n font-size: 11px;\n text-height: 14px;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n\n }\n\n\n /* Grid and axis */\n\n .grid .tick {\n stroke: ").concat(e.gridColor,";\n opacity: 0.8;\n shape-rendering: crispEdges;\n text {\n font-family: ").concat(e.fontFamily,";\n fill: ").concat(e.textColor,";\n }\n }\n\n .grid path {\n stroke-width: 0;\n }\n\n\n /* Today line */\n\n .today {\n fill: none;\n stroke: ").concat(e.todayLineColor,";\n stroke-width: 2px;\n }\n\n\n /* Task styling */\n\n /* Default task */\n\n .task {\n stroke-width: 2;\n }\n\n .taskText {\n text-anchor: middle;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n\n .taskText:not([font-size]) {\n font-size: 11px;\n }\n\n .taskTextOutsideRight {\n fill: ").concat(e.taskTextDarkColor,";\n text-anchor: start;\n font-size: 11px;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n\n }\n\n .taskTextOutsideLeft {\n fill: ").concat(e.taskTextDarkColor,";\n text-anchor: end;\n font-size: 11px;\n }\n\n /* Special case clickable */\n .task.clickable {\n cursor: pointer;\n }\n .taskText.clickable {\n cursor: pointer;\n fill: ").concat(e.taskTextClickableColor," !important;\n font-weight: bold;\n }\n\n .taskTextOutsideLeft.clickable {\n cursor: pointer;\n fill: ").concat(e.taskTextClickableColor," !important;\n font-weight: bold;\n }\n\n .taskTextOutsideRight.clickable {\n cursor: pointer;\n fill: ").concat(e.taskTextClickableColor," !important;\n font-weight: bold;\n }\n\n /* Specific task settings for the sections*/\n\n .taskText0,\n .taskText1,\n .taskText2,\n .taskText3 {\n fill: ").concat(e.taskTextColor,";\n }\n\n .task0,\n .task1,\n .task2,\n .task3 {\n fill: ").concat(e.taskBkgColor,";\n stroke: ").concat(e.taskBorderColor,";\n }\n\n .taskTextOutside0,\n .taskTextOutside2\n {\n fill: ").concat(e.taskTextOutsideColor,";\n }\n\n .taskTextOutside1,\n .taskTextOutside3 {\n fill: ").concat(e.taskTextOutsideColor,";\n }\n\n\n /* Active task */\n\n .active0,\n .active1,\n .active2,\n .active3 {\n fill: ").concat(e.activeTaskBkgColor,";\n stroke: ").concat(e.activeTaskBorderColor,";\n }\n\n .activeText0,\n .activeText1,\n .activeText2,\n .activeText3 {\n fill: ").concat(e.taskTextDarkColor," !important;\n }\n\n\n /* Completed task */\n\n .done0,\n .done1,\n .done2,\n .done3 {\n stroke: ").concat(e.doneTaskBorderColor,";\n fill: ").concat(e.doneTaskBkgColor,";\n stroke-width: 2;\n }\n\n .doneText0,\n .doneText1,\n .doneText2,\n .doneText3 {\n fill: ").concat(e.taskTextDarkColor," !important;\n }\n\n\n /* Tasks on the critical line */\n\n .crit0,\n .crit1,\n .crit2,\n .crit3 {\n stroke: ").concat(e.critBorderColor,";\n fill: ").concat(e.critBkgColor,";\n stroke-width: 2;\n }\n\n .activeCrit0,\n .activeCrit1,\n .activeCrit2,\n .activeCrit3 {\n stroke: ").concat(e.critBorderColor,";\n fill: ").concat(e.activeTaskBkgColor,";\n stroke-width: 2;\n }\n\n .doneCrit0,\n .doneCrit1,\n .doneCrit2,\n .doneCrit3 {\n stroke: ").concat(e.critBorderColor,";\n fill: ").concat(e.doneTaskBkgColor,";\n stroke-width: 2;\n cursor: pointer;\n shape-rendering: crispEdges;\n }\n\n .milestone {\n transform: rotate(45deg) scale(0.8,0.8);\n }\n\n .milestoneText {\n font-style: italic;\n }\n .doneCritText0,\n .doneCritText1,\n .doneCritText2,\n .doneCritText3 {\n fill: ").concat(e.taskTextDarkColor," !important;\n }\n\n .activeCritText0,\n .activeCritText1,\n .activeCritText2,\n .activeCritText3 {\n fill: ").concat(e.taskTextDarkColor," !important;\n }\n\n .titleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ").concat(e.textColor," ;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n")}},"./src/diagrams/git/gitGraphAst.js": -/*!*****************************************!*\ - !*** ./src/diagrams/git/gitGraphAst.js ***! - \*****************************************/ -/*! exports provided: setDirection, setOptions, getOptions, commit, branch, merge, checkout, reset, prettyPrint, clear, getBranchesAsObjArray, getBranches, getCommits, getCommitsArray, getCurrentBranch, getDirection, getHead, default */function(e,t,n){"use strict";n.r(t),n.d(t,"setDirection",(function(){return h})),n.d(t,"setOptions",(function(){return m})),n.d(t,"getOptions",(function(){return g})),n.d(t,"commit",(function(){return y})),n.d(t,"branch",(function(){return b})),n.d(t,"merge",(function(){return _})),n.d(t,"checkout",(function(){return v})),n.d(t,"reset",(function(){return j})),n.d(t,"prettyPrint",(function(){return w})),n.d(t,"clear",(function(){return O})),n.d(t,"getBranchesAsObjArray",(function(){return C})),n.d(t,"getBranches",(function(){return E})),n.d(t,"getCommits",(function(){return T})),n.d(t,"getCommitsArray",(function(){return S})),n.d(t,"getCurrentBranch",(function(){return A})),n.d(t,"getDirection",(function(){return M})),n.d(t,"getHead",(function(){return D}));var r=n(/*! ../../logger */"./src/logger.js"),o=n(/*! ../../utils */"./src/utils.js"),i={},s=null,a={master:s},c="master",u="LR",d=0;function l(){return Object(o.random)({length:7})}function f(e,t){for(r.logger.debug("Entering isfastforwardable:",e.id,t.id);e.seq<=t.seq&&e!==t&&null!=t.parent;){if(Array.isArray(t.parent))return r.logger.debug("In merge commit:",t.parent),f(e,i[t.parent[0]])||f(e,i[t.parent[1]]);t=i[t.parent]}return r.logger.debug(e.id,t.id),e.id===t.id}var h=function(e){u=e},p={},m=function(e){r.logger.debug("options str",e),e=(e=e&&e.trim())||"{}";try{p=JSON.parse(e)}catch(e){r.logger.error("error while parsing gitGraph options",e.message)}},g=function(){return p},y=function(e){var t={id:l(),message:e,seq:d++,parent:null==s?null:s.id};s=t,i[t.id]=t,a[c]=t.id,r.logger.debug("in pushCommit "+t.id)},b=function(e){a[e]=null!=s?s.id:null,r.logger.debug("in createBranch")},_=function(e){var t=i[a[c]],n=i[a[e]];if(function(e,t){return e.seq>t.seq&&f(t,e)}(t,n))r.logger.debug("Already merged");else{if(f(t,n))a[c]=a[e],s=i[a[c]];else{var o={id:l(),message:"merged branch "+e+" into "+c,seq:d++,parent:[null==s?null:s.id,a[e]]};s=o,i[o.id]=o,a[c]=o.id}r.logger.debug(a),r.logger.debug("in mergeBranch")}},v=function(e){r.logger.debug("in checkout");var t=a[c=e];s=i[t]},j=function(e){r.logger.debug("in reset",e);var t=e.split(":")[0],n=parseInt(e.split(":")[1]),o="HEAD"===t?s:i[a[t]];for(r.logger.debug(o,n);n>0;)if(n--,!(o=i[o.parent])){var u="Critical error - unique parent commit not found during reset";throw r.logger.error(u),u}s=o,a[c]=o.id};function x(e,t,n){var r=e.indexOf(t);-1===r?e.push(n):e.splice(r,1,n)}function k(e){var t=e.reduce((function(e,t){return e.seq>t.seq?e:t}),e[0]),n="";e.forEach((function(e){n+=e===t?"\t*":"\t|"}));var o,s,c,u=[n,t.id,t.seq];for(var d in a)a[d]===t.id&&u.push(d);if(r.logger.debug(u.join(" ")),Array.isArray(t.parent)){var l=i[t.parent[0]];x(e,t,l),e.push(i[t.parent[1]])}else{if(null==t.parent)return;var f=i[t.parent];x(e,t,f)}o=e,s=function(e){return e.id},c=Object.create(null),k(e=o.reduce((function(e,t){var n=s(t);return c[n]||(c[n]=!0,e.push(t)),e}),[]))}var w=function(){r.logger.debug(i),k([S()[0]])},O=function(){i={},a={master:s=null},c="master",d=0},C=function(){var e=[];for(var t in a)e.push({name:t,commit:i[a[t]]});return e},E=function(){return a},T=function(){return i},S=function(){var e=Object.keys(i).map((function(e){return i[e]}));return e.forEach((function(e){r.logger.debug(e.id)})),e.sort((function(e,t){return t.seq-e.seq})),e},A=function(){return c},M=function(){return u},D=function(){return s};t.default={setDirection:h,setOptions:m,getOptions:g,commit:y,branch:b,merge:_,checkout:v,reset:j,prettyPrint:w,clear:O,getBranchesAsObjArray:C,getBranches:E,getCommits:T,getCommitsArray:S,getCurrentBranch:A,getDirection:M,getHead:D}},"./src/diagrams/git/gitGraphRenderer.js": -/*!**********************************************!*\ - !*** ./src/diagrams/git/gitGraphRenderer.js ***! - \**********************************************/ -/*! exports provided: setConf, draw, default */function(e,t,n){"use strict";n.r(t),n.d(t,"setConf",(function(){return h})),n.d(t,"draw",(function(){return v}));var r,o=n(/*! d3 */"./node_modules/d3/index.js"),i=n(/*! ./gitGraphAst */"./src/diagrams/git/gitGraphAst.js"),s=n(/*! ./parser/gitGraph */"./src/diagrams/git/parser/gitGraph.jison"),a=n.n(s),c=n(/*! ../../logger */"./src/logger.js"),u=n(/*! ../../utils */"./src/utils.js"),d={},l={nodeSpacing:150,nodeFillColor:"yellow",nodeStrokeWidth:2,nodeStrokeColor:"grey",lineStrokeWidth:4,branchOffset:50,lineColor:"grey",leftMargin:50,branchColors:["#442f74","#983351","#609732","#AA9A39"],nodeRadius:10,nodeLabel:{width:75,height:100,x:-25,y:0}},f={},h=function(e){f=e};function p(e,t,n,r){var i=Object(u.interpolateToCurve)(r,o.curveBasis),s=l.branchColors[n%l.branchColors.length],a=Object(o.line)().x((function(e){return Math.round(e.x)})).y((function(e){return Math.round(e.y)})).curve(i);e.append("svg:path").attr("d",a(t)).style("stroke",s).style("stroke-width",l.lineStrokeWidth).style("fill","none")}function m(e,t){t=t||e.node().getBBox();var n=e.node().getCTM();return{left:n.e+t.x*n.a,top:n.f+t.y*n.d,width:t.width,height:t.height}}function g(e,t,n,r,o){c.logger.debug("svgDrawLineForCommits: ",t,n);var i=m(e.select("#node-"+t+" circle")),s=m(e.select("#node-"+n+" circle"));switch(r){case"LR":if(i.left-s.left>l.nodeSpacing){var a={x:i.left-l.nodeSpacing,y:s.top+s.height/2};p(e,[a,{x:s.left+s.width,y:s.top+s.height/2}],o,"linear"),p(e,[{x:i.left,y:i.top+i.height/2},{x:i.left-l.nodeSpacing/2,y:i.top+i.height/2},{x:i.left-l.nodeSpacing/2,y:a.y},a],o)}else p(e,[{x:i.left,y:i.top+i.height/2},{x:i.left-l.nodeSpacing/2,y:i.top+i.height/2},{x:i.left-l.nodeSpacing/2,y:s.top+s.height/2},{x:s.left+s.width,y:s.top+s.height/2}],o);break;case"BT":if(s.top-i.top>l.nodeSpacing){var u={x:s.left+s.width/2,y:i.top+i.height+l.nodeSpacing};p(e,[u,{x:s.left+s.width/2,y:s.top}],o,"linear"),p(e,[{x:i.left+i.width/2,y:i.top+i.height},{x:i.left+i.width/2,y:i.top+i.height+l.nodeSpacing/2},{x:s.left+s.width/2,y:u.y-l.nodeSpacing/2},u],o)}else p(e,[{x:i.left+i.width/2,y:i.top+i.height},{x:i.left+i.width/2,y:i.top+l.nodeSpacing/2},{x:s.left+s.width/2,y:s.top-l.nodeSpacing/2},{x:s.left+s.width/2,y:s.top}],o)}}function y(e,t){return e.select(t).node().cloneNode(!0)}function b(e,t,n,o){var i,s=Object.keys(d).length;if("string"==typeof t)do{if(i=d[t],c.logger.debug("in renderCommitHistory",i.id,i.seq),e.select("#node-"+t).size()>0)return;e.append((function(){return y(e,"#def-commit")})).attr("class","commit").attr("id",(function(){return"node-"+i.id})).attr("transform",(function(){switch(o){case"LR":return"translate("+(i.seq*l.nodeSpacing+l.leftMargin)+", "+r*l.branchOffset+")";case"BT":return"translate("+(r*l.branchOffset+l.leftMargin)+", "+(s-i.seq)*l.nodeSpacing+")"}})).attr("fill",l.nodeFillColor).attr("stroke",l.nodeStrokeColor).attr("stroke-width",l.nodeStrokeWidth);var a=void 0;for(var u in n)if(n[u].commit===i){a=n[u];break}a&&(c.logger.debug("found branch ",a.name),e.select("#node-"+i.id+" p").append("xhtml:span").attr("class","branch-label").text(a.name+", ")),e.select("#node-"+i.id+" p").append("xhtml:span").attr("class","commit-id").text(i.id),""!==i.message&&"BT"===o&&e.select("#node-"+i.id+" p").append("xhtml:span").attr("class","commit-msg").text(", "+i.message),t=i.parent}while(t&&d[t]);Array.isArray(t)&&(c.logger.debug("found merge commmit",t),b(e,t[0],n,o),r++,b(e,t[1],n,o),r--)}function _(e,t,n,r){for(r=r||0;t.seq>0&&!t.lineDrawn;)"string"==typeof t.parent?(g(e,t.id,t.parent,n,r),t.lineDrawn=!0,t=d[t.parent]):Array.isArray(t.parent)&&(g(e,t.id,t.parent[0],n,r),g(e,t.id,t.parent[1],n,r+1),_(e,d[t.parent[1]],n,r+1),t.lineDrawn=!0,t=d[t.parent[0]])}var v=function(e,t,n){try{var s=a.a.parser;s.yy=i.default,s.yy.clear(),c.logger.debug("in gitgraph renderer",e+"\n","id:",t,n),s.parse(e+"\n"),l=Object.assign(l,f,i.default.getOptions()),c.logger.debug("effective options",l);var u=i.default.getDirection();d=i.default.getCommits();var h=i.default.getBranchesAsObjArray();"BT"===u&&(l.nodeLabel.x=h.length*l.branchOffset,l.nodeLabel.width="100%",l.nodeLabel.y=-2*l.nodeRadius);var p=Object(o.select)('[id="'.concat(t,'"]'));for(var m in function(e){e.append("defs").append("g").attr("id","def-commit").append("circle").attr("r",l.nodeRadius).attr("cx",0).attr("cy",0),e.select("#def-commit").append("foreignObject").attr("width",l.nodeLabel.width).attr("height",l.nodeLabel.height).attr("x",l.nodeLabel.x).attr("y",l.nodeLabel.y).attr("class","node-label").attr("requiredFeatures","http://www.w3.org/TR/SVG11/feature#Extensibility").append("p").html("")}(p),r=1,h){var g=h[m];b(p,g.commit.id,h,u),_(p,g.commit,u),r++}p.attr("height",(function(){return"BT"===u?Object.keys(d).length*l.nodeSpacing:(h.length+1)*l.branchOffset}))}catch(e){c.logger.error("Error while rendering gitgraph"),c.logger.error(e.message)}};t.default={setConf:h,draw:v}},"./src/diagrams/git/parser/gitGraph.jison": -/*!************************************************!*\ - !*** ./src/diagrams/git/parser/gitGraph.jison ***! - \************************************************/ -/*! no static exports found */function(e,t,n){(function(e,r){var o=function(){var e=function(e,t,n,r){for(n=n||{},r=e.length;r--;n[e[r]]=t);return n},t=[2,3],n=[1,7],r=[7,12,15,17,19,20,21],o=[7,11,12,15,17,19,20,21],i=[2,20],s=[1,32],a={trace:function(){},yy:{},symbols_:{error:2,start:3,GG:4,":":5,document:6,EOF:7,DIR:8,options:9,body:10,OPT:11,NL:12,line:13,statement:14,COMMIT:15,commit_arg:16,BRANCH:17,ID:18,CHECKOUT:19,MERGE:20,RESET:21,reset_arg:22,STR:23,HEAD:24,reset_parents:25,CARET:26,$accept:0,$end:1},terminals_:{2:"error",4:"GG",5:":",7:"EOF",8:"DIR",11:"OPT",12:"NL",15:"COMMIT",17:"BRANCH",18:"ID",19:"CHECKOUT",20:"MERGE",21:"RESET",23:"STR",24:"HEAD",26:"CARET"},productions_:[0,[3,4],[3,5],[6,0],[6,2],[9,2],[9,1],[10,0],[10,2],[13,2],[13,1],[14,2],[14,2],[14,2],[14,2],[14,2],[16,0],[16,1],[22,2],[22,2],[25,0],[25,2]],performAction:function(e,t,n,r,o,i,s){var a=i.length-1;switch(o){case 1:return i[a-1];case 2:return r.setDirection(i[a-3]),i[a-1];case 4:r.setOptions(i[a-1]),this.$=i[a];break;case 5:i[a-1]+=i[a],this.$=i[a-1];break;case 7:this.$=[];break;case 8:i[a-1].push(i[a]),this.$=i[a-1];break;case 9:this.$=i[a-1];break;case 11:r.commit(i[a]);break;case 12:r.branch(i[a]);break;case 13:r.checkout(i[a]);break;case 14:r.merge(i[a]);break;case 15:r.reset(i[a]);break;case 16:this.$="";break;case 17:this.$=i[a];break;case 18:this.$=i[a-1]+":"+i[a];break;case 19:this.$=i[a-1]+":"+r.count,r.count=0;break;case 20:r.count=0;break;case 21:r.count+=1}},table:[{3:1,4:[1,2]},{1:[3]},{5:[1,3],8:[1,4]},{6:5,7:t,9:6,12:n},{5:[1,8]},{7:[1,9]},e(r,[2,7],{10:10,11:[1,11]}),e(o,[2,6]),{6:12,7:t,9:6,12:n},{1:[2,1]},{7:[2,4],12:[1,15],13:13,14:14,15:[1,16],17:[1,17],19:[1,18],20:[1,19],21:[1,20]},e(o,[2,5]),{7:[1,21]},e(r,[2,8]),{12:[1,22]},e(r,[2,10]),{12:[2,16],16:23,23:[1,24]},{18:[1,25]},{18:[1,26]},{18:[1,27]},{18:[1,30],22:28,24:[1,29]},{1:[2,2]},e(r,[2,9]),{12:[2,11]},{12:[2,17]},{12:[2,12]},{12:[2,13]},{12:[2,14]},{12:[2,15]},{12:i,25:31,26:s},{12:i,25:33,26:s},{12:[2,18]},{12:i,25:34,26:s},{12:[2,19]},{12:[2,21]}],defaultActions:{9:[2,1],21:[2,2],23:[2,11],24:[2,17],25:[2,12],26:[2,13],27:[2,14],28:[2,15],31:[2,18],33:[2,19],34:[2,21]},parseError:function(e,t){if(!t.recoverable){var n=new Error(e);throw n.hash=t,n}this.trace(e)},parse:function(e){var t=this,n=[0],r=[],o=[null],i=[],s=this.table,a="",c=0,u=0,d=0,l=2,f=1,h=i.slice.call(arguments,1),p=Object.create(this.lexer),m={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(m.yy[g]=this.yy[g]);p.setInput(e,m.yy),m.yy.lexer=p,m.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var y=p.yylloc;i.push(y);var b=p.options&&p.options.ranges;function _(){var e;return"number"!=typeof(e=r.pop()||p.lex()||f)&&(e instanceof Array&&(e=(r=e).pop()),e=t.symbols_[e]||e),e}"function"==typeof m.yy.parseError?this.parseError=m.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var v,j,x,k,w,O,C,E,T,S={};;){if(x=n[n.length-1],this.defaultActions[x]?k=this.defaultActions[x]:(null==v&&(v=_()),k=s[x]&&s[x][v]),void 0===k||!k.length||!k[0]){var A="";for(O in T=[],s[x])this.terminals_[O]&&O>l&&T.push("'"+this.terminals_[O]+"'");A=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+T.join(", ")+", got '"+(this.terminals_[v]||v)+"'":"Parse error on line "+(c+1)+": Unexpected "+(v==f?"end of input":"'"+(this.terminals_[v]||v)+"'"),this.parseError(A,{text:p.match,token:this.terminals_[v]||v,line:p.yylineno,loc:y,expected:T})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+x+", token: "+v);switch(k[0]){case 1:n.push(v),o.push(p.yytext),i.push(p.yylloc),n.push(k[1]),v=null,j?(v=j,j=null):(u=p.yyleng,a=p.yytext,c=p.yylineno,y=p.yylloc,d>0&&d--);break;case 2:if(C=this.productions_[k[1]][1],S.$=o[o.length-C],S._$={first_line:i[i.length-(C||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(C||1)].first_column,last_column:i[i.length-1].last_column},b&&(S._$.range=[i[i.length-(C||1)].range[0],i[i.length-1].range[1]]),void 0!==(w=this.performAction.apply(S,[a,u,c,m.yy,k[1],o,i].concat(h))))return w;C&&(n=n.slice(0,-1*C*2),o=o.slice(0,-1*C),i=i.slice(0,-1*C)),n.push(this.productions_[k[1]][0]),o.push(S.$),i.push(S._$),E=s[n[n.length-2]][n[n.length-1]],n.push(E);break;case 3:return!0}}return!0}},c={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,n=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var o=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[o[0],o[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var n,r,o;if(this.options.backtrack_lexer&&(o={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(o.yylloc.range=this.yylloc.range.slice(0))),(r=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],n=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var i in o)this[i]=o[i];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var o=this._currentRules(),i=0;it[0].length)){if(t=n,r=i,this.options.backtrack_lexer){if(!1!==(e=this.test_match(n,o[i])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,o[r]))&&e:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return e||this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(e){return(e=this.conditionStack.length-1-Math.abs(e||0))>=0?this.conditionStack[e]:"INITIAL"},pushState:function(e){this.begin(e)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(e,t,n,r){switch(n){case 0:return 12;case 1:case 2:case 3:break;case 4:return 4;case 5:return 15;case 6:return 17;case 7:return 20;case 8:return 21;case 9:return 19;case 10:case 11:return 8;case 12:return 5;case 13:return 26;case 14:this.begin("options");break;case 15:this.popState();break;case 16:return 11;case 17:this.begin("string");break;case 18:this.popState();break;case 19:return 23;case 20:return 18;case 21:return 7}},rules:[/^(?:(\r?\n)+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:gitGraph\b)/i,/^(?:commit\b)/i,/^(?:branch\b)/i,/^(?:merge\b)/i,/^(?:reset\b)/i,/^(?:checkout\b)/i,/^(?:LR\b)/i,/^(?:BT\b)/i,/^(?::)/i,/^(?:\^)/i,/^(?:options\r?\n)/i,/^(?:end\r?\n)/i,/^(?:[^\n]+\r?\n)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[a-zA-Z][-_\.a-zA-Z0-9]*[-_a-zA-Z0-9])/i,/^(?:$)/i],conditions:{options:{rules:[15,16],inclusive:!1},string:{rules:[18,19],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,17,20,21],inclusive:!0}}};function u(){this.yy={}}return a.lexer=c,u.prototype=a,a.Parser=u,new u}();t.parser=o,t.Parser=o.Parser,t.parse=function(){return o.parse.apply(o,arguments)},t.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),e.exit(1));var o=n(/*! fs */"./node_modules/node-libs-browser/mock/empty.js").readFileSync(n(/*! path */"./node_modules/path-browserify/index.js").normalize(r[1]),"utf8");return t.parser.parse(o)},n.c[n.s]===r&&t.main(e.argv.slice(1))}).call(this,n(/*! ./../../../../node_modules/process/browser.js */"./node_modules/process/browser.js"),n(/*! ./../../../../node_modules/webpack/buildin/module.js */"./node_modules/webpack/buildin/module.js")(e))},"./src/diagrams/git/styles.js": -/*!************************************!*\ - !*** ./src/diagrams/git/styles.js ***! - \************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(){return"\n .commit-id,\n .commit-msg,\n .branch-label {\n fill: lightgrey;\n color: lightgrey;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n"}},"./src/diagrams/info/infoDb.js": -/*!*************************************!*\ - !*** ./src/diagrams/info/infoDb.js ***! - \*************************************/ -/*! exports provided: setMessage, getMessage, setInfo, getInfo, default */function(e,t,n){"use strict";n.r(t),n.d(t,"setMessage",(function(){return s})),n.d(t,"getMessage",(function(){return a})),n.d(t,"setInfo",(function(){return c})),n.d(t,"getInfo",(function(){return u}));var r=n(/*! ../../logger */"./src/logger.js"),o="",i=!1,s=function(e){r.logger.debug("Setting message to: "+e),o=e},a=function(){return o},c=function(e){i=e},u=function(){return i};t.default={setMessage:s,getMessage:a,setInfo:c,getInfo:u}},"./src/diagrams/info/infoRenderer.js": -/*!*******************************************!*\ - !*** ./src/diagrams/info/infoRenderer.js ***! - \*******************************************/ -/*! exports provided: setConf, draw, default */function(e,t,n){"use strict";n.r(t),n.d(t,"setConf",(function(){return u})),n.d(t,"draw",(function(){return d}));var r=n(/*! d3 */"./node_modules/d3/index.js"),o=n(/*! ./infoDb */"./src/diagrams/info/infoDb.js"),i=n(/*! ./parser/info */"./src/diagrams/info/parser/info.jison"),s=n.n(i),a=n(/*! ../../logger */"./src/logger.js"),c={},u=function(e){Object.keys(e).forEach((function(t){c[t]=e[t]}))},d=function(e,t,n){try{var i=s.a.parser;i.yy=o.default,a.logger.debug("Renering info diagram\n"+e),i.parse(e),a.logger.debug("Parsed info diagram");var c=Object(r.select)("#"+t);c.append("g").append("text").attr("x",100).attr("y",40).attr("class","version").attr("font-size","32px").style("text-anchor","middle").text("v "+n),c.attr("height",100),c.attr("width",400)}catch(e){a.logger.error("Error while rendering info diagram"),a.logger.error(e.message)}};t.default={setConf:u,draw:d}},"./src/diagrams/info/parser/info.jison": -/*!*********************************************!*\ - !*** ./src/diagrams/info/parser/info.jison ***! - \*********************************************/ -/*! no static exports found */function(e,t,n){(function(e,r){var o=function(){var e=function(e,t,n,r){for(n=n||{},r=e.length;r--;n[e[r]]=t);return n},t=[6,9,10],n={trace:function(){},yy:{},symbols_:{error:2,start:3,info:4,document:5,EOF:6,line:7,statement:8,NL:9,showInfo:10,$accept:0,$end:1},terminals_:{2:"error",4:"info",6:"EOF",9:"NL",10:"showInfo"},productions_:[0,[3,3],[5,0],[5,2],[7,1],[7,1],[8,1]],performAction:function(e,t,n,r,o,i,s){switch(i.length,o){case 1:return r;case 4:break;case 6:r.setInfo(!0)}},table:[{3:1,4:[1,2]},{1:[3]},e(t,[2,2],{5:3}),{6:[1,4],7:5,8:6,9:[1,7],10:[1,8]},{1:[2,1]},e(t,[2,3]),e(t,[2,4]),e(t,[2,5]),e(t,[2,6])],defaultActions:{4:[2,1]},parseError:function(e,t){if(!t.recoverable){var n=new Error(e);throw n.hash=t,n}this.trace(e)},parse:function(e){var t=this,n=[0],r=[],o=[null],i=[],s=this.table,a="",c=0,u=0,d=0,l=2,f=1,h=i.slice.call(arguments,1),p=Object.create(this.lexer),m={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(m.yy[g]=this.yy[g]);p.setInput(e,m.yy),m.yy.lexer=p,m.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var y=p.yylloc;i.push(y);var b=p.options&&p.options.ranges;function _(){var e;return"number"!=typeof(e=r.pop()||p.lex()||f)&&(e instanceof Array&&(e=(r=e).pop()),e=t.symbols_[e]||e),e}"function"==typeof m.yy.parseError?this.parseError=m.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var v,j,x,k,w,O,C,E,T,S={};;){if(x=n[n.length-1],this.defaultActions[x]?k=this.defaultActions[x]:(null==v&&(v=_()),k=s[x]&&s[x][v]),void 0===k||!k.length||!k[0]){var A="";for(O in T=[],s[x])this.terminals_[O]&&O>l&&T.push("'"+this.terminals_[O]+"'");A=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+T.join(", ")+", got '"+(this.terminals_[v]||v)+"'":"Parse error on line "+(c+1)+": Unexpected "+(v==f?"end of input":"'"+(this.terminals_[v]||v)+"'"),this.parseError(A,{text:p.match,token:this.terminals_[v]||v,line:p.yylineno,loc:y,expected:T})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+x+", token: "+v);switch(k[0]){case 1:n.push(v),o.push(p.yytext),i.push(p.yylloc),n.push(k[1]),v=null,j?(v=j,j=null):(u=p.yyleng,a=p.yytext,c=p.yylineno,y=p.yylloc,d>0&&d--);break;case 2:if(C=this.productions_[k[1]][1],S.$=o[o.length-C],S._$={first_line:i[i.length-(C||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(C||1)].first_column,last_column:i[i.length-1].last_column},b&&(S._$.range=[i[i.length-(C||1)].range[0],i[i.length-1].range[1]]),void 0!==(w=this.performAction.apply(S,[a,u,c,m.yy,k[1],o,i].concat(h))))return w;C&&(n=n.slice(0,-1*C*2),o=o.slice(0,-1*C),i=i.slice(0,-1*C)),n.push(this.productions_[k[1]][0]),o.push(S.$),i.push(S._$),E=s[n[n.length-2]][n[n.length-1]],n.push(E);break;case 3:return!0}}return!0}},r={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,n=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var o=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[o[0],o[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var n,r,o;if(this.options.backtrack_lexer&&(o={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(o.yylloc.range=this.yylloc.range.slice(0))),(r=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],n=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var i in o)this[i]=o[i];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var o=this._currentRules(),i=0;it[0].length)){if(t=n,r=i,this.options.backtrack_lexer){if(!1!==(e=this.test_match(n,o[i])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,o[r]))&&e:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return e||this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(e){return(e=this.conditionStack.length-1-Math.abs(e||0))>=0?this.conditionStack[e]:"INITIAL"},pushState:function(e){this.begin(e)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(e,t,n,r){switch(n){case 0:return 4;case 1:return 9;case 2:return"space";case 3:return 10;case 4:return 6;case 5:return"TXT"}},rules:[/^(?:info\b)/i,/^(?:[\s\n\r]+)/i,/^(?:[\s]+)/i,/^(?:showInfo\b)/i,/^(?:$)/i,/^(?:.)/i],conditions:{INITIAL:{rules:[0,1,2,3,4,5],inclusive:!0}}};function o(){this.yy={}}return n.lexer=r,o.prototype=n,n.Parser=o,new o}();t.parser=o,t.Parser=o.Parser,t.parse=function(){return o.parse.apply(o,arguments)},t.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),e.exit(1));var o=n(/*! fs */"./node_modules/node-libs-browser/mock/empty.js").readFileSync(n(/*! path */"./node_modules/path-browserify/index.js").normalize(r[1]),"utf8");return t.parser.parse(o)},n.c[n.s]===r&&t.main(e.argv.slice(1))}).call(this,n(/*! ./../../../../node_modules/process/browser.js */"./node_modules/process/browser.js"),n(/*! ./../../../../node_modules/webpack/buildin/module.js */"./node_modules/webpack/buildin/module.js")(e))},"./src/diagrams/info/styles.js": -/*!*************************************!*\ - !*** ./src/diagrams/info/styles.js ***! - \*************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(){return""}},"./src/diagrams/pie/parser/pie.jison": -/*!*******************************************!*\ - !*** ./src/diagrams/pie/parser/pie.jison ***! - \*******************************************/ -/*! no static exports found */function(e,t,n){(function(e,r){var o=function(){var e=function(e,t,n,r){for(n=n||{},r=e.length;r--;n[e[r]]=t);return n},t=[1,4],n=[1,5],r=[1,6],o=[1,7],i=[1,9],s=[1,10,12,19,20,21,22],a=[1,6,10,12,19,20,21,22],c=[19,20,21],u=[1,22],d=[6,19,20,21,22],l={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,directive:5,PIE:6,document:7,line:8,statement:9,txt:10,value:11,title:12,title_value:13,openDirective:14,typeDirective:15,closeDirective:16,":":17,argDirective:18,NEWLINE:19,";":20,EOF:21,open_directive:22,type_directive:23,arg_directive:24,close_directive:25,$accept:0,$end:1},terminals_:{2:"error",6:"PIE",10:"txt",11:"value",12:"title",13:"title_value",17:":",19:"NEWLINE",20:";",21:"EOF",22:"open_directive",23:"type_directive",24:"arg_directive",25:"close_directive"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[9,0],[9,2],[9,2],[9,1],[5,3],[5,5],[4,1],[4,1],[4,1],[14,1],[15,1],[18,1],[16,1]],performAction:function(e,t,n,r,o,i,s){var a=i.length-1;switch(o){case 6:this.$=i[a-1];break;case 8:r.addSection(i[a-1],r.cleanupValue(i[a]));break;case 9:this.$=i[a].trim(),r.setTitle(this.$);break;case 16:r.parseDirective("%%{","open_directive");break;case 17:r.parseDirective(i[a],"type_directive");break;case 18:i[a]=i[a].trim().replace(/'/g,'"'),r.parseDirective(i[a],"arg_directive");break;case 19:r.parseDirective("}%%","close_directive","pie")}},table:[{3:1,4:2,5:3,6:t,14:8,19:n,20:r,21:o,22:i},{1:[3]},{3:10,4:2,5:3,6:t,14:8,19:n,20:r,21:o,22:i},{3:11,4:2,5:3,6:t,14:8,19:n,20:r,21:o,22:i},e(s,[2,4],{7:12}),e(a,[2,13]),e(a,[2,14]),e(a,[2,15]),{15:13,23:[1,14]},{23:[2,16]},{1:[2,1]},{1:[2,2]},e(c,[2,7],{14:8,8:15,9:16,5:19,1:[2,3],10:[1,17],12:[1,18],22:i}),{16:20,17:[1,21],25:u},e([17,25],[2,17]),e(s,[2,5]),{4:23,19:n,20:r,21:o},{11:[1,24]},{13:[1,25]},e(c,[2,10]),e(d,[2,11]),{18:26,24:[1,27]},e(d,[2,19]),e(s,[2,6]),e(c,[2,8]),e(c,[2,9]),{16:28,25:u},{25:[2,18]},e(d,[2,12])],defaultActions:{9:[2,16],10:[2,1],11:[2,2],27:[2,18]},parseError:function(e,t){if(!t.recoverable){var n=new Error(e);throw n.hash=t,n}this.trace(e)},parse:function(e){var t=this,n=[0],r=[],o=[null],i=[],s=this.table,a="",c=0,u=0,d=0,l=2,f=1,h=i.slice.call(arguments,1),p=Object.create(this.lexer),m={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(m.yy[g]=this.yy[g]);p.setInput(e,m.yy),m.yy.lexer=p,m.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var y=p.yylloc;i.push(y);var b=p.options&&p.options.ranges;function _(){var e;return"number"!=typeof(e=r.pop()||p.lex()||f)&&(e instanceof Array&&(e=(r=e).pop()),e=t.symbols_[e]||e),e}"function"==typeof m.yy.parseError?this.parseError=m.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var v,j,x,k,w,O,C,E,T,S={};;){if(x=n[n.length-1],this.defaultActions[x]?k=this.defaultActions[x]:(null==v&&(v=_()),k=s[x]&&s[x][v]),void 0===k||!k.length||!k[0]){var A="";for(O in T=[],s[x])this.terminals_[O]&&O>l&&T.push("'"+this.terminals_[O]+"'");A=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+T.join(", ")+", got '"+(this.terminals_[v]||v)+"'":"Parse error on line "+(c+1)+": Unexpected "+(v==f?"end of input":"'"+(this.terminals_[v]||v)+"'"),this.parseError(A,{text:p.match,token:this.terminals_[v]||v,line:p.yylineno,loc:y,expected:T})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+x+", token: "+v);switch(k[0]){case 1:n.push(v),o.push(p.yytext),i.push(p.yylloc),n.push(k[1]),v=null,j?(v=j,j=null):(u=p.yyleng,a=p.yytext,c=p.yylineno,y=p.yylloc,d>0&&d--);break;case 2:if(C=this.productions_[k[1]][1],S.$=o[o.length-C],S._$={first_line:i[i.length-(C||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(C||1)].first_column,last_column:i[i.length-1].last_column},b&&(S._$.range=[i[i.length-(C||1)].range[0],i[i.length-1].range[1]]),void 0!==(w=this.performAction.apply(S,[a,u,c,m.yy,k[1],o,i].concat(h))))return w;C&&(n=n.slice(0,-1*C*2),o=o.slice(0,-1*C),i=i.slice(0,-1*C)),n.push(this.productions_[k[1]][0]),o.push(S.$),i.push(S._$),E=s[n[n.length-2]][n[n.length-1]],n.push(E);break;case 3:return!0}}return!0}},f={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,n=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var o=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[o[0],o[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var n,r,o;if(this.options.backtrack_lexer&&(o={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(o.yylloc.range=this.yylloc.range.slice(0))),(r=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],n=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var i in o)this[i]=o[i];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var o=this._currentRules(),i=0;it[0].length)){if(t=n,r=i,this.options.backtrack_lexer){if(!1!==(e=this.test_match(n,o[i])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,o[r]))&&e:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return e||this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(e){return(e=this.conditionStack.length-1-Math.abs(e||0))>=0?this.conditionStack[e]:"INITIAL"},pushState:function(e){this.begin(e)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(e,t,n,r){switch(n){case 0:return this.begin("open_directive"),22;case 1:return this.begin("type_directive"),23;case 2:return this.popState(),this.begin("arg_directive"),17;case 3:return this.popState(),this.popState(),25;case 4:return 24;case 5:case 6:break;case 7:return 19;case 8:case 9:break;case 10:return this.begin("title"),12;case 11:return this.popState(),"title_value";case 12:this.begin("string");break;case 13:this.popState();break;case 14:return"txt";case 15:return 6;case 16:return"value";case 17:return 21}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:[\s]+)/i,/^(?:title\b)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:pie\b)/i,/^(?::[\s]*[\d]+(?:\.[\d]+)?)/i,/^(?:$)/i],conditions:{close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},title:{rules:[11],inclusive:!1},string:{rules:[13,14],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,12,15,16,17],inclusive:!0}}};function h(){this.yy={}}return l.lexer=f,h.prototype=l,l.Parser=h,new h}();t.parser=o,t.Parser=o.Parser,t.parse=function(){return o.parse.apply(o,arguments)},t.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),e.exit(1));var o=n(/*! fs */"./node_modules/node-libs-browser/mock/empty.js").readFileSync(n(/*! path */"./node_modules/path-browserify/index.js").normalize(r[1]),"utf8");return t.parser.parse(o)},n.c[n.s]===r&&t.main(e.argv.slice(1))}).call(this,n(/*! ./../../../../node_modules/process/browser.js */"./node_modules/process/browser.js"),n(/*! ./../../../../node_modules/webpack/buildin/module.js */"./node_modules/webpack/buildin/module.js")(e))},"./src/diagrams/pie/pieDb.js": -/*!***********************************!*\ - !*** ./src/diagrams/pie/pieDb.js ***! - \***********************************/ -/*! exports provided: parseDirective, default */function(e,t,n){"use strict";n.r(t),n.d(t,"parseDirective",(function(){return c}));var r=n(/*! ../../logger */"./src/logger.js"),o=n(/*! ../../mermaidAPI */"./src/mermaidAPI.js"),i=n(/*! ../../config */"./src/config.js"),s={},a="",c=function(e,t,n){o.default.parseDirective(this,e,t,n)};t.default={parseDirective:c,getConfig:function(){return i.getConfig().pie},addSection:function(e,t){void 0===s[e]&&(s[e]=t,r.logger.debug("Added new section :",e))},getSections:function(){return s},cleanupValue:function(e){return":"===e.substring(0,1)?(e=e.substring(1).trim(),Number(e.trim())):Number(e.trim())},clear:function(){s={},a=""},setTitle:function(e){a=e},getTitle:function(){return a}}},"./src/diagrams/pie/pieRenderer.js": -/*!*****************************************!*\ - !*** ./src/diagrams/pie/pieRenderer.js ***! - \*****************************************/ -/*! exports provided: setConf, draw, default */function(e,t,n){"use strict";n.r(t),n.d(t,"setConf",(function(){return l})),n.d(t,"draw",(function(){return f}));var r,o=n(/*! d3 */"./node_modules/d3/index.js"),i=n(/*! ./pieDb */"./src/diagrams/pie/pieDb.js"),s=n(/*! ./parser/pie */"./src/diagrams/pie/parser/pie.jison"),a=n.n(s),c=n(/*! ../../logger */"./src/logger.js"),u=n(/*! ../../utils */"./src/utils.js"),d={},l=function(e){Object.keys(e).forEach((function(t){d[t]=e[t]}))},f=function(e,t){try{var n=a.a.parser;n.yy=i.default,c.logger.debug("Rendering info diagram\n"+e),n.yy.clear(),n.parse(e),c.logger.debug("Parsed info diagram");var s=document.getElementById(t);void 0===(r=s.parentElement.offsetWidth)&&(r=1200),void 0!==d.useWidth&&(r=d.useWidth);var l=Object(o.select)("#"+t);Object(u.configureSvgSize)(l,450,r,d.useMaxWidth),s.setAttribute("viewBox","0 0 "+r+" 450");var f=Math.min(r,450)/2-40,h=l.append("g").attr("transform","translate("+r/2+",225)"),p=i.default.getSections(),m=0;Object.keys(p).forEach((function(e){m+=p[e]}));var g=Object(o.scaleOrdinal)().domain(p).range(o.schemeSet2),y=Object(o.pie)().value((function(e){return e.value}))(Object(o.entries)(p)),b=Object(o.arc)().innerRadius(0).outerRadius(f);h.selectAll("mySlices").data(y).enter().append("path").attr("d",b).attr("fill",(function(e){return g(e.data.key)})).attr("stroke","black").style("stroke-width","2px").style("opacity",.7),h.selectAll("mySlices").data(y.filter((function(e){return 0!==e.data.value}))).enter().append("text").text((function(e){return(e.data.value/m*100).toFixed(0)+"%"})).attr("transform",(function(e){return"translate("+b.centroid(e)+")"})).style("text-anchor","middle").attr("class","slice").style("font-size",17),h.append("text").text(n.yy.getTitle()).attr("x",0).attr("y",-200).attr("class","pieTitleText");var _=h.selectAll(".legend").data(g.domain()).enter().append("g").attr("class","legend").attr("transform",(function(e,t){return"translate(216,"+(22*t-22*g.domain().length/2)+")"}));_.append("rect").attr("width",18).attr("height",18).style("fill",g).style("stroke",g),_.append("text").attr("x",22).attr("y",14).text((function(e){return e}))}catch(e){c.logger.error("Error while rendering info diagram"),c.logger.error(e)}};t.default={setConf:l,draw:f}},"./src/diagrams/pie/styles.js": -/*!************************************!*\ - !*** ./src/diagrams/pie/styles.js ***! - \************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(e){return".pieTitleText {\n text-anchor: middle;\n font-size: 25px;\n fill: ".concat(e.taskTextDarkColor,";\n font-family: ").concat(e.fontFamily,";\n }\n .slice {\n font-family: ").concat(e.fontFamily,";\n fill: ").concat(e.textColor,";\n // fill: white;\n }\n .legend text {\n fill: ").concat(e.taskTextDarkColor,";\n font-family: ").concat(e.fontFamily,";\n font-size: 17px;\n }\n")}},"./src/diagrams/sequence/parser/sequenceDiagram.jison": -/*!************************************************************!*\ - !*** ./src/diagrams/sequence/parser/sequenceDiagram.jison ***! - \************************************************************/ -/*! no static exports found */function(e,t,n){(function(e,r){var o=function(){var e=function(e,t,n,r){for(n=n||{},r=e.length;r--;n[e[r]]=t);return n},t=[1,2],n=[1,3],r=[1,5],o=[1,7],i=[2,5],s=[1,15],a=[1,17],c=[1,18],u=[1,20],d=[1,21],l=[1,22],f=[1,24],h=[1,25],p=[1,26],m=[1,27],g=[1,28],y=[1,29],b=[1,32],_=[1,33],v=[1,36],j=[1,4,5,16,21,22,23,25,27,28,29,30,31,33,35,36,37,48,58],x=[1,44],k=[4,5,16,21,22,23,25,27,28,29,30,31,33,37,48,58],w=[4,5,16,21,22,23,25,27,28,29,30,31,33,36,37,48,58],O=[4,5,16,21,22,23,25,27,28,29,30,31,33,35,37,48,58],C=[46,47,48],E=[1,4,5,7,16,21,22,23,25,27,28,29,30,31,33,35,36,37,48,58],T={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NEWLINE:5,directive:6,SD:7,document:8,line:9,statement:10,openDirective:11,typeDirective:12,closeDirective:13,":":14,argDirective:15,participant:16,actor:17,AS:18,restOfLine:19,signal:20,autonumber:21,activate:22,deactivate:23,note_statement:24,title:25,text2:26,loop:27,end:28,rect:29,opt:30,alt:31,else_sections:32,par:33,par_sections:34,and:35,else:36,note:37,placement:38,over:39,actor_pair:40,spaceList:41,",":42,left_of:43,right_of:44,signaltype:45,"+":46,"-":47,ACTOR:48,SOLID_OPEN_ARROW:49,DOTTED_OPEN_ARROW:50,SOLID_ARROW:51,DOTTED_ARROW:52,SOLID_CROSS:53,DOTTED_CROSS:54,SOLID_POINT:55,DOTTED_POINT:56,TXT:57,open_directive:58,type_directive:59,arg_directive:60,close_directive:61,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NEWLINE",7:"SD",14:":",16:"participant",18:"AS",19:"restOfLine",21:"autonumber",22:"activate",23:"deactivate",25:"title",27:"loop",28:"end",29:"rect",30:"opt",31:"alt",33:"par",35:"and",36:"else",37:"note",39:"over",42:",",43:"left_of",44:"right_of",46:"+",47:"-",48:"ACTOR",49:"SOLID_OPEN_ARROW",50:"DOTTED_OPEN_ARROW",51:"SOLID_ARROW",52:"DOTTED_ARROW",53:"SOLID_CROSS",54:"DOTTED_CROSS",55:"SOLID_POINT",56:"DOTTED_POINT",57:"TXT",58:"open_directive",59:"type_directive",60:"arg_directive",61:"close_directive"},productions_:[0,[3,2],[3,2],[3,2],[3,2],[8,0],[8,2],[9,2],[9,1],[9,1],[6,4],[6,6],[10,5],[10,3],[10,2],[10,1],[10,3],[10,3],[10,2],[10,3],[10,4],[10,4],[10,4],[10,4],[10,4],[10,1],[34,1],[34,4],[32,1],[32,4],[24,4],[24,4],[41,2],[41,1],[40,3],[40,1],[38,1],[38,1],[20,5],[20,5],[20,4],[17,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[45,1],[26,1],[11,1],[12,1],[15,1],[13,1]],performAction:function(e,t,n,r,o,i,s){var a=i.length-1;switch(o){case 4:return r.apply(i[a]),i[a];case 5:this.$=[];break;case 6:i[a-1].push(i[a]),this.$=i[a-1];break;case 7:case 8:this.$=i[a];break;case 9:this.$=[];break;case 12:i[a-3].description=r.parseMessage(i[a-1]),this.$=i[a-3];break;case 13:this.$=i[a-1];break;case 15:r.enableSequenceNumbers();break;case 16:this.$={type:"activeStart",signalType:r.LINETYPE.ACTIVE_START,actor:i[a-1]};break;case 17:this.$={type:"activeEnd",signalType:r.LINETYPE.ACTIVE_END,actor:i[a-1]};break;case 19:this.$=[{type:"setTitle",text:i[a-1]}];break;case 20:i[a-1].unshift({type:"loopStart",loopText:r.parseMessage(i[a-2]),signalType:r.LINETYPE.LOOP_START}),i[a-1].push({type:"loopEnd",loopText:i[a-2],signalType:r.LINETYPE.LOOP_END}),this.$=i[a-1];break;case 21:i[a-1].unshift({type:"rectStart",color:r.parseMessage(i[a-2]),signalType:r.LINETYPE.RECT_START}),i[a-1].push({type:"rectEnd",color:r.parseMessage(i[a-2]),signalType:r.LINETYPE.RECT_END}),this.$=i[a-1];break;case 22:i[a-1].unshift({type:"optStart",optText:r.parseMessage(i[a-2]),signalType:r.LINETYPE.OPT_START}),i[a-1].push({type:"optEnd",optText:r.parseMessage(i[a-2]),signalType:r.LINETYPE.OPT_END}),this.$=i[a-1];break;case 23:i[a-1].unshift({type:"altStart",altText:r.parseMessage(i[a-2]),signalType:r.LINETYPE.ALT_START}),i[a-1].push({type:"altEnd",signalType:r.LINETYPE.ALT_END}),this.$=i[a-1];break;case 24:i[a-1].unshift({type:"parStart",parText:r.parseMessage(i[a-2]),signalType:r.LINETYPE.PAR_START}),i[a-1].push({type:"parEnd",signalType:r.LINETYPE.PAR_END}),this.$=i[a-1];break;case 27:this.$=i[a-3].concat([{type:"and",parText:r.parseMessage(i[a-1]),signalType:r.LINETYPE.PAR_AND},i[a]]);break;case 29:this.$=i[a-3].concat([{type:"else",altText:r.parseMessage(i[a-1]),signalType:r.LINETYPE.ALT_ELSE},i[a]]);break;case 30:this.$=[i[a-1],{type:"addNote",placement:i[a-2],actor:i[a-1].actor,text:i[a]}];break;case 31:i[a-2]=[].concat(i[a-1],i[a-1]).slice(0,2),i[a-2][0]=i[a-2][0].actor,i[a-2][1]=i[a-2][1].actor,this.$=[i[a-1],{type:"addNote",placement:r.PLACEMENT.OVER,actor:i[a-2].slice(0,2),text:i[a]}];break;case 34:this.$=[i[a-2],i[a]];break;case 35:this.$=i[a];break;case 36:this.$=r.PLACEMENT.LEFTOF;break;case 37:this.$=r.PLACEMENT.RIGHTOF;break;case 38:this.$=[i[a-4],i[a-1],{type:"addMessage",from:i[a-4].actor,to:i[a-1].actor,signalType:i[a-3],msg:i[a]},{type:"activeStart",signalType:r.LINETYPE.ACTIVE_START,actor:i[a-1]}];break;case 39:this.$=[i[a-4],i[a-1],{type:"addMessage",from:i[a-4].actor,to:i[a-1].actor,signalType:i[a-3],msg:i[a]},{type:"activeEnd",signalType:r.LINETYPE.ACTIVE_END,actor:i[a-4]}];break;case 40:this.$=[i[a-3],i[a-1],{type:"addMessage",from:i[a-3].actor,to:i[a-1].actor,signalType:i[a-2],msg:i[a]}];break;case 41:this.$={type:"addActor",actor:i[a]};break;case 42:this.$=r.LINETYPE.SOLID_OPEN;break;case 43:this.$=r.LINETYPE.DOTTED_OPEN;break;case 44:this.$=r.LINETYPE.SOLID;break;case 45:this.$=r.LINETYPE.DOTTED;break;case 46:this.$=r.LINETYPE.SOLID_CROSS;break;case 47:this.$=r.LINETYPE.DOTTED_CROSS;break;case 48:this.$=r.LINETYPE.SOLID_POINT;break;case 49:this.$=r.LINETYPE.DOTTED_POINT;break;case 50:this.$=r.parseMessage(i[a].trim().substring(1));break;case 51:r.parseDirective("%%{","open_directive");break;case 52:r.parseDirective(i[a],"type_directive");break;case 53:i[a]=i[a].trim().replace(/'/g,'"'),r.parseDirective(i[a],"arg_directive");break;case 54:r.parseDirective("}%%","close_directive","sequence")}},table:[{3:1,4:t,5:n,6:4,7:r,11:6,58:o},{1:[3]},{3:8,4:t,5:n,6:4,7:r,11:6,58:o},{3:9,4:t,5:n,6:4,7:r,11:6,58:o},{3:10,4:t,5:n,6:4,7:r,11:6,58:o},e([1,4,5,16,21,22,23,25,27,29,30,31,33,37,48,58],i,{8:11}),{12:12,59:[1,13]},{59:[2,51]},{1:[2,1]},{1:[2,2]},{1:[2,3]},{1:[2,4],4:s,5:a,6:30,9:14,10:16,11:6,16:c,17:31,20:19,21:u,22:d,23:l,24:23,25:f,27:h,29:p,30:m,31:g,33:y,37:b,48:_,58:o},{13:34,14:[1,35],61:v},e([14,61],[2,52]),e(j,[2,6]),{6:30,10:37,11:6,16:c,17:31,20:19,21:u,22:d,23:l,24:23,25:f,27:h,29:p,30:m,31:g,33:y,37:b,48:_,58:o},e(j,[2,8]),e(j,[2,9]),{17:38,48:_},{5:[1,39]},e(j,[2,15]),{17:40,48:_},{17:41,48:_},{5:[1,42]},{26:43,57:x},{19:[1,45]},{19:[1,46]},{19:[1,47]},{19:[1,48]},{19:[1,49]},e(j,[2,25]),{45:50,49:[1,51],50:[1,52],51:[1,53],52:[1,54],53:[1,55],54:[1,56],55:[1,57],56:[1,58]},{38:59,39:[1,60],43:[1,61],44:[1,62]},e([5,18,42,49,50,51,52,53,54,55,56,57],[2,41]),{5:[1,63]},{15:64,60:[1,65]},{5:[2,54]},e(j,[2,7]),{5:[1,67],18:[1,66]},e(j,[2,14]),{5:[1,68]},{5:[1,69]},e(j,[2,18]),{5:[1,70]},{5:[2,50]},e(k,i,{8:71}),e(k,i,{8:72}),e(k,i,{8:73}),e(w,i,{32:74,8:75}),e(O,i,{34:76,8:77}),{17:80,46:[1,78],47:[1,79],48:_},e(C,[2,42]),e(C,[2,43]),e(C,[2,44]),e(C,[2,45]),e(C,[2,46]),e(C,[2,47]),e(C,[2,48]),e(C,[2,49]),{17:81,48:_},{17:83,40:82,48:_},{48:[2,36]},{48:[2,37]},e(E,[2,10]),{13:84,61:v},{61:[2,53]},{19:[1,85]},e(j,[2,13]),e(j,[2,16]),e(j,[2,17]),e(j,[2,19]),{4:s,5:a,6:30,9:14,10:16,11:6,16:c,17:31,20:19,21:u,22:d,23:l,24:23,25:f,27:h,28:[1,86],29:p,30:m,31:g,33:y,37:b,48:_,58:o},{4:s,5:a,6:30,9:14,10:16,11:6,16:c,17:31,20:19,21:u,22:d,23:l,24:23,25:f,27:h,28:[1,87],29:p,30:m,31:g,33:y,37:b,48:_,58:o},{4:s,5:a,6:30,9:14,10:16,11:6,16:c,17:31,20:19,21:u,22:d,23:l,24:23,25:f,27:h,28:[1,88],29:p,30:m,31:g,33:y,37:b,48:_,58:o},{28:[1,89]},{4:s,5:a,6:30,9:14,10:16,11:6,16:c,17:31,20:19,21:u,22:d,23:l,24:23,25:f,27:h,28:[2,28],29:p,30:m,31:g,33:y,36:[1,90],37:b,48:_,58:o},{28:[1,91]},{4:s,5:a,6:30,9:14,10:16,11:6,16:c,17:31,20:19,21:u,22:d,23:l,24:23,25:f,27:h,28:[2,26],29:p,30:m,31:g,33:y,35:[1,92],37:b,48:_,58:o},{17:93,48:_},{17:94,48:_},{26:95,57:x},{26:96,57:x},{26:97,57:x},{42:[1,98],57:[2,35]},{5:[1,99]},{5:[1,100]},e(j,[2,20]),e(j,[2,21]),e(j,[2,22]),e(j,[2,23]),{19:[1,101]},e(j,[2,24]),{19:[1,102]},{26:103,57:x},{26:104,57:x},{5:[2,40]},{5:[2,30]},{5:[2,31]},{17:105,48:_},e(E,[2,11]),e(j,[2,12]),e(w,i,{8:75,32:106}),e(O,i,{8:77,34:107}),{5:[2,38]},{5:[2,39]},{57:[2,34]},{28:[2,29]},{28:[2,27]}],defaultActions:{7:[2,51],8:[2,1],9:[2,2],10:[2,3],36:[2,54],44:[2,50],61:[2,36],62:[2,37],65:[2,53],95:[2,40],96:[2,30],97:[2,31],103:[2,38],104:[2,39],105:[2,34],106:[2,29],107:[2,27]},parseError:function(e,t){if(!t.recoverable){var n=new Error(e);throw n.hash=t,n}this.trace(e)},parse:function(e){var t=this,n=[0],r=[],o=[null],i=[],s=this.table,a="",c=0,u=0,d=0,l=2,f=1,h=i.slice.call(arguments,1),p=Object.create(this.lexer),m={yy:{}};for(var g in this.yy)Object.prototype.hasOwnProperty.call(this.yy,g)&&(m.yy[g]=this.yy[g]);p.setInput(e,m.yy),m.yy.lexer=p,m.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var y=p.yylloc;i.push(y);var b=p.options&&p.options.ranges;function _(){var e;return"number"!=typeof(e=r.pop()||p.lex()||f)&&(e instanceof Array&&(e=(r=e).pop()),e=t.symbols_[e]||e),e}"function"==typeof m.yy.parseError?this.parseError=m.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var v,j,x,k,w,O,C,E,T,S={};;){if(x=n[n.length-1],this.defaultActions[x]?k=this.defaultActions[x]:(null==v&&(v=_()),k=s[x]&&s[x][v]),void 0===k||!k.length||!k[0]){var A="";for(O in T=[],s[x])this.terminals_[O]&&O>l&&T.push("'"+this.terminals_[O]+"'");A=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+T.join(", ")+", got '"+(this.terminals_[v]||v)+"'":"Parse error on line "+(c+1)+": Unexpected "+(v==f?"end of input":"'"+(this.terminals_[v]||v)+"'"),this.parseError(A,{text:p.match,token:this.terminals_[v]||v,line:p.yylineno,loc:y,expected:T})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+x+", token: "+v);switch(k[0]){case 1:n.push(v),o.push(p.yytext),i.push(p.yylloc),n.push(k[1]),v=null,j?(v=j,j=null):(u=p.yyleng,a=p.yytext,c=p.yylineno,y=p.yylloc,d>0&&d--);break;case 2:if(C=this.productions_[k[1]][1],S.$=o[o.length-C],S._$={first_line:i[i.length-(C||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(C||1)].first_column,last_column:i[i.length-1].last_column},b&&(S._$.range=[i[i.length-(C||1)].range[0],i[i.length-1].range[1]]),void 0!==(w=this.performAction.apply(S,[a,u,c,m.yy,k[1],o,i].concat(h))))return w;C&&(n=n.slice(0,-1*C*2),o=o.slice(0,-1*C),i=i.slice(0,-1*C)),n.push(this.productions_[k[1]][0]),o.push(S.$),i.push(S._$),E=s[n[n.length-2]][n[n.length-1]],n.push(E);break;case 3:return!0}}return!0}},S={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,n=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var o=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[o[0],o[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var n,r,o;if(this.options.backtrack_lexer&&(o={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(o.yylloc.range=this.yylloc.range.slice(0))),(r=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],n=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var i in o)this[i]=o[i];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var o=this._currentRules(),i=0;it[0].length)){if(t=n,r=i,this.options.backtrack_lexer){if(!1!==(e=this.test_match(n,o[i])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,o[r]))&&e:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return e||this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(e){return(e=this.conditionStack.length-1-Math.abs(e||0))>=0?this.conditionStack[e]:"INITIAL"},pushState:function(e){this.begin(e)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(e,t,n,r){switch(n){case 0:return this.begin("open_directive"),58;case 1:return this.begin("type_directive"),59;case 2:return this.popState(),this.begin("arg_directive"),14;case 3:return this.popState(),this.popState(),61;case 4:return 60;case 5:return 5;case 6:case 7:case 8:case 9:case 10:break;case 11:return this.begin("ID"),16;case 12:return t.yytext=t.yytext.trim(),this.begin("ALIAS"),48;case 13:return this.popState(),this.popState(),this.begin("LINE"),18;case 14:return this.popState(),this.popState(),5;case 15:return this.begin("LINE"),27;case 16:return this.begin("LINE"),29;case 17:return this.begin("LINE"),30;case 18:return this.begin("LINE"),31;case 19:return this.begin("LINE"),36;case 20:return this.begin("LINE"),33;case 21:return this.begin("LINE"),35;case 22:return this.popState(),19;case 23:return 28;case 24:return 43;case 25:return 44;case 26:return 39;case 27:return 37;case 28:return this.begin("ID"),22;case 29:return this.begin("ID"),23;case 30:return 25;case 31:return 7;case 32:return 21;case 33:return 42;case 34:return 5;case 35:return t.yytext=t.yytext.trim(),48;case 36:return 51;case 37:return 52;case 38:return 49;case 39:return 50;case 40:return 53;case 41:return 54;case 42:return 55;case 43:return 56;case 44:return 57;case 45:return 46;case 46:return 47;case 47:return 5;case 48:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:participant\b)/i,/^(?:[^\->:\n,;]+?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i,/^(?:as\b)/i,/^(?:(?:))/i,/^(?:loop\b)/i,/^(?:rect\b)/i,/^(?:opt\b)/i,/^(?:alt\b)/i,/^(?:else\b)/i,/^(?:par\b)/i,/^(?:and\b)/i,/^(?:(?:[:]?(?:no)?wrap)?[^#\n;]*)/i,/^(?:end\b)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:over\b)/i,/^(?:note\b)/i,/^(?:activate\b)/i,/^(?:deactivate\b)/i,/^(?:title\b)/i,/^(?:sequenceDiagram\b)/i,/^(?:autonumber\b)/i,/^(?:,)/i,/^(?:;)/i,/^(?:[^\+\->:\n,;]+((?!(-x|--x|-\)|--\)))[\-]*[^\+\->:\n,;]+)*)/i,/^(?:->>)/i,/^(?:-->>)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?:-[\)])/i,/^(?:--[\)])/i,/^(?::(?:(?:no)?wrap)?[^#\n;]+)/i,/^(?:\+)/i,/^(?:-)/i,/^(?:$)/i,/^(?:.)/i],conditions:{open_directive:{rules:[1,8],inclusive:!1},type_directive:{rules:[2,3,8],inclusive:!1},arg_directive:{rules:[3,4,8],inclusive:!1},ID:{rules:[7,8,12],inclusive:!1},ALIAS:{rules:[7,8,13,14],inclusive:!1},LINE:{rules:[7,8,22],inclusive:!1},INITIAL:{rules:[0,5,6,8,9,10,11,15,16,17,18,19,20,21,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48],inclusive:!0}}};function A(){this.yy={}}return T.lexer=S,A.prototype=T,T.Parser=A,new A}();t.parser=o,t.Parser=o.Parser,t.parse=function(){return o.parse.apply(o,arguments)},t.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),e.exit(1));var o=n(/*! fs */"./node_modules/node-libs-browser/mock/empty.js").readFileSync(n(/*! path */"./node_modules/path-browserify/index.js").normalize(r[1]),"utf8");return t.parser.parse(o)},n.c[n.s]===r&&t.main(e.argv.slice(1))}).call(this,n(/*! ./../../../../node_modules/process/browser.js */"./node_modules/process/browser.js"),n(/*! ./../../../../node_modules/webpack/buildin/module.js */"./node_modules/webpack/buildin/module.js")(e))},"./src/diagrams/sequence/sequenceDb.js": -/*!*********************************************!*\ - !*** ./src/diagrams/sequence/sequenceDb.js ***! - \*********************************************/ -/*! exports provided: parseDirective, addActor, addMessage, addSignal, getMessages, getActors, getActor, getActorKeys, getTitle, getTitleWrapped, enableSequenceNumbers, showSequenceNumbers, setWrap, autoWrap, clear, parseMessage, LINETYPE, ARROWTYPE, PLACEMENT, addNote, setTitle, apply, default */function(e,t,n){"use strict";n.r(t),n.d(t,"parseDirective",(function(){return p})),n.d(t,"addActor",(function(){return m})),n.d(t,"addMessage",(function(){return y})),n.d(t,"addSignal",(function(){return b})),n.d(t,"getMessages",(function(){return _})),n.d(t,"getActors",(function(){return v})),n.d(t,"getActor",(function(){return j})),n.d(t,"getActorKeys",(function(){return x})),n.d(t,"getTitle",(function(){return k})),n.d(t,"getTitleWrapped",(function(){return w})),n.d(t,"enableSequenceNumbers",(function(){return O})),n.d(t,"showSequenceNumbers",(function(){return C})),n.d(t,"setWrap",(function(){return E})),n.d(t,"autoWrap",(function(){return T})),n.d(t,"clear",(function(){return S})),n.d(t,"parseMessage",(function(){return A})),n.d(t,"LINETYPE",(function(){return M})),n.d(t,"ARROWTYPE",(function(){return D})),n.d(t,"PLACEMENT",(function(){return B})),n.d(t,"addNote",(function(){return N})),n.d(t,"setTitle",(function(){return L})),n.d(t,"apply",(function(){return P}));var r=n(/*! ../../mermaidAPI */"./src/mermaidAPI.js"),o=n(/*! ../../config */"./src/config.js"),i=n(/*! ../../logger */"./src/logger.js"),s=void 0,a={},c=[],u=[],d="",l=!1,f=!1,h=!1,p=function(e,t,n){r.default.parseDirective(this,e,t,n)},m=function(e,t,n){var r=a[e];r&&t===r.name&&null==n||(null!=n&&null!=n.text||(n={text:t,wrap:null}),a[e]={name:t,description:n.text,wrap:void 0===n.wrap&&T()||!!n.wrap,prevActor:s},s&&a[s]&&(a[s].nextActor=e),s=e)},g=function(e){var t,n=0;for(t=0;t2&&void 0!==arguments[2]?arguments[2]:{text:void 0,wrap:void 0},r=arguments.length>3?arguments[3]:void 0;if(r===M.ACTIVE_END){var o=g(e.actor);if(o<1){var i=new Error("Trying to inactivate an inactive participant ("+e.actor+")");throw i.hash={text:"->>-",token:"->>-",line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["'ACTIVE_PARTICIPANT'"]},i}}return c.push({from:e,to:t,message:n.text,wrap:void 0===n.wrap&&T()||!!n.wrap,type:r}),!0},_=function(){return c},v=function(){return a},j=function(e){return a[e]},x=function(){return Object.keys(a)},k=function(){return d},w=function(){return l},O=function(){f=!0},C=function(){return f},E=function(e){h=e},T=function(){return h},S=function(){a={},c=[]},A=function(e){var t=e.trim(),n={text:t.replace(/^[:]?(?:no)?wrap:/,"").trim(),wrap:null!==t.match(/^[:]?wrap:/)||null===t.match(/^[:]?nowrap:/)&&void 0};return i.logger.debug("parseMessage:",n),n},M={SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25},D={FILLED:0,OPEN:1},B={LEFTOF:0,RIGHTOF:1,OVER:2},N=function(e,t,n){var r={actor:e,placement:t,message:n.text,wrap:void 0===n.wrap&&T()||!!n.wrap},o=[].concat(e,e);u.push(r),c.push({from:o[0],to:o[1],message:n.text,wrap:void 0===n.wrap&&T()||!!n.wrap,type:M.NOTE,placement:t})},L=function(e){d=e.text,l=void 0===e.wrap&&T()||!!e.wrap},P=function e(t){if(t instanceof Array)t.forEach((function(t){e(t)}));else switch(t.type){case"addActor":m(t.actor,t.actor,t.description);break;case"activeStart":case"activeEnd":b(t.actor,void 0,void 0,t.signalType);break;case"addNote":N(t.actor,t.placement,t.text);break;case"addMessage":b(t.from,t.to,t.msg,t.signalType);break;case"loopStart":b(void 0,void 0,t.loopText,t.signalType);break;case"loopEnd":b(void 0,void 0,void 0,t.signalType);break;case"rectStart":b(void 0,void 0,t.color,t.signalType);break;case"rectEnd":b(void 0,void 0,void 0,t.signalType);break;case"optStart":b(void 0,void 0,t.optText,t.signalType);break;case"optEnd":b(void 0,void 0,void 0,t.signalType);break;case"altStart":case"else":b(void 0,void 0,t.altText,t.signalType);break;case"altEnd":b(void 0,void 0,void 0,t.signalType);break;case"setTitle":L(t.text);break;case"parStart":case"and":b(void 0,void 0,t.parText,t.signalType);break;case"parEnd":b(void 0,void 0,void 0,t.signalType)}};t.default={addActor:m,addMessage:y,addSignal:b,autoWrap:T,setWrap:E,enableSequenceNumbers:O,showSequenceNumbers:C,getMessages:_,getActors:v,getActor:j,getActorKeys:x,getTitle:k,parseDirective:p,getConfig:function(){return o.getConfig().sequence},getTitleWrapped:w,clear:S,parseMessage:A,LINETYPE:M,ARROWTYPE:D,PLACEMENT:B,addNote:N,setTitle:L,apply:P}},"./src/diagrams/sequence/sequenceRenderer.js": -/*!***************************************************!*\ - !*** ./src/diagrams/sequence/sequenceRenderer.js ***! - \***************************************************/ -/*! exports provided: bounds, drawActors, setConf, draw, default */function(e,t,n){"use strict";n.r(t),n.d(t,"bounds",(function(){return f})),n.d(t,"drawActors",(function(){return g})),n.d(t,"setConf",(function(){return y})),n.d(t,"draw",(function(){return j}));var r=n(/*! d3 */"./node_modules/d3/index.js"),o=n(/*! ./svgDraw */"./src/diagrams/sequence/svgDraw.js"),i=n(/*! ../../logger */"./src/logger.js"),s=n(/*! ./parser/sequenceDiagram */"./src/diagrams/sequence/parser/sequenceDiagram.jison"),a=n(/*! ../common/common */"./src/diagrams/common/common.js"),c=n(/*! ./sequenceDb */"./src/diagrams/sequence/sequenceDb.js"),u=n(/*! ../../config */"./src/config.js"),d=n(/*! ../../utils */"./src/utils.js");s.parser.yy=c.default;var l={},f={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],activations:[],models:{getHeight:function(){return Math.max.apply(null,0===this.actors.length?[0]:this.actors.map((function(e){return e.height||0})))+(0===this.loops.length?0:this.loops.map((function(e){return e.height||0})).reduce((function(e,t){return e+t})))+(0===this.messages.length?0:this.messages.map((function(e){return e.height||0})).reduce((function(e,t){return e+t})))+(0===this.notes.length?0:this.notes.map((function(e){return e.height||0})).reduce((function(e,t){return e+t})))},clear:function(){this.actors=[],this.loops=[],this.messages=[],this.notes=[]},addActor:function(e){this.actors.push(e)},addLoop:function(e){this.loops.push(e)},addMessage:function(e){this.messages.push(e)},addNote:function(e){this.notes.push(e)},lastActor:function(){return this.actors[this.actors.length-1]},lastLoop:function(){return this.loops[this.loops.length-1]},lastMessage:function(){return this.messages[this.messages.length-1]},lastNote:function(){return this.notes[this.notes.length-1]},actors:[],loops:[],messages:[],notes:[]},init:function(){this.sequenceItems=[],this.activations=[],this.models.clear(),this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0,y(s.parser.yy.getConfig())},updateVal:function(e,t,n,r){void 0===e[t]?e[t]=n:e[t]=r(n,e[t])},updateBounds:function(e,t,n,r){var o=this,i=0;function s(s){return function(a){i++;var c=o.sequenceItems.length-i+1;o.updateVal(a,"starty",t-c*l.boxMargin,Math.min),o.updateVal(a,"stopy",r+c*l.boxMargin,Math.max),o.updateVal(f.data,"startx",e-c*l.boxMargin,Math.min),o.updateVal(f.data,"stopx",n+c*l.boxMargin,Math.max),"activation"!==s&&(o.updateVal(a,"startx",e-c*l.boxMargin,Math.min),o.updateVal(a,"stopx",n+c*l.boxMargin,Math.max),o.updateVal(f.data,"starty",t-c*l.boxMargin,Math.min),o.updateVal(f.data,"stopy",r+c*l.boxMargin,Math.max))}}this.sequenceItems.forEach(s()),this.activations.forEach(s("activation"))},insert:function(e,t,n,r){var o=Math.min(e,n),i=Math.max(e,n),s=Math.min(t,r),a=Math.max(t,r);this.updateVal(f.data,"startx",o,Math.min),this.updateVal(f.data,"starty",s,Math.min),this.updateVal(f.data,"stopx",i,Math.max),this.updateVal(f.data,"stopy",a,Math.max),this.updateBounds(o,s,i,a)},newActivation:function(e,t,n){var r=n[e.from.actor],i=b(e.from.actor).length||0,s=r.x+r.width/2+(i-1)*l.activationWidth/2;this.activations.push({startx:s,starty:this.verticalPos+2,stopx:s+l.activationWidth,stopy:void 0,actor:e.from.actor,anchored:o.default.anchorElement(t)})},endActivation:function(e){var t=this.activations.map((function(e){return e.actor})).lastIndexOf(e.from.actor);return this.activations.splice(t,1)[0]},createLoop:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{message:void 0,wrap:!1,width:void 0},t=arguments.length>1?arguments[1]:void 0;return{startx:void 0,starty:this.verticalPos,stopx:void 0,stopy:void 0,title:e.message,wrap:e.wrap,width:e.width,height:0,fill:t}},newLoop:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{message:void 0,wrap:!1,width:void 0},t=arguments.length>1?arguments[1]:void 0;this.sequenceItems.push(this.createLoop(e,t))},endLoop:function(){return this.sequenceItems.pop()},addSectionToLoop:function(e){var t=this.sequenceItems.pop();t.sections=t.sections||[],t.sectionTitles=t.sectionTitles||[],t.sections.push({y:f.getVerticalPos(),height:0}),t.sectionTitles.push(e),this.sequenceItems.push(t)},bumpVerticalPos:function(e){this.verticalPos=this.verticalPos+e,this.data.stopy=this.verticalPos},getVerticalPos:function(){return this.verticalPos},getBounds:function(){return{bounds:this.data,models:this.models}}},h=function(e){return{fontFamily:e.messageFontFamily,fontSize:e.messageFontSize,fontWeight:e.messageFontWeight}},p=function(e){return{fontFamily:e.noteFontFamily,fontSize:e.noteFontSize,fontWeight:e.noteFontWeight}},m=function(e){return{fontFamily:e.actorFontFamily,fontSize:e.actorFontSize,fontWeight:e.actorFontWeight}},g=function(e,t,n,r){for(var i=0,s=0,a=0;at&&(r.starty=t-6,t+=12),o.default.drawActivation(n,r,t,l,b(e.from.actor).length),f.insert(r.startx,t-10,r.stopx,t)}(e,f.getVerticalPos());break;case s.parser.yy.LINETYPE.LOOP_START:v(O,e,l.boxMargin,l.boxMargin+l.boxTextMargin,(function(e){return f.newLoop(e)}));break;case s.parser.yy.LINETYPE.LOOP_END:t=f.endLoop(),o.default.drawLoop(n,t,"loop",l),f.bumpVerticalPos(t.stopy-f.getVerticalPos()),f.models.addLoop(t);break;case s.parser.yy.LINETYPE.RECT_START:v(O,e,l.boxMargin,l.boxMargin,(function(e){return f.newLoop(void 0,e.message)}));break;case s.parser.yy.LINETYPE.RECT_END:t=f.endLoop(),o.default.drawBackgroundRect(n,t),f.models.addLoop(t),f.bumpVerticalPos(t.stopy-f.getVerticalPos());break;case s.parser.yy.LINETYPE.OPT_START:v(O,e,l.boxMargin,l.boxMargin+l.boxTextMargin,(function(e){return f.newLoop(e)}));break;case s.parser.yy.LINETYPE.OPT_END:t=f.endLoop(),o.default.drawLoop(n,t,"opt",l),f.bumpVerticalPos(t.stopy-f.getVerticalPos()),f.models.addLoop(t);break;case s.parser.yy.LINETYPE.ALT_START:v(O,e,l.boxMargin,l.boxMargin+l.boxTextMargin,(function(e){return f.newLoop(e)}));break;case s.parser.yy.LINETYPE.ALT_ELSE:v(O,e,l.boxMargin+l.boxTextMargin,l.boxMargin,(function(e){return f.addSectionToLoop(e)}));break;case s.parser.yy.LINETYPE.ALT_END:t=f.endLoop(),o.default.drawLoop(n,t,"alt",l),f.bumpVerticalPos(t.stopy-f.getVerticalPos()),f.models.addLoop(t);break;case s.parser.yy.LINETYPE.PAR_START:v(O,e,l.boxMargin,l.boxMargin+l.boxTextMargin,(function(e){return f.newLoop(e)}));break;case s.parser.yy.LINETYPE.PAR_AND:v(O,e,l.boxMargin+l.boxTextMargin,l.boxMargin,(function(e){return f.addSectionToLoop(e)}));break;case s.parser.yy.LINETYPE.PAR_END:t=f.endLoop(),o.default.drawLoop(n,t,"par",l),f.bumpVerticalPos(t.stopy-f.getVerticalPos()),f.models.addLoop(t);break;default:try{(u=e.msgModel).starty=f.getVerticalPos(),u.sequenceIndex=C,function(e,t){f.bumpVerticalPos(10);var n=t.startx,r=t.stopx,i=t.starty,u=t.message,p=t.type,m=t.sequenceIndex,g=a.default.splitBreaks(u).length,y=d.default.calculateTextDimensions(u,h(l)),b=y.height/g;t.height+=b,f.bumpVerticalPos(b);var _=o.default.getTextObj();_.x=n,_.y=i+10,_.width=r-n,_.class="messageText",_.dy="1em",_.text=u,_.fontFamily=l.messageFontFamily,_.fontSize=l.messageFontSize,_.fontWeight=l.messageFontWeight,_.anchor=l.messageAlign,_.valign=l.messageAlign,_.textMargin=l.wrapPadding,_.tspan=!1,Object(o.drawText)(e,_);var v,j,x=y.height-10,k=y.width;if(n===r){j=f.getVerticalPos()+x,l.rightAngles?v=e.append("path").attr("d","M ".concat(n,",").concat(j," H ").concat(n+Math.max(l.width/2,k/2)," V ").concat(j+25," H ").concat(n)):(x+=l.boxMargin,j=f.getVerticalPos()+x,v=e.append("path").attr("d","M "+n+","+j+" C "+(n+60)+","+(j-10)+" "+(n+60)+","+(j+30)+" "+n+","+(j+20))),x+=30;var w=Math.max(k/2,l.width/2);f.insert(n-w,f.getVerticalPos()-10+x,r+w,f.getVerticalPos()+30+x)}else x+=l.boxMargin,j=f.getVerticalPos()+x,(v=e.append("line")).attr("x1",n),v.attr("y1",j),v.attr("x2",r),v.attr("y2",j),f.insert(n,j-10,r,j);p===s.parser.yy.LINETYPE.DOTTED||p===s.parser.yy.LINETYPE.DOTTED_CROSS||p===s.parser.yy.LINETYPE.DOTTED_POINT||p===s.parser.yy.LINETYPE.DOTTED_OPEN?(v.style("stroke-dasharray","3, 3"),v.attr("class","messageLine1")):v.attr("class","messageLine0");var O="";l.arrowMarkerAbsolute&&(O=(O=(O=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search).replace(/\(/g,"\\(")).replace(/\)/g,"\\)")),v.attr("stroke-width",2),v.attr("stroke","none"),v.style("fill","none"),p!==s.parser.yy.LINETYPE.SOLID&&p!==s.parser.yy.LINETYPE.DOTTED||v.attr("marker-end","url("+O+"#arrowhead)"),p!==s.parser.yy.LINETYPE.SOLID_POINT&&p!==s.parser.yy.LINETYPE.DOTTED_POINT||v.attr("marker-end","url("+O+"#filled-head)"),p!==s.parser.yy.LINETYPE.SOLID_CROSS&&p!==s.parser.yy.LINETYPE.DOTTED_CROSS||v.attr("marker-end","url("+O+"#crosshead)"),(c.default.showSequenceNumbers()||l.showSequenceNumbers)&&(v.attr("marker-start","url("+O+"#sequencenumber)"),e.append("text").attr("x",n).attr("y",j+4).attr("font-family","sans-serif").attr("font-size","12px").attr("text-anchor","middle").attr("textLength","16px").attr("class","sequenceNumber").text(m)),f.bumpVerticalPos(x),t.height+=x,t.stopy=t.starty+t.height,f.insert(t.fromBounds,t.starty,t.toBounds,t.stopy)}(n,u),f.models.addMessage(u)}catch(e){i.logger.error("error while drawing message",e)}}[s.parser.yy.LINETYPE.SOLID_OPEN,s.parser.yy.LINETYPE.DOTTED_OPEN,s.parser.yy.LINETYPE.SOLID,s.parser.yy.LINETYPE.DOTTED,s.parser.yy.LINETYPE.SOLID_CROSS,s.parser.yy.LINETYPE.DOTTED_CROSS,s.parser.yy.LINETYPE.SOLID_POINT,s.parser.yy.LINETYPE.DOTTED_POINT].includes(e.type)&&C++})),l.mirrorActors&&(f.bumpVerticalPos(2*l.boxMargin),g(n,p,m,f.getVerticalPos()));var E=f.getBounds().bounds;i.logger.debug("For line height fix Querying: #"+t+" .actor-line"),Object(r.selectAll)("#"+t+" .actor-line").attr("y2",E.stopy);var T=E.stopy-E.starty+2*l.diagramMarginY;l.mirrorActors&&(T=T-l.boxMargin+l.bottomMarginAdj);var S=E.stopx-E.startx+2*l.diagramMarginX;_&&n.append("text").text(_).attr("x",(E.stopx-E.startx)/2-2*l.diagramMarginX).attr("y",-25),Object(d.configureSvgSize)(n,T,S,l.useMaxWidth);var A=_?40:0;n.attr("viewBox",E.startx-l.diagramMarginX+" -"+(l.diagramMarginY+A)+" "+S+" "+(T+A)),i.logger.debug("models:",f.models)},x=function(e,t){var n={};return t.forEach((function(t){if(e[t.to]&&e[t.from]){var r=e[t.to];if(t.placement===s.parser.yy.PLACEMENT.LEFTOF&&!r.prevActor)return;if(t.placement===s.parser.yy.PLACEMENT.RIGHTOF&&!r.nextActor)return;var o=void 0!==t.placement,i=!o,a=o?p(l):h(l),c=t.wrap?d.default.wrapLabel(t.message,l.width-2*l.wrapPadding,a):t.message,u=d.default.calculateTextDimensions(c,a).width+2*l.wrapPadding;i&&t.from===r.nextActor?n[t.to]=Math.max(n[t.to]||0,u):i&&t.from===r.prevActor?n[t.from]=Math.max(n[t.from]||0,u):i&&t.from===t.to?(n[t.from]=Math.max(n[t.from]||0,u/2),n[t.to]=Math.max(n[t.to]||0,u/2)):t.placement===s.parser.yy.PLACEMENT.RIGHTOF?n[t.from]=Math.max(n[t.from]||0,u):t.placement===s.parser.yy.PLACEMENT.LEFTOF?n[r.prevActor]=Math.max(n[r.prevActor]||0,u):t.placement===s.parser.yy.PLACEMENT.OVER&&(r.prevActor&&(n[r.prevActor]=Math.max(n[r.prevActor]||0,u/2)),r.nextActor&&(n[t.from]=Math.max(n[t.from]||0,u/2)))}})),i.logger.debug("maxMessageWidthPerActor:",n),n},k=function(e,t){var n=0;for(var r in Object.keys(e).forEach((function(t){var r=e[t];r.wrap&&(r.description=d.default.wrapLabel(r.description,l.width-2*l.wrapPadding,m(l)));var o=d.default.calculateTextDimensions(r.description,m(l));r.width=r.wrap?l.width:Math.max(l.width,o.width+2*l.wrapPadding),r.height=r.wrap?Math.max(o.height,l.height):l.height,n=Math.max(n,r.height)})),t){var o=e[r];if(o){var i=e[o.nextActor];if(i){var s=t[r]+l.actorMargin-o.width/2-i.width/2;o.margin=Math.max(s,l.actorMargin)}}}return Math.max(n,l.height)},w=function(e,t){var n,r,o,a={},c=[];return e.forEach((function(e){switch(e.id=d.default.random({length:10}),e.type){case s.parser.yy.LINETYPE.LOOP_START:case s.parser.yy.LINETYPE.ALT_START:case s.parser.yy.LINETYPE.OPT_START:case s.parser.yy.LINETYPE.PAR_START:c.push({id:e.id,msg:e.message,from:Number.MAX_SAFE_INTEGER,to:Number.MIN_SAFE_INTEGER,width:0});break;case s.parser.yy.LINETYPE.ALT_ELSE:case s.parser.yy.LINETYPE.PAR_AND:e.message&&(n=c.pop(),a[n.id]=n,a[e.id]=n,c.push(n));break;case s.parser.yy.LINETYPE.LOOP_END:case s.parser.yy.LINETYPE.ALT_END:case s.parser.yy.LINETYPE.OPT_END:case s.parser.yy.LINETYPE.PAR_END:n=c.pop(),a[n.id]=n;break;case s.parser.yy.LINETYPE.ACTIVE_START:var u=t[e.from?e.from.actor:e.to.actor],m=b(e.from?e.from.actor:e.to.actor).length,g=u.x+u.width/2+(m-1)*l.activationWidth/2,y={startx:g,stopx:g+l.activationWidth,actor:e.from.actor,enabled:!0};f.activations.push(y);break;case s.parser.yy.LINETYPE.ACTIVE_END:var v=f.activations.map((function(e){return e.actor})).lastIndexOf(e.from.actor);delete f.activations.splice(v,1)[0]}void 0!==e.placement?(r=function(e,t){var n=t[e.from].x,r=t[e.to].x,o=e.wrap&&e.message,a=d.default.calculateTextDimensions(o?d.default.wrapLabel(e.message,l.width,p(l)):e.message,p(l)),c={width:o?l.width:Math.max(l.width,a.width+2*l.noteMargin),height:0,startx:t[e.from].x,stopx:0,starty:0,stopy:0,message:e.message};return e.placement===s.parser.yy.PLACEMENT.RIGHTOF?(c.width=o?Math.max(l.width,a.width):Math.max(t[e.from].width/2+t[e.to].width/2,a.width+2*l.noteMargin),c.startx=n+(t[e.from].width+l.actorMargin)/2):e.placement===s.parser.yy.PLACEMENT.LEFTOF?(c.width=o?Math.max(l.width,a.width+2*l.noteMargin):Math.max(t[e.from].width/2+t[e.to].width/2,a.width+2*l.noteMargin),c.startx=n-c.width+(t[e.from].width-l.actorMargin)/2):e.to===e.from?(a=d.default.calculateTextDimensions(o?d.default.wrapLabel(e.message,Math.max(l.width,t[e.from].width),p(l)):e.message,p(l)),c.width=o?Math.max(l.width,t[e.from].width):Math.max(t[e.from].width,l.width,a.width+2*l.noteMargin),c.startx=n+(t[e.from].width-c.width)/2):(c.width=Math.abs(n+t[e.from].width/2-(r+t[e.to].width/2))+l.actorMargin,c.startx=n0&&c.forEach((function(r){if(n=r,o.startx===o.stopx){var i=t[e.from],s=t[e.to];n.from=Math.min(i.x-o.width/2,i.x-i.width/2,n.from),n.to=Math.max(s.x+o.width/2,s.x+i.width/2,n.to),n.width=Math.max(n.width,Math.abs(n.to-n.from))-l.labelBoxWidth}else n.from=Math.min(o.startx,n.from),n.to=Math.max(o.stopx,n.to),n.width=Math.max(n.width,o.width)-l.labelBoxWidth})))})),f.activations=[],i.logger.debug("Loop type widths:",a),a};t.default={bounds:f,drawActors:g,setConf:y,draw:j}},"./src/diagrams/sequence/styles.js": -/*!*****************************************!*\ - !*** ./src/diagrams/sequence/styles.js ***! - \*****************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(e){return".actor {\n stroke: ".concat(e.actorBorder,";\n fill: ").concat(e.actorBkg,";\n }\n\n text.actor > tspan {\n fill: ").concat(e.actorTextColor,";\n stroke: none;\n }\n\n .actor-line {\n stroke: ").concat(e.actorLineColor,";\n }\n\n .messageLine0 {\n stroke-width: 1.5;\n stroke-dasharray: none;\n stroke: ").concat(e.signalColor,";\n }\n\n .messageLine1 {\n stroke-width: 1.5;\n stroke-dasharray: 2, 2;\n stroke: ").concat(e.signalColor,";\n }\n\n #arrowhead path {\n fill: ").concat(e.signalColor,";\n stroke: ").concat(e.signalColor,";\n }\n\n .sequenceNumber {\n fill: ").concat(e.sequenceNumberColor,";\n }\n\n #sequencenumber {\n fill: ").concat(e.signalColor,";\n }\n\n #crosshead path {\n fill: ").concat(e.signalColor,";\n stroke: ").concat(e.signalColor,";\n }\n\n .messageText {\n fill: ").concat(e.signalTextColor,";\n stroke: ").concat(e.signalTextColor,";\n }\n\n .labelBox {\n stroke: ").concat(e.labelBoxBorderColor,";\n fill: ").concat(e.labelBoxBkgColor,";\n }\n\n .labelText, .labelText > tspan {\n fill: ").concat(e.labelTextColor,";\n stroke: none;\n }\n\n .loopText, .loopText > tspan {\n fill: ").concat(e.loopTextColor,";\n stroke: none;\n }\n\n .loopLine {\n stroke-width: 2px;\n stroke-dasharray: 2, 2;\n stroke: ").concat(e.labelBoxBorderColor,";\n fill: ").concat(e.labelBoxBorderColor,";\n }\n\n .note {\n //stroke: #decc93;\n stroke: ").concat(e.noteBorderColor,";\n fill: ").concat(e.noteBkgColor,";\n }\n\n .noteText, .noteText > tspan {\n fill: ").concat(e.noteTextColor,";\n stroke: none;\n }\n\n .activation0 {\n fill: ").concat(e.activationBkgColor,";\n stroke: ").concat(e.activationBorderColor,";\n }\n\n .activation1 {\n fill: ").concat(e.activationBkgColor,";\n stroke: ").concat(e.activationBorderColor,";\n }\n\n .activation2 {\n fill: ").concat(e.activationBkgColor,";\n stroke: ").concat(e.activationBorderColor,";\n }\n")}},"./src/diagrams/sequence/svgDraw.js": -/*!******************************************!*\ - !*** ./src/diagrams/sequence/svgDraw.js ***! - \******************************************/ -/*! exports provided: drawRect, drawText, drawLabel, drawActor, anchorElement, drawActivation, drawLoop, drawBackgroundRect, insertArrowHead, insertArrowFilledHead, insertSequenceNumber, insertArrowCrossHead, getTextObj, getNoteRect, default */function(e,t,n){"use strict";n.r(t),n.d(t,"drawRect",(function(){return o})),n.d(t,"drawText",(function(){return i})),n.d(t,"drawLabel",(function(){return s})),n.d(t,"drawActor",(function(){return c})),n.d(t,"anchorElement",(function(){return u})),n.d(t,"drawActivation",(function(){return d})),n.d(t,"drawLoop",(function(){return l})),n.d(t,"drawBackgroundRect",(function(){return f})),n.d(t,"insertArrowHead",(function(){return h})),n.d(t,"insertArrowFilledHead",(function(){return p})),n.d(t,"insertSequenceNumber",(function(){return m})),n.d(t,"insertArrowCrossHead",(function(){return g})),n.d(t,"getTextObj",(function(){return y})),n.d(t,"getNoteRect",(function(){return b}));var r=n(/*! ../common/common */"./src/diagrams/common/common.js"),o=function(e,t){var n=e.append("rect");return n.attr("x",t.x),n.attr("y",t.y),n.attr("fill",t.fill),n.attr("stroke",t.stroke),n.attr("width",t.width),n.attr("height",t.height),n.attr("rx",t.rx),n.attr("ry",t.ry),void 0!==t.class&&n.attr("class",t.class),n},i=function(e,t){var n=0,o=0,i=t.text.split(r.default.lineBreakRegex),s=[],a=0,c=function(){return t.y};if(void 0!==t.valign&&void 0!==t.textMargin&&t.textMargin>0)switch(t.valign){case"top":case"start":c=function(){return Math.round(t.y+t.textMargin)};break;case"middle":case"center":c=function(){return Math.round(t.y+(n+o+t.textMargin)/2)};break;case"bottom":case"end":c=function(){return Math.round(t.y+(n+o+2*t.textMargin)-t.textMargin)}}if(void 0!==t.anchor&&void 0!==t.textMargin&&void 0!==t.width)switch(t.anchor){case"left":case"start":t.x=Math.round(t.x+t.textMargin),t.anchor="start",t.dominantBaseline="text-after-edge",t.alignmentBaseline="middle";break;case"middle":case"center":t.x=Math.round(t.x+t.width/2),t.anchor="middle",t.dominantBaseline="middle",t.alignmentBaseline="middle";break;case"right":case"end":t.x=Math.round(t.x+t.width-t.textMargin),t.anchor="end",t.dominantBaseline="text-before-edge",t.alignmentBaseline="middle"}for(var u=0;u0&&(o+=(l._groups||l)[0][0].getBBox().height,n=o),s.push(l)}return s},s=function(e,t){var n,r,o,s,a,c=e.append("polygon");return c.attr("points",(n=t.x,r=t.y,o=t.width,s=t.height,n+","+r+" "+(n+o)+","+r+" "+(n+o)+","+(r+s-(a=7))+" "+(n+o-1.2*a)+","+(r+s)+" "+n+","+(r+s))),c.attr("class","labelBox"),t.y=t.y+t.height/2,i(e,t),c},a=-1,c=function(e,t,n){var r=t.x+t.width/2,i=e.append("g");0===t.y&&(a++,i.append("line").attr("id","actor"+a).attr("x1",r).attr("y1",5).attr("x2",r).attr("y2",2e3).attr("class","actor-line").attr("stroke-width","0.5px").attr("stroke","#999"));var s=b();s.x=t.x,s.y=t.y,s.fill="#eaeaea",s.width=t.width,s.height=t.height,s.class="actor",s.rx=3,s.ry=3,o(i,s),_(n)(t.description,i,s.x,s.y,s.width,s.height,{class:"actor"},n)},u=function(e){return e.append("g")},d=function(e,t,n,r,i){var s=b(),a=t.anchored;s.x=t.startx,s.y=t.starty,s.class="activation"+i%3,s.width=t.stopx-t.startx,s.height=n-t.starty,o(a,s)},l=function(e,t,n,r){var o=r.boxMargin,a=r.boxTextMargin,c=r.labelBoxHeight,u=r.labelBoxWidth,d=r.messageFontFamily,l=r.messageFontSize,f=r.messageFontWeight,h=e.append("g"),p=function(e,t,n,r){return h.append("line").attr("x1",e).attr("y1",t).attr("x2",n).attr("y2",r).attr("class","loopLine")};p(t.startx,t.starty,t.stopx,t.starty),p(t.stopx,t.starty,t.stopx,t.stopy),p(t.startx,t.stopy,t.stopx,t.stopy),p(t.startx,t.starty,t.startx,t.stopy),void 0!==t.sections&&t.sections.forEach((function(e){p(t.startx,e.y,t.stopx,e.y).style("stroke-dasharray","3, 3")}));var m=y();m.text=n,m.x=t.startx,m.y=t.starty,m.fontFamily=d,m.fontSize=l,m.fontWeight=f,m.anchor="middle",m.valign="middle",m.tspan=!1,m.width=u||50,m.height=c||20,m.textMargin=a,m.class="labelText",s(h,m),(m=y()).text=t.title,m.x=t.startx+u/2+(t.stopx-t.startx)/2,m.y=t.starty+o+a,m.anchor="middle",m.valign="middle",m.textMargin=a,m.class="loopText",m.fontFamily=d,m.fontSize=l,m.fontWeight=f,m.wrap=!0;var g=i(h,m);return void 0!==t.sectionTitles&&t.sectionTitles.forEach((function(e,n){if(e.message){m.text=e.message,m.x=t.startx+(t.stopx-t.startx)/2,m.y=t.sections[n].y+o+a,m.class="loopText",m.anchor="middle",m.valign="middle",m.tspan=!1,m.fontFamily=d,m.fontSize=l,m.fontWeight=f,m.wrap=t.wrap,g=i(h,m);var r=Math.round(g.map((function(e){return(e._groups||e)[0][0].getBBox().height})).reduce((function(e,t){return e+t})));t.sections[n].height+=r-(o+a)}})),t.height=Math.round(t.stopy-t.starty),h},f=function(e,t){o(e,{x:t.startx,y:t.starty,width:t.stopx-t.startx,height:t.stopy-t.starty,fill:t.fill,class:"rect"}).lower()},h=function(e){e.append("defs").append("marker").attr("id","arrowhead").attr("refX",9).attr("refY",5).attr("markerUnits","userSpaceOnUse").attr("markerWidth",12).attr("markerHeight",12).attr("orient","auto").append("path").attr("d","M 0 0 L 10 5 L 0 10 z")},p=function(e){e.append("defs").append("marker").attr("id","filled-head").attr("refX",18).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 18,7 L9,13 L14,7 L9,1 Z")},m=function(e){e.append("defs").append("marker").attr("id","sequencenumber").attr("refX",15).attr("refY",15).attr("markerWidth",60).attr("markerHeight",40).attr("orient","auto").append("circle").attr("cx",15).attr("cy",15).attr("r",6)},g=function(e){var t=e.append("defs").append("marker").attr("id","crosshead").attr("markerWidth",15).attr("markerHeight",8).attr("orient","auto").attr("refX",16).attr("refY",4);t.append("path").attr("fill","black").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 9,2 V 6 L16,4 Z"),t.append("path").attr("fill","none").attr("stroke","#000000").style("stroke-dasharray","0, 0").attr("stroke-width","1px").attr("d","M 0,1 L 6,7 M 6,1 L 0,7")},y=function(){return{x:0,y:0,fill:void 0,anchor:void 0,style:"#666",width:void 0,height:void 0,textMargin:0,rx:0,ry:0,tspan:!0,valign:void 0}},b=function(){return{x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0}},_=function(){function e(e,t,n,r,i,s,a){o(t.append("text").attr("x",n+i/2).attr("y",r+s/2+5).style("text-anchor","middle").text(e),a)}function t(e,t,n,i,s,a,c,u){for(var d=u.actorFontSize,l=u.actorFontFamily,f=u.actorFontWeight,h=e.split(r.default.lineBreakRegex),p=0;pl&&T.push("'"+this.terminals_[O]+"'");A=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+T.join(", ")+", got '"+(this.terminals_[v]||v)+"'":"Parse error on line "+(c+1)+": Unexpected "+(v==f?"end of input":"'"+(this.terminals_[v]||v)+"'"),this.parseError(A,{text:p.match,token:this.terminals_[v]||v,line:p.yylineno,loc:y,expected:T})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+x+", token: "+v);switch(k[0]){case 1:n.push(v),o.push(p.yytext),i.push(p.yylloc),n.push(k[1]),v=null,j?(v=j,j=null):(u=p.yyleng,a=p.yytext,c=p.yylineno,y=p.yylloc,d>0&&d--);break;case 2:if(C=this.productions_[k[1]][1],S.$=o[o.length-C],S._$={first_line:i[i.length-(C||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(C||1)].first_column,last_column:i[i.length-1].last_column},b&&(S._$.range=[i[i.length-(C||1)].range[0],i[i.length-1].range[1]]),void 0!==(w=this.performAction.apply(S,[a,u,c,m.yy,k[1],o,i].concat(h))))return w;C&&(n=n.slice(0,-1*C*2),o=o.slice(0,-1*C),i=i.slice(0,-1*C)),n.push(this.productions_[k[1]][0]),o.push(S.$),i.push(S._$),E=s[n[n.length-2]][n[n.length-1]],n.push(E);break;case 3:return!0}}return!0}},w={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,n=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var o=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[o[0],o[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var n,r,o;if(this.options.backtrack_lexer&&(o={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(o.yylloc.range=this.yylloc.range.slice(0))),(r=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],n=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var i in o)this[i]=o[i];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var o=this._currentRules(),i=0;it[0].length)){if(t=n,r=i,this.options.backtrack_lexer){if(!1!==(e=this.test_match(n,o[i])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,o[r]))&&e:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return e||this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(e){return(e=this.conditionStack.length-1-Math.abs(e||0))>=0?this.conditionStack[e]:"INITIAL"},pushState:function(e){this.begin(e)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(e,t,n,r){switch(n){case 0:return this.begin("open_directive"),39;case 1:return this.begin("type_directive"),40;case 2:return this.popState(),this.begin("arg_directive"),32;case 3:return this.popState(),this.popState(),42;case 4:return 41;case 5:break;case 6:console.log("Crap after close");break;case 7:return 5;case 8:case 9:case 10:case 11:break;case 12:return this.pushState("SCALE"),15;case 13:return 16;case 14:this.popState();break;case 15:this.pushState("STATE");break;case 16:return this.popState(),t.yytext=t.yytext.slice(0,-8).trim(),23;case 17:return this.popState(),t.yytext=t.yytext.slice(0,-8).trim(),24;case 18:return this.popState(),t.yytext=t.yytext.slice(0,-8).trim(),23;case 19:return this.popState(),t.yytext=t.yytext.slice(0,-8).trim(),24;case 20:this.begin("STATE_STRING");break;case 21:return this.popState(),this.pushState("STATE_ID"),"AS";case 22:return this.popState(),"ID";case 23:this.popState();break;case 24:return"STATE_DESCR";case 25:return 17;case 26:this.popState();break;case 27:return this.popState(),this.pushState("struct"),18;case 28:return this.popState(),19;case 29:break;case 30:return this.begin("NOTE"),26;case 31:return this.popState(),this.pushState("NOTE_ID"),37;case 32:return this.popState(),this.pushState("NOTE_ID"),38;case 33:this.popState(),this.pushState("FLOATING_NOTE");break;case 34:return this.popState(),this.pushState("FLOATING_NOTE_ID"),"AS";case 35:break;case 36:return"NOTE_TEXT";case 37:return this.popState(),"ID";case 38:return this.popState(),this.pushState("NOTE_TEXT"),22;case 39:return this.popState(),t.yytext=t.yytext.substr(2).trim(),28;case 40:return this.popState(),t.yytext=t.yytext.slice(0,-8).trim(),28;case 41:case 42:return 7;case 43:return 14;case 44:return 36;case 45:return 22;case 46:return t.yytext=t.yytext.trim(),12;case 47:return 13;case 48:return 25;case 49:return 5;case 50:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:[\s]+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:state\s+)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*\[\[fork\]\])/i,/^(?:.*\[\[join\]\])/i,/^(?:["])/i,/^(?:\s*as\s+)/i,/^(?:[^\n\{]*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n\s\{]+)/i,/^(?:\n)/i,/^(?:\{)/i,/^(?:\})/i,/^(?:[\n])/i,/^(?:note\s+)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:")/i,/^(?:\s*as\s*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n]*)/i,/^(?:\s*[^:\n\s\-]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:[\s\S]*?end note\b)/i,/^(?:stateDiagram\s+)/i,/^(?:stateDiagram-v2\s+)/i,/^(?:hide empty description\b)/i,/^(?:\[\*\])/i,/^(?:[^:\n\s\-\{]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:-->)/i,/^(?:--)/i,/^(?:$)/i,/^(?:.)/i],conditions:{LINE:{rules:[9,10],inclusive:!1},close_directive:{rules:[9,10],inclusive:!1},arg_directive:{rules:[3,4,9,10],inclusive:!1},type_directive:{rules:[2,3,9,10],inclusive:!1},open_directive:{rules:[1,9,10],inclusive:!1},struct:{rules:[9,10,15,28,29,30,44,45,46,47,48],inclusive:!1},FLOATING_NOTE_ID:{rules:[37],inclusive:!1},FLOATING_NOTE:{rules:[34,35,36],inclusive:!1},NOTE_TEXT:{rules:[39,40],inclusive:!1},NOTE_ID:{rules:[38],inclusive:!1},NOTE:{rules:[31,32,33],inclusive:!1},SCALE:{rules:[13,14],inclusive:!1},ALIAS:{rules:[],inclusive:!1},STATE_ID:{rules:[22],inclusive:!1},STATE_STRING:{rules:[23,24],inclusive:!1},FORK_STATE:{rules:[],inclusive:!1},STATE:{rules:[9,10,16,17,18,19,20,21,25,26,27],inclusive:!1},ID:{rules:[9,10],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,10,11,12,15,27,30,41,42,43,44,45,46,47,49,50],inclusive:!0}}};function O(){this.yy={}}return k.lexer=w,O.prototype=k,k.Parser=O,new O}();t.parser=o,t.Parser=o.Parser,t.parse=function(){return o.parse.apply(o,arguments)},t.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),e.exit(1));var o=n(/*! fs */"./node_modules/node-libs-browser/mock/empty.js").readFileSync(n(/*! path */"./node_modules/path-browserify/index.js").normalize(r[1]),"utf8");return t.parser.parse(o)},n.c[n.s]===r&&t.main(e.argv.slice(1))}).call(this,n(/*! ./../../../../node_modules/process/browser.js */"./node_modules/process/browser.js"),n(/*! ./../../../../node_modules/webpack/buildin/module.js */"./node_modules/webpack/buildin/module.js")(e))},"./src/diagrams/state/shapes.js": -/*!**************************************!*\ - !*** ./src/diagrams/state/shapes.js ***! - \**************************************/ -/*! exports provided: drawStartState, drawDivider, drawSimpleState, drawDescrState, addTitleAndBox, drawText, drawNote, drawState, drawEdge */function(e,t,n){"use strict";n.r(t),n.d(t,"drawStartState",(function(){return d})),n.d(t,"drawDivider",(function(){return l})),n.d(t,"drawSimpleState",(function(){return f})),n.d(t,"drawDescrState",(function(){return h})),n.d(t,"addTitleAndBox",(function(){return p})),n.d(t,"drawText",(function(){return m})),n.d(t,"drawNote",(function(){return g})),n.d(t,"drawState",(function(){return y})),n.d(t,"drawEdge",(function(){return _}));var r=n(/*! d3 */"./node_modules/d3/index.js"),o=n(/*! ./id-cache.js */"./src/diagrams/state/id-cache.js"),i=n(/*! ./stateDb */"./src/diagrams/state/stateDb.js"),s=n(/*! ../../utils */"./src/utils.js"),a=n(/*! ../common/common */"./src/diagrams/common/common.js"),c=n(/*! ../../config */"./src/config.js"),u=n(/*! ../../logger */"./src/logger.js"),d=function(e){return e.append("circle").attr("class","start-state").attr("r",Object(c.getConfig)().state.sizeUnit).attr("cx",Object(c.getConfig)().state.padding+Object(c.getConfig)().state.sizeUnit).attr("cy",Object(c.getConfig)().state.padding+Object(c.getConfig)().state.sizeUnit)},l=function(e){return e.append("line").style("stroke","grey").style("stroke-dasharray","3").attr("x1",Object(c.getConfig)().state.textHeight).attr("class","divider").attr("x2",2*Object(c.getConfig)().state.textHeight).attr("y1",0).attr("y2",0)},f=function(e,t){var n=e.append("text").attr("x",2*Object(c.getConfig)().state.padding).attr("y",Object(c.getConfig)().state.textHeight+2*Object(c.getConfig)().state.padding).attr("font-size",Object(c.getConfig)().state.fontSize).attr("class","state-title").text(t.id),r=n.node().getBBox();return e.insert("rect",":first-child").attr("x",Object(c.getConfig)().state.padding).attr("y",Object(c.getConfig)().state.padding).attr("width",r.width+2*Object(c.getConfig)().state.padding).attr("height",r.height+2*Object(c.getConfig)().state.padding).attr("rx",Object(c.getConfig)().state.radius),n},h=function(e,t){var n=e.append("text").attr("x",2*Object(c.getConfig)().state.padding).attr("y",Object(c.getConfig)().state.textHeight+1.3*Object(c.getConfig)().state.padding).attr("font-size",Object(c.getConfig)().state.fontSize).attr("class","state-title").text(t.descriptions[0]).node().getBBox(),r=n.height,o=e.append("text").attr("x",Object(c.getConfig)().state.padding).attr("y",r+.4*Object(c.getConfig)().state.padding+Object(c.getConfig)().state.dividerMargin+Object(c.getConfig)().state.textHeight).attr("class","state-description"),i=!0,s=!0;t.descriptions.forEach((function(e){i||(function(e,t,n){var r=e.append("tspan").attr("x",2*Object(c.getConfig)().state.padding).text(t);n||r.attr("dy",Object(c.getConfig)().state.textHeight)}(o,e,s),s=!1),i=!1}));var a=e.append("line").attr("x1",Object(c.getConfig)().state.padding).attr("y1",Object(c.getConfig)().state.padding+r+Object(c.getConfig)().state.dividerMargin/2).attr("y2",Object(c.getConfig)().state.padding+r+Object(c.getConfig)().state.dividerMargin/2).attr("class","descr-divider"),u=o.node().getBBox(),d=Math.max(u.width,n.width);return a.attr("x2",d+3*Object(c.getConfig)().state.padding),e.insert("rect",":first-child").attr("x",Object(c.getConfig)().state.padding).attr("y",Object(c.getConfig)().state.padding).attr("width",d+2*Object(c.getConfig)().state.padding).attr("height",u.height+r+2*Object(c.getConfig)().state.padding).attr("rx",Object(c.getConfig)().state.radius),e},p=function(e,t,n){var r,o=Object(c.getConfig)().state.padding,i=2*Object(c.getConfig)().state.padding,s=e.node().getBBox(),a=s.width,u=s.x,d=e.append("text").attr("x",0).attr("y",Object(c.getConfig)().state.titleShift).attr("font-size",Object(c.getConfig)().state.fontSize).attr("class","state-title").text(t.id),l=d.node().getBBox().width+i,f=Math.max(l,a);f===a&&(f+=i);var h=e.node().getBBox();t.doc,r=u-o,l>a&&(r=(a-f)/2+o),Math.abs(u-h.x)a&&(r=u-(l-a)/2);var p=1-Object(c.getConfig)().state.textHeight;return e.insert("rect",":first-child").attr("x",r).attr("y",p).attr("class",n?"alt-composit":"composit").attr("width",f).attr("height",h.height+Object(c.getConfig)().state.textHeight+Object(c.getConfig)().state.titleShift+1).attr("rx","0"),d.attr("x",r+o),l<=a&&d.attr("x",u+(f-i)/2-l/2+o),e.insert("rect",":first-child").attr("x",r).attr("y",Object(c.getConfig)().state.titleShift-Object(c.getConfig)().state.textHeight-Object(c.getConfig)().state.padding).attr("width",f).attr("height",3*Object(c.getConfig)().state.textHeight).attr("rx",Object(c.getConfig)().state.radius),e.insert("rect",":first-child").attr("x",r).attr("y",Object(c.getConfig)().state.titleShift-Object(c.getConfig)().state.textHeight-Object(c.getConfig)().state.padding).attr("width",f).attr("height",h.height+3+2*Object(c.getConfig)().state.textHeight).attr("rx",Object(c.getConfig)().state.radius),e},m=function(e,t){var n=t.text.replace(a.default.lineBreakRegex," "),r=e.append("text");r.attr("x",t.x),r.attr("y",t.y),r.style("text-anchor",t.anchor),r.attr("fill",t.fill),void 0!==t.class&&r.attr("class",t.class);var o=r.append("tspan");return o.attr("x",t.x+2*t.textMargin),o.attr("fill",t.fill),o.text(n),r},g=function(e,t){t.attr("class","state-note");var n=t.append("rect").attr("x",0).attr("y",Object(c.getConfig)().state.padding),r=function(e,t,n,r){var o=0,i=r.append("text");i.style("text-anchor","start"),i.attr("class","noteText");var s=e.replace(/\r\n/g,"
"),u=(s=s.replace(/\n/g,"
")).split(a.default.lineBreakRegex),d=1.25*Object(c.getConfig)().state.noteMargin,l=!0,f=!1,h=void 0;try{for(var p,m=u[Symbol.iterator]();!(l=(p=m.next()).done);l=!0){var g=p.value.trim();if(g.length>0){var y=i.append("tspan");y.text(g),0===d&&(d+=y.node().getBBox().height),o+=d,y.attr("x",t+Object(c.getConfig)().state.noteMargin),y.attr("y",n+o+1.25*Object(c.getConfig)().state.noteMargin)}}}catch(e){f=!0,h=e}finally{try{l||null==m.return||m.return()}finally{if(f)throw h}}return{textWidth:i.node().getBBox().width,textHeight:o}}(e,0,0,t.append("g")),o=r.textWidth,i=r.textHeight;return n.attr("height",i+2*Object(c.getConfig)().state.noteMargin),n.attr("width",o+2*Object(c.getConfig)().state.noteMargin),n},y=function(e,t){var n=t.id,r={id:n,label:t.id,width:0,height:0},i=e.append("g").attr("id",n).attr("class","stateGroup");"start"===t.type&&d(i),"end"===t.type&&function(e){e.append("circle").attr("class","end-state-outer").attr("r",Object(c.getConfig)().state.sizeUnit+Object(c.getConfig)().state.miniPadding).attr("cx",Object(c.getConfig)().state.padding+Object(c.getConfig)().state.sizeUnit+Object(c.getConfig)().state.miniPadding).attr("cy",Object(c.getConfig)().state.padding+Object(c.getConfig)().state.sizeUnit+Object(c.getConfig)().state.miniPadding),e.append("circle").attr("class","end-state-inner").attr("r",Object(c.getConfig)().state.sizeUnit).attr("cx",Object(c.getConfig)().state.padding+Object(c.getConfig)().state.sizeUnit+2).attr("cy",Object(c.getConfig)().state.padding+Object(c.getConfig)().state.sizeUnit+2)}(i),"fork"!==t.type&&"join"!==t.type||function(e,t){var n=Object(c.getConfig)().state.forkWidth,r=Object(c.getConfig)().state.forkHeight;if(t.parentId){var o=n;n=r,r=o}e.append("rect").style("stroke","black").style("fill","black").attr("width",n).attr("height",r).attr("x",Object(c.getConfig)().state.padding).attr("y",Object(c.getConfig)().state.padding)}(i,t),"note"===t.type&&g(t.note.text,i),"divider"===t.type&&l(i),"default"===t.type&&0===t.descriptions.length&&f(i,t),"default"===t.type&&t.descriptions.length>0&&h(i,t);var s=i.node().getBBox();return r.width=s.width+2*Object(c.getConfig)().state.padding,r.height=s.height+2*Object(c.getConfig)().state.padding,o.default.set(n,r),r},b=0,_=function(e,t,n){t.points=t.points.filter((function(e){return!Number.isNaN(e.y)}));var o=t.points,d=Object(r.line)().x((function(e){return e.x})).y((function(e){return e.y})).curve(r.curveBasis),l=e.append("path").attr("d",d(o)).attr("id","edge"+b).attr("class","transition"),f="";if(Object(c.getConfig)().state.arrowMarkerAbsolute&&(f=(f=(f=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search).replace(/\(/g,"\\(")).replace(/\)/g,"\\)")),l.attr("marker-end","url("+f+"#"+function(e){switch(e){case i.default.relationType.AGGREGATION:return"aggregation";case i.default.relationType.EXTENSION:return"extension";case i.default.relationType.COMPOSITION:return"composition";case i.default.relationType.DEPENDENCY:return"dependency"}}(i.default.relationType.DEPENDENCY)+"End)"),void 0!==n.title){for(var h=e.append("g").attr("class","stateLabel"),p=s.default.calcLabelPosition(t.points),m=p.x,g=p.y,y=a.default.getRows(n.title),_=0,v=[],j=0,x=0,k=0;k<=y.length;k++){var w=h.append("text").attr("text-anchor","middle").text(y[k]).attr("x",m).attr("y",g+_),O=w.node().getBBox();if(j=Math.max(j,O.width),x=Math.min(x,O.x),u.logger.info(O.x,m,g+_),0===_){var C=w.node().getBBox();_=C.height,u.logger.info("Title height",_,g)}v.push(w)}var E=_*y.length;if(y.length>1){var T=(y.length-1)*_*.5;v.forEach((function(e,t){return e.attr("y",g+t*_-T)})),E=_*y.length}var S=h.node().getBBox();h.insert("rect",":first-child").attr("class","box").attr("x",m-j/2-Object(c.getConfig)().state.padding/2).attr("y",g-E/2-Object(c.getConfig)().state.padding/2-3.5).attr("width",j+Object(c.getConfig)().state.padding).attr("height",E+Object(c.getConfig)().state.padding),u.logger.info(S)}b++}},"./src/diagrams/state/stateDb.js": -/*!***************************************!*\ - !*** ./src/diagrams/state/stateDb.js ***! - \***************************************/ -/*! exports provided: parseDirective, addState, clear, getState, getStates, logDocuments, getRelations, addRelation, cleanupLabel, lineType, relationType, default */function(e,t,n){"use strict";n.r(t),n.d(t,"parseDirective",(function(){return d})),n.d(t,"addState",(function(){return p})),n.d(t,"clear",(function(){return m})),n.d(t,"getState",(function(){return g})),n.d(t,"getStates",(function(){return y})),n.d(t,"logDocuments",(function(){return b})),n.d(t,"getRelations",(function(){return _})),n.d(t,"addRelation",(function(){return v})),n.d(t,"cleanupLabel",(function(){return x})),n.d(t,"lineType",(function(){return k})),n.d(t,"relationType",(function(){return C}));var r=n(/*! ../../logger */"./src/logger.js"),o=n(/*! ../../utils */"./src/utils.js"),i=n(/*! ../../mermaidAPI */"./src/mermaidAPI.js"),s=n(/*! ../../config */"./src/config.js");function a(e){return(a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var c=function(e){return JSON.parse(JSON.stringify(e))},u=[],d=function(e,t,n){i.default.parseDirective(this,e,t,n)},l={root:{relations:[],states:{},documents:{}}},f=l.root,h=0,p=function(e,t,n,o,i){void 0===f.states[e]?f.states[e]={id:e,descriptions:[],type:t,doc:n,note:i}:(f.states[e].doc||(f.states[e].doc=n),f.states[e].type||(f.states[e].type=t)),o&&(r.logger.info("Adding state ",e,o),"string"==typeof o&&j(e,o.trim()),"object"===a(o)&&o.forEach((function(t){return j(e,t.trim())}))),i&&(f.states[e].note=i)},m=function(){f=(l={root:{relations:[],states:{},documents:{}}}).root,f=l.root,h=0,O=[]},g=function(e){return f.states[e]},y=function(){return f.states},b=function(){r.logger.info("Documents = ",l)},_=function(){return f.relations},v=function(e,t,n){var r=e,o=t,i="default",s="default";"[*]"===e&&(r="start"+ ++h,i="start"),"[*]"===t&&(o="end"+h,s="end"),p(r,i),p(o,s),f.relations.push({id1:r,id2:o,title:n})},j=function(e,t){var n=f.states[e],r=t;":"===r[0]&&(r=r.substr(1).trim()),n.descriptions.push(r)},x=function(e){return":"===e.substring(0,1)?e.substr(2).trim():e.trim()},k={LINE:0,DOTTED_LINE:1},w=0,O=[],C={AGGREGATION:0,EXTENSION:1,COMPOSITION:2,DEPENDENCY:3};t.default={parseDirective:d,getConfig:function(){return s.getConfig().state},addState:p,clear:m,getState:g,getStates:y,getRelations:_,getClasses:function(){return O},getDirection:function(){return"TB"},addRelation:v,getDividerId:function(){return"divider-id-"+ ++w},cleanupLabel:x,lineType:k,relationType:C,logDocuments:b,getRootDoc:function(){return u},setRootDoc:function(e){r.logger.info("Setting root doc",e),u=e},getRootDocV2:function(){return function e(t,n,r){if("relation"===n.stmt)e(t,n.state1,!0),e(t,n.state2,!1);else if("state"===n.stmt&&"[*]"===n.id&&(n.id=r?t.id+"_start":t.id+"_end",n.start=r),n.doc){var i=[],s=0,a=[];for(s=0;s0&&a.length>0){var d={stmt:"state",id:Object(o.generateId)(),type:"divider",doc:c(a)};i.push(c(d)),n.doc=i}n.doc.forEach((function(t){return e(n,t,!0)}))}}({id:"root"},{id:"root",doc:u},!0),{id:"root",doc:u}},extract:function(e){var t;t=e.doc?e.doc:e,r.logger.info(t),m(),r.logger.info("Extract",t),t.forEach((function(e){"state"===e.stmt&&p(e.id,e.type,e.doc,e.description,e.note),"relation"===e.stmt&&v(e.state1.id,e.state2.id,e.description)}))},trimColon:function(e){return e&&":"===e[0]?e.substr(1).trim():e.trim()}}},"./src/diagrams/state/stateRenderer-v2.js": -/*!************************************************!*\ - !*** ./src/diagrams/state/stateRenderer-v2.js ***! - \************************************************/ -/*! exports provided: setConf, getClasses, draw, default */function(e,t,n){"use strict";n.r(t),n.d(t,"setConf",(function(){return p})),n.d(t,"getClasses",(function(){return g})),n.d(t,"draw",(function(){return v}));var r=n(/*! graphlib */"./node_modules/graphlib/index.js"),o=n.n(r),i=n(/*! d3 */"./node_modules/d3/index.js"),s=n(/*! ./stateDb */"./src/diagrams/state/stateDb.js"),a=n(/*! ./parser/stateDiagram */"./src/diagrams/state/parser/stateDiagram.jison"),c=n.n(a),u=n(/*! ../../config */"./src/config.js"),d=n(/*! ../../dagre-wrapper/index.js */"./src/dagre-wrapper/index.js"),l=n(/*! ../../logger */"./src/logger.js"),f=n(/*! ../../utils */"./src/utils.js"),h={},p=function(e){for(var t=Object.keys(e),n=0;n0?(m[n.id].shape="rectWithTitle",m[n.id].description===n.id?m[n.id].description=[n.description]:m[n.id].description=[m[n.id].description,n.description]):(m[n.id].shape="rect",m[n.id].description=n.description)),!m[n.id].type&&n.doc&&(l.logger.info("Setting cluser for ",n.id),m[n.id].type="group",m[n.id].shape="divider"===n.type?"divider":"roundedWithTitle",m[n.id].classes=m[n.id].classes+" "+(r?"statediagram-cluster statediagram-cluster-alt":"statediagram-cluster"));var i={labelStyle:"",shape:m[n.id].shape,labelText:m[n.id].description,classes:m[n.id].classes,style:"",id:n.id,domId:"state-"+n.id+"-"+b,type:m[n.id].type,padding:15};if(n.note){var s={labelStyle:"",shape:"note",labelText:n.note.text,classes:"statediagram-note",style:"",id:n.id+"----note",domId:"state-"+n.id+"----note-"+b,type:m[n.id].type,padding:15},a={labelStyle:"",shape:"noteGroup",labelText:n.note.text,classes:m[n.id].classes,style:"",id:n.id+"----parent",domId:"state-"+n.id+"----parent-"+b,type:"group",padding:0};b++,e.setNode(n.id+"----parent",a),e.setNode(s.id,s),e.setNode(n.id,i),e.setParent(n.id,n.id+"----parent"),e.setParent(s.id,n.id+"----parent");var c=n.id,u=s.id;"left of"===n.note.position&&(c=s.id,u=n.id),e.setEdge(c,u,{arrowhead:"none",arrowType:"",style:"fill:none",labelStyle:"",classes:"transition note-edge",arrowheadStyle:"fill: #333",labelpos:"c",labelType:"text",thickness:"normal"})}else e.setNode(n.id,i)}t&&"root"!==t.id&&(l.logger.info("Setting node ",n.id," to be child of its parent ",t.id),e.setParent(n.id,t.id)),n.doc&&(l.logger.info("Adding nodes children "),_(e,n,n.doc,!r))},b=0,_=function(e,t,n,r){b=0,l.logger.trace("items",n),n.forEach((function(n){if("state"===n.stmt||"default"===n.stmt)y(e,t,n,r);else if("relation"===n.stmt){y(e,t,n.state1,r),y(e,t,n.state2,r);var o={id:"edge"+b,arrowhead:"normal",arrowTypeEnd:"arrow_barb",style:"fill:none",labelStyle:"",label:n.description,arrowheadStyle:"fill: #333",labelpos:"c",labelType:"text",thickness:"normal",classes:"transition"},i=n.state1.id,s=n.state2.id;e.setEdge(i,s,o,b),b++}}))},v=function(e,t){l.logger.info("Drawing state diagram (v2)",t),s.default.clear(),m={};var n=c.a.parser;n.yy=s.default,n.parse(e);var r=s.default.getDirection();void 0===r&&(r="LR");var a=Object(u.getConfig)().state,h=a.nodeSpacing||50,p=a.rankSpacing||50,g=new o.a.Graph({multigraph:!0,compound:!0}).setGraph({rankdir:"TB",nodesep:h,ranksep:p,marginx:8,marginy:8}).setDefaultEdgeLabel((function(){return{}}));l.logger.info(s.default.getRootDocV2()),s.default.extract(s.default.getRootDocV2()),l.logger.info(s.default.getRootDocV2()),y(g,void 0,s.default.getRootDocV2(),!0);var b=Object(i.select)('[id="'.concat(t,'"]')),_=Object(i.select)("#"+t+" g");Object(d.render)(_,g,["barb"],"statediagram",t);var v=b.node().getBBox(),j=v.width+16,x=v.height+16;b.attr("class","statediagram");var k=b.node().getBBox();Object(f.configureSvgSize)(b,x,1.75*j,a.useMaxWidth);var w="".concat(k.x-8," ").concat(k.y-8," ").concat(j," ").concat(x);if(l.logger.debug("viewBox ".concat(w)),b.attr("viewBox",w),!a.htmlLabels)for(var O=document.querySelectorAll('[id="'+t+'"] .edgeLabel .label'),C=0;C "+e.w+": "+JSON.stringify(p.edge(e))),Object(h.drawEdge)(n,p.edge(e),p.edge(e).relation))})),S=T.getBBox();var A={id:i||"root",label:i||"root",width:0,height:0};return A.width=S.width+2*r.padding,A.height=S.height+2*r.padding,u.logger.debug("Doc rendered",A,p),A};t.default={setConf:y,draw:b}},"./src/diagrams/state/styles.js": -/*!**************************************!*\ - !*** ./src/diagrams/state/styles.js ***! - \**************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(e){return"g.stateGroup text {\n fill: ".concat(e.nodeBorder,";\n stroke: none;\n font-size: 10px;\n}\ng.stateGroup text {\n fill: ").concat(e.textColor,";\n stroke: none;\n font-size: 10px;\n\n}\ng.stateGroup .state-title {\n font-weight: bolder;\n fill: ").concat(e.labelColor,";\n}\n\ng.stateGroup rect {\n fill: ").concat(e.mainBkg,";\n stroke: ").concat(e.nodeBorder,";\n}\n\ng.stateGroup line {\n stroke: ").concat(e.lineColor,";\n stroke-width: 1;\n}\n\n.transition {\n stroke: ").concat(e.lineColor,";\n stroke-width: 1;\n fill: none;\n}\n\n.stateGroup .composit {\n fill: ").concat(e.background,";\n border-bottom: 1px\n}\n\n.stateGroup .alt-composit {\n fill: #e0e0e0;\n border-bottom: 1px\n}\n\n.state-note {\n stroke: ").concat(e.noteBorderColor,";\n fill: ").concat(e.noteBkgColor,";\n\n text {\n fill: black;\n stroke: none;\n font-size: 10px;\n }\n}\n\n.stateLabel .box {\n stroke: none;\n stroke-width: 0;\n fill: ").concat(e.mainBkg,";\n opacity: 0.5;\n}\n\n.edgeLabel .label rect {\n fill: ").concat(e.tertiaryColor,";\n opacity: 0.5;\n}\n.edgeLabel .label text {\n fill: ").concat(e.tertiaryTextColor,";\n}\n.label div .edgeLabel {\n color: ").concat(e.tertiaryTextColor,";\n}\n\n.stateLabel text {\n fill: ").concat(e.labelColor,";\n font-size: 10px;\n font-weight: bold;\n}\n\n.node circle.state-start {\n fill: ").concat(e.lineColor,";\n stroke: black;\n}\n.node circle.state-end {\n fill: ").concat(e.primaryBorderColor,";\n stroke: ").concat(e.background,";\n stroke-width: 1.5\n}\n.end-state-inner {\n fill: ").concat(e.background,";\n // stroke: ").concat(e.background,";\n stroke-width: 1.5\n}\n\n.node rect {\n fill: ").concat(e.mainBkg,";\n stroke: ").concat(e.nodeBorder,";\n stroke-width: 1px;\n}\n#statediagram-barbEnd {\n fill: ").concat(e.lineColor,";\n}\n\n.statediagram-cluster rect {\n fill: ").concat(e.mainBkg,";\n stroke: ").concat(e.nodeBorder,";\n stroke-width: 1px;\n}\n\n.cluster-label, .nodeLabel {\n color: ").concat(e.textColor,";\n}\n\n.statediagram-cluster rect.outer {\n rx: 5px;\n ry: 5px;\n}\n.statediagram-state .divider {\n stroke: ").concat(e.nodeBorder,";\n}\n\n.statediagram-state .title-state {\n rx: 5px;\n ry: 5px;\n}\n.statediagram-cluster.statediagram-cluster .inner {\n fill: ").concat(e.background,";\n}\n.statediagram-cluster.statediagram-cluster-alt .inner {\n fill: #e0e0e0;\n}\n\n.statediagram-cluster .inner {\n rx:0;\n ry:0;\n}\n\n.statediagram-state rect.basic {\n rx: 5px;\n ry: 5px;\n}\n.statediagram-state rect.divider {\n stroke-dasharray: 10,10;\n fill: ").concat(e.altBackground?e.altBackground:"#efefef",";\n}\n\n.note-edge {\n stroke-dasharray: 5;\n}\n\n.statediagram-note rect {\n fill: ").concat(e.noteBkgColor,";\n stroke: ").concat(e.noteBorderColor,";\n stroke-width: 1px;\n rx: 0;\n ry: 0;\n}\n.statediagram-note rect {\n fill: ").concat(e.noteBkgColor,";\n stroke: ").concat(e.noteBorderColor,";\n stroke-width: 1px;\n rx: 0;\n ry: 0;\n}\n\n.statediagram-note text {\n fill: ").concat(e.noteTextColor,";\n}\n\n.statediagram-note .nodeLabel {\n color: ").concat(e.noteTextColor,";\n}\n\n#dependencyStart, #dependencyEnd {\n fill: ").concat(e.lineColor,";\n stroke: ").concat(e.lineColor,";\n stroke-width: 1;\n}\n")}},"./src/diagrams/user-journey/journeyDb.js": -/*!************************************************!*\ - !*** ./src/diagrams/user-journey/journeyDb.js ***! - \************************************************/ -/*! exports provided: parseDirective, clear, setTitle, getTitle, addSection, getSections, getTasks, addTask, addTaskOrg, default */function(e,t,n){"use strict";n.r(t),n.d(t,"parseDirective",(function(){return l})),n.d(t,"clear",(function(){return f})),n.d(t,"setTitle",(function(){return h})),n.d(t,"getTitle",(function(){return p})),n.d(t,"addSection",(function(){return m})),n.d(t,"getSections",(function(){return g})),n.d(t,"getTasks",(function(){return y})),n.d(t,"addTask",(function(){return b})),n.d(t,"addTaskOrg",(function(){return _}));var r=n(/*! ../../mermaidAPI */"./src/mermaidAPI.js"),o=n(/*! ../../config */"./src/config.js");function i(e){return function(e){if(Array.isArray(e)){for(var t=0,n=new Array(e.length);tl&&T.push("'"+this.terminals_[O]+"'");A=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+T.join(", ")+", got '"+(this.terminals_[v]||v)+"'":"Parse error on line "+(c+1)+": Unexpected "+(v==f?"end of input":"'"+(this.terminals_[v]||v)+"'"),this.parseError(A,{text:p.match,token:this.terminals_[v]||v,line:p.yylineno,loc:y,expected:T})}if(k[0]instanceof Array&&k.length>1)throw new Error("Parse Error: multiple actions possible at state: "+x+", token: "+v);switch(k[0]){case 1:n.push(v),o.push(p.yytext),i.push(p.yylloc),n.push(k[1]),v=null,j?(v=j,j=null):(u=p.yyleng,a=p.yytext,c=p.yylineno,y=p.yylloc,d>0&&d--);break;case 2:if(C=this.productions_[k[1]][1],S.$=o[o.length-C],S._$={first_line:i[i.length-(C||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(C||1)].first_column,last_column:i[i.length-1].last_column},b&&(S._$.range=[i[i.length-(C||1)].range[0],i[i.length-1].range[1]]),void 0!==(w=this.performAction.apply(S,[a,u,c,m.yy,k[1],o,i].concat(h))))return w;C&&(n=n.slice(0,-1*C*2),o=o.slice(0,-1*C),i=i.slice(0,-1*C)),n.push(this.productions_[k[1]][0]),o.push(S.$),i.push(S._$),E=s[n[n.length-2]][n[n.length-1]],n.push(E);break;case 3:return!0}}return!0}},d={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,n=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var o=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[o[0],o[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var n,r,o;if(this.options.backtrack_lexer&&(o={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(o.yylloc.range=this.yylloc.range.slice(0))),(r=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],n=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var i in o)this[i]=o[i];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var o=this._currentRules(),i=0;it[0].length)){if(t=n,r=i,this.options.backtrack_lexer){if(!1!==(e=this.test_match(n,o[i])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,o[r]))&&e:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return e||this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(e){return(e=this.conditionStack.length-1-Math.abs(e||0))>=0?this.conditionStack[e]:"INITIAL"},pushState:function(e){this.begin(e)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(e,t,n,r){switch(n){case 0:return this.begin("open_directive"),21;case 1:return this.begin("type_directive"),22;case 2:return this.popState(),this.begin("arg_directive"),15;case 3:return this.popState(),this.popState(),24;case 4:return 23;case 5:case 6:break;case 7:return 11;case 8:case 9:break;case 10:return 4;case 11:return 17;case 12:return 18;case 13:return 19;case 14:return 20;case 15:return 15;case 16:return 6;case 17:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:journey\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{open_directive:{rules:[1],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,12,13,14,15,16,17],inclusive:!0}}};function l(){this.yy={}}return u.lexer=d,l.prototype=u,u.Parser=l,new l}();t.parser=o,t.Parser=o.Parser,t.parse=function(){return o.parse.apply(o,arguments)},t.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),e.exit(1));var o=n(/*! fs */"./node_modules/node-libs-browser/mock/empty.js").readFileSync(n(/*! path */"./node_modules/path-browserify/index.js").normalize(r[1]),"utf8");return t.parser.parse(o)},n.c[n.s]===r&&t.main(e.argv.slice(1))}).call(this,n(/*! ./../../../../node_modules/process/browser.js */"./node_modules/process/browser.js"),n(/*! ./../../../../node_modules/webpack/buildin/module.js */"./node_modules/webpack/buildin/module.js")(e))},"./src/diagrams/user-journey/styles.js": -/*!*********************************************!*\ - !*** ./src/diagrams/user-journey/styles.js ***! - \*********************************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t),t.default=function(e){return".label {\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n color: ".concat(e.textColor,";\n }\n .mouth {\n stroke: #666;\n }\n\n line {\n stroke: ").concat(e.textColor,"\n }\n\n .legend {\n fill: ").concat(e.textColor,";\n }\n\n .label text {\n fill: #333;\n }\n .label {\n color: ").concat(e.textColor,"\n }\n\n .face {\n fill: #FFF8DC;\n stroke: #999;\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ").concat(e.mainBkg,";\n stroke: ").concat(e.nodeBorder,";\n stroke-width: 1px;\n }\n\n .node .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n .arrowheadPath {\n fill: ").concat(e.arrowheadColor,";\n }\n\n .edgePath .path {\n stroke: ").concat(e.lineColor,";\n stroke-width: 1.5px;\n }\n\n .flowchart-link {\n stroke: ").concat(e.lineColor,";\n fill: none;\n }\n\n .edgeLabel {\n background-color: ").concat(e.edgeLabelBackground,";\n rect {\n opacity: 0.5;\n }\n text-align: center;\n }\n\n .cluster rect {\n }\n\n .cluster text {\n fill: ").concat(e.titleColor,";\n }\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n font-size: 12px;\n background: ").concat(e.tertiaryColor,";\n border: 1px solid ").concat(e.border2,";\n border-radius: 2px;\n pointer-events: none;\n z-index: 100;\n }\n\n .task-type-0, .section-type-0 {\n ").concat(e.fillType0?"fill: ".concat(e.fillType0):"",";\n }\n .task-type-1, .section-type-1 {\n ").concat(e.fillType0?"fill: ".concat(e.fillType1):"",";\n }\n .task-type-2, .section-type-2 {\n ").concat(e.fillType0?"fill: ".concat(e.fillType2):"",";\n }\n .task-type-3, .section-type-3 {\n ").concat(e.fillType0?"fill: ".concat(e.fillType3):"",";\n }\n .task-type-4, .section-type-4 {\n ").concat(e.fillType0?"fill: ".concat(e.fillType4):"",";\n }\n .task-type-5, .section-type-5 {\n ").concat(e.fillType0?"fill: ".concat(e.fillType5):"",";\n }\n .task-type-6, .section-type-6 {\n ").concat(e.fillType0?"fill: ".concat(e.fillType6):"",";\n }\n .task-type-7, .section-type-7 {\n ").concat(e.fillType0?"fill: ".concat(e.fillType7):"",";\n }\n")}},"./src/diagrams/user-journey/svgDraw.js": -/*!**********************************************!*\ - !*** ./src/diagrams/user-journey/svgDraw.js ***! - \**********************************************/ -/*! exports provided: drawRect, drawFace, drawCircle, drawText, drawLabel, drawSection, drawTask, drawBackgroundRect, getTextObj, getNoteRect, default */function(e,t,n){"use strict";n.r(t),n.d(t,"drawRect",(function(){return o})),n.d(t,"drawFace",(function(){return i})),n.d(t,"drawCircle",(function(){return s})),n.d(t,"drawText",(function(){return a})),n.d(t,"drawLabel",(function(){return c})),n.d(t,"drawSection",(function(){return u})),n.d(t,"drawTask",(function(){return l})),n.d(t,"drawBackgroundRect",(function(){return f})),n.d(t,"getTextObj",(function(){return h})),n.d(t,"getNoteRect",(function(){return p}));var r=n(/*! d3 */"./node_modules/d3/index.js"),o=function(e,t){var n=e.append("rect");return n.attr("x",t.x),n.attr("y",t.y),n.attr("fill",t.fill),n.attr("stroke",t.stroke),n.attr("width",t.width),n.attr("height",t.height),n.attr("rx",t.rx),n.attr("ry",t.ry),void 0!==t.class&&n.attr("class",t.class),n},i=function(e,t){var n=e.append("circle").attr("cx",t.cx).attr("cy",t.cy).attr("class","face").attr("r",15).attr("stroke-width",2).attr("overflow","visible"),o=e.append("g");return o.append("circle").attr("cx",t.cx-5).attr("cy",t.cy-5).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),o.append("circle").attr("cx",t.cx+5).attr("cy",t.cy-5).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),t.score>3?function(e){var n=Object(r.arc)().startAngle(Math.PI/2).endAngle(Math.PI/2*3).innerRadius(7.5).outerRadius(15/2.2);e.append("path").attr("class","mouth").attr("d",n).attr("transform","translate("+t.cx+","+(t.cy+2)+")")}(o):t.score<3?function(e){var n=Object(r.arc)().startAngle(3*Math.PI/2).endAngle(Math.PI/2*5).innerRadius(7.5).outerRadius(15/2.2);e.append("path").attr("class","mouth").attr("d",n).attr("transform","translate("+t.cx+","+(t.cy+7)+")")}(o):function(e){e.append("line").attr("class","mouth").attr("stroke",2).attr("x1",t.cx-5).attr("y1",t.cy+7).attr("x2",t.cx+5).attr("y2",t.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}(o),n},s=function(e,t){var n=e.append("circle");return n.attr("cx",t.cx),n.attr("cy",t.cy),n.attr("fill",t.fill),n.attr("stroke",t.stroke),n.attr("r",t.r),void 0!==n.class&&n.attr("class",n.class),void 0!==t.title&&n.append("title").text(t.title),n},a=function(e,t){var n=t.text.replace(//gi," "),r=e.append("text");r.attr("x",t.x),r.attr("y",t.y),r.attr("class","legend"),r.style("text-anchor",t.anchor),void 0!==t.class&&r.attr("class",t.class);var o=r.append("tspan");return o.attr("x",t.x+2*t.textMargin),o.text(n),r},c=function(e,t){var n,r,o,i,s,c=e.append("polygon");c.attr("points",(n=t.x,r=t.y,n+","+r+" "+(n+(o=50))+","+r+" "+(n+o)+","+(r+(i=20)-(s=7))+" "+(n+o-1.2*s)+","+(r+i)+" "+n+","+(r+i))),c.attr("class","labelBox"),t.y=t.y+t.labelMargin,t.x=t.x+.5*t.labelMargin,a(e,t)},u=function(e,t,n){var r=e.append("g"),i=p();i.x=t.x,i.y=t.y,i.fill=t.fill,i.width=n.width,i.height=n.height,i.class="journey-section section-type-"+t.num,i.rx=3,i.ry=3,o(r,i),m(n)(t.text,r,i.x,i.y,i.width,i.height,{class:"journey-section section-type-"+t.num},n,t.colour)},d=-1,l=function(e,t,n){var r=t.x+n.width/2,a=e.append("g");d++,a.append("line").attr("id","task"+d).attr("x1",r).attr("y1",t.y).attr("x2",r).attr("y2",450).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),i(a,{cx:r,cy:300+30*(5-t.score),score:t.score});var c=p();c.x=t.x,c.y=t.y,c.fill=t.fill,c.width=n.width,c.height=n.height,c.class="task task-type-"+t.num,c.rx=3,c.ry=3,o(a,c);var u=t.x+14;t.people.forEach((function(e){var n=t.actors[e],r={cx:u,cy:t.y,r:7,fill:n,stroke:"#000",title:e};s(a,r),u+=10})),m(n)(t.task,a,c.x,c.y,c.width,c.height,{class:"task"},n,t.colour)},f=function(e,t){o(e,{x:t.startx,y:t.starty,width:t.stopx-t.startx,height:t.stopy-t.starty,fill:t.fill,class:"rect"}).lower()},h=function(){return{x:0,y:0,fill:void 0,"text-anchor":"start",width:100,height:100,textMargin:0,rx:0,ry:0}},p=function(){return{x:0,y:0,width:100,anchor:"start",height:100,rx:0,ry:0}},m=function(){function e(e,t,n,o,i,s,a,c){r(t.append("text").attr("x",n+i/2).attr("y",o+s/2+5).style("font-color",c).style("text-anchor","middle").text(e),a)}function t(e,t,n,o,i,s,a,c,u){for(var d=c.taskFontSize,l=c.taskFontFamily,f=e.split(//gi),h=0;h0&&void 0!==arguments[0]?arguments[0]:"fatal";isNaN(e)&&(e=e.toLowerCase(),void 0!==i[e]&&(e=i[e])),s.trace=function(){},s.debug=function(){},s.info=function(){},s.warn=function(){},s.error=function(){},s.fatal=function(){},e<=i.fatal&&(s.fatal=console.error?console.error.bind(console,c("FATAL"),"color: orange"):console.log.bind(console,"",c("FATAL"))),e<=i.error&&(s.error=console.error?console.error.bind(console,c("ERROR"),"color: orange"):console.log.bind(console,"",c("ERROR"))),e<=i.warn&&(s.warn=console.warn?console.warn.bind(console,c("WARN"),"color: orange"):console.log.bind(console,"",c("WARN"))),e<=i.info&&(s.info=console.info?console.info.bind(console,c("INFO"),"color: lightblue"):console.log.bind(console,"",c("INFO"))),e<=i.debug&&(s.debug=console.debug?console.debug.bind(console,c("DEBUG"),"color: lightgreen"):console.log.bind(console,"",c("DEBUG")))},c=function(e){var t=o()().format("ss.SSS");return"%c".concat(t," : ").concat(e," : ")}},"./src/mermaid.js": -/*!************************!*\ - !*** ./src/mermaid.js ***! - \************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! entity-decode/browser */"./node_modules/entity-decode/browser.js"),o=n(/*! ./logger */"./src/logger.js"),i=n(/*! ./mermaidAPI */"./src/mermaidAPI.js"),s=n(/*! ./utils */"./src/utils.js"),a=function(){c.startOnLoad?i.default.getConfig().startOnLoad&&c.init():void 0===c.startOnLoad&&(o.logger.debug("In start, no config"),i.default.getConfig().startOnLoad&&c.init())};"undefined"!=typeof document&& -/*! - * Wait for document loaded before starting the execution - */ -window.addEventListener("load",(function(){a()}),!1);var c={startOnLoad:!0,htmlLabels:!0,mermaidAPI:i.default,parse:i.default.parse,render:i.default.render,init:function(){var e,t,n=this,a=i.default.getConfig();arguments.length>=2?( -/*! sequence config was passed as #1 */ -void 0!==arguments[0]&&(c.sequenceConfig=arguments[0]),e=arguments[1]):e=arguments[0],"function"==typeof arguments[arguments.length-1]?(t=arguments[arguments.length-1],o.logger.debug("Callback function found")):void 0!==a.mermaid&&("function"==typeof a.mermaid.callback?(t=a.mermaid.callback,o.logger.debug("Callback function found")):o.logger.debug("No Callback function found")),e=void 0===e?document.querySelectorAll(".mermaid"):"string"==typeof e?document.querySelectorAll(e):e instanceof window.Node?[e]:e,o.logger.debug("Start On Load before: "+c.startOnLoad),void 0!==c.startOnLoad&&(o.logger.debug("Start On Load inner: "+c.startOnLoad),i.default.updateSiteConfig({startOnLoad:c.startOnLoad})),void 0!==c.ganttConfig&&i.default.updateSiteConfig({gantt:c.ganttConfig});for(var u,d=s.default.initIdGeneratior(a.deterministicIds,a.deterministicIDSeed).next,l=function(a){var c=e[a]; -/*! Check if previously processed */if(c.getAttribute("data-processed"))return"continue";c.setAttribute("data-processed",!0);var l="mermaid-".concat(d());u=c.innerHTML,u=Object(r.default)(u).trim().replace(//gi,"
");var f=s.default.detectInit(u);f&&o.logger.debug("Detected early reinit: ",f);try{i.default.render(l,u,(function(e,n){c.innerHTML=e,void 0!==t&&t(l),n&&n(c)}),c)}catch(e){o.logger.warn("Syntax Error rendering"),o.logger.warn(e),n.parseError&&n.parseError(e)}},f=0;fm.maxTextSize&&(l="graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa"),void 0!==r)r.innerHTML="",Object(i.select)(r).append("div").attr("id","d"+e).attr("style","font-family: "+m.fontFamily).append("svg").attr("id",e).attr("width","100%").attr("xmlns","http://www.w3.org/2000/svg").append("g");else{var g=document.getElementById(e);g&&g.remove();var y=document.querySelector("#d"+e);y&&y.remove(),Object(i.select)("body").append("div").attr("id","d"+e).append("svg").attr("id",e).attr("width","100%").attr("xmlns","http://www.w3.org/2000/svg").append("g")}window.txt=l,l=re(l);var _=Object(i.select)("#d"+e).node(),v=c.default.detectType(l),w=_.firstChild,O=w.firstChild,S="";if(void 0!==m.themeCSS&&(S+="\n".concat(m.themeCSS)),void 0!==m.fontFamily&&(S+="\n:root { --mermaid-font-family: ".concat(m.fontFamily,"}")),void 0!==m.altFontFamily&&(S+="\n:root { --mermaid-alt-font-family: ".concat(m.altFontFamily,"}")),"flowchart"===v||"flowchart-v2"===v||"graph"===v){var A=u.default.getClasses(l);for(var M in A)S+="\n.".concat(M," > * { ").concat(A[M].styles.join(" !important; ")," !important; }"),A[M].textStyles&&(S+="\n.".concat(M," tspan { ").concat(A[M].textStyles.join(" !important; ")," !important; }"))}var B=(new o.a)("#".concat(e),Object(ee.default)(v,S,m.themeVariables)),N=document.createElement("style");N.innerHTML=B,w.insertBefore(N,O);try{switch(v){case"git":m.flowchart.arrowMarkerAbsolute=m.arrowMarkerAbsolute,D.default.setConf(m.git),D.default.draw(l,e,!1);break;case"flowchart":m.flowchart.arrowMarkerAbsolute=m.arrowMarkerAbsolute,u.default.setConf(m.flowchart),u.default.draw(l,e,!1);break;case"flowchart-v2":m.flowchart.arrowMarkerAbsolute=m.arrowMarkerAbsolute,d.default.setConf(m.flowchart),d.default.draw(l,e,!1);break;case"sequence":m.sequence.arrowMarkerAbsolute=m.arrowMarkerAbsolute,m.sequenceDiagram?(p.default.setConf(Object.assign(m.sequence,m.sequenceDiagram)),console.error("`mermaid config.sequenceDiagram` has been renamed to `config.sequence`. Please update your mermaid config.")):p.default.setConf(m.sequence),p.default.draw(l,e);break;case"gantt":m.gantt.arrowMarkerAbsolute=m.arrowMarkerAbsolute,b.default.setConf(m.gantt),b.default.draw(l,e);break;case"class":m.class.arrowMarkerAbsolute=m.arrowMarkerAbsolute,x.default.setConf(m.class),x.default.draw(l,e);break;case"classDiagram":m.class.arrowMarkerAbsolute=m.arrowMarkerAbsolute,k.default.setConf(m.class),k.default.draw(l,e);break;case"state":m.class.arrowMarkerAbsolute=m.arrowMarkerAbsolute,E.default.setConf(m.state),E.default.draw(l,e);break;case"stateDiagram":m.class.arrowMarkerAbsolute=m.arrowMarkerAbsolute,T.default.setConf(m.state),T.default.draw(l,e);break;case"info":m.class.arrowMarkerAbsolute=m.arrowMarkerAbsolute,P.default.setConf(m.class),P.default.draw(l,e,s.version);break;case"pie":m.class.arrowMarkerAbsolute=m.arrowMarkerAbsolute,z.default.setConf(m.pie),z.default.draw(l,e,s.version);break;case"er":V.default.setConf(m.er),V.default.draw(l,e,s.version);break;case"journey":Q.default.setConf(m.journey),Q.default.draw(l,e,s.version)}}catch(t){throw I.default.draw(e,s.version),t}Object(i.select)('[id="'.concat(e,'"]')).selectAll("foreignobject > *").attr("xmlns","http://www.w3.org/1999/xhtml");var L=Object(i.select)("#d"+e).node().innerHTML;if(a.logger.debug("cnf.arrowMarkerAbsolute",m.arrowMarkerAbsolute),m.arrowMarkerAbsolute&&"false"!==m.arrowMarkerAbsolute||(L=L.replace(/marker-end="url\(.*?#/g,'marker-end="url(#',"g")),L=(L=oe(L)).replace(/
/g,"
"),void 0!==n)switch(v){case"flowchart":case"flowchart-v2":n(L,h.default.bindFunctions);break;case"gantt":n(L,j.default.bindFunctions);break;case"class":case"classDiagram":n(L,C.default.bindFunctions);break;default:n(L)}else a.logger.debug("CB = undefined!");var R=Object(i.select)("#d"+e).node();return null!==R&&"function"==typeof R.remove&&Object(i.select)("#d"+e).node().remove(),L},parse:function(e){var t=c.default.detectInit(e);t&&a.logger.debug("reinit ",t);var n,r=c.default.detectType(e);switch(a.logger.debug("Type "+r),r){case"git":(n=N.a).parser.yy=L.default;break;case"flowchart":case"flowchart-v2":h.default.clear(),(n=f.a).parser.yy=h.default;break;case"sequence":(n=g.a).parser.yy=y.default;break;case"gantt":(n=v.a).parser.yy=j.default;break;case"class":case"classDiagram":(n=O.a).parser.yy=C.default;break;case"state":case"stateDiagram":(n=A.a).parser.yy=M.default;break;case"info":a.logger.debug("info info info"),(n=F.a).parser.yy=Y.default;break;case"pie":a.logger.debug("pie"),(n=G.a).parser.yy=U.default;break;case"er":a.logger.debug("er"),(n=$.a).parser.yy=W.default;break;case"journey":a.logger.debug("Journey"),(n=Z.a).parser.yy=K.default}return n.parser.yy.graphType=r,n.parser.yy.parseError=function(e,t){throw{str:e,hash:t}},n.parse(e),n},parseDirective:function(e,t,n,r){try{if(void 0!==t)switch(t=t.trim(),n){case"open_directive":ie={};break;case"type_directive":ie.type=t.toLowerCase();break;case"arg_directive":ie.args=JSON.parse(t);break;case"close_directive":se(e,ie,r),ie=null}}catch(e){a.logger.error("Error while rendering sequenceDiagram directive: ".concat(t," jison context: ").concat(n)),a.logger.error(e.message)}},initialize:function(e){e&&e.fontFamily&&(e.themeVariables&&e.themeVariables.fontFamily||(e.themeVariables={fontFamily:e.fontFamily})),J.setSiteConfigDelta(e),e&&e.theme&&te.default[e.theme]?e.themeVariables=te.default[e.theme].getThemeVariables(e.themeVariables):e&&(e.themeVariables=te.default.default.getThemeVariables(e.themeVariables));var t="object"===ne(e)?J.setSiteConfig(e):J.getSiteConfig();ae(t),Object(a.setLogLevel)(t.logLevel)},reinitialize:ce,getConfig:J.getConfig,setConfig:J.setConfig,getSiteConfig:J.getSiteConfig,updateSiteConfig:J.updateSiteConfig,reset:function(){J.reset()},globalReset:function(){J.reset(J.defaultConfig),ae(J.getConfig())},defaultConfig:J.defaultConfig});Object(a.setLogLevel)(J.getConfig().logLevel),J.reset(J.getConfig()),t.default=ue},"./src/styles.js": -/*!***********************!*\ - !*** ./src/styles.js ***! - \***********************/ -/*! exports provided: calcThemeVariables, default */function(e,t,n){"use strict";n.r(t),n.d(t,"calcThemeVariables",(function(){return p}));var r=n(/*! ./diagrams/class/styles */"./src/diagrams/class/styles.js"),o=n(/*! ./diagrams/er/styles */"./src/diagrams/er/styles.js"),i=n(/*! ./diagrams/flowchart/styles */"./src/diagrams/flowchart/styles.js"),s=n(/*! ./diagrams/gantt/styles */"./src/diagrams/gantt/styles.js"),a=n(/*! ./diagrams/git/styles */"./src/diagrams/git/styles.js"),c=n(/*! ./diagrams/info/styles */"./src/diagrams/info/styles.js"),u=n(/*! ./diagrams/pie/styles */"./src/diagrams/pie/styles.js"),d=n(/*! ./diagrams/sequence/styles */"./src/diagrams/sequence/styles.js"),l=n(/*! ./diagrams/state/styles */"./src/diagrams/state/styles.js"),f=n(/*! ./diagrams/user-journey/styles */"./src/diagrams/user-journey/styles.js"),h={flowchart:i.default,"flowchart-v2":i.default,sequence:d.default,gantt:s.default,classDiagram:r.default,"classDiagram-v2":r.default,class:r.default,stateDiagram:l.default,state:l.default,git:a.default,info:c.default,pie:u.default,er:o.default,journey:f.default},p=function(e,t){return e.calcColors(t)};t.default=function(e,t,n){return" {\n font-family: ".concat(n.fontFamily,";\n font-size: ").concat(n.fontSize,";\n fill: ").concat(n.textColor,"\n }\n\n /* Classes common for multiple diagrams */\n\n .error-icon {\n fill: ").concat(n.errorBkgColor,";\n }\n .error-text {\n fill: ").concat(n.errorTextColor,";\n stroke: ").concat(n.errorTextColor,";\n }\n\n .edge-thickness-normal {\n stroke-width: 2px;\n }\n .edge-thickness-thick {\n stroke-width: 3.5px\n }\n .edge-pattern-solid {\n stroke-dasharray: 0;\n }\n\n .edge-pattern-dashed{\n stroke-dasharray: 3;\n }\n .edge-pattern-dotted {\n stroke-dasharray: 2;\n }\n\n .marker {\n fill: ").concat(n.lineColor,";\n }\n .marker.cross {\n stroke: ").concat(n.lineColor,";\n }\n\n svg {\n font-family: ").concat(n.fontFamily,";\n font-size: ").concat(n.fontSize,";\n }\n\n ").concat(h[e](n),"\n\n ").concat(t,"\n\n ").concat(e," { fill: apa;}\n")}},"./src/themes/index.js": -/*!*****************************!*\ - !*** ./src/themes/index.js ***! - \*****************************/ -/*! exports provided: default */function(e,t,n){"use strict";n.r(t);var r=n(/*! ./theme-base */"./src/themes/theme-base.js"),o=n(/*! ./theme-dark */"./src/themes/theme-dark.js"),i=n(/*! ./theme-default */"./src/themes/theme-default.js"),s=n(/*! ./theme-forest */"./src/themes/theme-forest.js"),a=n(/*! ./theme-neutral */"./src/themes/theme-neutral.js");t.default={base:{getThemeVariables:r.getThemeVariables},dark:{getThemeVariables:o.getThemeVariables},default:{getThemeVariables:i.getThemeVariables},forest:{getThemeVariables:s.getThemeVariables},neutral:{getThemeVariables:a.getThemeVariables}}},"./src/themes/theme-base.js": -/*!**********************************!*\ - !*** ./src/themes/theme-base.js ***! - \**********************************/ -/*! exports provided: getThemeVariables */function(e,t,n){"use strict";n.r(t),n.d(t,"getThemeVariables",(function(){return c}));var r=n(/*! khroma */"./node_modules/khroma/dist/index.js"),o=n(/*! ./theme-helpers */"./src/themes/theme-helpers.js");function i(e){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function s(e,t){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:null;try{var n=new RegExp("[%]{2}(?![{]".concat(f.source,")(?=[}][%]{2}).*\n"),"ig");e=e.trim().replace(n,"").replace(/'/gm,'"'),s.logger.debug("Detecting diagram directive".concat(null!==t?" type:"+t:""," based on the text:").concat(e));for(var r,o=[];null!==(r=l.exec(e));)if(r.index===l.lastIndex&&l.lastIndex++,r&&!t||t&&r[1]&&r[1].match(t)||t&&r[2]&&r[2].match(t)){var i=r[1]?r[1]:r[2],a=r[3]?r[3].trim():r[4]?JSON.parse(r[4].trim()):null;o.push({type:i,args:a})}return 0===o.length&&o.push({type:e,args:null}),1===o.length?o[0]:o}catch(n){return s.logger.error("ERROR: ".concat(n.message," - Unable to parse directive").concat(null!==t?" type:"+t:""," based on the text:").concat(e)),{type:null,args:null}}},g=function(e){return e=e.replace(l,"").replace(h,"\n"),s.logger.debug("Detecting diagram type based on the text "+e),e.match(/^\s*sequenceDiagram/)?"sequence":e.match(/^\s*gantt/)?"gantt":e.match(/^\s*classDiagram-v2/)?"classDiagram":e.match(/^\s*classDiagram/)?"class":e.match(/^\s*stateDiagram-v2/)?"stateDiagram":e.match(/^\s*stateDiagram/)?"state":e.match(/^\s*gitGraph/)?"git":e.match(/^\s*flowchart/)?"flowchart-v2":e.match(/^\s*info/)?"info":e.match(/^\s*pie/)?"pie":e.match(/^\s*erDiagram/)?"er":e.match(/^\s*journey/)?"journey":"flowchart"},y=function(e,t){var n={};return function(){for(var r=arguments.length,o=new Array(r),i=0;i1?a-1:0),u=1;u"},n),i.default.lineBreakRegex.test(e))return e;var r=e.split(" "),o=[],s="";return r.forEach((function(e,i){var a=B("".concat(e," "),n),c=B(s,n);if(a>t){var d=M(e,t,"-",n),l=d.hyphenatedStrings,f=d.remainingWord;o.push.apply(o,[s].concat(u(l))),s=f}else c+a>=t?(o.push(s),s=e):s=[s,e].filter(Boolean).join(" ");i+1===r.length&&o.push(s)})),o.filter((function(e){return""!==e})).join(n.joinWith)}),(function(e,t,n){return"".concat(e,"-").concat(t,"-").concat(n.fontSize,"-").concat(n.fontWeight,"-").concat(n.fontFamily,"-").concat(n.joinWith)})),M=y((function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"-",r=arguments.length>3?arguments[3]:void 0;r=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:0},r);var o=e.split(""),i=[],s="";return o.forEach((function(e,a){var c="".concat(s).concat(e);if(B(c,r)>=t){var u=a+1,d=o.length===u,l="".concat(c).concat(n);i.push(d?c:l),s=""}else s=c})),{hyphenatedStrings:i,remainingWord:s}}),(function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"-",r=arguments.length>3?arguments[3]:void 0;return"".concat(e,"-").concat(t,"-").concat(n,"-").concat(r.fontSize,"-").concat(r.fontWeight,"-").concat(r.fontFamily)})),D=function(e,t){return t=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:15},t),N(e,t).height},B=function(e,t){return t=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial"},t),N(e,t).width},N=y((function(e,t){var n=t=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial"},t),r=n.fontSize,s=n.fontFamily,a=n.fontWeight;if(!e)return{width:0,height:0};var c=["sans-serif",s],u=e.split(i.default.lineBreakRegex),d=[],l=Object(o.select)("body");if(!l.remove)return{width:0,height:0,lineHeight:0};for(var f=l.append("svg"),h=0,p=c;hd[1].height&&d[0].width>d[1].width&&d[0].lineHeight>d[1].lineHeight?0:1]}),(function(e,t){return"".concat(e,"-").concat(t.fontSize,"-").concat(t.fontWeight,"-").concat(t.fontFamily)})),L=function(e,t,n){var r=new Map;return r.set("height",e),n?(r.set("width","100%"),r.set("style","max-width: ".concat(t,"px;"))):r.set("width",t),r},P=function(e,t,n,r){!function(e,t){var n=!0,r=!1,o=void 0;try{for(var i,s=t[Symbol.iterator]();!(n=(i=s.next()).done);n=!0){var a=i.value;e.attr(a[0],a[1])}}catch(e){r=!0,o=e}finally{try{n||null==s.return||s.return()}finally{if(r)throw o}}}(e,L(t,n,r))},I=function(e,t){return e?new(function(){function e(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.count=t?t.length:0}var n,r,o;return n=e,(r=[{key:"next",value:function(){return this.count++}}])&&a(n.prototype,r),o&&a(n,o),e}()):{next:function(){return Date.now()}}};t.default={assignWithDepth:E,wrapLabel:A,calculateTextHeight:D,calculateTextWidth:B,calculateTextDimensions:N,calculateSvgSizeAttrs:L,configureSvgSize:P,detectInit:p,detectDirective:m,detectType:g,isSubstringInArray:b,interpolateToCurve:_,calcLabelPosition:function(e){return function(e){var t,n=0;e.forEach((function(e){n+=x(e,t),t=e}));var r=n/2,o=void 0;return t=void 0,e.forEach((function(e){if(t&&!o){var n=x(e,t);if(n=1&&(o={x:e.x,y:e.y}),i>0&&i<1&&(o={x:(1-i)*t.x+i*e.x,y:(1-i)*t.y+i*e.y})}}t=e})),o}(e)},calcCardinalityPosition:function(e,t,n){var r;s.logger.info("our points",t),t[0]!==n&&(t=t.reverse()),t.forEach((function(e){x(e,r),r=e}));var o,i=25;r=void 0,t.forEach((function(e){if(r&&!o){var t=x(e,r);if(t=1&&(o={x:e.x,y:e.y}),n>0&&n<1&&(o={x:(1-n)*r.x+n*e.x,y:(1-n)*r.y+n*e.y})}}r=e}));var a=e?10:5,c=Math.atan2(t[0].y-o.y,t[0].x-o.x),u={x:0,y:0};return u.x=Math.sin(c)*a+(t[0].x+o.x)/2,u.y=-Math.cos(c)*a+(t[0].y+o.y)/2,u},calcTerminalLabelPosition:function(e,t,n){var r,o=JSON.parse(JSON.stringify(n));s.logger.info("our points",o),"start_left"!==t&&"start_right"!==t&&(o=o.reverse()),o.forEach((function(e){x(e,r),r=e}));var i,a=25;r=void 0,o.forEach((function(e){if(r&&!i){var t=x(e,r);if(t=1&&(i={x:e.x,y:e.y}),n>0&&n<1&&(i={x:(1-n)*r.x+n*e.x,y:(1-n)*r.y+n*e.y})}}r=e}));var c=10,u=Math.atan2(o[0].y-i.y,o[0].x-i.x),d={x:0,y:0};return d.x=Math.sin(u)*c+(o[0].x+i.x)/2,d.y=-Math.cos(u)*c+(o[0].y+i.y)/2,"start_left"===t&&(d.x=Math.sin(u+Math.PI)*c+(o[0].x+i.x)/2,d.y=-Math.cos(u+Math.PI)*c+(o[0].y+i.y)/2),"end_right"===t&&(d.x=Math.sin(u-Math.PI)*c+(o[0].x+i.x)/2-5,d.y=-Math.cos(u-Math.PI)*c+(o[0].y+i.y)/2-5),"end_left"===t&&(d.x=Math.sin(u)*c+(o[0].x+i.x)/2-5,d.y=-Math.cos(u)*c+(o[0].y+i.y)/2-5),d},formatUrl:v,getStylesFromArray:k,generateId:O,random:C,memoize:y,runFunc:j,initIdGeneratior:I}}}).default},e.exports=r()}}]); \ No newline at end of file diff --git a/docs/assets/js/34.92671a1d.js b/docs/assets/js/34.92671a1d.js deleted file mode 100644 index 18761f9..0000000 --- a/docs/assets/js/34.92671a1d.js +++ /dev/null @@ -1,31 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[34],{194:function(t,e,n){"undefined"!=typeof self&&self,t.exports=function(t){var e={};function n(r){if(e[r])return e[r].exports;var i=e[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=t,n.c=e,n.d=function(t,e,r){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:r})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var i in t)n.d(r,i,function(e){return t[e]}.bind(null,i));return r},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=383)}([function(t,e,n){"use strict";n.r(e);var r=function(t,e){return te?1:t>=e?0:NaN},i=function(t){var e;return 1===t.length&&(e=t,t=function(t,n){return r(e(t),n)}),{left:function(e,n,r,i){for(null==r&&(r=0),null==i&&(i=e.length);r>>1;t(e[a],n)<0?r=a+1:i=a}return r},right:function(e,n,r,i){for(null==r&&(r=0),null==i&&(i=e.length);r>>1;t(e[a],n)>0?i=a:r=a+1}return r}}},a=i(r),o=a.right,s=a.left,c=o,u=function(t,e){null==e&&(e=l);for(var n=0,r=t.length-1,i=t[0],a=new Array(r<0?0:r);nt?1:e>=t?0:NaN},d=function(t){return null===t?NaN:+t},p=function(t,e){var n,r,i=t.length,a=0,o=-1,s=0,c=0;if(null==e)for(;++o1)return c/(a-1)},g=function(t,e){var n=p(t,e);return n?Math.sqrt(n):n},y=function(t,e){var n,r,i,a=t.length,o=-1;if(null==e){for(;++o=n)for(r=i=n;++on&&(r=n),i=n)for(r=i=n;++on&&(r=n),i0)return[t];if((r=e0)for(t=Math.ceil(t/o),e=Math.floor(e/o),a=new Array(i=Math.ceil(e-t+1));++s=0?(a>=w?10:a>=E?5:a>=T?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(a>=w?10:a>=E?5:a>=T?2:1)}function S(t,e,n){var r=Math.abs(e-t)/Math.max(0,n),i=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),a=r/i;return a>=w?i*=10:a>=E?i*=5:a>=T&&(i*=2),eh;)f.pop(),--d;var p,g=new Array(d+1);for(i=0;i<=d;++i)(p=g[i]=[]).x0=i>0?f[i-1]:l,p.x1=i=1)return+n(t[r-1],r-1,t);var r,i=(r-1)*e,a=Math.floor(i),o=+n(t[a],a,t);return o+(+n(t[a+1],a+1,t)-o)*(i-a)}},N=function(t,e,n){return t=b.call(t,d).sort(r),Math.ceil((n-e)/(2*(D(t,.75)-D(t,.25))*Math.pow(t.length,-1/3)))},B=function(t,e,n){return Math.ceil((n-e)/(3.5*g(t)*Math.pow(t.length,-1/3)))},L=function(t,e){var n,r,i=t.length,a=-1;if(null==e){for(;++a=n)for(r=n;++ar&&(r=n)}else for(;++a=n)for(r=n;++ar&&(r=n);return r},P=function(t,e){var n,r=t.length,i=r,a=-1,o=0;if(null==e)for(;++a=0;)for(e=(r=t[i]).length;--e>=0;)n[--o]=r[e];return n},j=function(t,e){var n,r,i=t.length,a=-1;if(null==e){for(;++a=n)for(r=n;++an&&(r=n)}else for(;++a=n)for(r=n;++an&&(r=n);return r},R=function(t,e){for(var n=e.length,r=new Array(n);n--;)r[n]=t[e[n]];return r},Y=function(t,e){if(n=t.length){var n,i,a=0,o=0,s=t[o];for(null==e&&(e=r);++a=0&&(n=t.slice(r+1),t=t.slice(0,r)),t&&!e.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:n}}))}function ct(t,e){for(var n,r=0,i=t.length;r0)for(var n,r,i=new Array(n),a=0;ae?1:t>=e?0:NaN}vt.prototype={constructor:vt,appendChild:function(t){return this._parent.insertBefore(t,this._next)},insertBefore:function(t,e){return this._parent.insertBefore(t,e)},querySelector:function(t){return this._parent.querySelector(t)},querySelectorAll:function(t){return this._parent.querySelectorAll(t)}};var _t="http://www.w3.org/1999/xhtml",kt={svg:"http://www.w3.org/2000/svg",xhtml:_t,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"},wt=function(t){var e=t+="",n=e.indexOf(":");return n>=0&&"xmlns"!==(e=t.slice(0,n))&&(t=t.slice(n+1)),kt.hasOwnProperty(e)?{space:kt[e],local:t}:t};function Et(t){return function(){this.removeAttribute(t)}}function Tt(t){return function(){this.removeAttributeNS(t.space,t.local)}}function Ct(t,e){return function(){this.setAttribute(t,e)}}function At(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}function St(t,e){return function(){var n=e.apply(this,arguments);null==n?this.removeAttribute(t):this.setAttribute(t,n)}}function Mt(t,e){return function(){var n=e.apply(this,arguments);null==n?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,n)}}var Ot=function(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView};function Dt(t){return function(){this.style.removeProperty(t)}}function Nt(t,e,n){return function(){this.style.setProperty(t,e,n)}}function Bt(t,e,n){return function(){var r=e.apply(this,arguments);null==r?this.style.removeProperty(t):this.style.setProperty(t,r,n)}}function Lt(t,e){return t.style.getPropertyValue(e)||Ot(t).getComputedStyle(t,null).getPropertyValue(e)}function Pt(t){return function(){delete this[t]}}function It(t,e){return function(){this[t]=e}}function Ft(t,e){return function(){var n=e.apply(this,arguments);null==n?delete this[t]:this[t]=n}}function jt(t){return t.trim().split(/^|\s+/)}function Rt(t){return t.classList||new Yt(t)}function Yt(t){this._node=t,this._names=jt(t.getAttribute("class")||"")}function zt(t,e){for(var n=Rt(t),r=-1,i=e.length;++r=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};var ne=function(t){var e=wt(t);return(e.local?ee:te)(e)};function re(){return null}function ie(){var t=this.parentNode;t&&t.removeChild(this)}function ae(){var t=this.cloneNode(!1),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function oe(){var t=this.cloneNode(!0),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}var se={},ce=null;function ue(t,e,n){return t=le(t,e,n),function(e){var n=e.relatedTarget;n&&(n===this||8&n.compareDocumentPosition(this))||t.call(this,e)}}function le(t,e,n){return function(r){var i=ce;ce=r;try{t.call(this,this.__data__,e,n)}finally{ce=i}}}function he(t){return t.trim().split(/^|\s+/).map((function(t){var e="",n=t.indexOf(".");return n>=0&&(e=t.slice(n+1),t=t.slice(0,n)),{type:t,name:e}}))}function fe(t){return function(){var e=this.__on;if(e){for(var n,r=0,i=-1,a=e.length;r=_&&(_=x+1);!(b=v[_])&&++_=0;)(r=i[a])&&(o&&4^r.compareDocumentPosition(o)&&o.parentNode.insertBefore(r,o),o=r);return this},sort:function(t){function e(e,n){return e&&n?t(e.__data__,n.__data__):!e-!n}t||(t=xt);for(var n=this._groups,r=n.length,i=new Array(r),a=0;a1?this.each((null==e?Dt:"function"==typeof e?Bt:Nt)(t,e,null==n?"":n)):Lt(this.node(),t)},property:function(t,e){return arguments.length>1?this.each((null==e?Pt:"function"==typeof e?Ft:It)(t,e)):this.node()[t]},classed:function(t,e){var n=jt(t+"");if(arguments.length<2){for(var r=Rt(this.node()),i=-1,a=n.length;++i>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===n?new qe(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===n?new qe(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|240&e,((15&e)<<4|15&e)/255):null):(e=Le.exec(t))?new qe(e[1],e[2],e[3],1):(e=Pe.exec(t))?new qe(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=Ie.exec(t))?He(e[1],e[2],e[3],e[4]):(e=Fe.exec(t))?He(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=je.exec(t))?Ke(e[1],e[2]/100,e[3]/100,1):(e=Re.exec(t))?Ke(e[1],e[2]/100,e[3]/100,e[4]):Ye.hasOwnProperty(t)?We(Ye[t]):"transparent"===t?new qe(NaN,NaN,NaN,0):null}function We(t){return new qe(t>>16&255,t>>8&255,255&t,1)}function He(t,e,n,r){return r<=0&&(t=e=n=NaN),new qe(t,e,n,r)}function Ve(t){return t instanceof Me||(t=$e(t)),t?new qe((t=t.rgb()).r,t.g,t.b,t.opacity):new qe}function Ge(t,e,n,r){return 1===arguments.length?Ve(t):new qe(t,e,n,null==r?1:r)}function qe(t,e,n,r){this.r=+t,this.g=+e,this.b=+n,this.opacity=+r}function Xe(){return"#"+Je(this.r)+Je(this.g)+Je(this.b)}function Ze(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===t?")":", "+t+")")}function Je(t){return((t=Math.max(0,Math.min(255,Math.round(t)||0)))<16?"0":"")+t.toString(16)}function Ke(t,e,n,r){return r<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new en(t,e,n,r)}function Qe(t){if(t instanceof en)return new en(t.h,t.s,t.l,t.opacity);if(t instanceof Me||(t=$e(t)),!t)return new en;if(t instanceof en)return t;var e=(t=t.rgb()).r/255,n=t.g/255,r=t.b/255,i=Math.min(e,n,r),a=Math.max(e,n,r),o=NaN,s=a-i,c=(a+i)/2;return s?(o=e===a?(n-r)/s+6*(n0&&c<1?0:o,new en(o,s,c,t.opacity)}function tn(t,e,n,r){return 1===arguments.length?Qe(t):new en(t,e,n,null==r?1:r)}function en(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}function nn(t,e,n){return 255*(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)}function rn(t,e,n,r,i){var a=t*t,o=a*t;return((1-3*t+3*a-o)*e+(4-6*a+3*o)*n+(1+3*t+3*a-3*o)*r+o*i)/6}Ae(Me,$e,{copy:function(t){return Object.assign(new this.constructor,this,t)},displayable:function(){return this.rgb().displayable()},hex:ze,formatHex:ze,formatHsl:function(){return Qe(this).formatHsl()},formatRgb:Ue,toString:Ue}),Ae(qe,Ge,Se(Me,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new qe(this.r*t,this.g*t,this.b*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new qe(this.r*t,this.g*t,this.b*t,this.opacity)},rgb:function(){return this},displayable:function(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:Xe,formatHex:Xe,formatRgb:Ze,toString:Ze})),Ae(en,tn,Se(Me,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new en(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new en(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*e,i=2*n-r;return new qe(nn(t>=240?t-240:t+120,i,r),nn(t,i,r),nn(t<120?t+240:t-120,i,r),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"hsl(":"hsla(")+(this.h||0)+", "+100*(this.s||0)+"%, "+100*(this.l||0)+"%"+(1===t?")":", "+t+")")}}));var an=function(t){var e=t.length-1;return function(n){var r=n<=0?n=0:n>=1?(n=1,e-1):Math.floor(n*e),i=t[r],a=t[r+1],o=r>0?t[r-1]:2*i-a,s=r180||n<-180?n-360*Math.round(n/360):n):sn(isNaN(t)?e:t)}function ln(t,e){var n=e-t;return n?cn(t,n):sn(isNaN(t)?e:t)}var hn=function t(e){var n=function(t){return 1==(t=+t)?ln:function(e,n){return n-e?function(t,e,n){return t=Math.pow(t,n),e=Math.pow(e,n)-t,n=1/n,function(r){return Math.pow(t+r*e,n)}}(e,n,t):sn(isNaN(e)?n:e)}}(e);function r(t,e){var r=n((t=Ge(t)).r,(e=Ge(e)).r),i=n(t.g,e.g),a=n(t.b,e.b),o=ln(t.opacity,e.opacity);return function(e){return t.r=r(e),t.g=i(e),t.b=a(e),t.opacity=o(e),t+""}}return r.gamma=t,r}(1);function fn(t){return function(e){var n,r,i=e.length,a=new Array(i),o=new Array(i),s=new Array(i);for(n=0;na&&(i=e.slice(a,i),s[o]?s[o]+=i:s[++o]=i),(n=n[0])===(r=r[0])?s[o]?s[o]+=r:s[++o]=r:(s[++o]=null,c.push({i:o,x:kn(n,r)})),a=Tn.lastIndex;return a=0&&e._call.call(null,t),e=e._next;--Nn}function Hn(){In=(Pn=jn.now())+Fn,Nn=Bn=0;try{Wn()}finally{Nn=0,function(){for(var t,e,n=bn,r=1/0;n;)n._call?(r>n._time&&(r=n._time),t=n,n=n._next):(e=n._next,n._next=null,n=t?t._next=e:bn=e);xn=t,Gn(r)}(),In=0}}function Vn(){var t=jn.now(),e=t-Pn;e>1e3&&(Fn-=e,Pn=t)}function Gn(t){Nn||(Bn&&(Bn=clearTimeout(Bn)),t-In>24?(t<1/0&&(Bn=setTimeout(Hn,t-jn.now()-Fn)),Ln&&(Ln=clearInterval(Ln))):(Ln||(Pn=jn.now(),Ln=setInterval(Vn,1e3)),Nn=1,Rn(Hn)))}Un.prototype=$n.prototype={constructor:Un,restart:function(t,e,n){if("function"!=typeof t)throw new TypeError("callback is not a function");n=(null==n?Yn():+n)+(null==e?0:+e),this._next||xn===this||(xn?xn._next=this:bn=this,xn=this),this._call=t,this._time=n,Gn()},stop:function(){this._call&&(this._call=null,this._time=1/0,Gn())}};var qn=function(t,e,n){var r=new Un;return e=null==e?0:+e,r.restart((function(n){r.stop(),t(n+e)}),e,n),r},Xn=lt("start","end","cancel","interrupt"),Zn=[],Jn=function(t,e,n,r,i,a){var o=t.__transition;if(o){if(n in o)return}else t.__transition={};!function(t,e,n){var r,i=t.__transition;function a(c){var u,l,h,f;if(1!==n.state)return s();for(u in i)if((f=i[u]).name===n.name){if(3===f.state)return qn(a);4===f.state?(f.state=6,f.timer.stop(),f.on.call("interrupt",t,t.__data__,f.index,f.group),delete i[u]):+u0)throw new Error("too late; already scheduled");return n}function Qn(t,e){var n=tr(t,e);if(n.state>3)throw new Error("too late; already running");return n}function tr(t,e){var n=t.__transition;if(!n||!(n=n[e]))throw new Error("transition not found");return n}var er,nr,rr,ir,ar=function(t,e){var n,r,i,a=t.__transition,o=!0;if(a){for(i in e=null==e?null:e+"",a)(n=a[i]).name===e?(r=n.state>2&&n.state<5,n.state=6,n.timer.stop(),n.on.call(r?"interrupt":"cancel",t,t.__data__,n.index,n.group),delete a[i]):o=!1;o&&delete t.__transition}},or=180/Math.PI,sr={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1},cr=function(t,e,n,r,i,a){var o,s,c;return(o=Math.sqrt(t*t+e*e))&&(t/=o,e/=o),(c=t*n+e*r)&&(n-=t*c,r-=e*c),(s=Math.sqrt(n*n+r*r))&&(n/=s,r/=s,c/=s),t*r180?e+=360:e-t>180&&(t+=360),a.push({i:n.push(i(n)+"rotate(",null,r)-2,x:kn(t,e)})):e&&n.push(i(n)+"rotate("+e+r)}(a.rotate,o.rotate,s,c),function(t,e,n,a){t!==e?a.push({i:n.push(i(n)+"skewX(",null,r)-2,x:kn(t,e)}):e&&n.push(i(n)+"skewX("+e+r)}(a.skewX,o.skewX,s,c),function(t,e,n,r,a,o){if(t!==n||e!==r){var s=a.push(i(a)+"scale(",null,",",null,")");o.push({i:s-4,x:kn(t,n)},{i:s-2,x:kn(e,r)})}else 1===n&&1===r||a.push(i(a)+"scale("+n+","+r+")")}(a.scaleX,a.scaleY,o.scaleX,o.scaleY,s,c),a=o=null,function(t){for(var e,n=-1,r=c.length;++n=0&&(t=t.slice(0,e)),!t||"start"===t}))}(e)?Kn:Qn;return function(){var o=a(this,t),s=o.on;s!==r&&(i=(r=s).copy()).on(e,n),o.on=i}}var Nr=_e.prototype.constructor;function Br(t){return function(){this.style.removeProperty(t)}}function Lr(t,e,n){return function(r){this.style.setProperty(t,e.call(this,r),n)}}function Pr(t,e,n){var r,i;function a(){var a=e.apply(this,arguments);return a!==i&&(r=(i=a)&&Lr(t,a,n)),r}return a._value=e,a}function Ir(t){return function(e){this.textContent=t.call(this,e)}}function Fr(t){var e,n;function r(){var r=t.apply(this,arguments);return r!==n&&(e=(n=r)&&Ir(r)),e}return r._value=t,r}var jr=0;function Rr(t,e,n,r){this._groups=t,this._parents=e,this._name=n,this._id=r}function Yr(t){return _e().transition(t)}function zr(){return++jr}var Ur=_e.prototype;function $r(t){return t*t*t}function Wr(t){return--t*t*t+1}function Hr(t){return((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2}Rr.prototype=Yr.prototype={constructor:Rr,select:function(t){var e=this._name,n=this._id;"function"!=typeof t&&(t=ft(t));for(var r=this._groups,i=r.length,a=new Array(i),o=0;o1&&n.name===e)return new Rr([[t]],qr,e,+r);return null},Zr=function(t){return function(){return t}},Jr=function(t,e,n){this.target=t,this.type=e,this.selection=n};function Kr(){ce.stopImmediatePropagation()}var Qr=function(){ce.preventDefault(),ce.stopImmediatePropagation()},ti={name:"drag"},ei={name:"space"},ni={name:"handle"},ri={name:"center"};function ii(t){return[+t[0],+t[1]]}function ai(t){return[ii(t[0]),ii(t[1])]}function oi(t){return function(e){return On(e,ce.touches,t)}}var si={name:"x",handles:["w","e"].map(gi),input:function(t,e){return null==t?null:[[+t[0],e[0][1]],[+t[1],e[1][1]]]},output:function(t){return t&&[t[0][0],t[1][0]]}},ci={name:"y",handles:["n","s"].map(gi),input:function(t,e){return null==t?null:[[e[0][0],+t[0]],[e[1][0],+t[1]]]},output:function(t){return t&&[t[0][1],t[1][1]]}},ui={name:"xy",handles:["n","w","e","s","nw","ne","sw","se"].map(gi),input:function(t){return null==t?null:ai(t)},output:function(t){return t}},li={overlay:"crosshair",selection:"move",n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},hi={e:"w",w:"e",nw:"ne",ne:"nw",se:"sw",sw:"se"},fi={n:"s",s:"n",nw:"sw",ne:"se",se:"ne",sw:"nw"},di={overlay:1,selection:1,n:null,e:1,s:null,w:-1,nw:-1,ne:1,se:1,sw:-1},pi={overlay:1,selection:1,n:-1,e:null,s:1,w:null,nw:-1,ne:-1,se:1,sw:1};function gi(t){return{type:t}}function yi(){return!ce.ctrlKey&&!ce.button}function vi(){var t=this.ownerSVGElement||this;return t.hasAttribute("viewBox")?[[(t=t.viewBox.baseVal).x,t.y],[t.x+t.width,t.y+t.height]]:[[0,0],[t.width.baseVal.value,t.height.baseVal.value]]}function mi(){return navigator.maxTouchPoints||"ontouchstart"in this}function bi(t){for(;!t.__brush;)if(!(t=t.parentNode))return;return t.__brush}function xi(t){return t[0][0]===t[1][0]||t[0][1]===t[1][1]}function _i(t){var e=t.__brush;return e?e.dim.output(e.selection):null}function ki(){return Ti(si)}function wi(){return Ti(ci)}var Ei=function(){return Ti(ui)};function Ti(t){var e,n=vi,r=yi,i=mi,a=!0,o=lt("start","brush","end"),s=6;function c(e){var n=e.property("__brush",g).selectAll(".overlay").data([gi("overlay")]);n.enter().append("rect").attr("class","overlay").attr("pointer-events","all").attr("cursor",li.overlay).merge(n).each((function(){var t=bi(this).extent;ke(this).attr("x",t[0][0]).attr("y",t[0][1]).attr("width",t[1][0]-t[0][0]).attr("height",t[1][1]-t[0][1])})),e.selectAll(".selection").data([gi("selection")]).enter().append("rect").attr("class","selection").attr("cursor",li.selection).attr("fill","#777").attr("fill-opacity",.3).attr("stroke","#fff").attr("shape-rendering","crispEdges");var r=e.selectAll(".handle").data(t.handles,(function(t){return t.type}));r.exit().remove(),r.enter().append("rect").attr("class",(function(t){return"handle handle--"+t.type})).attr("cursor",(function(t){return li[t.type]})),e.each(u).attr("fill","none").attr("pointer-events","all").on("mousedown.brush",f).filter(i).on("touchstart.brush",f).on("touchmove.brush",d).on("touchend.brush touchcancel.brush",p).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function u(){var t=ke(this),e=bi(this).selection;e?(t.selectAll(".selection").style("display",null).attr("x",e[0][0]).attr("y",e[0][1]).attr("width",e[1][0]-e[0][0]).attr("height",e[1][1]-e[0][1]),t.selectAll(".handle").style("display",null).attr("x",(function(t){return"e"===t.type[t.type.length-1]?e[1][0]-s/2:e[0][0]-s/2})).attr("y",(function(t){return"s"===t.type[0]?e[1][1]-s/2:e[0][1]-s/2})).attr("width",(function(t){return"n"===t.type||"s"===t.type?e[1][0]-e[0][0]+s:s})).attr("height",(function(t){return"e"===t.type||"w"===t.type?e[1][1]-e[0][1]+s:s}))):t.selectAll(".selection,.handle").style("display","none").attr("x",null).attr("y",null).attr("width",null).attr("height",null)}function l(t,e,n){return!n&&t.__brush.emitter||new h(t,e)}function h(t,e){this.that=t,this.args=e,this.state=t.__brush,this.active=0}function f(){if((!e||ce.touches)&&r.apply(this,arguments)){var n,i,o,s,c,h,f,d,p,g,y,v=this,m=ce.target.__data__.type,b="selection"===(a&&ce.metaKey?m="overlay":m)?ti:a&&ce.altKey?ri:ni,x=t===ci?null:di[m],_=t===si?null:pi[m],k=bi(v),w=k.extent,E=k.selection,T=w[0][0],C=w[0][1],A=w[1][0],S=w[1][1],M=0,O=0,D=x&&_&&a&&ce.shiftKey,N=ce.touches?oi(ce.changedTouches[0].identifier):Dn,B=N(v),L=B,P=l(v,arguments,!0).beforestart();"overlay"===m?(E&&(p=!0),k.selection=E=[[n=t===ci?T:B[0],o=t===si?C:B[1]],[c=t===ci?A:n,f=t===si?S:o]]):(n=E[0][0],o=E[0][1],c=E[1][0],f=E[1][1]),i=n,s=o,h=c,d=f;var I=ke(v).attr("pointer-events","none"),F=I.selectAll(".overlay").attr("cursor",li[m]);if(ce.touches)P.moved=R,P.ended=z;else{var j=ke(ce.view).on("mousemove.brush",R,!0).on("mouseup.brush",z,!0);a&&j.on("keydown.brush",U,!0).on("keyup.brush",$,!0),Te(ce.view)}Kr(),ar(v),u.call(v),P.start()}function R(){var t=N(v);!D||g||y||(Math.abs(t[0]-L[0])>Math.abs(t[1]-L[1])?y=!0:g=!0),L=t,p=!0,Qr(),Y()}function Y(){var t;switch(M=L[0]-B[0],O=L[1]-B[1],b){case ei:case ti:x&&(M=Math.max(T-n,Math.min(A-c,M)),i=n+M,h=c+M),_&&(O=Math.max(C-o,Math.min(S-f,O)),s=o+O,d=f+O);break;case ni:x<0?(M=Math.max(T-n,Math.min(A-n,M)),i=n+M,h=c):x>0&&(M=Math.max(T-c,Math.min(A-c,M)),i=n,h=c+M),_<0?(O=Math.max(C-o,Math.min(S-o,O)),s=o+O,d=f):_>0&&(O=Math.max(C-f,Math.min(S-f,O)),s=o,d=f+O);break;case ri:x&&(i=Math.max(T,Math.min(A,n-M*x)),h=Math.max(T,Math.min(A,c+M*x))),_&&(s=Math.max(C,Math.min(S,o-O*_)),d=Math.max(C,Math.min(S,f+O*_)))}h0&&(n=i-M),_<0?f=d-O:_>0&&(o=s-O),b=ei,F.attr("cursor",li.selection),Y());break;default:return}Qr()}function $(){switch(ce.keyCode){case 16:D&&(g=y=D=!1,Y());break;case 18:b===ri&&(x<0?c=h:x>0&&(n=i),_<0?f=d:_>0&&(o=s),b=ni,Y());break;case 32:b===ei&&(ce.altKey?(x&&(c=h-M*x,n=i+M*x),_&&(f=d-O*_,o=s+O*_),b=ri):(x<0?c=h:x>0&&(n=i),_<0?f=d:_>0&&(o=s),b=ni),F.attr("cursor",li[m]),Y());break;default:return}Qr()}}function d(){l(this,arguments).moved()}function p(){l(this,arguments).ended()}function g(){var e=this.__brush||{selection:null};return e.extent=ai(n.apply(this,arguments)),e.dim=t,e}return c.move=function(e,n){e.selection?e.on("start.brush",(function(){l(this,arguments).beforestart().start()})).on("interrupt.brush end.brush",(function(){l(this,arguments).end()})).tween("brush",(function(){var e=this,r=e.__brush,i=l(e,arguments),a=r.selection,o=t.input("function"==typeof n?n.apply(this,arguments):n,r.extent),s=An(a,o);function c(t){r.selection=1===t&&null===o?null:s(t),u.call(e),i.brush()}return null!==a&&null!==o?c:c(1)})):e.each((function(){var e=this,r=arguments,i=e.__brush,a=t.input("function"==typeof n?n.apply(e,r):n,i.extent),o=l(e,r).beforestart();ar(e),i.selection=null===a?null:a,u.call(e),o.start().brush().end()}))},c.clear=function(t){c.move(t,null)},h.prototype={beforestart:function(){return 1==++this.active&&(this.state.emitter=this,this.starting=!0),this},start:function(){return this.starting?(this.starting=!1,this.emit("start")):this.emit("brush"),this},brush:function(){return this.emit("brush"),this},end:function(){return 0==--this.active&&(delete this.state.emitter,this.emit("end")),this},emit:function(e){pe(new Jr(c,e,t.output(this.state.selection)),o.apply,o,[e,this.that,this.args])}},c.extent=function(t){return arguments.length?(n="function"==typeof t?t:Zr(ai(t)),c):n},c.filter=function(t){return arguments.length?(r="function"==typeof t?t:Zr(!!t),c):r},c.touchable=function(t){return arguments.length?(i="function"==typeof t?t:Zr(!!t),c):i},c.handleSize=function(t){return arguments.length?(s=+t,c):s},c.keyModifiers=function(t){return arguments.length?(a=!!t,c):a},c.on=function(){var t=o.on.apply(o,arguments);return t===o?c:t},c}var Ci=Math.cos,Ai=Math.sin,Si=Math.PI,Mi=Si/2,Oi=2*Si,Di=Math.max;function Ni(t){return function(e,n){return t(e.source.value+e.target.value,n.source.value+n.target.value)}}var Bi=function(){var t=0,e=null,n=null,r=null;function i(i){var a,o,s,c,u,l,h=i.length,f=[],d=k(h),p=[],g=[],y=g.groups=new Array(h),v=new Array(h*h);for(a=0,u=-1;++u1e-6)if(Math.abs(l*s-c*u)>1e-6&&i){var f=n-a,d=r-o,p=s*s+c*c,g=f*f+d*d,y=Math.sqrt(p),v=Math.sqrt(h),m=i*Math.tan((Ii-Math.acos((p+h-g)/(2*y*v)))/2),b=m/v,x=m/y;Math.abs(b-1)>1e-6&&(this._+="L"+(t+b*u)+","+(e+b*l)),this._+="A"+i+","+i+",0,0,"+ +(l*f>u*d)+","+(this._x1=t+x*s)+","+(this._y1=e+x*c)}else this._+="L"+(this._x1=t)+","+(this._y1=e)},arc:function(t,e,n,r,i,a){t=+t,e=+e,a=!!a;var o=(n=+n)*Math.cos(r),s=n*Math.sin(r),c=t+o,u=e+s,l=1^a,h=a?r-i:i-r;if(n<0)throw new Error("negative radius: "+n);null===this._x1?this._+="M"+c+","+u:(Math.abs(this._x1-c)>1e-6||Math.abs(this._y1-u)>1e-6)&&(this._+="L"+c+","+u),n&&(h<0&&(h=h%Fi+Fi),h>ji?this._+="A"+n+","+n+",0,1,"+l+","+(t-o)+","+(e-s)+"A"+n+","+n+",0,1,"+l+","+(this._x1=c)+","+(this._y1=u):h>1e-6&&(this._+="A"+n+","+n+",0,"+ +(h>=Ii)+","+l+","+(this._x1=t+n*Math.cos(i))+","+(this._y1=e+n*Math.sin(i))))},rect:function(t,e,n,r){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)+"h"+ +n+"v"+ +r+"h"+-n+"Z"},toString:function(){return this._}};var zi=Yi;function Ui(t){return t.source}function $i(t){return t.target}function Wi(t){return t.radius}function Hi(t){return t.startAngle}function Vi(t){return t.endAngle}var Gi=function(){var t=Ui,e=$i,n=Wi,r=Hi,i=Vi,a=null;function o(){var o,s=Li.call(arguments),c=t.apply(this,s),u=e.apply(this,s),l=+n.apply(this,(s[0]=c,s)),h=r.apply(this,s)-Mi,f=i.apply(this,s)-Mi,d=l*Ci(h),p=l*Ai(h),g=+n.apply(this,(s[0]=u,s)),y=r.apply(this,s)-Mi,v=i.apply(this,s)-Mi;if(a||(a=o=zi()),a.moveTo(d,p),a.arc(0,0,l,h,f),h===y&&f===v||(a.quadraticCurveTo(0,0,g*Ci(y),g*Ai(y)),a.arc(0,0,g,y,v)),a.quadraticCurveTo(0,0,d,p),a.closePath(),o)return a=null,o+""||null}return o.radius=function(t){return arguments.length?(n="function"==typeof t?t:Pi(+t),o):n},o.startAngle=function(t){return arguments.length?(r="function"==typeof t?t:Pi(+t),o):r},o.endAngle=function(t){return arguments.length?(i="function"==typeof t?t:Pi(+t),o):i},o.source=function(e){return arguments.length?(t=e,o):t},o.target=function(t){return arguments.length?(e=t,o):e},o.context=function(t){return arguments.length?(a=null==t?null:t,o):a},o};function qi(){}function Xi(t,e){var n=new qi;if(t instanceof qi)t.each((function(t,e){n.set(e,t)}));else if(Array.isArray(t)){var r,i=-1,a=t.length;if(null==e)for(;++i=r.length)return null!=t&&n.sort(t),null!=e?e(n):n;for(var c,u,l,h=-1,f=n.length,d=r[i++],p=Zi(),g=o();++hr.length)return n;var o,s=i[a-1];return null!=e&&a>=r.length?o=n.entries():(o=[],n.each((function(e,n){o.push({key:n,values:t(e,a)})}))),null!=s?o.sort((function(t,e){return s(t.key,e.key)})):o}(a(t,0,ta,ea),0)},key:function(t){return r.push(t),n},sortKeys:function(t){return i[r.length-1]=t,n},sortValues:function(e){return t=e,n},rollup:function(t){return e=t,n}}};function Ki(){return{}}function Qi(t,e,n){t[e]=n}function ta(){return Zi()}function ea(t,e,n){t.set(e,n)}function na(){}var ra=Zi.prototype;function ia(t,e){var n=new na;if(t instanceof na)t.each((function(t){n.add(t)}));else if(t){var r=-1,i=t.length;if(null==e)for(;++r6/29*(6/29)*(6/29)?Math.pow(t,1/3):t/(6/29*3*(6/29))+4/29}function ya(t){return t>6/29?t*t*t:6/29*3*(6/29)*(t-4/29)}function va(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function ma(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function ba(t){if(t instanceof ka)return new ka(t.h,t.c,t.l,t.opacity);if(t instanceof pa||(t=ha(t)),0===t.a&&0===t.b)return new ka(NaN,0r!=d>r&&n<(f-u)*(r-l)/(d-l)+u&&(i=-i)}return i}function Pa(t,e,n){var r,i,a,o;return function(t,e,n){return(e[0]-t[0])*(n[1]-t[1])==(n[0]-t[0])*(e[1]-t[1])}(t,e,n)&&(i=t[r=+(t[0]===e[0])],a=n[r],o=e[r],i<=a&&a<=o||o<=a&&a<=i)}var Ia=function(){},Fa=[[],[[[1,1.5],[.5,1]]],[[[1.5,1],[1,1.5]]],[[[1.5,1],[.5,1]]],[[[1,.5],[1.5,1]]],[[[1,1.5],[.5,1]],[[1,.5],[1.5,1]]],[[[1,.5],[1,1.5]]],[[[1,.5],[.5,1]]],[[[.5,1],[1,.5]]],[[[1,1.5],[1,.5]]],[[[.5,1],[1,.5]],[[1.5,1],[1,1.5]]],[[[1.5,1],[1,.5]]],[[[.5,1],[1.5,1]]],[[[1,1.5],[1.5,1]]],[[[.5,1],[1,1.5]]],[]],ja=function(){var t=1,e=1,n=M,r=s;function i(t){var e=n(t);if(Array.isArray(e))e=e.slice().sort(Da);else{var r=y(t),i=r[0],o=r[1];e=S(i,o,e),e=k(Math.floor(i/e)*e,Math.floor(o/e)*e,e)}return e.map((function(e){return a(t,e)}))}function a(n,i){var a=[],s=[];return function(n,r,i){var a,s,c,u,l,h,f=new Array,d=new Array;for(a=s=-1,u=n[0]>=r,Fa[u<<1].forEach(p);++a=r,Fa[c|u<<1].forEach(p);for(Fa[u<<0].forEach(p);++s=r,l=n[s*t]>=r,Fa[u<<1|l<<2].forEach(p);++a=r,h=l,l=n[s*t+a+1]>=r,Fa[c|u<<1|l<<2|h<<3].forEach(p);Fa[u|l<<3].forEach(p)}for(a=-1,l=n[s*t]>=r,Fa[l<<2].forEach(p);++a=r,Fa[l<<2|h<<3].forEach(p);function p(t){var e,n,r=[t[0][0]+a,t[0][1]+s],c=[t[1][0]+a,t[1][1]+s],u=o(r),l=o(c);(e=d[u])?(n=f[l])?(delete d[e.end],delete f[n.start],e===n?(e.ring.push(c),i(e.ring)):f[e.start]=d[n.end]={start:e.start,end:n.end,ring:e.ring.concat(n.ring)}):(delete d[e.end],e.ring.push(c),d[e.end=l]=e):(e=f[l])?(n=d[u])?(delete f[e.start],delete d[n.end],e===n?(e.ring.push(c),i(e.ring)):f[n.start]=d[e.end]={start:n.start,end:e.end,ring:n.ring.concat(e.ring)}):(delete f[e.start],e.ring.unshift(r),f[e.start=u]=e):f[u]=d[l]={start:u,end:l,ring:[r,c]}}Fa[l<<3].forEach(p)}(n,i,(function(t){r(t,n,i),function(t){for(var e=0,n=t.length,r=t[n-1][1]*t[0][0]-t[n-1][0]*t[0][1];++e0?a.push([t]):s.push(t)})),s.forEach((function(t){for(var e,n=0,r=a.length;n0&&o0&&s0&&a>0))throw new Error("invalid size");return t=r,e=a,i},i.thresholds=function(t){return arguments.length?(n="function"==typeof t?t:Array.isArray(t)?Na(Oa.call(t)):Na(t),i):n},i.smooth=function(t){return arguments.length?(r=t?s:Ia,i):r===s},i};function Ra(t,e,n){for(var r=t.width,i=t.height,a=1+(n<<1),o=0;o=n&&(s>=a&&(c-=t.data[s-a+o*r]),e.data[s-n+o*r]=c/Math.min(s+1,r-1+a-s,a))}function Ya(t,e,n){for(var r=t.width,i=t.height,a=1+(n<<1),o=0;o=n&&(s>=a&&(c-=t.data[o+(s-a)*r]),e.data[o+(s-n)*r]=c/Math.min(s+1,i-1+a-s,a))}function za(t){return t[0]}function Ua(t){return t[1]}function $a(){return 1}var Wa=function(){var t=za,e=Ua,n=$a,r=960,i=500,a=20,o=2,s=3*a,c=r+2*s>>o,u=i+2*s>>o,l=Na(20);function h(r){var i=new Float32Array(c*u),h=new Float32Array(c*u);r.forEach((function(r,a,l){var h=+t(r,a,l)+s>>o,f=+e(r,a,l)+s>>o,d=+n(r,a,l);h>=0&&h=0&&f>o),Ya({width:c,height:u,data:h},{width:c,height:u,data:i},a>>o),Ra({width:c,height:u,data:i},{width:c,height:u,data:h},a>>o),Ya({width:c,height:u,data:h},{width:c,height:u,data:i},a>>o),Ra({width:c,height:u,data:i},{width:c,height:u,data:h},a>>o),Ya({width:c,height:u,data:h},{width:c,height:u,data:i},a>>o);var d=l(i);if(!Array.isArray(d)){var p=L(i);d=S(0,p,d),(d=k(0,Math.floor(p/d)*d,d)).shift()}return ja().thresholds(d).size([c,u])(i).map(f)}function f(t){return t.value*=Math.pow(2,-2*o),t.coordinates.forEach(d),t}function d(t){t.forEach(p)}function p(t){t.forEach(g)}function g(t){t[0]=t[0]*Math.pow(2,o)-s,t[1]=t[1]*Math.pow(2,o)-s}function y(){return c=r+2*(s=3*a)>>o,u=i+2*s>>o,h}return h.x=function(e){return arguments.length?(t="function"==typeof e?e:Na(+e),h):t},h.y=function(t){return arguments.length?(e="function"==typeof t?t:Na(+t),h):e},h.weight=function(t){return arguments.length?(n="function"==typeof t?t:Na(+t),h):n},h.size=function(t){if(!arguments.length)return[r,i];var e=Math.ceil(t[0]),n=Math.ceil(t[1]);if(!(e>=0||e>=0))throw new Error("invalid size");return r=e,i=n,y()},h.cellSize=function(t){if(!arguments.length)return 1<=1))throw new Error("invalid cell size");return o=Math.floor(Math.log(t)/Math.LN2),y()},h.thresholds=function(t){return arguments.length?(l="function"==typeof t?t:Array.isArray(t)?Na(Oa.call(t)):Na(t),h):l},h.bandwidth=function(t){if(!arguments.length)return Math.sqrt(a*(a+1));if(!((t=+t)>=0))throw new Error("invalid bandwidth");return a=Math.round((Math.sqrt(4*t*t+1)-1)/2),y()},h},Ha=function(t){return function(){return t}};function Va(t,e,n,r,i,a,o,s,c,u){this.target=t,this.type=e,this.subject=n,this.identifier=r,this.active=i,this.x=a,this.y=o,this.dx=s,this.dy=c,this._=u}function Ga(){return!ce.ctrlKey&&!ce.button}function qa(){return this.parentNode}function Xa(t){return null==t?{x:ce.x,y:ce.y}:t}function Za(){return navigator.maxTouchPoints||"ontouchstart"in this}Va.prototype.on=function(){var t=this._.on.apply(this._,arguments);return t===this._?this:t};var Ja=function(){var t,e,n,r,i=Ga,a=qa,o=Xa,s=Za,c={},u=lt("start","drag","end"),l=0,h=0;function f(t){t.on("mousedown.drag",d).filter(s).on("touchstart.drag",y).on("touchmove.drag",v).on("touchend.drag touchcancel.drag",m).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function d(){if(!r&&i.apply(this,arguments)){var o=b("mouse",a.apply(this,arguments),Dn,this,arguments);o&&(ke(ce.view).on("mousemove.drag",p,!0).on("mouseup.drag",g,!0),Te(ce.view),we(),n=!1,t=ce.clientX,e=ce.clientY,o("start"))}}function p(){if(Ee(),!n){var r=ce.clientX-t,i=ce.clientY-e;n=r*r+i*i>h}c.mouse("drag")}function g(){ke(ce.view).on("mousemove.drag mouseup.drag",null),Ce(ce.view,n),Ee(),c.mouse("end")}function y(){if(i.apply(this,arguments)){var t,e,n=ce.changedTouches,r=a.apply(this,arguments),o=n.length;for(t=0;t=a?c=!0:10===(r=t.charCodeAt(o++))?u=!0:13===r&&(u=!0,10===t.charCodeAt(o)&&++o),t.slice(i+1,e-1).replace(/""/g,'"')}for(;o9999?"+"+no(e,6):no(e,4))+"-"+no(t.getUTCMonth()+1,2)+"-"+no(t.getUTCDate(),2)+(a?"T"+no(n,2)+":"+no(r,2)+":"+no(i,2)+"."+no(a,3)+"Z":i?"T"+no(n,2)+":"+no(r,2)+":"+no(i,2)+"Z":r||n?"T"+no(n,2)+":"+no(r,2)+"Z":"")}(t):e.test(t+="")?'"'+t.replace(/"/g,'""')+'"':t}return{parse:function(t,e){var n,i,a=r(t,(function(t,r){if(n)return n(t,r-1);i=t,n=e?function(t,e){var n=to(t);return function(r,i){return e(n(r),i,t)}}(t,e):to(t)}));return a.columns=i||[],a},parseRows:r,format:function(e,n){return null==n&&(n=eo(e)),[n.map(o).join(t)].concat(i(e,n)).join("\n")},formatBody:function(t,e){return null==e&&(e=eo(t)),i(t,e).join("\n")},formatRows:function(t){return t.map(a).join("\n")},formatRow:a,formatValue:o}},io=ro(","),ao=io.parse,oo=io.parseRows,so=io.format,co=io.formatBody,uo=io.formatRows,lo=io.formatRow,ho=io.formatValue,fo=ro("\t"),po=fo.parse,go=fo.parseRows,yo=fo.format,vo=fo.formatBody,mo=fo.formatRows,bo=fo.formatRow,xo=fo.formatValue;function _o(t){for(var e in t){var n,r,i=t[e].trim();if(i)if("true"===i)i=!0;else if("false"===i)i=!1;else if("NaN"===i)i=NaN;else if(isNaN(n=+i)){if(!(r=i.match(/^([-+]\d{2})?\d{4}(-\d{2}(-\d{2})?)?(T\d{2}:\d{2}(:\d{2}(\.\d{3})?)?(Z|[-+]\d{2}:\d{2})?)?$/)))continue;ko&&r[4]&&!r[7]&&(i=i.replace(/-/g,"/").replace(/T/," ")),i=new Date(i)}else i=n;else i=null;t[e]=i}return t}var ko=new Date("2019-01-01T00:00").getHours()||new Date("2019-07-01T00:00").getHours();function wo(t){return+t}function Eo(t){return t*t}function To(t){return t*(2-t)}function Co(t){return((t*=2)<=1?t*t:--t*(2-t)+1)/2}var Ao=function t(e){function n(t){return Math.pow(t,e)}return e=+e,n.exponent=t,n}(3),So=function t(e){function n(t){return 1-Math.pow(1-t,e)}return e=+e,n.exponent=t,n}(3),Mo=function t(e){function n(t){return((t*=2)<=1?Math.pow(t,e):2-Math.pow(2-t,e))/2}return e=+e,n.exponent=t,n}(3),Oo=Math.PI,Do=Oo/2;function No(t){return 1-Math.cos(t*Do)}function Bo(t){return Math.sin(t*Do)}function Lo(t){return(1-Math.cos(Oo*t))/2}function Po(t){return Math.pow(2,10*t-10)}function Io(t){return 1-Math.pow(2,-10*t)}function Fo(t){return((t*=2)<=1?Math.pow(2,10*t-10):2-Math.pow(2,10-10*t))/2}function jo(t){return 1-Math.sqrt(1-t*t)}function Ro(t){return Math.sqrt(1- --t*t)}function Yo(t){return((t*=2)<=1?1-Math.sqrt(1-t*t):Math.sqrt(1-(t-=2)*t)+1)/2}function zo(t){return 1-Uo(1-t)}function Uo(t){return(t=+t)<4/11?7.5625*t*t:t<8/11?7.5625*(t-=6/11)*t+.75:t<10/11?7.5625*(t-=9/11)*t+.9375:7.5625*(t-=21/22)*t+63/64}function $o(t){return((t*=2)<=1?1-Uo(1-t):Uo(t-1)+1)/2}var Wo=function t(e){function n(t){return t*t*((e+1)*t-e)}return e=+e,n.overshoot=t,n}(1.70158),Ho=function t(e){function n(t){return--t*t*((e+1)*t+e)+1}return e=+e,n.overshoot=t,n}(1.70158),Vo=function t(e){function n(t){return((t*=2)<1?t*t*((e+1)*t-e):(t-=2)*t*((e+1)*t+e)+2)/2}return e=+e,n.overshoot=t,n}(1.70158),Go=2*Math.PI,qo=function t(e,n){var r=Math.asin(1/(e=Math.max(1,e)))*(n/=Go);function i(t){return e*Math.pow(2,10*--t)*Math.sin((r-t)/n)}return i.amplitude=function(e){return t(e,n*Go)},i.period=function(n){return t(e,n)},i}(1,.3),Xo=function t(e,n){var r=Math.asin(1/(e=Math.max(1,e)))*(n/=Go);function i(t){return 1-e*Math.pow(2,-10*(t=+t))*Math.sin((t+r)/n)}return i.amplitude=function(e){return t(e,n*Go)},i.period=function(n){return t(e,n)},i}(1,.3),Zo=function t(e,n){var r=Math.asin(1/(e=Math.max(1,e)))*(n/=Go);function i(t){return((t=2*t-1)<0?e*Math.pow(2,10*t)*Math.sin((r-t)/n):2-e*Math.pow(2,-10*t)*Math.sin((r+t)/n))/2}return i.amplitude=function(e){return t(e,n*Go)},i.period=function(n){return t(e,n)},i}(1,.3);function Jo(t){if(!t.ok)throw new Error(t.status+" "+t.statusText);return t.blob()}var Ko=function(t,e){return fetch(t,e).then(Jo)};function Qo(t){if(!t.ok)throw new Error(t.status+" "+t.statusText);return t.arrayBuffer()}var ts=function(t,e){return fetch(t,e).then(Qo)};function es(t){if(!t.ok)throw new Error(t.status+" "+t.statusText);return t.text()}var ns=function(t,e){return fetch(t,e).then(es)};function rs(t){return function(e,n,r){return 2===arguments.length&&"function"==typeof n&&(r=n,n=void 0),ns(e,n).then((function(e){return t(e,r)}))}}function is(t,e,n,r){3===arguments.length&&"function"==typeof n&&(r=n,n=void 0);var i=ro(t);return ns(e,n).then((function(t){return i.parse(t,r)}))}var as=rs(ao),os=rs(po),ss=function(t,e){return new Promise((function(n,r){var i=new Image;for(var a in e)i[a]=e[a];i.onerror=r,i.onload=function(){n(i)},i.src=t}))};function cs(t){if(!t.ok)throw new Error(t.status+" "+t.statusText);return t.json()}var us=function(t,e){return fetch(t,e).then(cs)};function ls(t){return function(e,n){return ns(e,n).then((function(e){return(new DOMParser).parseFromString(e,t)}))}}var hs=ls("application/xml"),fs=ls("text/html"),ds=ls("image/svg+xml"),ps=function(t,e){var n;function r(){var r,i,a=n.length,o=0,s=0;for(r=0;r=(a=(g+v)/2))?g=a:v=a,(l=n>=(o=(y+m)/2))?y=o:m=o,i=d,!(d=d[h=l<<1|u]))return i[h]=p,t;if(s=+t._x.call(null,d.data),c=+t._y.call(null,d.data),e===s&&n===c)return p.next=d,i?i[h]=p:t._root=p,t;do{i=i?i[h]=new Array(4):t._root=new Array(4),(u=e>=(a=(g+v)/2))?g=a:v=a,(l=n>=(o=(y+m)/2))?y=o:m=o}while((h=l<<1|u)==(f=(c>=o)<<1|s>=a));return i[f]=d,i[h]=p,t}var ms=function(t,e,n,r,i){this.node=t,this.x0=e,this.y0=n,this.x1=r,this.y1=i};function bs(t){return t[0]}function xs(t){return t[1]}function _s(t,e,n){var r=new ks(null==e?bs:e,null==n?xs:n,NaN,NaN,NaN,NaN);return null==t?r:r.addAll(t)}function ks(t,e,n,r,i,a){this._x=t,this._y=e,this._x0=n,this._y0=r,this._x1=i,this._y1=a,this._root=void 0}function ws(t){for(var e={data:t.data},n=e;t=t.next;)n=n.next={data:t.data};return e}var Es=_s.prototype=ks.prototype;function Ts(t){return t.x+t.vx}function Cs(t){return t.y+t.vy}Es.copy=function(){var t,e,n=new ks(this._x,this._y,this._x0,this._y0,this._x1,this._y1),r=this._root;if(!r)return n;if(!r.length)return n._root=ws(r),n;for(t=[{source:r,target:n._root=new Array(4)}];r=t.pop();)for(var i=0;i<4;++i)(e=r.source[i])&&(e.length?t.push({source:e,target:r.target[i]=new Array(4)}):r.target[i]=ws(e));return n},Es.add=function(t){var e=+this._x.call(null,t),n=+this._y.call(null,t);return vs(this.cover(e,n),e,n,t)},Es.addAll=function(t){var e,n,r,i,a=t.length,o=new Array(a),s=new Array(a),c=1/0,u=1/0,l=-1/0,h=-1/0;for(n=0;nl&&(l=r),ih&&(h=i));if(c>l||u>h)return this;for(this.cover(c,u).cover(l,h),n=0;nt||t>=i||r>e||e>=a;)switch(s=(ef||(a=c.y0)>d||(o=c.x1)=v)<<1|t>=y)&&(c=p[p.length-1],p[p.length-1]=p[p.length-1-u],p[p.length-1-u]=c)}else{var m=t-+this._x.call(null,g.data),b=e-+this._y.call(null,g.data),x=m*m+b*b;if(x=(s=(p+y)/2))?p=s:y=s,(l=o>=(c=(g+v)/2))?g=c:v=c,e=d,!(d=d[h=l<<1|u]))return this;if(!d.length)break;(e[h+1&3]||e[h+2&3]||e[h+3&3])&&(n=e,f=h)}for(;d.data!==t;)if(r=d,!(d=d.next))return this;return(i=d.next)&&delete d.next,r?(i?r.next=i:delete r.next,this):e?(i?e[h]=i:delete e[h],(d=e[0]||e[1]||e[2]||e[3])&&d===(e[3]||e[2]||e[1]||e[0])&&!d.length&&(n?n[f]=d:this._root=d),this):(this._root=i,this)},Es.removeAll=function(t){for(var e=0,n=t.length;ec+d||iu+d||as.index){var p=c-o.x-o.vx,g=u-o.y-o.vy,y=p*p+g*g;yt.r&&(t.r=t[e].r)}function s(){if(e){var r,i,a=e.length;for(n=new Array(a),r=0;r1?(null==n?s.remove(t):s.set(t,d(n)),e):s.get(t)},find:function(e,n,r){var i,a,o,s,c,u=0,l=t.length;for(null==r?r=1/0:r*=r,u=0;u1?(u.on(t,n),e):u.on(t)}}},Ps=function(){var t,e,n,r,i=gs(-30),a=1,o=1/0,s=.81;function c(r){var i,a=t.length,o=_s(t,Ds,Ns).visitAfter(l);for(n=r,i=0;i=o)){(t.data!==e||t.next)&&(0===l&&(d+=(l=ys())*l),0===h&&(d+=(h=ys())*h),d1?r[0]+r.slice(2):r,+t.slice(n+1)]},Ys=function(t){return(t=Rs(Math.abs(t)))?t[1]:NaN},zs=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function Us(t){if(!(e=zs.exec(t)))throw new Error("invalid format: "+t);var e;return new $s({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}function $s(t){this.fill=void 0===t.fill?" ":t.fill+"",this.align=void 0===t.align?">":t.align+"",this.sign=void 0===t.sign?"-":t.sign+"",this.symbol=void 0===t.symbol?"":t.symbol+"",this.zero=!!t.zero,this.width=void 0===t.width?void 0:+t.width,this.comma=!!t.comma,this.precision=void 0===t.precision?void 0:+t.precision,this.trim=!!t.trim,this.type=void 0===t.type?"":t.type+""}Us.prototype=$s.prototype,$s.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};var Ws,Hs,Vs,Gs,qs=function(t,e){var n=Rs(t,e);if(!n)return t+"";var r=n[0],i=n[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")},Xs={"%":function(t,e){return(100*t).toFixed(e)},b:function(t){return Math.round(t).toString(2)},c:function(t){return t+""},d:function(t){return Math.round(t).toString(10)},e:function(t,e){return t.toExponential(e)},f:function(t,e){return t.toFixed(e)},g:function(t,e){return t.toPrecision(e)},o:function(t){return Math.round(t).toString(8)},p:function(t,e){return qs(100*t,e)},r:qs,s:function(t,e){var n=Rs(t,e);if(!n)return t+"";var r=n[0],i=n[1],a=i-(Ws=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,o=r.length;return a===o?r:a>o?r+new Array(a-o+1).join("0"):a>0?r.slice(0,a)+"."+r.slice(a):"0."+new Array(1-a).join("0")+Rs(t,Math.max(0,e+a-1))[0]},X:function(t){return Math.round(t).toString(16).toUpperCase()},x:function(t){return Math.round(t).toString(16)}},Zs=function(t){return t},Js=Array.prototype.map,Ks=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"],Qs=function(t){var e,n,r=void 0===t.grouping||void 0===t.thousands?Zs:(e=Js.call(t.grouping,Number),n=t.thousands+"",function(t,r){for(var i=t.length,a=[],o=0,s=e[0],c=0;i>0&&s>0&&(c+s+1>r&&(s=Math.max(1,r-c)),a.push(t.substring(i-=s,i+s)),!((c+=s+1)>r));)s=e[o=(o+1)%e.length];return a.reverse().join(n)}),i=void 0===t.currency?"":t.currency[0]+"",a=void 0===t.currency?"":t.currency[1]+"",o=void 0===t.decimal?".":t.decimal+"",s=void 0===t.numerals?Zs:function(t){return function(e){return e.replace(/[0-9]/g,(function(e){return t[+e]}))}}(Js.call(t.numerals,String)),c=void 0===t.percent?"%":t.percent+"",u=void 0===t.minus?"-":t.minus+"",l=void 0===t.nan?"NaN":t.nan+"";function h(t){var e=(t=Us(t)).fill,n=t.align,h=t.sign,f=t.symbol,d=t.zero,p=t.width,g=t.comma,y=t.precision,v=t.trim,m=t.type;"n"===m?(g=!0,m="g"):Xs[m]||(void 0===y&&(y=12),v=!0,m="g"),(d||"0"===e&&"="===n)&&(d=!0,e="0",n="=");var b="$"===f?i:"#"===f&&/[boxX]/.test(m)?"0"+m.toLowerCase():"",x="$"===f?a:/[%p]/.test(m)?c:"",_=Xs[m],k=/[defgprs%]/.test(m);function w(t){var i,a,c,f=b,w=x;if("c"===m)w=_(t)+w,t="";else{var E=(t=+t)<0;if(t=isNaN(t)?l:_(Math.abs(t),y),v&&(t=function(t){t:for(var e,n=t.length,r=1,i=-1;r0&&(i=0)}return i>0?t.slice(0,i)+t.slice(e+1):t}(t)),E&&0==+t&&(E=!1),f=(E?"("===h?h:u:"-"===h||"("===h?"":h)+f,w=("s"===m?Ks[8+Ws/3]:"")+w+(E&&"("===h?")":""),k)for(i=-1,a=t.length;++i(c=t.charCodeAt(i))||c>57){w=(46===c?o+t.slice(i+1):t.slice(i))+w,t=t.slice(0,i);break}}g&&!d&&(t=r(t,1/0));var T=f.length+t.length+w.length,C=T>1)+f+t+w+C.slice(T);break;default:t=C+f+t+w}return s(t)}return y=void 0===y?6:/[gprs]/.test(m)?Math.max(1,Math.min(21,y)):Math.max(0,Math.min(20,y)),w.toString=function(){return t+""},w}return{format:h,formatPrefix:function(t,e){var n=h(((t=Us(t)).type="f",t)),r=3*Math.max(-8,Math.min(8,Math.floor(Ys(e)/3))),i=Math.pow(10,-r),a=Ks[8+r/3];return function(t){return n(i*t)+a}}}};function tc(t){return Hs=Qs(t),Vs=Hs.format,Gs=Hs.formatPrefix,Hs}tc({decimal:".",thousands:",",grouping:[3],currency:["$",""],minus:"-"});var ec=function(t){return Math.max(0,-Ys(Math.abs(t)))},nc=function(t,e){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(Ys(e)/3)))-Ys(Math.abs(t)))},rc=function(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,Ys(e)-Ys(t))+1},ic=function(){return new ac};function ac(){this.reset()}ac.prototype={constructor:ac,reset:function(){this.s=this.t=0},add:function(t){sc(oc,t,this.t),sc(this,oc.s,this.s),this.s?this.t+=oc.t:this.s=oc.t},valueOf:function(){return this.s}};var oc=new ac;function sc(t,e,n){var r=t.s=e+n,i=r-e,a=r-i;t.t=e-a+(n-i)}var cc=Math.PI,uc=cc/2,lc=cc/4,hc=2*cc,fc=180/cc,dc=cc/180,pc=Math.abs,gc=Math.atan,yc=Math.atan2,vc=Math.cos,mc=Math.ceil,bc=Math.exp,xc=(Math.floor,Math.log),_c=Math.pow,kc=Math.sin,wc=Math.sign||function(t){return t>0?1:t<0?-1:0},Ec=Math.sqrt,Tc=Math.tan;function Cc(t){return t>1?0:t<-1?cc:Math.acos(t)}function Ac(t){return t>1?uc:t<-1?-uc:Math.asin(t)}function Sc(t){return(t=kc(t/2))*t}function Mc(){}function Oc(t,e){t&&Nc.hasOwnProperty(t.type)&&Nc[t.type](t,e)}var Dc={Feature:function(t,e){Oc(t.geometry,e)},FeatureCollection:function(t,e){for(var n=t.features,r=-1,i=n.length;++r=0?1:-1,i=r*n,a=vc(e=(e*=dc)/2+lc),o=kc(e),s=Rc*o,c=jc*a+s*vc(i),u=s*r*kc(i);zc.add(yc(u,c)),Fc=t,jc=a,Rc=o}var qc=function(t){return Uc.reset(),Yc(t,$c),2*Uc};function Xc(t){return[yc(t[1],t[0]),Ac(t[2])]}function Zc(t){var e=t[0],n=t[1],r=vc(n);return[r*vc(e),r*kc(e),kc(n)]}function Jc(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function Kc(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}function Qc(t,e){t[0]+=e[0],t[1]+=e[1],t[2]+=e[2]}function tu(t,e){return[t[0]*e,t[1]*e,t[2]*e]}function eu(t){var e=Ec(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);t[0]/=e,t[1]/=e,t[2]/=e}var nu,ru,iu,au,ou,su,cu,uu,lu,hu,fu=ic(),du={point:pu,lineStart:yu,lineEnd:vu,polygonStart:function(){du.point=mu,du.lineStart=bu,du.lineEnd=xu,fu.reset(),$c.polygonStart()},polygonEnd:function(){$c.polygonEnd(),du.point=pu,du.lineStart=yu,du.lineEnd=vu,zc<0?(nu=-(iu=180),ru=-(au=90)):fu>1e-6?au=90:fu<-1e-6&&(ru=-90),hu[0]=nu,hu[1]=iu},sphere:function(){nu=-(iu=180),ru=-(au=90)}};function pu(t,e){lu.push(hu=[nu=t,iu=t]),eau&&(au=e)}function gu(t,e){var n=Zc([t*dc,e*dc]);if(uu){var r=Kc(uu,n),i=Kc([r[1],-r[0],0],r);eu(i),i=Xc(i);var a,o=t-ou,s=o>0?1:-1,c=i[0]*fc*s,u=pc(o)>180;u^(s*ouau&&(au=a):u^(s*ou<(c=(c+360)%360-180)&&cau&&(au=e)),u?t_u(nu,iu)&&(iu=t):_u(t,iu)>_u(nu,iu)&&(nu=t):iu>=nu?(tiu&&(iu=t)):t>ou?_u(nu,t)>_u(nu,iu)&&(iu=t):_u(t,iu)>_u(nu,iu)&&(nu=t)}else lu.push(hu=[nu=t,iu=t]);eau&&(au=e),uu=n,ou=t}function yu(){du.point=gu}function vu(){hu[0]=nu,hu[1]=iu,du.point=pu,uu=null}function mu(t,e){if(uu){var n=t-ou;fu.add(pc(n)>180?n+(n>0?360:-360):n)}else su=t,cu=e;$c.point(t,e),gu(t,e)}function bu(){$c.lineStart()}function xu(){mu(su,cu),$c.lineEnd(),pc(fu)>1e-6&&(nu=-(iu=180)),hu[0]=nu,hu[1]=iu,uu=null}function _u(t,e){return(e-=t)<0?e+360:e}function ku(t,e){return t[0]-e[0]}function wu(t,e){return t[0]<=t[1]?t[0]<=e&&e<=t[1]:e_u(r[0],r[1])&&(r[1]=i[1]),_u(i[0],r[1])>_u(r[0],r[1])&&(r[0]=i[0])):a.push(r=i);for(o=-1/0,e=0,r=a[n=a.length-1];e<=n;r=i,++e)i=a[e],(s=_u(r[1],i[0]))>o&&(o=s,nu=i[0],iu=r[1])}return lu=hu=null,nu===1/0||ru===1/0?[[NaN,NaN],[NaN,NaN]]:[[nu,ru],[iu,au]]},zu={sphere:Mc,point:Uu,lineStart:Wu,lineEnd:Gu,polygonStart:function(){zu.lineStart=qu,zu.lineEnd=Xu},polygonEnd:function(){zu.lineStart=Wu,zu.lineEnd=Gu}};function Uu(t,e){t*=dc;var n=vc(e*=dc);$u(n*vc(t),n*kc(t),kc(e))}function $u(t,e,n){++Eu,Cu+=(t-Cu)/Eu,Au+=(e-Au)/Eu,Su+=(n-Su)/Eu}function Wu(){zu.point=Hu}function Hu(t,e){t*=dc;var n=vc(e*=dc);Fu=n*vc(t),ju=n*kc(t),Ru=kc(e),zu.point=Vu,$u(Fu,ju,Ru)}function Vu(t,e){t*=dc;var n=vc(e*=dc),r=n*vc(t),i=n*kc(t),a=kc(e),o=yc(Ec((o=ju*a-Ru*i)*o+(o=Ru*r-Fu*a)*o+(o=Fu*i-ju*r)*o),Fu*r+ju*i+Ru*a);Tu+=o,Mu+=o*(Fu+(Fu=r)),Ou+=o*(ju+(ju=i)),Du+=o*(Ru+(Ru=a)),$u(Fu,ju,Ru)}function Gu(){zu.point=Uu}function qu(){zu.point=Zu}function Xu(){Ju(Pu,Iu),zu.point=Uu}function Zu(t,e){Pu=t,Iu=e,t*=dc,e*=dc,zu.point=Ju;var n=vc(e);Fu=n*vc(t),ju=n*kc(t),Ru=kc(e),$u(Fu,ju,Ru)}function Ju(t,e){t*=dc;var n=vc(e*=dc),r=n*vc(t),i=n*kc(t),a=kc(e),o=ju*a-Ru*i,s=Ru*r-Fu*a,c=Fu*i-ju*r,u=Ec(o*o+s*s+c*c),l=Ac(u),h=u&&-l/u;Nu+=h*o,Bu+=h*s,Lu+=h*c,Tu+=l,Mu+=l*(Fu+(Fu=r)),Ou+=l*(ju+(ju=i)),Du+=l*(Ru+(Ru=a)),$u(Fu,ju,Ru)}var Ku=function(t){Eu=Tu=Cu=Au=Su=Mu=Ou=Du=Nu=Bu=Lu=0,Yc(t,zu);var e=Nu,n=Bu,r=Lu,i=e*e+n*n+r*r;return i<1e-12&&(e=Mu,n=Ou,r=Du,Tu<1e-6&&(e=Cu,n=Au,r=Su),(i=e*e+n*n+r*r)<1e-12)?[NaN,NaN]:[yc(n,e)*fc,Ac(r/Ec(i))*fc]},Qu=function(t){return function(){return t}},tl=function(t,e){function n(n,r){return n=t(n,r),e(n[0],n[1])}return t.invert&&e.invert&&(n.invert=function(n,r){return(n=e.invert(n,r))&&t.invert(n[0],n[1])}),n};function el(t,e){return[pc(t)>cc?t+Math.round(-t/hc)*hc:t,e]}function nl(t,e,n){return(t%=hc)?e||n?tl(il(t),al(e,n)):il(t):e||n?al(e,n):el}function rl(t){return function(e,n){return[(e+=t)>cc?e-hc:e<-cc?e+hc:e,n]}}function il(t){var e=rl(t);return e.invert=rl(-t),e}function al(t,e){var n=vc(t),r=kc(t),i=vc(e),a=kc(e);function o(t,e){var o=vc(e),s=vc(t)*o,c=kc(t)*o,u=kc(e),l=u*n+s*r;return[yc(c*i-l*a,s*n-u*r),Ac(l*i+c*a)]}return o.invert=function(t,e){var o=vc(e),s=vc(t)*o,c=kc(t)*o,u=kc(e),l=u*i-c*a;return[yc(c*i+u*a,s*n+l*r),Ac(l*n-s*r)]},o}el.invert=el;var ol=function(t){function e(e){return(e=t(e[0]*dc,e[1]*dc))[0]*=fc,e[1]*=fc,e}return t=nl(t[0]*dc,t[1]*dc,t.length>2?t[2]*dc:0),e.invert=function(e){return(e=t.invert(e[0]*dc,e[1]*dc))[0]*=fc,e[1]*=fc,e},e};function sl(t,e,n,r,i,a){if(n){var o=vc(e),s=kc(e),c=r*n;null==i?(i=e+r*hc,a=e-c/2):(i=cl(o,i),a=cl(o,a),(r>0?ia)&&(i+=r*hc));for(var u,l=i;r>0?l>a:l1&&e.push(e.pop().concat(e.shift()))},result:function(){var n=e;return e=[],t=null,n}}},hl=function(t,e){return pc(t[0]-e[0])<1e-6&&pc(t[1]-e[1])<1e-6};function fl(t,e,n,r){this.x=t,this.z=e,this.o=n,this.e=r,this.v=!1,this.n=this.p=null}var dl=function(t,e,n,r,i){var a,o,s=[],c=[];if(t.forEach((function(t){if(!((e=t.length-1)<=0)){var e,n,r=t[0],o=t[e];if(hl(r,o)){for(i.lineStart(),a=0;a=0;--a)i.point((l=u[a])[0],l[1]);else r(f.x,f.p.x,-1,i);f=f.p}u=(f=f.o).z,d=!d}while(!f.v);i.lineEnd()}}};function pl(t){if(e=t.length){for(var e,n,r=0,i=t[0];++r=0?1:-1,T=E*w,C=T>cc,A=g*_;if(gl.add(yc(A*E*kc(T),y*k+A*vc(T))),o+=C?w+E*hc:w,C^d>=n^b>=n){var S=Kc(Zc(f),Zc(m));eu(S);var M=Kc(a,S);eu(M);var O=(C^w>=0?-1:1)*Ac(M[2]);(r>O||r===O&&(S[0]||S[1]))&&(s+=C^w>=0?1:-1)}}return(o<-1e-6||o<1e-6&&gl<-1e-6)^1&s},ml=function(t,e,n,r){return function(i){var a,o,s,c=e(i),u=ll(),l=e(u),h=!1,f={point:d,lineStart:g,lineEnd:y,polygonStart:function(){f.point=v,f.lineStart=m,f.lineEnd=b,o=[],a=[]},polygonEnd:function(){f.point=d,f.lineStart=g,f.lineEnd=y,o=F(o);var t=vl(a,r);o.length?(h||(i.polygonStart(),h=!0),dl(o,xl,t,n,i)):t&&(h||(i.polygonStart(),h=!0),i.lineStart(),n(null,null,1,i),i.lineEnd()),h&&(i.polygonEnd(),h=!1),o=a=null},sphere:function(){i.polygonStart(),i.lineStart(),n(null,null,1,i),i.lineEnd(),i.polygonEnd()}};function d(e,n){t(e,n)&&i.point(e,n)}function p(t,e){c.point(t,e)}function g(){f.point=p,c.lineStart()}function y(){f.point=d,c.lineEnd()}function v(t,e){s.push([t,e]),l.point(t,e)}function m(){l.lineStart(),s=[]}function b(){v(s[0][0],s[0][1]),l.lineEnd();var t,e,n,r,c=l.clean(),f=u.result(),d=f.length;if(s.pop(),a.push(s),s=null,d)if(1&c){if((e=(n=f[0]).length-1)>0){for(h||(i.polygonStart(),h=!0),i.lineStart(),t=0;t1&&2&c&&f.push(f.pop().concat(f.shift())),o.push(f.filter(bl))}return f}};function bl(t){return t.length>1}function xl(t,e){return((t=t.x)[0]<0?t[1]-uc-1e-6:uc-t[1])-((e=e.x)[0]<0?e[1]-uc-1e-6:uc-e[1])}var _l=ml((function(){return!0}),(function(t){var e,n=NaN,r=NaN,i=NaN;return{lineStart:function(){t.lineStart(),e=1},point:function(a,o){var s=a>0?cc:-cc,c=pc(a-n);pc(c-cc)<1e-6?(t.point(n,r=(r+o)/2>0?uc:-uc),t.point(i,r),t.lineEnd(),t.lineStart(),t.point(s,r),t.point(a,r),e=0):i!==s&&c>=cc&&(pc(n-i)<1e-6&&(n-=1e-6*i),pc(a-s)<1e-6&&(a-=1e-6*s),r=function(t,e,n,r){var i,a,o=kc(t-n);return pc(o)>1e-6?gc((kc(e)*(a=vc(r))*kc(n)-kc(r)*(i=vc(e))*kc(t))/(i*a*o)):(e+r)/2}(n,r,a,o),t.point(i,r),t.lineEnd(),t.lineStart(),t.point(s,r),e=0),t.point(n=a,r=o),i=s},lineEnd:function(){t.lineEnd(),n=r=NaN},clean:function(){return 2-e}}}),(function(t,e,n,r){var i;if(null==t)i=n*uc,r.point(-cc,i),r.point(0,i),r.point(cc,i),r.point(cc,0),r.point(cc,-i),r.point(0,-i),r.point(-cc,-i),r.point(-cc,0),r.point(-cc,i);else if(pc(t[0]-e[0])>1e-6){var a=t[0]0,i=pc(e)>1e-6;function a(t,n){return vc(t)*vc(n)>e}function o(t,n,r){var i=[1,0,0],a=Kc(Zc(t),Zc(n)),o=Jc(a,a),s=a[0],c=o-s*s;if(!c)return!r&&t;var u=e*o/c,l=-e*s/c,h=Kc(i,a),f=tu(i,u);Qc(f,tu(a,l));var d=h,p=Jc(f,d),g=Jc(d,d),y=p*p-g*(Jc(f,f)-1);if(!(y<0)){var v=Ec(y),m=tu(d,(-p-v)/g);if(Qc(m,f),m=Xc(m),!r)return m;var b,x=t[0],_=n[0],k=t[1],w=n[1];_0^m[1]<(pc(m[0]-x)<1e-6?k:w):k<=m[1]&&m[1]<=w:E>cc^(x<=m[0]&&m[0]<=_)){var C=tu(d,(-p+v)/g);return Qc(C,f),[m,Xc(C)]}}}function s(e,n){var i=r?t:cc-t,a=0;return e<-i?a|=1:e>i&&(a|=2),n<-i?a|=4:n>i&&(a|=8),a}return ml(a,(function(t){var e,n,c,u,l;return{lineStart:function(){u=c=!1,l=1},point:function(h,f){var d,p=[h,f],g=a(h,f),y=r?g?0:s(h,f):g?s(h+(h<0?cc:-cc),f):0;if(!e&&(u=c=g)&&t.lineStart(),g!==c&&(!(d=o(e,p))||hl(e,d)||hl(p,d))&&(p[0]+=1e-6,p[1]+=1e-6,g=a(p[0],p[1])),g!==c)l=0,g?(t.lineStart(),d=o(p,e),t.point(d[0],d[1])):(d=o(e,p),t.point(d[0],d[1]),t.lineEnd()),e=d;else if(i&&e&&r^g){var v;y&n||!(v=o(p,e,!0))||(l=0,r?(t.lineStart(),t.point(v[0][0],v[0][1]),t.point(v[1][0],v[1][1]),t.lineEnd()):(t.point(v[1][0],v[1][1]),t.lineEnd(),t.lineStart(),t.point(v[0][0],v[0][1])))}!g||e&&hl(e,p)||t.point(p[0],p[1]),e=p,c=g,n=y},lineEnd:function(){c&&t.lineEnd(),e=null},clean:function(){return l|(u&&c)<<1}}}),(function(e,r,i,a){sl(a,t,n,i,e,r)}),r?[0,-t]:[-cc,t-cc])};function wl(t,e,n,r){function i(i,a){return t<=i&&i<=n&&e<=a&&a<=r}function a(i,a,s,u){var l=0,h=0;if(null==i||(l=o(i,s))!==(h=o(a,s))||c(i,a)<0^s>0)do{u.point(0===l||3===l?t:n,l>1?r:e)}while((l=(l+s+4)%4)!==h);else u.point(a[0],a[1])}function o(r,i){return pc(r[0]-t)<1e-6?i>0?0:3:pc(r[0]-n)<1e-6?i>0?2:1:pc(r[1]-e)<1e-6?i>0?1:0:i>0?3:2}function s(t,e){return c(t.x,e.x)}function c(t,e){var n=o(t,1),r=o(e,1);return n!==r?n-r:0===n?e[1]-t[1]:1===n?t[0]-e[0]:2===n?t[1]-e[1]:e[0]-t[0]}return function(o){var c,u,l,h,f,d,p,g,y,v,m,b=o,x=ll(),_={point:k,lineStart:function(){_.point=w,u&&u.push(l=[]),v=!0,y=!1,p=g=NaN},lineEnd:function(){c&&(w(h,f),d&&y&&x.rejoin(),c.push(x.result())),_.point=k,y&&b.lineEnd()},polygonStart:function(){b=x,c=[],u=[],m=!0},polygonEnd:function(){var e=function(){for(var e=0,n=0,i=u.length;nr&&(f-a)*(r-o)>(d-o)*(t-a)&&++e:d<=r&&(f-a)*(r-o)<(d-o)*(t-a)&&--e;return e}(),n=m&&e,i=(c=F(c)).length;(n||i)&&(o.polygonStart(),n&&(o.lineStart(),a(null,null,1,o),o.lineEnd()),i&&dl(c,s,e,a,o),o.polygonEnd()),b=o,c=u=l=null}};function k(t,e){i(t,e)&&b.point(t,e)}function w(a,o){var s=i(a,o);if(u&&l.push([a,o]),v)h=a,f=o,d=s,v=!1,s&&(b.lineStart(),b.point(a,o));else if(s&&y)b.point(a,o);else{var c=[p=Math.max(-1e9,Math.min(1e9,p)),g=Math.max(-1e9,Math.min(1e9,g))],x=[a=Math.max(-1e9,Math.min(1e9,a)),o=Math.max(-1e9,Math.min(1e9,o))];!function(t,e,n,r,i,a){var o,s=t[0],c=t[1],u=0,l=1,h=e[0]-s,f=e[1]-c;if(o=n-s,h||!(o>0)){if(o/=h,h<0){if(o0){if(o>l)return;o>u&&(u=o)}if(o=i-s,h||!(o<0)){if(o/=h,h<0){if(o>l)return;o>u&&(u=o)}else if(h>0){if(o0)){if(o/=f,f<0){if(o0){if(o>l)return;o>u&&(u=o)}if(o=a-c,f||!(o<0)){if(o/=f,f<0){if(o>l)return;o>u&&(u=o)}else if(f>0){if(o0&&(t[0]=s+u*h,t[1]=c+u*f),l<1&&(e[0]=s+l*h,e[1]=c+l*f),!0}}}}}(c,x,t,e,n,r)?s&&(b.lineStart(),b.point(a,o),m=!1):(y||(b.lineStart(),b.point(c[0],c[1])),b.point(x[0],x[1]),s||b.lineEnd(),m=!1)}p=a,g=o,y=s}return _}}var El,Tl,Cl,Al=function(){var t,e,n,r=0,i=0,a=960,o=500;return n={stream:function(n){return t&&e===n?t:t=wl(r,i,a,o)(e=n)},extent:function(s){return arguments.length?(r=+s[0][0],i=+s[0][1],a=+s[1][0],o=+s[1][1],t=e=null,n):[[r,i],[a,o]]}}},Sl=ic(),Ml={sphere:Mc,point:Mc,lineStart:function(){Ml.point=Dl,Ml.lineEnd=Ol},lineEnd:Mc,polygonStart:Mc,polygonEnd:Mc};function Ol(){Ml.point=Ml.lineEnd=Mc}function Dl(t,e){El=t*=dc,Tl=kc(e*=dc),Cl=vc(e),Ml.point=Nl}function Nl(t,e){t*=dc;var n=kc(e*=dc),r=vc(e),i=pc(t-El),a=vc(i),o=r*kc(i),s=Cl*n-Tl*r*a,c=Tl*n+Cl*r*a;Sl.add(yc(Ec(o*o+s*s),c)),El=t,Tl=n,Cl=r}var Bl=function(t){return Sl.reset(),Yc(t,Ml),+Sl},Ll=[null,null],Pl={type:"LineString",coordinates:Ll},Il=function(t,e){return Ll[0]=t,Ll[1]=e,Bl(Pl)},Fl={Feature:function(t,e){return Rl(t.geometry,e)},FeatureCollection:function(t,e){for(var n=t.features,r=-1,i=n.length;++r0&&(i=Il(t[a],t[a-1]))>0&&n<=i&&r<=i&&(n+r-i)*(1-Math.pow((n-r)/i,2))<1e-12*i)return!0;n=r}return!1}function Ul(t,e){return!!vl(t.map($l),Wl(e))}function $l(t){return(t=t.map(Wl)).pop(),t}function Wl(t){return[t[0]*dc,t[1]*dc]}var Hl=function(t,e){return(t&&Fl.hasOwnProperty(t.type)?Fl[t.type]:Rl)(t,e)};function Vl(t,e,n){var r=k(t,e-1e-6,n).concat(e);return function(t){return r.map((function(e){return[t,e]}))}}function Gl(t,e,n){var r=k(t,e-1e-6,n).concat(e);return function(t){return r.map((function(e){return[e,t]}))}}function ql(){var t,e,n,r,i,a,o,s,c,u,l,h,f=10,d=f,p=90,g=360,y=2.5;function v(){return{type:"MultiLineString",coordinates:m()}}function m(){return k(mc(r/p)*p,n,p).map(l).concat(k(mc(s/g)*g,o,g).map(h)).concat(k(mc(e/f)*f,t,f).filter((function(t){return pc(t%p)>1e-6})).map(c)).concat(k(mc(a/d)*d,i,d).filter((function(t){return pc(t%g)>1e-6})).map(u))}return v.lines=function(){return m().map((function(t){return{type:"LineString",coordinates:t}}))},v.outline=function(){return{type:"Polygon",coordinates:[l(r).concat(h(o).slice(1),l(n).reverse().slice(1),h(s).reverse().slice(1))]}},v.extent=function(t){return arguments.length?v.extentMajor(t).extentMinor(t):v.extentMinor()},v.extentMajor=function(t){return arguments.length?(r=+t[0][0],n=+t[1][0],s=+t[0][1],o=+t[1][1],r>n&&(t=r,r=n,n=t),s>o&&(t=s,s=o,o=t),v.precision(y)):[[r,s],[n,o]]},v.extentMinor=function(n){return arguments.length?(e=+n[0][0],t=+n[1][0],a=+n[0][1],i=+n[1][1],e>t&&(n=e,e=t,t=n),a>i&&(n=a,a=i,i=n),v.precision(y)):[[e,a],[t,i]]},v.step=function(t){return arguments.length?v.stepMajor(t).stepMinor(t):v.stepMinor()},v.stepMajor=function(t){return arguments.length?(p=+t[0],g=+t[1],v):[p,g]},v.stepMinor=function(t){return arguments.length?(f=+t[0],d=+t[1],v):[f,d]},v.precision=function(f){return arguments.length?(y=+f,c=Vl(a,i,90),u=Gl(e,t,y),l=Vl(s,o,90),h=Gl(r,n,y),v):y},v.extentMajor([[-180,-89.999999],[180,89.999999]]).extentMinor([[-180,-80.000001],[180,80.000001]])}function Xl(){return ql()()}var Zl,Jl,Kl,Ql,th=function(t,e){var n=t[0]*dc,r=t[1]*dc,i=e[0]*dc,a=e[1]*dc,o=vc(r),s=kc(r),c=vc(a),u=kc(a),l=o*vc(n),h=o*kc(n),f=c*vc(i),d=c*kc(i),p=2*Ac(Ec(Sc(a-r)+o*c*Sc(i-n))),g=kc(p),y=p?function(t){var e=kc(t*=p)/g,n=kc(p-t)/g,r=n*l+e*f,i=n*h+e*d,a=n*s+e*u;return[yc(i,r)*fc,yc(a,Ec(r*r+i*i))*fc]}:function(){return[n*fc,r*fc]};return y.distance=p,y},eh=function(t){return t},nh=ic(),rh=ic(),ih={point:Mc,lineStart:Mc,lineEnd:Mc,polygonStart:function(){ih.lineStart=ah,ih.lineEnd=ch},polygonEnd:function(){ih.lineStart=ih.lineEnd=ih.point=Mc,nh.add(pc(rh)),rh.reset()},result:function(){var t=nh/2;return nh.reset(),t}};function ah(){ih.point=oh}function oh(t,e){ih.point=sh,Zl=Kl=t,Jl=Ql=e}function sh(t,e){rh.add(Ql*t-Kl*e),Kl=t,Ql=e}function ch(){sh(Zl,Jl)}var uh,lh,hh,fh,dh=ih,ph=1/0,gh=ph,yh=-ph,vh=yh,mh={point:function(t,e){tyh&&(yh=t),evh&&(vh=e)},lineStart:Mc,lineEnd:Mc,polygonStart:Mc,polygonEnd:Mc,result:function(){var t=[[ph,gh],[yh,vh]];return yh=vh=-(gh=ph=1/0),t}},bh=0,xh=0,_h=0,kh=0,wh=0,Eh=0,Th=0,Ch=0,Ah=0,Sh={point:Mh,lineStart:Oh,lineEnd:Bh,polygonStart:function(){Sh.lineStart=Lh,Sh.lineEnd=Ph},polygonEnd:function(){Sh.point=Mh,Sh.lineStart=Oh,Sh.lineEnd=Bh},result:function(){var t=Ah?[Th/Ah,Ch/Ah]:Eh?[kh/Eh,wh/Eh]:_h?[bh/_h,xh/_h]:[NaN,NaN];return bh=xh=_h=kh=wh=Eh=Th=Ch=Ah=0,t}};function Mh(t,e){bh+=t,xh+=e,++_h}function Oh(){Sh.point=Dh}function Dh(t,e){Sh.point=Nh,Mh(hh=t,fh=e)}function Nh(t,e){var n=t-hh,r=e-fh,i=Ec(n*n+r*r);kh+=i*(hh+t)/2,wh+=i*(fh+e)/2,Eh+=i,Mh(hh=t,fh=e)}function Bh(){Sh.point=Mh}function Lh(){Sh.point=Ih}function Ph(){Fh(uh,lh)}function Ih(t,e){Sh.point=Fh,Mh(uh=hh=t,lh=fh=e)}function Fh(t,e){var n=t-hh,r=e-fh,i=Ec(n*n+r*r);kh+=i*(hh+t)/2,wh+=i*(fh+e)/2,Eh+=i,Th+=(i=fh*t-hh*e)*(hh+t),Ch+=i*(fh+e),Ah+=3*i,Mh(hh=t,fh=e)}var jh=Sh;function Rh(t){this._context=t}Rh.prototype={_radius:4.5,pointRadius:function(t){return this._radius=t,this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){0===this._line&&this._context.closePath(),this._point=NaN},point:function(t,e){switch(this._point){case 0:this._context.moveTo(t,e),this._point=1;break;case 1:this._context.lineTo(t,e);break;default:this._context.moveTo(t+this._radius,e),this._context.arc(t,e,this._radius,0,hc)}},result:Mc};var Yh,zh,Uh,$h,Wh,Hh=ic(),Vh={point:Mc,lineStart:function(){Vh.point=Gh},lineEnd:function(){Yh&&qh(zh,Uh),Vh.point=Mc},polygonStart:function(){Yh=!0},polygonEnd:function(){Yh=null},result:function(){var t=+Hh;return Hh.reset(),t}};function Gh(t,e){Vh.point=qh,zh=$h=t,Uh=Wh=e}function qh(t,e){$h-=t,Wh-=e,Hh.add(Ec($h*$h+Wh*Wh)),$h=t,Wh=e}var Xh=Vh;function Zh(){this._string=[]}function Jh(t){return"m0,"+t+"a"+t+","+t+" 0 1,1 0,"+-2*t+"a"+t+","+t+" 0 1,1 0,"+2*t+"z"}Zh.prototype={_radius:4.5,_circle:Jh(4.5),pointRadius:function(t){return(t=+t)!==this._radius&&(this._radius=t,this._circle=null),this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){0===this._line&&this._string.push("Z"),this._point=NaN},point:function(t,e){switch(this._point){case 0:this._string.push("M",t,",",e),this._point=1;break;case 1:this._string.push("L",t,",",e);break;default:null==this._circle&&(this._circle=Jh(this._radius)),this._string.push("M",t,",",e,this._circle)}},result:function(){if(this._string.length){var t=this._string.join("");return this._string=[],t}return null}};var Kh=function(t,e){var n,r,i=4.5;function a(t){return t&&("function"==typeof i&&r.pointRadius(+i.apply(this,arguments)),Yc(t,n(r))),r.result()}return a.area=function(t){return Yc(t,n(dh)),dh.result()},a.measure=function(t){return Yc(t,n(Xh)),Xh.result()},a.bounds=function(t){return Yc(t,n(mh)),mh.result()},a.centroid=function(t){return Yc(t,n(jh)),jh.result()},a.projection=function(e){return arguments.length?(n=null==e?(t=null,eh):(t=e).stream,a):t},a.context=function(t){return arguments.length?(r=null==t?(e=null,new Zh):new Rh(e=t),"function"!=typeof i&&r.pointRadius(i),a):e},a.pointRadius=function(t){return arguments.length?(i="function"==typeof t?t:(r.pointRadius(+t),+t),a):i},a.projection(t).context(e)},Qh=function(t){return{stream:tf(t)}};function tf(t){return function(e){var n=new ef;for(var r in t)n[r]=t[r];return n.stream=e,n}}function ef(){}function nf(t,e,n){var r=t.clipExtent&&t.clipExtent();return t.scale(150).translate([0,0]),null!=r&&t.clipExtent(null),Yc(n,t.stream(mh)),e(mh.result()),null!=r&&t.clipExtent(r),t}function rf(t,e,n){return nf(t,(function(n){var r=e[1][0]-e[0][0],i=e[1][1]-e[0][1],a=Math.min(r/(n[1][0]-n[0][0]),i/(n[1][1]-n[0][1])),o=+e[0][0]+(r-a*(n[1][0]+n[0][0]))/2,s=+e[0][1]+(i-a*(n[1][1]+n[0][1]))/2;t.scale(150*a).translate([o,s])}),n)}function af(t,e,n){return rf(t,[[0,0],e],n)}function of(t,e,n){return nf(t,(function(n){var r=+e,i=r/(n[1][0]-n[0][0]),a=(r-i*(n[1][0]+n[0][0]))/2,o=-i*n[0][1];t.scale(150*i).translate([a,o])}),n)}function sf(t,e,n){return nf(t,(function(n){var r=+e,i=r/(n[1][1]-n[0][1]),a=-i*n[0][0],o=(r-i*(n[1][1]+n[0][1]))/2;t.scale(150*i).translate([a,o])}),n)}ef.prototype={constructor:ef,point:function(t,e){this.stream.point(t,e)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}};var cf=vc(30*dc),uf=function(t,e){return+e?function(t,e){function n(r,i,a,o,s,c,u,l,h,f,d,p,g,y){var v=u-r,m=l-i,b=v*v+m*m;if(b>4*e&&g--){var x=o+f,_=s+d,k=c+p,w=Ec(x*x+_*_+k*k),E=Ac(k/=w),T=pc(pc(k)-1)<1e-6||pc(a-h)<1e-6?(a+h)/2:yc(_,x),C=t(T,E),A=C[0],S=C[1],M=A-r,O=S-i,D=m*M-v*O;(D*D/b>e||pc((v*M+m*O)/b-.5)>.3||o*f+s*d+c*p2?t[2]%360*dc:0,A()):[y*fc,v*fc,m*fc]},T.angle=function(t){return arguments.length?(b=t%360*dc,A()):b*fc},T.precision=function(t){return arguments.length?(o=uf(s,E=t*t),S()):Ec(E)},T.fitExtent=function(t,e){return rf(T,t,e)},T.fitSize=function(t,e){return af(T,t,e)},T.fitWidth=function(t,e){return of(T,t,e)},T.fitHeight=function(t,e){return sf(T,t,e)},function(){return e=t.apply(this,arguments),T.invert=e.invert&&C,A()}}function gf(t){var e=0,n=cc/3,r=pf(t),i=r(e,n);return i.parallels=function(t){return arguments.length?r(e=t[0]*dc,n=t[1]*dc):[e*fc,n*fc]},i}function yf(t,e){var n=kc(t),r=(n+kc(e))/2;if(pc(r)<1e-6)return function(t){var e=vc(t);function n(t,n){return[t*e,kc(n)/e]}return n.invert=function(t,n){return[t/e,Ac(n*e)]},n}(t);var i=1+n*(2*r-n),a=Ec(i)/r;function o(t,e){var n=Ec(i-2*r*kc(e))/r;return[n*kc(t*=r),a-n*vc(t)]}return o.invert=function(t,e){var n=a-e;return[yc(t,pc(n))/r*wc(n),Ac((i-(t*t+n*n)*r*r)/(2*r))]},o}var vf=function(){return gf(yf).scale(155.424).center([0,33.6442])},mf=function(){return vf().parallels([29.5,45.5]).scale(1070).translate([480,250]).rotate([96,0]).center([-.6,38.7])},bf=function(){var t,e,n,r,i,a,o=mf(),s=vf().rotate([154,0]).center([-2,58.5]).parallels([55,65]),c=vf().rotate([157,0]).center([-3,19.9]).parallels([8,18]),u={point:function(t,e){a=[t,e]}};function l(t){var e=t[0],o=t[1];return a=null,n.point(e,o),a||(r.point(e,o),a)||(i.point(e,o),a)}function h(){return t=e=null,l}return l.invert=function(t){var e=o.scale(),n=o.translate(),r=(t[0]-n[0])/e,i=(t[1]-n[1])/e;return(i>=.12&&i<.234&&r>=-.425&&r<-.214?s:i>=.166&&i<.234&&r>=-.214&&r<-.115?c:o).invert(t)},l.stream=function(n){return t&&e===n?t:(r=[o.stream(e=n),s.stream(n),c.stream(n)],i=r.length,t={point:function(t,e){for(var n=-1;++n0?e<1e-6-uc&&(e=1e-6-uc):e>uc-1e-6&&(e=uc-1e-6);var n=i/_c(Mf(e),r);return[n*kc(r*t),i-n*vc(r*t)]}return a.invert=function(t,e){var n=i-e,a=wc(r)*Ec(t*t+n*n);return[yc(t,pc(n))/r*wc(n),2*gc(_c(i/a,1/r))-uc]},a}var Df=function(){return gf(Of).scale(109.5).parallels([30,30])};function Nf(t,e){return[t,e]}Nf.invert=Nf;var Bf=function(){return df(Nf).scale(152.63)};function Lf(t,e){var n=vc(t),r=t===e?kc(t):(n-vc(e))/(e-t),i=n/r+t;if(pc(r)<1e-6)return Nf;function a(t,e){var n=i-e,a=r*t;return[n*kc(a),i-n*vc(a)]}return a.invert=function(t,e){var n=i-e;return[yc(t,pc(n))/r*wc(n),i-wc(r)*Ec(t*t+n*n)]},a}var Pf=function(){return gf(Lf).scale(131.154).center([0,13.9389])},If=1.340264,Ff=-.081106,jf=893e-6,Rf=.003796,Yf=Ec(3)/2;function zf(t,e){var n=Ac(Yf*kc(e)),r=n*n,i=r*r*r;return[t*vc(n)/(Yf*(If+3*Ff*r+i*(7*jf+9*Rf*r))),n*(If+Ff*r+i*(jf+Rf*r))]}zf.invert=function(t,e){for(var n,r=e,i=r*r,a=i*i*i,o=0;o<12&&(a=(i=(r-=n=(r*(If+Ff*i+a*(jf+Rf*i))-e)/(If+3*Ff*i+a*(7*jf+9*Rf*i)))*r)*i*i,!(pc(n)<1e-12));++o);return[Yf*t*(If+3*Ff*i+a*(7*jf+9*Rf*i))/vc(r),Ac(kc(r)/Yf)]};var Uf=function(){return df(zf).scale(177.158)};function $f(t,e){var n=vc(e),r=vc(t)*n;return[n*kc(t)/r,kc(e)/r]}$f.invert=_f(gc);var Wf=function(){return df($f).scale(144.049).clipAngle(60)};function Hf(t,e,n,r){return 1===t&&1===e&&0===n&&0===r?eh:tf({point:function(i,a){this.stream.point(i*t+n,a*e+r)}})}var Vf=function(){var t,e,n,r,i,a,o=1,s=0,c=0,u=1,l=1,h=eh,f=null,d=eh;function p(){return r=i=null,a}return a={stream:function(t){return r&&i===t?r:r=h(d(i=t))},postclip:function(r){return arguments.length?(d=r,f=t=e=n=null,p()):d},clipExtent:function(r){return arguments.length?(d=null==r?(f=t=e=n=null,eh):wl(f=+r[0][0],t=+r[0][1],e=+r[1][0],n=+r[1][1]),p()):null==f?null:[[f,t],[e,n]]},scale:function(t){return arguments.length?(h=Hf((o=+t)*u,o*l,s,c),p()):o},translate:function(t){return arguments.length?(h=Hf(o*u,o*l,s=+t[0],c=+t[1]),p()):[s,c]},reflectX:function(t){return arguments.length?(h=Hf(o*(u=t?-1:1),o*l,s,c),p()):u<0},reflectY:function(t){return arguments.length?(h=Hf(o*u,o*(l=t?-1:1),s,c),p()):l<0},fitExtent:function(t,e){return rf(a,t,e)},fitSize:function(t,e){return af(a,t,e)},fitWidth:function(t,e){return of(a,t,e)},fitHeight:function(t,e){return sf(a,t,e)}}};function Gf(t,e){var n=e*e,r=n*n;return[t*(.8707-.131979*n+r*(r*(.003971*n-.001529*r)-.013791)),e*(1.007226+n*(.015085+r*(.028874*n-.044475-.005916*r)))]}Gf.invert=function(t,e){var n,r=e,i=25;do{var a=r*r,o=a*a;r-=n=(r*(1.007226+a*(.015085+o*(.028874*a-.044475-.005916*o)))-e)/(1.007226+a*(.045255+o*(.259866*a-.311325-.005916*11*o)))}while(pc(n)>1e-6&&--i>0);return[t/(.8707+(a=r*r)*(a*(a*a*a*(.003971-.001529*a)-.013791)-.131979)),r]};var qf=function(){return df(Gf).scale(175.295)};function Xf(t,e){return[vc(e)*kc(t),kc(e)]}Xf.invert=_f(Ac);var Zf=function(){return df(Xf).scale(249.5).clipAngle(90.000001)};function Jf(t,e){var n=vc(e),r=1+vc(t)*n;return[n*kc(t)/r,kc(e)/r]}Jf.invert=_f((function(t){return 2*gc(t)}));var Kf=function(){return df(Jf).scale(250).clipAngle(142)};function Qf(t,e){return[xc(Tc((uc+e)/2)),-t]}Qf.invert=function(t,e){return[-e,2*gc(bc(t))-uc]};var td=function(){var t=Sf(Qf),e=t.center,n=t.rotate;return t.center=function(t){return arguments.length?e([-t[1],t[0]]):[(t=e())[1],-t[0]]},t.rotate=function(t){return arguments.length?n([t[0],t[1],t.length>2?t[2]+90:90]):[(t=n())[0],t[1],t[2]-90]},n([0,0,90]).scale(159.155)};function ed(t,e){return t.parent===e.parent?1:2}function nd(t,e){return t+e.x}function rd(t,e){return Math.max(t,e.y)}var id=function(){var t=ed,e=1,n=1,r=!1;function i(i){var a,o=0;i.eachAfter((function(e){var n=e.children;n?(e.x=function(t){return t.reduce(nd,0)/t.length}(n),e.y=function(t){return 1+t.reduce(rd,0)}(n)):(e.x=a?o+=t(e,a):0,e.y=0,a=e)}));var s=function(t){for(var e;e=t.children;)t=e[0];return t}(i),c=function(t){for(var e;e=t.children;)t=e[e.length-1];return t}(i),u=s.x-t(s,c)/2,l=c.x+t(c,s)/2;return i.eachAfter(r?function(t){t.x=(t.x-i.x)*e,t.y=(i.y-t.y)*n}:function(t){t.x=(t.x-u)/(l-u)*e,t.y=(1-(i.y?t.y/i.y:1))*n})}return i.separation=function(e){return arguments.length?(t=e,i):t},i.size=function(t){return arguments.length?(r=!1,e=+t[0],n=+t[1],i):r?null:[e,n]},i.nodeSize=function(t){return arguments.length?(r=!0,e=+t[0],n=+t[1],i):r?[e,n]:null},i};function ad(t){var e=0,n=t.children,r=n&&n.length;if(r)for(;--r>=0;)e+=n[r].value;else e=1;t.value=e}function od(t,e){var n,r,i,a,o,s=new ld(t),c=+t.value&&(s.value=t.value),u=[s];for(null==e&&(e=sd);n=u.pop();)if(c&&(n.value=+n.data.value),(i=e(n.data))&&(o=i.length))for(n.children=new Array(o),a=o-1;a>=0;--a)u.push(r=n.children[a]=new ld(i[a])),r.parent=n,r.depth=n.depth+1;return s.eachBefore(ud)}function sd(t){return t.children}function cd(t){t.data=t.data.data}function ud(t){var e=0;do{t.height=e}while((t=t.parent)&&t.height<++e)}function ld(t){this.data=t,this.depth=this.height=0,this.parent=null}ld.prototype=od.prototype={constructor:ld,count:function(){return this.eachAfter(ad)},each:function(t){var e,n,r,i,a=this,o=[a];do{for(e=o.reverse(),o=[];a=e.pop();)if(t(a),n=a.children)for(r=0,i=n.length;r=0;--n)i.push(e[n]);return this},sum:function(t){return this.eachAfter((function(e){for(var n=+t(e.data)||0,r=e.children,i=r&&r.length;--i>=0;)n+=r[i].value;e.value=n}))},sort:function(t){return this.eachBefore((function(e){e.children&&e.children.sort(t)}))},path:function(t){for(var e=this,n=function(t,e){if(t===e)return t;var n=t.ancestors(),r=e.ancestors(),i=null;for(t=n.pop(),e=r.pop();t===e;)i=t,t=n.pop(),e=r.pop();return i}(e,t),r=[e];e!==n;)e=e.parent,r.push(e);for(var i=r.length;t!==n;)r.splice(i,0,t),t=t.parent;return r},ancestors:function(){for(var t=this,e=[t];t=t.parent;)e.push(t);return e},descendants:function(){var t=[];return this.each((function(e){t.push(e)})),t},leaves:function(){var t=[];return this.eachBefore((function(e){e.children||t.push(e)})),t},links:function(){var t=this,e=[];return t.each((function(n){n!==t&&e.push({source:n.parent,target:n})})),e},copy:function(){return od(this).eachBefore(cd)}};var hd=Array.prototype.slice,fd=function(t){for(var e,n,r=0,i=(t=function(t){for(var e,n,r=t.length;r;)n=Math.random()*r--|0,e=t[r],t[r]=t[n],t[n]=e;return t}(hd.call(t))).length,a=[];r0&&n*n>r*r+i*i}function yd(t,e){for(var n=0;n(o*=o)?(r=(u+o-i)/(2*u),a=Math.sqrt(Math.max(0,o/u-r*r)),n.x=t.x-r*s-a*c,n.y=t.y-r*c+a*s):(r=(u+i-o)/(2*u),a=Math.sqrt(Math.max(0,i/u-r*r)),n.x=e.x+r*s-a*c,n.y=e.y+r*c+a*s)):(n.x=e.x+n.r,n.y=e.y)}function _d(t,e){var n=t.r+e.r-1e-6,r=e.x-t.x,i=e.y-t.y;return n>0&&n*n>r*r+i*i}function kd(t){var e=t._,n=t.next._,r=e.r+n.r,i=(e.x*n.r+n.x*e.r)/r,a=(e.y*n.r+n.y*e.r)/r;return i*i+a*a}function wd(t){this._=t,this.next=null,this.previous=null}function Ed(t){if(!(i=t.length))return 0;var e,n,r,i,a,o,s,c,u,l,h;if((e=t[0]).x=0,e.y=0,!(i>1))return e.r;if(n=t[1],e.x=-n.r,n.x=e.r,n.y=0,!(i>2))return e.r+n.r;xd(n,e,r=t[2]),e=new wd(e),n=new wd(n),r=new wd(r),e.next=r.previous=n,n.next=e.previous=r,r.next=n.previous=e;t:for(s=3;s0)throw new Error("cycle");return a}return n.id=function(e){return arguments.length?(t=Ad(e),n):t},n.parentId=function(t){return arguments.length?(e=Ad(t),n):e},n};function $d(t,e){return t.parent===e.parent?1:2}function Wd(t){var e=t.children;return e?e[0]:t.t}function Hd(t){var e=t.children;return e?e[e.length-1]:t.t}function Vd(t,e,n){var r=n/(e.i-t.i);e.c-=r,e.s+=n,t.c+=r,e.z+=n,e.m+=n}function Gd(t,e,n){return t.a.parent===e.parent?t.a:n}function qd(t,e){this._=t,this.parent=null,this.children=null,this.A=null,this.a=this,this.z=0,this.m=0,this.c=0,this.s=0,this.t=null,this.i=e}qd.prototype=Object.create(ld.prototype);var Xd=function(){var t=$d,e=1,n=1,r=null;function i(i){var c=function(t){for(var e,n,r,i,a,o=new qd(t,0),s=[o];e=s.pop();)if(r=e._.children)for(e.children=new Array(a=r.length),i=a-1;i>=0;--i)s.push(n=e.children[i]=new qd(r[i],i)),n.parent=e;return(o.parent=new qd(null,0)).children=[o],o}(i);if(c.eachAfter(a),c.parent.m=-c.z,c.eachBefore(o),r)i.eachBefore(s);else{var u=i,l=i,h=i;i.eachBefore((function(t){t.xl.x&&(l=t),t.depth>h.depth&&(h=t)}));var f=u===l?1:t(u,l)/2,d=f-u.x,p=e/(l.x+f+d),g=n/(h.depth||1);i.eachBefore((function(t){t.x=(t.x+d)*p,t.y=t.depth*g}))}return i}function a(e){var n=e.children,r=e.parent.children,i=e.i?r[e.i-1]:null;if(n){!function(t){for(var e,n=0,r=0,i=t.children,a=i.length;--a>=0;)(e=i[a]).z+=n,e.m+=n,n+=e.s+(r+=e.c)}(e);var a=(n[0].z+n[n.length-1].z)/2;i?(e.z=i.z+t(e._,i._),e.m=e.z-a):e.z=a}else i&&(e.z=i.z+t(e._,i._));e.parent.A=function(e,n,r){if(n){for(var i,a=e,o=e,s=n,c=a.parent.children[0],u=a.m,l=o.m,h=s.m,f=c.m;s=Hd(s),a=Wd(a),s&&a;)c=Wd(c),(o=Hd(o)).a=e,(i=s.z+h-a.z-u+t(s._,a._))>0&&(Vd(Gd(s,e,r),e,i),u+=i,l+=i),h+=s.m,u+=a.m,f+=c.m,l+=o.m;s&&!Hd(o)&&(o.t=s,o.m+=h-l),a&&!Wd(c)&&(c.t=a,c.m+=u-f,r=e)}return r}(e,i,e.parent.A||r[0])}function o(t){t._.x=t.z+t.parent.m,t.m+=t.parent.m}function s(t){t.x*=e,t.y=t.depth*n}return i.separation=function(e){return arguments.length?(t=e,i):t},i.size=function(t){return arguments.length?(r=!1,e=+t[0],n=+t[1],i):r?null:[e,n]},i.nodeSize=function(t){return arguments.length?(r=!0,e=+t[0],n=+t[1],i):r?[e,n]:null},i},Zd=function(t,e,n,r,i){for(var a,o=t.children,s=-1,c=o.length,u=t.value&&(i-n)/t.value;++sf&&(f=s),y=l*l*g,(d=Math.max(f/y,y/h))>p){l-=s;break}p=d}v.push(o={value:l,dice:c1?e:1)},n}(Jd),tp=function(){var t=Qd,e=!1,n=1,r=1,i=[0],a=Sd,o=Sd,s=Sd,c=Sd,u=Sd;function l(t){return t.x0=t.y0=0,t.x1=n,t.y1=r,t.eachBefore(h),i=[0],e&&t.eachBefore(Pd),t}function h(e){var n=i[e.depth],r=e.x0+n,l=e.y0+n,h=e.x1-n,f=e.y1-n;h=n-1){var l=s[e];return l.x0=i,l.y0=a,l.x1=o,void(l.y1=c)}for(var h=u[e],f=r/2+h,d=e+1,p=n-1;d>>1;u[g]c-a){var m=(i*v+o*y)/r;t(e,d,y,i,a,m,c),t(d,n,v,m,a,o,c)}else{var b=(a*v+c*y)/r;t(e,d,y,i,a,o,b),t(d,n,v,i,b,o,c)}}(0,c,t.value,e,n,r,i)},np=function(t,e,n,r,i){(1&t.depth?Zd:Id)(t,e,n,r,i)},rp=function t(e){function n(t,n,r,i,a){if((o=t._squarify)&&o.ratio===e)for(var o,s,c,u,l,h=-1,f=o.length,d=t.value;++h1?e:1)},n}(Jd),ip=function(t){var e=t.length;return function(n){return t[Math.max(0,Math.min(e-1,Math.floor(n*e)))]}},ap=function(t,e){var n=un(+t,+e);return function(t){var e=n(t);return e-360*Math.floor(e/360)}},op=function(t,e){return t=+t,e=+e,function(n){return Math.round(t*(1-n)+e*n)}},sp=Math.SQRT2;function cp(t){return((t=Math.exp(t))+1/t)/2}var up=function(t,e){var n,r,i=t[0],a=t[1],o=t[2],s=e[0],c=e[1],u=e[2],l=s-i,h=c-a,f=l*l+h*h;if(f<1e-12)r=Math.log(u/o)/sp,n=function(t){return[i+t*l,a+t*h,o*Math.exp(sp*t*r)]};else{var d=Math.sqrt(f),p=(u*u-o*o+4*f)/(2*o*2*d),g=(u*u-o*o-4*f)/(2*u*2*d),y=Math.log(Math.sqrt(p*p+1)-p),v=Math.log(Math.sqrt(g*g+1)-g);r=(v-y)/sp,n=function(t){var e,n=t*r,s=cp(y),c=o/(2*d)*(s*(e=sp*n+y,((e=Math.exp(2*e))-1)/(e+1))-function(t){return((t=Math.exp(t))-1/t)/2}(y));return[i+c*l,a+c*h,o*s/cp(sp*n+y)]}}return n.duration=1e3*r,n};function lp(t){return function(e,n){var r=t((e=tn(e)).h,(n=tn(n)).h),i=ln(e.s,n.s),a=ln(e.l,n.l),o=ln(e.opacity,n.opacity);return function(t){return e.h=r(t),e.s=i(t),e.l=a(t),e.opacity=o(t),e+""}}}var hp=lp(un),fp=lp(ln);function dp(t,e){var n=ln((t=da(t)).l,(e=da(e)).l),r=ln(t.a,e.a),i=ln(t.b,e.b),a=ln(t.opacity,e.opacity);return function(e){return t.l=n(e),t.a=r(e),t.b=i(e),t.opacity=a(e),t+""}}function pp(t){return function(e,n){var r=t((e=_a(e)).h,(n=_a(n)).h),i=ln(e.c,n.c),a=ln(e.l,n.l),o=ln(e.opacity,n.opacity);return function(t){return e.h=r(t),e.c=i(t),e.l=a(t),e.opacity=o(t),e+""}}}var gp=pp(un),yp=pp(ln);function vp(t){return function e(n){function r(e,r){var i=t((e=Sa(e)).h,(r=Sa(r)).h),a=ln(e.s,r.s),o=ln(e.l,r.l),s=ln(e.opacity,r.opacity);return function(t){return e.h=i(t),e.s=a(t),e.l=o(Math.pow(t,n)),e.opacity=s(t),e+""}}return n=+n,r.gamma=e,r}(1)}var mp=vp(un),bp=vp(ln);function xp(t,e){for(var n=0,r=e.length-1,i=e[0],a=new Array(r<0?0:r);n1&&(e=t[a[o-2]],n=t[a[o-1]],r=t[s],(n[0]-e[0])*(r[1]-e[1])-(n[1]-e[1])*(r[0]-e[0])<=0);)--o;a[o++]=s}return a.slice(0,o)}var Cp=function(t){if((n=t.length)<3)return null;var e,n,r=new Array(n),i=new Array(n);for(e=0;e=0;--e)u.push(t[r[a[e]][2]]);for(e=+s;es!=u>s&&o<(c-n)*(s-r)/(u-r)+n&&(l=!l),c=n,u=r;return l},Sp=function(t){for(var e,n,r=-1,i=t.length,a=t[i-1],o=a[0],s=a[1],c=0;++r1);return t+n*a*Math.sqrt(-2*Math.log(i)/i)}}return n.source=t,n}(Mp),Np=function t(e){function n(){var t=Dp.source(e).apply(this,arguments);return function(){return Math.exp(t())}}return n.source=t,n}(Mp),Bp=function t(e){function n(t){return function(){for(var n=0,r=0;rr&&(e=n,n=r,r=e),function(t){return Math.max(n,Math.min(r,t))}}function Jp(t,e,n){var r=t[0],i=t[1],a=e[0],o=e[1];return i2?Kp:Jp,i=a=null,h}function h(e){return isNaN(e=+e)?n:(i||(i=r(o.map(t),s,c)))(t(u(e)))}return h.invert=function(n){return u(e((a||(a=r(s,o.map(t),kn)))(n)))},h.domain=function(t){return arguments.length?(o=Rp.call(t,Vp),u===qp||(u=Zp(o)),l()):o.slice()},h.range=function(t){return arguments.length?(s=Yp.call(t),l()):s.slice()},h.rangeRound=function(t){return s=Yp.call(t),c=op,l()},h.clamp=function(t){return arguments.length?(u=t?Zp(o):qp,h):u!==qp},h.interpolate=function(t){return arguments.length?(c=t,l()):c},h.unknown=function(t){return arguments.length?(n=t,h):n},function(n,r){return t=n,e=r,l()}}function eg(t,e){return tg()(t,e)}var ng=function(t,e,n,r){var i,a=S(t,e,n);switch((r=Us(null==r?",f":r)).type){case"s":var o=Math.max(Math.abs(t),Math.abs(e));return null!=r.precision||isNaN(i=nc(a,o))||(r.precision=i),Gs(r,o);case"":case"e":case"g":case"p":case"r":null!=r.precision||isNaN(i=rc(a,Math.max(Math.abs(t),Math.abs(e))))||(r.precision=i-("e"===r.type));break;case"f":case"%":null!=r.precision||isNaN(i=ec(a))||(r.precision=i-2*("%"===r.type))}return Vs(r)};function rg(t){var e=t.domain;return t.ticks=function(t){var n=e();return C(n[0],n[n.length-1],null==t?10:t)},t.tickFormat=function(t,n){var r=e();return ng(r[0],r[r.length-1],null==t?10:t,n)},t.nice=function(n){null==n&&(n=10);var r,i=e(),a=0,o=i.length-1,s=i[a],c=i[o];return c0?r=A(s=Math.floor(s/r)*r,c=Math.ceil(c/r)*r,n):r<0&&(r=A(s=Math.ceil(s*r)/r,c=Math.floor(c*r)/r,n)),r>0?(i[a]=Math.floor(s/r)*r,i[o]=Math.ceil(c/r)*r,e(i)):r<0&&(i[a]=Math.ceil(s*r)/r,i[o]=Math.floor(c*r)/r,e(i)),t},t}function ig(){var t=eg(qp,qp);return t.copy=function(){return Qp(t,ig())},Ip.apply(t,arguments),rg(t)}function ag(t){var e;function n(t){return isNaN(t=+t)?e:t}return n.invert=n,n.domain=n.range=function(e){return arguments.length?(t=Rp.call(e,Vp),n):t.slice()},n.unknown=function(t){return arguments.length?(e=t,n):e},n.copy=function(){return ag(t).unknown(e)},t=arguments.length?Rp.call(t,Vp):[0,1],rg(n)}var og=function(t,e){var n,r=0,i=(t=t.slice()).length-1,a=t[r],o=t[i];return o0){for(;fc)break;g.push(h)}}else for(;f=1;--l)if(!((h=u*l)c)break;g.push(h)}}else g=C(f,d,Math.min(d-f,p)).map(n);return r?g.reverse():g},r.tickFormat=function(t,i){if(null==i&&(i=10===a?".0e":","),"function"!=typeof i&&(i=Vs(i)),t===1/0)return i;null==t&&(t=10);var o=Math.max(1,a*t/r.ticks().length);return function(t){var r=t/n(Math.round(e(t)));return r*a0?i[r-1]:e[0],r=r?[i[r-1],n]:[i[o-1],i[o]]},o.unknown=function(e){return arguments.length?(t=e,o):o},o.thresholds=function(){return i.slice()},o.copy=function(){return Cg().domain([e,n]).range(a).unknown(t)},Ip.apply(rg(o),arguments)}function Ag(){var t,e=[.5],n=[0,1],r=1;function i(i){return i<=i?n[c(e,i,0,r)]:t}return i.domain=function(t){return arguments.length?(e=Yp.call(t),r=Math.min(e.length,n.length-1),i):e.slice()},i.range=function(t){return arguments.length?(n=Yp.call(t),r=Math.min(e.length,n.length-1),i):n.slice()},i.invertExtent=function(t){var r=n.indexOf(t);return[e[r-1],e[r]]},i.unknown=function(e){return arguments.length?(t=e,i):t},i.copy=function(){return Ag().domain(e).range(n).unknown(t)},Ip.apply(i,arguments)}var Sg=new Date,Mg=new Date;function Og(t,e,n,r){function i(e){return t(e=0===arguments.length?new Date:new Date(+e)),e}return i.floor=function(e){return t(e=new Date(+e)),e},i.ceil=function(n){return t(n=new Date(n-1)),e(n,1),t(n),n},i.round=function(t){var e=i(t),n=i.ceil(t);return t-e0))return s;do{s.push(o=new Date(+n)),e(n,a),t(n)}while(o=e)for(;t(e),!n(e);)e.setTime(e-1)}),(function(t,r){if(t>=t)if(r<0)for(;++r<=0;)for(;e(t,-1),!n(t););else for(;--r>=0;)for(;e(t,1),!n(t););}))},n&&(i.count=function(e,r){return Sg.setTime(+e),Mg.setTime(+r),t(Sg),t(Mg),Math.floor(n(Sg,Mg))},i.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?i.filter(r?function(e){return r(e)%t==0}:function(e){return i.count(0,e)%t==0}):i:null}),i}var Dg=Og((function(t){t.setMonth(0,1),t.setHours(0,0,0,0)}),(function(t,e){t.setFullYear(t.getFullYear()+e)}),(function(t,e){return e.getFullYear()-t.getFullYear()}),(function(t){return t.getFullYear()}));Dg.every=function(t){return isFinite(t=Math.floor(t))&&t>0?Og((function(e){e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)}),(function(e,n){e.setFullYear(e.getFullYear()+n*t)})):null};var Ng=Dg,Bg=Dg.range,Lg=Og((function(t){t.setDate(1),t.setHours(0,0,0,0)}),(function(t,e){t.setMonth(t.getMonth()+e)}),(function(t,e){return e.getMonth()-t.getMonth()+12*(e.getFullYear()-t.getFullYear())}),(function(t){return t.getMonth()})),Pg=Lg,Ig=Lg.range;function Fg(t){return Og((function(e){e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)}),(function(t,e){t.setDate(t.getDate()+7*e)}),(function(t,e){return(e-t-6e4*(e.getTimezoneOffset()-t.getTimezoneOffset()))/6048e5}))}var jg=Fg(0),Rg=Fg(1),Yg=Fg(2),zg=Fg(3),Ug=Fg(4),$g=Fg(5),Wg=Fg(6),Hg=jg.range,Vg=Rg.range,Gg=Yg.range,qg=zg.range,Xg=Ug.range,Zg=$g.range,Jg=Wg.range,Kg=Og((function(t){t.setHours(0,0,0,0)}),(function(t,e){t.setDate(t.getDate()+e)}),(function(t,e){return(e-t-6e4*(e.getTimezoneOffset()-t.getTimezoneOffset()))/864e5}),(function(t){return t.getDate()-1})),Qg=Kg,ty=Kg.range,ey=Og((function(t){t.setTime(t-t.getMilliseconds()-1e3*t.getSeconds()-6e4*t.getMinutes())}),(function(t,e){t.setTime(+t+36e5*e)}),(function(t,e){return(e-t)/36e5}),(function(t){return t.getHours()})),ny=ey,ry=ey.range,iy=Og((function(t){t.setTime(t-t.getMilliseconds()-1e3*t.getSeconds())}),(function(t,e){t.setTime(+t+6e4*e)}),(function(t,e){return(e-t)/6e4}),(function(t){return t.getMinutes()})),ay=iy,oy=iy.range,sy=Og((function(t){t.setTime(t-t.getMilliseconds())}),(function(t,e){t.setTime(+t+1e3*e)}),(function(t,e){return(e-t)/1e3}),(function(t){return t.getUTCSeconds()})),cy=sy,uy=sy.range,ly=Og((function(){}),(function(t,e){t.setTime(+t+e)}),(function(t,e){return e-t}));ly.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?Og((function(e){e.setTime(Math.floor(e/t)*t)}),(function(e,n){e.setTime(+e+n*t)}),(function(e,n){return(n-e)/t})):ly:null};var hy=ly,fy=ly.range;function dy(t){return Og((function(e){e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCDate(t.getUTCDate()+7*e)}),(function(t,e){return(e-t)/6048e5}))}var py=dy(0),gy=dy(1),yy=dy(2),vy=dy(3),my=dy(4),by=dy(5),xy=dy(6),_y=py.range,ky=gy.range,wy=yy.range,Ey=vy.range,Ty=my.range,Cy=by.range,Ay=xy.range,Sy=Og((function(t){t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCDate(t.getUTCDate()+e)}),(function(t,e){return(e-t)/864e5}),(function(t){return t.getUTCDate()-1})),My=Sy,Oy=Sy.range,Dy=Og((function(t){t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCFullYear(t.getUTCFullYear()+e)}),(function(t,e){return e.getUTCFullYear()-t.getUTCFullYear()}),(function(t){return t.getUTCFullYear()}));Dy.every=function(t){return isFinite(t=Math.floor(t))&&t>0?Og((function(e){e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)}),(function(e,n){e.setUTCFullYear(e.getUTCFullYear()+n*t)})):null};var Ny=Dy,By=Dy.range;function Ly(t){if(0<=t.y&&t.y<100){var e=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return e.setFullYear(t.y),e}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function Py(t){if(0<=t.y&&t.y<100){var e=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return e.setUTCFullYear(t.y),e}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function Iy(t,e,n){return{y:t,m:e,d:n,H:0,M:0,S:0,L:0}}function Fy(t){var e=t.dateTime,n=t.date,r=t.time,i=t.periods,a=t.days,o=t.shortDays,s=t.months,c=t.shortMonths,u=Xy(i),l=Zy(i),h=Xy(a),f=Zy(a),d=Xy(o),p=Zy(o),g=Xy(s),y=Zy(s),v=Xy(c),m=Zy(c),b={a:function(t){return o[t.getDay()]},A:function(t){return a[t.getDay()]},b:function(t){return c[t.getMonth()]},B:function(t){return s[t.getMonth()]},c:null,d:vv,e:vv,f:kv,H:mv,I:bv,j:xv,L:_v,m:wv,M:Ev,p:function(t){return i[+(t.getHours()>=12)]},q:function(t){return 1+~~(t.getMonth()/3)},Q:Kv,s:Qv,S:Tv,u:Cv,U:Av,V:Sv,w:Mv,W:Ov,x:null,X:null,y:Dv,Y:Nv,Z:Bv,"%":Jv},x={a:function(t){return o[t.getUTCDay()]},A:function(t){return a[t.getUTCDay()]},b:function(t){return c[t.getUTCMonth()]},B:function(t){return s[t.getUTCMonth()]},c:null,d:Lv,e:Lv,f:Rv,H:Pv,I:Iv,j:Fv,L:jv,m:Yv,M:zv,p:function(t){return i[+(t.getUTCHours()>=12)]},q:function(t){return 1+~~(t.getUTCMonth()/3)},Q:Kv,s:Qv,S:Uv,u:$v,U:Wv,V:Hv,w:Vv,W:Gv,x:null,X:null,y:qv,Y:Xv,Z:Zv,"%":Jv},_={a:function(t,e,n){var r=d.exec(e.slice(n));return r?(t.w=p[r[0].toLowerCase()],n+r[0].length):-1},A:function(t,e,n){var r=h.exec(e.slice(n));return r?(t.w=f[r[0].toLowerCase()],n+r[0].length):-1},b:function(t,e,n){var r=v.exec(e.slice(n));return r?(t.m=m[r[0].toLowerCase()],n+r[0].length):-1},B:function(t,e,n){var r=g.exec(e.slice(n));return r?(t.m=y[r[0].toLowerCase()],n+r[0].length):-1},c:function(t,n,r){return E(t,e,n,r)},d:sv,e:sv,f:dv,H:uv,I:uv,j:cv,L:fv,m:ov,M:lv,p:function(t,e,n){var r=u.exec(e.slice(n));return r?(t.p=l[r[0].toLowerCase()],n+r[0].length):-1},q:av,Q:gv,s:yv,S:hv,u:Ky,U:Qy,V:tv,w:Jy,W:ev,x:function(t,e,r){return E(t,n,e,r)},X:function(t,e,n){return E(t,r,e,n)},y:rv,Y:nv,Z:iv,"%":pv};function k(t,e){return function(n){var r,i,a,o=[],s=-1,c=0,u=t.length;for(n instanceof Date||(n=new Date(+n));++s53)return null;"w"in a||(a.w=1),"Z"in a?(i=(r=Py(Iy(a.y,0,1))).getUTCDay(),r=i>4||0===i?gy.ceil(r):gy(r),r=My.offset(r,7*(a.V-1)),a.y=r.getUTCFullYear(),a.m=r.getUTCMonth(),a.d=r.getUTCDate()+(a.w+6)%7):(i=(r=Ly(Iy(a.y,0,1))).getDay(),r=i>4||0===i?Rg.ceil(r):Rg(r),r=Qg.offset(r,7*(a.V-1)),a.y=r.getFullYear(),a.m=r.getMonth(),a.d=r.getDate()+(a.w+6)%7)}else("W"in a||"U"in a)&&("w"in a||(a.w="u"in a?a.u%7:"W"in a?1:0),i="Z"in a?Py(Iy(a.y,0,1)).getUTCDay():Ly(Iy(a.y,0,1)).getDay(),a.m=0,a.d="W"in a?(a.w+6)%7+7*a.W-(i+5)%7:a.w+7*a.U-(i+6)%7);return"Z"in a?(a.H+=a.Z/100|0,a.M+=a.Z%100,Py(a)):Ly(a)}}function E(t,e,n,r){for(var i,a,o=0,s=e.length,c=n.length;o=c)return-1;if(37===(i=e.charCodeAt(o++))){if(i=e.charAt(o++),!(a=_[i in $y?e.charAt(o++):i])||(r=a(t,n,r))<0)return-1}else if(i!=n.charCodeAt(r++))return-1}return r}return b.x=k(n,b),b.X=k(r,b),b.c=k(e,b),x.x=k(n,x),x.X=k(r,x),x.c=k(e,x),{format:function(t){var e=k(t+="",b);return e.toString=function(){return t},e},parse:function(t){var e=w(t+="",!1);return e.toString=function(){return t},e},utcFormat:function(t){var e=k(t+="",x);return e.toString=function(){return t},e},utcParse:function(t){var e=w(t+="",!0);return e.toString=function(){return t},e}}}var jy,Ry,Yy,zy,Uy,$y={"-":"",_:" ",0:"0"},Wy=/^\s*\d+/,Hy=/^%/,Vy=/[\\^$*+?|[\]().{}]/g;function Gy(t,e,n){var r=t<0?"-":"",i=(r?-t:t)+"",a=i.length;return r+(a68?1900:2e3),n+r[0].length):-1}function iv(t,e,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(n,n+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function av(t,e,n){var r=Wy.exec(e.slice(n,n+1));return r?(t.q=3*r[0]-3,n+r[0].length):-1}function ov(t,e,n){var r=Wy.exec(e.slice(n,n+2));return r?(t.m=r[0]-1,n+r[0].length):-1}function sv(t,e,n){var r=Wy.exec(e.slice(n,n+2));return r?(t.d=+r[0],n+r[0].length):-1}function cv(t,e,n){var r=Wy.exec(e.slice(n,n+3));return r?(t.m=0,t.d=+r[0],n+r[0].length):-1}function uv(t,e,n){var r=Wy.exec(e.slice(n,n+2));return r?(t.H=+r[0],n+r[0].length):-1}function lv(t,e,n){var r=Wy.exec(e.slice(n,n+2));return r?(t.M=+r[0],n+r[0].length):-1}function hv(t,e,n){var r=Wy.exec(e.slice(n,n+2));return r?(t.S=+r[0],n+r[0].length):-1}function fv(t,e,n){var r=Wy.exec(e.slice(n,n+3));return r?(t.L=+r[0],n+r[0].length):-1}function dv(t,e,n){var r=Wy.exec(e.slice(n,n+6));return r?(t.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function pv(t,e,n){var r=Hy.exec(e.slice(n,n+1));return r?n+r[0].length:-1}function gv(t,e,n){var r=Wy.exec(e.slice(n));return r?(t.Q=+r[0],n+r[0].length):-1}function yv(t,e,n){var r=Wy.exec(e.slice(n));return r?(t.s=+r[0],n+r[0].length):-1}function vv(t,e){return Gy(t.getDate(),e,2)}function mv(t,e){return Gy(t.getHours(),e,2)}function bv(t,e){return Gy(t.getHours()%12||12,e,2)}function xv(t,e){return Gy(1+Qg.count(Ng(t),t),e,3)}function _v(t,e){return Gy(t.getMilliseconds(),e,3)}function kv(t,e){return _v(t,e)+"000"}function wv(t,e){return Gy(t.getMonth()+1,e,2)}function Ev(t,e){return Gy(t.getMinutes(),e,2)}function Tv(t,e){return Gy(t.getSeconds(),e,2)}function Cv(t){var e=t.getDay();return 0===e?7:e}function Av(t,e){return Gy(jg.count(Ng(t)-1,t),e,2)}function Sv(t,e){var n=t.getDay();return t=n>=4||0===n?Ug(t):Ug.ceil(t),Gy(Ug.count(Ng(t),t)+(4===Ng(t).getDay()),e,2)}function Mv(t){return t.getDay()}function Ov(t,e){return Gy(Rg.count(Ng(t)-1,t),e,2)}function Dv(t,e){return Gy(t.getFullYear()%100,e,2)}function Nv(t,e){return Gy(t.getFullYear()%1e4,e,4)}function Bv(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+Gy(e/60|0,"0",2)+Gy(e%60,"0",2)}function Lv(t,e){return Gy(t.getUTCDate(),e,2)}function Pv(t,e){return Gy(t.getUTCHours(),e,2)}function Iv(t,e){return Gy(t.getUTCHours()%12||12,e,2)}function Fv(t,e){return Gy(1+My.count(Ny(t),t),e,3)}function jv(t,e){return Gy(t.getUTCMilliseconds(),e,3)}function Rv(t,e){return jv(t,e)+"000"}function Yv(t,e){return Gy(t.getUTCMonth()+1,e,2)}function zv(t,e){return Gy(t.getUTCMinutes(),e,2)}function Uv(t,e){return Gy(t.getUTCSeconds(),e,2)}function $v(t){var e=t.getUTCDay();return 0===e?7:e}function Wv(t,e){return Gy(py.count(Ny(t)-1,t),e,2)}function Hv(t,e){var n=t.getUTCDay();return t=n>=4||0===n?my(t):my.ceil(t),Gy(my.count(Ny(t),t)+(4===Ny(t).getUTCDay()),e,2)}function Vv(t){return t.getUTCDay()}function Gv(t,e){return Gy(gy.count(Ny(t)-1,t),e,2)}function qv(t,e){return Gy(t.getUTCFullYear()%100,e,2)}function Xv(t,e){return Gy(t.getUTCFullYear()%1e4,e,4)}function Zv(){return"+0000"}function Jv(){return"%"}function Kv(t){return+t}function Qv(t){return Math.floor(+t/1e3)}function tm(t){return jy=Fy(t),Ry=jy.format,Yy=jy.parse,zy=jy.utcFormat,Uy=jy.utcParse,jy}function em(t){return new Date(t)}function nm(t){return t instanceof Date?+t:+new Date(+t)}function rm(t,e,n,r,a,o,s,c,u){var l=eg(qp,qp),h=l.invert,f=l.domain,d=u(".%L"),p=u(":%S"),g=u("%I:%M"),y=u("%I %p"),v=u("%a %d"),m=u("%b %d"),b=u("%B"),x=u("%Y"),_=[[s,1,1e3],[s,5,5e3],[s,15,15e3],[s,30,3e4],[o,1,6e4],[o,5,3e5],[o,15,9e5],[o,30,18e5],[a,1,36e5],[a,3,108e5],[a,6,216e5],[a,12,432e5],[r,1,864e5],[r,2,1728e5],[n,1,6048e5],[e,1,2592e6],[e,3,7776e6],[t,1,31536e6]];function k(i){return(s(i)1)&&(t-=Math.floor(t));var e=Math.abs(t-.5);return Hb.h=360*t-100,Hb.s=1.5-1.5*e,Hb.l=.8-.9*e,Hb+""},Gb=Ge(),qb=Math.PI/3,Xb=2*Math.PI/3,Zb=function(t){var e;return t=(.5-t)*Math.PI,Gb.r=255*(e=Math.sin(t))*e,Gb.g=255*(e=Math.sin(t+qb))*e,Gb.b=255*(e=Math.sin(t+Xb))*e,Gb+""},Jb=function(t){return t=Math.max(0,Math.min(1,t)),"rgb("+Math.max(0,Math.min(255,Math.round(34.61+t*(1172.33-t*(10793.56-t*(33300.12-t*(38394.49-14825.05*t)))))))+", "+Math.max(0,Math.min(255,Math.round(23.31+t*(557.33+t*(1225.33-t*(3574.96-t*(1073.77+707.56*t)))))))+", "+Math.max(0,Math.min(255,Math.round(27.2+t*(3211.1-t*(15327.97-t*(27814-t*(22569.18-6838.66*t)))))))+")"};function Kb(t){var e=t.length;return function(n){return t[Math.max(0,Math.min(e-1,Math.floor(n*e)))]}}var Qb=Kb(Mm("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725")),tx=Kb(Mm("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf")),ex=Kb(Mm("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4")),nx=Kb(Mm("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921")),rx=function(t){return ke(ne(t).call(document.documentElement))},ix=0;function ax(){return new ox}function ox(){this._="@"+(++ix).toString(36)}ox.prototype=ax.prototype={constructor:ox,get:function(t){for(var e=this._;!(e in t);)if(!(t=t.parentNode))return;return t[e]},set:function(t,e){return t[this._]=e},remove:function(t){return this._ in t&&delete t[this._]},toString:function(){return this._}};var sx=function(t){return"string"==typeof t?new be([document.querySelectorAll(t)],[document.documentElement]):new be([null==t?[]:t],me)},cx=function(t,e){null==e&&(e=Sn().touches);for(var n=0,r=e?e.length:0,i=new Array(r);n1?0:t<-1?vx:Math.acos(t)}function _x(t){return t>=1?mx:t<=-1?-mx:Math.asin(t)}function kx(t){return t.innerRadius}function wx(t){return t.outerRadius}function Ex(t){return t.startAngle}function Tx(t){return t.endAngle}function Cx(t){return t&&t.padAngle}function Ax(t,e,n,r,i,a,o,s){var c=n-t,u=r-e,l=o-i,h=s-a,f=h*c-l*u;if(!(f*f<1e-12))return[t+(f=(l*(e-a)-h*(t-i))/f)*c,e+f*u]}function Sx(t,e,n,r,i,a,o){var s=t-n,c=e-r,u=(o?a:-a)/yx(s*s+c*c),l=u*c,h=-u*s,f=t+l,d=e+h,p=n+l,g=r+h,y=(f+p)/2,v=(d+g)/2,m=p-f,b=g-d,x=m*m+b*b,_=i-a,k=f*g-p*d,w=(b<0?-1:1)*yx(dx(0,_*_*x-k*k)),E=(k*b-m*w)/x,T=(-k*m-b*w)/x,C=(k*b+m*w)/x,A=(-k*m+b*w)/x,S=E-y,M=T-v,O=C-y,D=A-v;return S*S+M*M>O*O+D*D&&(E=C,T=A),{cx:E,cy:T,x01:-l,y01:-h,x11:E*(i/_-1),y11:T*(i/_-1)}}var Mx=function(){var t=kx,e=wx,n=ux(0),r=null,i=Ex,a=Tx,o=Cx,s=null;function c(){var c,u,l=+t.apply(this,arguments),h=+e.apply(this,arguments),f=i.apply(this,arguments)-mx,d=a.apply(this,arguments)-mx,p=lx(d-f),g=d>f;if(s||(s=c=zi()),h1e-12)if(p>bx-1e-12)s.moveTo(h*fx(f),h*gx(f)),s.arc(0,0,h,f,d,!g),l>1e-12&&(s.moveTo(l*fx(d),l*gx(d)),s.arc(0,0,l,d,f,g));else{var y,v,m=f,b=d,x=f,_=d,k=p,w=p,E=o.apply(this,arguments)/2,T=E>1e-12&&(r?+r.apply(this,arguments):yx(l*l+h*h)),C=px(lx(h-l)/2,+n.apply(this,arguments)),A=C,S=C;if(T>1e-12){var M=_x(T/l*gx(E)),O=_x(T/h*gx(E));(k-=2*M)>1e-12?(x+=M*=g?1:-1,_-=M):(k=0,x=_=(f+d)/2),(w-=2*O)>1e-12?(m+=O*=g?1:-1,b-=O):(w=0,m=b=(f+d)/2)}var D=h*fx(m),N=h*gx(m),B=l*fx(_),L=l*gx(_);if(C>1e-12){var P,I=h*fx(b),F=h*gx(b),j=l*fx(x),R=l*gx(x);if(p1e-12?S>1e-12?(y=Sx(j,R,D,N,h,S,g),v=Sx(I,F,B,L,h,S,g),s.moveTo(y.cx+y.x01,y.cy+y.y01),S1e-12&&k>1e-12?A>1e-12?(y=Sx(B,L,I,F,l,-A,g),v=Sx(D,N,j,R,l,-A,g),s.lineTo(y.cx+y.x01,y.cy+y.y01),A=l;--h)s.point(y[h],v[h]);s.lineEnd(),s.areaEnd()}g&&(y[u]=+t(f,u,c),v[u]=+n(f,u,c),s.point(e?+e(f,u,c):y[u],r?+r(f,u,c):v[u]))}if(d)return s=null,d+""||null}function u(){return Lx().defined(i).curve(o).context(a)}return c.x=function(n){return arguments.length?(t="function"==typeof n?n:ux(+n),e=null,c):t},c.x0=function(e){return arguments.length?(t="function"==typeof e?e:ux(+e),c):t},c.x1=function(t){return arguments.length?(e=null==t?null:"function"==typeof t?t:ux(+t),c):e},c.y=function(t){return arguments.length?(n="function"==typeof t?t:ux(+t),r=null,c):n},c.y0=function(t){return arguments.length?(n="function"==typeof t?t:ux(+t),c):n},c.y1=function(t){return arguments.length?(r=null==t?null:"function"==typeof t?t:ux(+t),c):r},c.lineX0=c.lineY0=function(){return u().x(t).y(n)},c.lineY1=function(){return u().x(t).y(r)},c.lineX1=function(){return u().x(e).y(n)},c.defined=function(t){return arguments.length?(i="function"==typeof t?t:ux(!!t),c):i},c.curve=function(t){return arguments.length?(o=t,null!=a&&(s=o(a)),c):o},c.context=function(t){return arguments.length?(null==t?a=s=null:s=o(a=t),c):a},c},Ix=function(t,e){return et?1:e>=t?0:NaN},Fx=function(t){return t},jx=function(){var t=Fx,e=Ix,n=null,r=ux(0),i=ux(bx),a=ux(0);function o(o){var s,c,u,l,h,f=o.length,d=0,p=new Array(f),g=new Array(f),y=+r.apply(this,arguments),v=Math.min(bx,Math.max(-bx,i.apply(this,arguments)-y)),m=Math.min(Math.abs(v)/f,a.apply(this,arguments)),b=m*(v<0?-1:1);for(s=0;s0&&(d+=h);for(null!=e?p.sort((function(t,n){return e(g[t],g[n])})):null!=n&&p.sort((function(t,e){return n(o[t],o[e])})),s=0,u=d?(v-f*b)/d:0;s0?h*u:0)+b,g[c]={data:o[c],index:s,value:h,startAngle:y,endAngle:l,padAngle:m};return g}return o.value=function(e){return arguments.length?(t="function"==typeof e?e:ux(+e),o):t},o.sortValues=function(t){return arguments.length?(e=t,n=null,o):e},o.sort=function(t){return arguments.length?(n=t,e=null,o):n},o.startAngle=function(t){return arguments.length?(r="function"==typeof t?t:ux(+t),o):r},o.endAngle=function(t){return arguments.length?(i="function"==typeof t?t:ux(+t),o):i},o.padAngle=function(t){return arguments.length?(a="function"==typeof t?t:ux(+t),o):a},o},Rx=zx(Dx);function Yx(t){this._curve=t}function zx(t){function e(e){return new Yx(t(e))}return e._curve=t,e}function Ux(t){var e=t.curve;return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t.curve=function(t){return arguments.length?e(zx(t)):e()._curve},t}Yx.prototype={areaStart:function(){this._curve.areaStart()},areaEnd:function(){this._curve.areaEnd()},lineStart:function(){this._curve.lineStart()},lineEnd:function(){this._curve.lineEnd()},point:function(t,e){this._curve.point(e*Math.sin(t),e*-Math.cos(t))}};var $x=function(){return Ux(Lx().curve(Rx))},Wx=function(){var t=Px().curve(Rx),e=t.curve,n=t.lineX0,r=t.lineX1,i=t.lineY0,a=t.lineY1;return t.angle=t.x,delete t.x,t.startAngle=t.x0,delete t.x0,t.endAngle=t.x1,delete t.x1,t.radius=t.y,delete t.y,t.innerRadius=t.y0,delete t.y0,t.outerRadius=t.y1,delete t.y1,t.lineStartAngle=function(){return Ux(n())},delete t.lineX0,t.lineEndAngle=function(){return Ux(r())},delete t.lineX1,t.lineInnerRadius=function(){return Ux(i())},delete t.lineY0,t.lineOuterRadius=function(){return Ux(a())},delete t.lineY1,t.curve=function(t){return arguments.length?e(zx(t)):e()._curve},t},Hx=function(t,e){return[(e=+e)*Math.cos(t-=Math.PI/2),e*Math.sin(t)]},Vx=Array.prototype.slice;function Gx(t){return t.source}function qx(t){return t.target}function Xx(t){var e=Gx,n=qx,r=Nx,i=Bx,a=null;function o(){var o,s=Vx.call(arguments),c=e.apply(this,s),u=n.apply(this,s);if(a||(a=o=zi()),t(a,+r.apply(this,(s[0]=c,s)),+i.apply(this,s),+r.apply(this,(s[0]=u,s)),+i.apply(this,s)),o)return a=null,o+""||null}return o.source=function(t){return arguments.length?(e=t,o):e},o.target=function(t){return arguments.length?(n=t,o):n},o.x=function(t){return arguments.length?(r="function"==typeof t?t:ux(+t),o):r},o.y=function(t){return arguments.length?(i="function"==typeof t?t:ux(+t),o):i},o.context=function(t){return arguments.length?(a=null==t?null:t,o):a},o}function Zx(t,e,n,r,i){t.moveTo(e,n),t.bezierCurveTo(e=(e+r)/2,n,e,i,r,i)}function Jx(t,e,n,r,i){t.moveTo(e,n),t.bezierCurveTo(e,n=(n+i)/2,r,n,r,i)}function Kx(t,e,n,r,i){var a=Hx(e,n),o=Hx(e,n=(n+i)/2),s=Hx(r,n),c=Hx(r,i);t.moveTo(a[0],a[1]),t.bezierCurveTo(o[0],o[1],s[0],s[1],c[0],c[1])}function Qx(){return Xx(Zx)}function t_(){return Xx(Jx)}function e_(){var t=Xx(Kx);return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t}var n_={draw:function(t,e){var n=Math.sqrt(e/vx);t.moveTo(n,0),t.arc(0,0,n,0,bx)}},r_={draw:function(t,e){var n=Math.sqrt(e/5)/2;t.moveTo(-3*n,-n),t.lineTo(-n,-n),t.lineTo(-n,-3*n),t.lineTo(n,-3*n),t.lineTo(n,-n),t.lineTo(3*n,-n),t.lineTo(3*n,n),t.lineTo(n,n),t.lineTo(n,3*n),t.lineTo(-n,3*n),t.lineTo(-n,n),t.lineTo(-3*n,n),t.closePath()}},i_=Math.sqrt(1/3),a_=2*i_,o_={draw:function(t,e){var n=Math.sqrt(e/a_),r=n*i_;t.moveTo(0,-n),t.lineTo(r,0),t.lineTo(0,n),t.lineTo(-r,0),t.closePath()}},s_=Math.sin(vx/10)/Math.sin(7*vx/10),c_=Math.sin(bx/10)*s_,u_=-Math.cos(bx/10)*s_,l_={draw:function(t,e){var n=Math.sqrt(.8908130915292852*e),r=c_*n,i=u_*n;t.moveTo(0,-n),t.lineTo(r,i);for(var a=1;a<5;++a){var o=bx*a/5,s=Math.cos(o),c=Math.sin(o);t.lineTo(c*n,-s*n),t.lineTo(s*r-c*i,c*r+s*i)}t.closePath()}},h_={draw:function(t,e){var n=Math.sqrt(e),r=-n/2;t.rect(r,r,n,n)}},f_=Math.sqrt(3),d_={draw:function(t,e){var n=-Math.sqrt(e/(3*f_));t.moveTo(0,2*n),t.lineTo(-f_*n,-n),t.lineTo(f_*n,-n),t.closePath()}},p_=Math.sqrt(3)/2,g_=1/Math.sqrt(12),y_=3*(g_/2+1),v_={draw:function(t,e){var n=Math.sqrt(e/y_),r=n/2,i=n*g_,a=r,o=n*g_+n,s=-a,c=o;t.moveTo(r,i),t.lineTo(a,o),t.lineTo(s,c),t.lineTo(-.5*r-p_*i,p_*r+-.5*i),t.lineTo(-.5*a-p_*o,p_*a+-.5*o),t.lineTo(-.5*s-p_*c,p_*s+-.5*c),t.lineTo(-.5*r+p_*i,-.5*i-p_*r),t.lineTo(-.5*a+p_*o,-.5*o-p_*a),t.lineTo(-.5*s+p_*c,-.5*c-p_*s),t.closePath()}},m_=[n_,r_,o_,h_,l_,d_,v_],b_=function(){var t=ux(n_),e=ux(64),n=null;function r(){var r;if(n||(n=r=zi()),t.apply(this,arguments).draw(n,+e.apply(this,arguments)),r)return n=null,r+""||null}return r.type=function(e){return arguments.length?(t="function"==typeof e?e:ux(e),r):t},r.size=function(t){return arguments.length?(e="function"==typeof t?t:ux(+t),r):e},r.context=function(t){return arguments.length?(n=null==t?null:t,r):n},r},x_=function(){};function __(t,e,n){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+n)/6)}function k_(t){this._context=t}k_.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:__(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:__(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};var w_=function(t){return new k_(t)};function E_(t){this._context=t}E_.prototype={areaStart:x_,areaEnd:x_,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x2=t,this._y2=e;break;case 1:this._point=2,this._x3=t,this._y3=e;break;case 2:this._point=3,this._x4=t,this._y4=e,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6);break;default:__(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};var T_=function(t){return new E_(t)};function C_(t){this._context=t}C_.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var n=(this._x0+4*this._x1+t)/6,r=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(n,r):this._context.moveTo(n,r);break;case 3:this._point=4;default:__(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}};var A_=function(t){return new C_(t)};function S_(t,e){this._basis=new k_(t),this._beta=e}S_.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var t=this._x,e=this._y,n=t.length-1;if(n>0)for(var r,i=t[0],a=e[0],o=t[n]-i,s=e[n]-a,c=-1;++c<=n;)r=c/n,this._basis.point(this._beta*t[c]+(1-this._beta)*(i+r*o),this._beta*e[c]+(1-this._beta)*(a+r*s));this._x=this._y=null,this._basis.lineEnd()},point:function(t,e){this._x.push(+t),this._y.push(+e)}};var M_=function t(e){function n(t){return 1===e?new k_(t):new S_(t,e)}return n.beta=function(e){return t(+e)},n}(.85);function O_(t,e,n){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-e),t._y2+t._k*(t._y1-n),t._x2,t._y2)}function D_(t,e){this._context=t,this._k=(1-e)/6}D_.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:O_(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2,this._x1=t,this._y1=e;break;case 2:this._point=3;default:O_(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var N_=function t(e){function n(t){return new D_(t,e)}return n.tension=function(e){return t(+e)},n}(0);function B_(t,e){this._context=t,this._k=(1-e)/6}B_.prototype={areaStart:x_,areaEnd:x_,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:O_(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var L_=function t(e){function n(t){return new B_(t,e)}return n.tension=function(e){return t(+e)},n}(0);function P_(t,e){this._context=t,this._k=(1-e)/6}P_.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:O_(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var I_=function t(e){function n(t){return new P_(t,e)}return n.tension=function(e){return t(+e)},n}(0);function F_(t,e,n){var r=t._x1,i=t._y1,a=t._x2,o=t._y2;if(t._l01_a>1e-12){var s=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,c=3*t._l01_a*(t._l01_a+t._l12_a);r=(r*s-t._x0*t._l12_2a+t._x2*t._l01_2a)/c,i=(i*s-t._y0*t._l12_2a+t._y2*t._l01_2a)/c}if(t._l23_a>1e-12){var u=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,l=3*t._l23_a*(t._l23_a+t._l12_a);a=(a*u+t._x1*t._l23_2a-e*t._l12_2a)/l,o=(o*u+t._y1*t._l23_2a-n*t._l12_2a)/l}t._context.bezierCurveTo(r,i,a,o,t._x2,t._y2)}function j_(t,e){this._context=t,this._alpha=e}j_.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3;default:F_(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var R_=function t(e){function n(t){return e?new j_(t,e):new D_(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function Y_(t,e){this._context=t,this._alpha=e}Y_.prototype={areaStart:x_,areaEnd:x_,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:F_(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var z_=function t(e){function n(t){return e?new Y_(t,e):new B_(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function U_(t,e){this._context=t,this._alpha=e}U_.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var n=this._x2-t,r=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(n*n+r*r,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:F_(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var $_=function t(e){function n(t){return e?new U_(t,e):new P_(t,0)}return n.alpha=function(e){return t(+e)},n}(.5);function W_(t){this._context=t}W_.prototype={areaStart:x_,areaEnd:x_,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(t,e){t=+t,e=+e,this._point?this._context.lineTo(t,e):(this._point=1,this._context.moveTo(t,e))}};var H_=function(t){return new W_(t)};function V_(t){return t<0?-1:1}function G_(t,e,n){var r=t._x1-t._x0,i=e-t._x1,a=(t._y1-t._y0)/(r||i<0&&-0),o=(n-t._y1)/(i||r<0&&-0),s=(a*i+o*r)/(r+i);return(V_(a)+V_(o))*Math.min(Math.abs(a),Math.abs(o),.5*Math.abs(s))||0}function q_(t,e){var n=t._x1-t._x0;return n?(3*(t._y1-t._y0)/n-e)/2:e}function X_(t,e,n){var r=t._x0,i=t._y0,a=t._x1,o=t._y1,s=(a-r)/3;t._context.bezierCurveTo(r+s,i+s*e,a-s,o-s*n,a,o)}function Z_(t){this._context=t}function J_(t){this._context=new K_(t)}function K_(t){this._context=t}function Q_(t){return new Z_(t)}function tk(t){return new J_(t)}function ek(t){this._context=t}function nk(t){var e,n,r=t.length-1,i=new Array(r),a=new Array(r),o=new Array(r);for(i[0]=0,a[0]=2,o[0]=t[0]+2*t[1],e=1;e=0;--e)i[e]=(o[e]-i[e+1])/a[e];for(a[r-1]=(t[r]+i[r-1])/2,e=0;e=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var n=this._x*(1-this._t)+t*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,e)}}this._x=t,this._y=e}};var ak=function(t){return new ik(t,.5)};function ok(t){return new ik(t,0)}function sk(t){return new ik(t,1)}var ck=function(t,e){if((i=t.length)>1)for(var n,r,i,a=1,o=t[e[0]],s=o.length;a=0;)n[e]=e;return n};function lk(t,e){return t[e]}var hk=function(){var t=ux([]),e=uk,n=ck,r=lk;function i(i){var a,o,s=t.apply(this,arguments),c=i.length,u=s.length,l=new Array(u);for(a=0;a0){for(var n,r,i,a=0,o=t[0].length;a0)for(var n,r,i,a,o,s,c=0,u=t[e[0]].length;c0?(r[0]=a,r[1]=a+=i):i<0?(r[1]=o,r[0]=o+=i):(r[0]=0,r[1]=i)},pk=function(t,e){if((n=t.length)>0){for(var n,r=0,i=t[e[0]],a=i.length;r0&&(r=(n=t[e[0]]).length)>0){for(var n,r,i,a=0,o=1;oa&&(a=e,r=n);return r}var mk=function(t){var e=t.map(bk);return uk(t).sort((function(t,n){return e[t]-e[n]}))};function bk(t){for(var e,n=0,r=-1,i=t.length;++r0)){if(a/=f,f<0){if(a0){if(a>h)return;a>l&&(l=a)}if(a=r-c,f||!(a<0)){if(a/=f,f<0){if(a>h)return;a>l&&(l=a)}else if(f>0){if(a0)){if(a/=d,d<0){if(a0){if(a>h)return;a>l&&(l=a)}if(a=i-u,d||!(a<0)){if(a/=d,d<0){if(a>h)return;a>l&&(l=a)}else if(d>0){if(a0||h<1)||(l>0&&(t[0]=[c+l*f,u+l*d]),h<1&&(t[1]=[c+h*f,u+h*d]),!0)}}}}}function Rk(t,e,n,r,i){var a=t[1];if(a)return!0;var o,s,c=t[0],u=t.left,l=t.right,h=u[0],f=u[1],d=l[0],p=l[1],g=(h+d)/2,y=(f+p)/2;if(p===f){if(g=r)return;if(h>d){if(c){if(c[1]>=i)return}else c=[g,n];a=[g,i]}else{if(c){if(c[1]1)if(h>d){if(c){if(c[1]>=i)return}else c=[(n-s)/o,n];a=[(i-s)/o,i]}else{if(c){if(c[1]=r)return}else c=[e,o*e+s];a=[r,o*r+s]}else{if(c){if(c[0]=-sw)){var d=c*c+u*u,p=l*l+h*h,g=(h*d-u*p)/f,y=(c*p-l*d)/f,v=Wk.pop()||new Hk;v.arc=t,v.site=i,v.x=g+o,v.y=(v.cy=y+s)+Math.sqrt(g*g+y*y),t.circle=v;for(var m=null,b=iw._;b;)if(v.yow)s=s.L;else{if(!((i=a-ew(s,o))>ow)){r>-ow?(e=s.P,n=s):i>-ow?(e=s,n=s.N):e=n=s;break}if(!s.R){e=s;break}s=s.R}!function(t){rw[t.index]={site:t,halfedges:[]}}(t);var c=Zk(t);if(nw.insert(e,c),e||n){if(e===n)return Gk(e),n=Zk(e.site),nw.insert(c,n),c.edge=n.edge=Pk(e.site,c.site),Vk(e),void Vk(n);if(n){Gk(e),Gk(n);var u=e.site,l=u[0],h=u[1],f=t[0]-l,d=t[1]-h,p=n.site,g=p[0]-l,y=p[1]-h,v=2*(f*y-d*g),m=f*f+d*d,b=g*g+y*y,x=[(y*m-d*b)/v+l,(f*b-g*m)/v+h];Fk(n.edge,u,p,x),c.edge=Pk(u,t,null,x),n.edge=Pk(t,p,null,x),Vk(e),Vk(n)}else c.edge=Pk(e.site,c.site)}}function tw(t,e){var n=t.site,r=n[0],i=n[1],a=i-e;if(!a)return r;var o=t.P;if(!o)return-1/0;var s=(n=o.site)[0],c=n[1],u=c-e;if(!u)return s;var l=s-r,h=1/a-1/u,f=l/u;return h?(-f+Math.sqrt(f*f-2*h*(l*l/(-2*u)-c+u/2+i-a/2)))/h+r:(r+s)/2}function ew(t,e){var n=t.N;if(n)return tw(n,e);var r=t.site;return r[1]===e?r[0]:1/0}var nw,rw,iw,aw,ow=1e-6,sw=1e-12;function cw(t,e){return e[1]-t[1]||e[0]-t[0]}function uw(t,e){var n,r,i,a=t.sort(cw).pop();for(aw=[],rw=new Array(t.length),nw=new Lk,iw=new Lk;;)if(i=$k,a&&(!i||a[1]ow||Math.abs(i[0][1]-i[1][1])>ow)||delete aw[a]}(o,s,c,u),function(t,e,n,r){var i,a,o,s,c,u,l,h,f,d,p,g,y=rw.length,v=!0;for(i=0;iow||Math.abs(g-f)>ow)&&(c.splice(s,0,aw.push(Ik(o,d,Math.abs(p-t)ow?[t,Math.abs(h-t)ow?[Math.abs(f-r)ow?[n,Math.abs(h-n)ow?[Math.abs(f-e)=s)return null;var c=t-i.site[0],u=e-i.site[1],l=c*c+u*u;do{i=a.cells[r=o],o=null,i.halfedges.forEach((function(n){var r=a.edges[n],s=r.left;if(s!==i.site&&s||(s=r.right)){var c=t-s[0],u=e-s[1],h=c*c+u*u;hr?(r+i)/2:Math.min(0,r)||Math.max(0,i),o>a?(a+o)/2:Math.min(0,a)||Math.max(0,o))}var Ew=function(){var t,e,n=mw,r=bw,i=ww,a=_w,o=kw,s=[0,1/0],c=[[-1/0,-1/0],[1/0,1/0]],u=250,l=up,h=lt("start","zoom","end"),f=0;function d(t){t.property("__zoom",xw).on("wheel.zoom",x).on("mousedown.zoom",_).on("dblclick.zoom",k).filter(o).on("touchstart.zoom",w).on("touchmove.zoom",E).on("touchend.zoom touchcancel.zoom",T).style("touch-action","none").style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}function p(t,e){return(e=Math.max(s[0],Math.min(s[1],e)))===t.k?t:new dw(e,t.x,t.y)}function g(t,e,n){var r=e[0]-n[0]*t.k,i=e[1]-n[1]*t.k;return r===t.x&&i===t.y?t:new dw(t.k,r,i)}function y(t){return[(+t[0][0]+ +t[1][0])/2,(+t[0][1]+ +t[1][1])/2]}function v(t,e,n){t.on("start.zoom",(function(){m(this,arguments).start()})).on("interrupt.zoom end.zoom",(function(){m(this,arguments).end()})).tween("zoom",(function(){var t=this,i=arguments,a=m(t,i),o=r.apply(t,i),s=null==n?y(o):"function"==typeof n?n.apply(t,i):n,c=Math.max(o[1][0]-o[0][0],o[1][1]-o[0][1]),u=t.__zoom,h="function"==typeof e?e.apply(t,i):e,f=l(u.invert(s).concat(c/u.k),h.invert(s).concat(c/h.k));return function(t){if(1===t)t=h;else{var e=f(t),n=c/e[2];t=new dw(n,s[0]-e[0]*n,s[1]-e[1]*n)}a.zoom(null,t)}}))}function m(t,e,n){return!n&&t.__zooming||new b(t,e)}function b(t,e){this.that=t,this.args=e,this.active=0,this.extent=r.apply(t,e),this.taps=0}function x(){if(n.apply(this,arguments)){var t=m(this,arguments),e=this.__zoom,r=Math.max(s[0],Math.min(s[1],e.k*Math.pow(2,a.apply(this,arguments)))),o=Dn(this);if(t.wheel)t.mouse[0][0]===o[0]&&t.mouse[0][1]===o[1]||(t.mouse[1]=e.invert(t.mouse[0]=o)),clearTimeout(t.wheel);else{if(e.k===r)return;t.mouse=[o,e.invert(o)],ar(this),t.start()}vw(),t.wheel=setTimeout(u,150),t.zoom("mouse",i(g(p(e,r),t.mouse[0],t.mouse[1]),t.extent,c))}function u(){t.wheel=null,t.end()}}function _(){if(!e&&n.apply(this,arguments)){var t=m(this,arguments,!0),r=ke(ce.view).on("mousemove.zoom",u,!0).on("mouseup.zoom",l,!0),a=Dn(this),o=ce.clientX,s=ce.clientY;Te(ce.view),yw(),t.mouse=[a,this.__zoom.invert(a)],ar(this),t.start()}function u(){if(vw(),!t.moved){var e=ce.clientX-o,n=ce.clientY-s;t.moved=e*e+n*n>f}t.zoom("mouse",i(g(t.that.__zoom,t.mouse[0]=Dn(t.that),t.mouse[1]),t.extent,c))}function l(){r.on("mousemove.zoom mouseup.zoom",null),Ce(ce.view,t.moved),vw(),t.end()}}function k(){if(n.apply(this,arguments)){var t=this.__zoom,e=Dn(this),a=t.invert(e),o=t.k*(ce.shiftKey?.5:2),s=i(g(p(t,o),e,a),r.apply(this,arguments),c);vw(),u>0?ke(this).transition().duration(u).call(v,s,e):ke(this).call(d.transform,s)}}function w(){if(n.apply(this,arguments)){var e,r,i,a,o=ce.touches,s=o.length,c=m(this,arguments,ce.changedTouches.length===s);for(yw(),r=0;rh&&S.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:v,expected:S})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,v=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},m&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,u,c,g.yy,w[1],i,a].concat(d))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),A=o[n[n.length-2]][n[n.length-1]],n.push(A);break;case 3:return!0}}return!0}},M={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),58;case 1:return this.begin("type_directive"),59;case 2:return this.popState(),this.begin("arg_directive"),14;case 3:return this.popState(),this.popState(),61;case 4:return 60;case 5:return 5;case 6:case 7:case 8:case 9:case 10:break;case 11:return this.begin("ID"),16;case 12:return e.yytext=e.yytext.trim(),this.begin("ALIAS"),48;case 13:return this.popState(),this.popState(),this.begin("LINE"),18;case 14:return this.popState(),this.popState(),5;case 15:return this.begin("LINE"),27;case 16:return this.begin("LINE"),29;case 17:return this.begin("LINE"),30;case 18:return this.begin("LINE"),31;case 19:return this.begin("LINE"),36;case 20:return this.begin("LINE"),33;case 21:return this.begin("LINE"),35;case 22:return this.popState(),19;case 23:return 28;case 24:return 43;case 25:return 44;case 26:return 39;case 27:return 37;case 28:return this.begin("ID"),22;case 29:return this.begin("ID"),23;case 30:return 25;case 31:return 7;case 32:return 21;case 33:return 42;case 34:return 5;case 35:return e.yytext=e.yytext.trim(),48;case 36:return 51;case 37:return 52;case 38:return 49;case 39:return 50;case 40:return 53;case 41:return 54;case 42:return 55;case 43:return 56;case 44:return 57;case 45:return 46;case 46:return 47;case 47:return 5;case 48:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:participant\b)/i,/^(?:[^\->:\n,;]+?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i,/^(?:as\b)/i,/^(?:(?:))/i,/^(?:loop\b)/i,/^(?:rect\b)/i,/^(?:opt\b)/i,/^(?:alt\b)/i,/^(?:else\b)/i,/^(?:par\b)/i,/^(?:and\b)/i,/^(?:(?:[:]?(?:no)?wrap)?[^#\n;]*)/i,/^(?:end\b)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:over\b)/i,/^(?:note\b)/i,/^(?:activate\b)/i,/^(?:deactivate\b)/i,/^(?:title\b)/i,/^(?:sequenceDiagram\b)/i,/^(?:autonumber\b)/i,/^(?:,)/i,/^(?:;)/i,/^(?:[^\+\->:\n,;]+((?!(-x|--x|-\)|--\)))[\-]*[^\+\->:\n,;]+)*)/i,/^(?:->>)/i,/^(?:-->>)/i,/^(?:->)/i,/^(?:-->)/i,/^(?:-[x])/i,/^(?:--[x])/i,/^(?:-[\)])/i,/^(?:--[\)])/i,/^(?::(?:(?:no)?wrap)?[^#\n;]+)/i,/^(?:\+)/i,/^(?:-)/i,/^(?:$)/i,/^(?:.)/i],conditions:{open_directive:{rules:[1,8],inclusive:!1},type_directive:{rules:[2,3,8],inclusive:!1},arg_directive:{rules:[3,4,8],inclusive:!1},ID:{rules:[7,8,12],inclusive:!1},ALIAS:{rules:[7,8,13,14],inclusive:!1},LINE:{rules:[7,8,22],inclusive:!1},INITIAL:{rules:[0,5,6,8,9,10,11,15,16,17,18,19,20,21,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48],inclusive:!0}}};function O(){this.yy={}}return S.lexer=M,O.prototype=S,S.Parser=O,new O}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(19).readFileSync(n(20).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(14),n(7)(t))},function(t,e,n){var r=n(198);t.exports={Graph:r.Graph,json:n(301),alg:n(302),version:r.version}},function(t,e,n){var r;try{r={cloneDeep:n(313),constant:n(86),defaults:n(154),each:n(87),filter:n(128),find:n(314),flatten:n(156),forEach:n(126),forIn:n(319),has:n(93),isUndefined:n(139),last:n(320),map:n(140),mapValues:n(321),max:n(322),merge:n(324),min:n(329),minBy:n(330),now:n(331),pick:n(161),range:n(162),reduce:n(142),sortBy:n(338),uniqueId:n(163),values:n(147),zipObject:n(343)}}catch(t){}r||(r=window._),t.exports=r},function(t,e){var n=Array.isArray;t.exports=n},function(t,e,n){ -/** - * @license - * Copyright (c) 2012-2013 Chris Pettitt - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -t.exports={graphlib:n(311),dagre:n(153),intersect:n(368),render:n(370),util:n(12),version:n(382)}},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,"loaded",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,"id",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},function(t,e,n){"use strict";var r=n(4),i=n(17).Graph;function a(t,e,n,i){var a;do{a=r.uniqueId(i)}while(t.hasNode(a));return n.dummy=e,t.setNode(a,n),a}function o(t){return r.max(r.map(t.nodes(),(function(e){var n=t.node(e).rank;if(!r.isUndefined(n))return n})))}t.exports={addDummyNode:a,simplify:function(t){var e=(new i).setGraph(t.graph());return r.forEach(t.nodes(),(function(n){e.setNode(n,t.node(n))})),r.forEach(t.edges(),(function(n){var r=e.edge(n.v,n.w)||{weight:0,minlen:1},i=t.edge(n);e.setEdge(n.v,n.w,{weight:r.weight+i.weight,minlen:Math.max(r.minlen,i.minlen)})})),e},asNonCompoundGraph:function(t){var e=new i({multigraph:t.isMultigraph()}).setGraph(t.graph());return r.forEach(t.nodes(),(function(n){t.children(n).length||e.setNode(n,t.node(n))})),r.forEach(t.edges(),(function(n){e.setEdge(n,t.edge(n))})),e},successorWeights:function(t){var e=r.map(t.nodes(),(function(e){var n={};return r.forEach(t.outEdges(e),(function(e){n[e.w]=(n[e.w]||0)+t.edge(e).weight})),n}));return r.zipObject(t.nodes(),e)},predecessorWeights:function(t){var e=r.map(t.nodes(),(function(e){var n={};return r.forEach(t.inEdges(e),(function(e){n[e.v]=(n[e.v]||0)+t.edge(e).weight})),n}));return r.zipObject(t.nodes(),e)},intersectRect:function(t,e){var n,r,i=t.x,a=t.y,o=e.x-i,s=e.y-a,c=t.width/2,u=t.height/2;if(!o&&!s)throw new Error("Not possible to find intersection inside of the rectangle");return Math.abs(s)*c>Math.abs(o)*u?(s<0&&(u=-u),n=u*o/s,r=u):(o<0&&(c=-c),n=c,r=c*s/o),{x:i+n,y:a+r}},buildLayerMatrix:function(t){var e=r.map(r.range(o(t)+1),(function(){return[]}));return r.forEach(t.nodes(),(function(n){var i=t.node(n),a=i.rank;r.isUndefined(a)||(e[a][i.order]=n)})),e},normalizeRanks:function(t){var e=r.min(r.map(t.nodes(),(function(e){return t.node(e).rank})));r.forEach(t.nodes(),(function(n){var i=t.node(n);r.has(i,"rank")&&(i.rank-=e)}))},removeEmptyRanks:function(t){var e=r.min(r.map(t.nodes(),(function(e){return t.node(e).rank}))),n=[];r.forEach(t.nodes(),(function(r){var i=t.node(r).rank-e;n[i]||(n[i]=[]),n[i].push(r)}));var i=0,a=t.graph().nodeRankFactor;r.forEach(n,(function(e,n){r.isUndefined(e)&&n%a!=0?--i:i&&r.forEach(e,(function(e){t.node(e).rank+=i}))}))},addBorderNode:function(t,e,n,r){var i={width:0,height:0};return arguments.length>=4&&(i.rank=n,i.order=r),a(t,"border",i,e)},maxRank:o,partition:function(t,e){var n={lhs:[],rhs:[]};return r.forEach(t,(function(t){e(t)?n.lhs.push(t):n.rhs.push(t)})),n},time:function(t,e){var n=r.now();try{return e()}finally{console.log(t+" time: "+(r.now()-n)+"ms")}},notime:function(t,e){return e()}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(173),i=n(174),a=n(175),o={channel:r.default,lang:i.default,unit:a.default};e.default=o},function(t,e,n){var r;try{r={clone:n(199),constant:n(86),each:n(87),filter:n(128),has:n(93),isArray:n(5),isEmpty:n(276),isFunction:n(37),isUndefined:n(139),keys:n(30),map:n(140),reduce:n(142),size:n(279),transform:n(285),union:n(286),values:n(147)}}catch(t){}r||(r=window._),t.exports=r},function(t,e){t.exports=function(t){var e=typeof t;return null!=t&&("object"==e||"function"==e)}},function(t,e,n){var r=n(43);t.exports={isSubgraph:function(t,e){return!!t.children(e).length},edgeToId:function(t){return a(t.v)+":"+a(t.w)+":"+a(t.name)},applyStyle:function(t,e){e&&t.attr("style",e)},applyClass:function(t,e,n){e&&t.attr("class",e).attr("class",n+" "+t.attr("class"))},applyTransition:function(t,e){var n=e.graph();if(r.isPlainObject(n)){var i=n.transition;if(r.isFunction(i))return i(t)}return t}};var i=/:/g;function a(t){return t?String(t).replace(i,"\\:"):""}},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,7],n=[1,6],r=[1,14],i=[1,25],a=[1,28],o=[1,26],s=[1,27],c=[1,29],u=[1,30],l=[1,31],h=[1,32],f=[1,34],d=[1,35],p=[1,36],g=[10,19],y=[1,48],v=[1,49],m=[1,50],b=[1,51],x=[1,52],_=[1,53],k=[10,19,25,32,33,41,44,45,46,47,48,49,54,56],w=[10,19,23,25,32,33,37,41,44,45,46,47,48,49,54,56,71,72,73],E=[10,13,17,19],T=[41,71,72,73],C=[41,48,49,71,72,73],A=[41,44,45,46,47,71,72,73],S=[10,19,25],M=[1,85],O={trace:function(){},yy:{},symbols_:{error:2,start:3,mermaidDoc:4,directive:5,graphConfig:6,openDirective:7,typeDirective:8,closeDirective:9,NEWLINE:10,":":11,argDirective:12,open_directive:13,type_directive:14,arg_directive:15,close_directive:16,CLASS_DIAGRAM:17,statements:18,EOF:19,statement:20,className:21,alphaNumToken:22,GENERICTYPE:23,relationStatement:24,LABEL:25,classStatement:26,methodStatement:27,annotationStatement:28,clickStatement:29,cssClassStatement:30,CLASS:31,STYLE_SEPARATOR:32,STRUCT_START:33,members:34,STRUCT_STOP:35,ANNOTATION_START:36,ANNOTATION_END:37,MEMBER:38,SEPARATOR:39,relation:40,STR:41,relationType:42,lineType:43,AGGREGATION:44,EXTENSION:45,COMPOSITION:46,DEPENDENCY:47,LINE:48,DOTTED_LINE:49,CALLBACK:50,LINK:51,LINK_TARGET:52,CLICK:53,CALLBACK_NAME:54,CALLBACK_ARGS:55,HREF:56,CSSCLASS:57,commentToken:58,textToken:59,graphCodeTokens:60,textNoTagsToken:61,TAGSTART:62,TAGEND:63,"==":64,"--":65,PCT:66,DEFAULT:67,SPACE:68,MINUS:69,keywords:70,UNICODE_TEXT:71,NUM:72,ALPHA:73,$accept:0,$end:1},terminals_:{2:"error",10:"NEWLINE",11:":",13:"open_directive",14:"type_directive",15:"arg_directive",16:"close_directive",17:"CLASS_DIAGRAM",19:"EOF",23:"GENERICTYPE",25:"LABEL",31:"CLASS",32:"STYLE_SEPARATOR",33:"STRUCT_START",35:"STRUCT_STOP",36:"ANNOTATION_START",37:"ANNOTATION_END",38:"MEMBER",39:"SEPARATOR",41:"STR",44:"AGGREGATION",45:"EXTENSION",46:"COMPOSITION",47:"DEPENDENCY",48:"LINE",49:"DOTTED_LINE",50:"CALLBACK",51:"LINK",52:"LINK_TARGET",53:"CLICK",54:"CALLBACK_NAME",55:"CALLBACK_ARGS",56:"HREF",57:"CSSCLASS",60:"graphCodeTokens",62:"TAGSTART",63:"TAGEND",64:"==",65:"--",66:"PCT",67:"DEFAULT",68:"SPACE",69:"MINUS",70:"keywords",71:"UNICODE_TEXT",72:"NUM",73:"ALPHA"},productions_:[0,[3,1],[3,2],[4,1],[5,4],[5,6],[7,1],[8,1],[12,1],[9,1],[6,4],[18,1],[18,2],[18,3],[21,1],[21,2],[21,3],[21,2],[20,1],[20,2],[20,1],[20,1],[20,1],[20,1],[20,1],[20,1],[26,2],[26,4],[26,5],[26,7],[28,4],[34,1],[34,2],[27,1],[27,2],[27,1],[27,1],[24,3],[24,4],[24,4],[24,5],[40,3],[40,2],[40,2],[40,1],[42,1],[42,1],[42,1],[42,1],[43,1],[43,1],[29,3],[29,4],[29,3],[29,4],[29,4],[29,5],[29,3],[29,4],[29,4],[29,5],[29,3],[29,4],[29,4],[29,5],[30,3],[58,1],[58,1],[59,1],[59,1],[59,1],[59,1],[59,1],[59,1],[59,1],[61,1],[61,1],[61,1],[61,1],[22,1],[22,1],[22,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 6:r.parseDirective("%%{","open_directive");break;case 7:r.parseDirective(a[s],"type_directive");break;case 8:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 9:r.parseDirective("}%%","close_directive","class");break;case 14:this.$=a[s];break;case 15:this.$=a[s-1]+a[s];break;case 16:this.$=a[s-2]+"~"+a[s-1]+a[s];break;case 17:this.$=a[s-1]+"~"+a[s];break;case 18:r.addRelation(a[s]);break;case 19:a[s-1].title=r.cleanupLabel(a[s]),r.addRelation(a[s-1]);break;case 26:r.addClass(a[s]);break;case 27:r.addClass(a[s-2]),r.setCssClass(a[s-2],a[s]);break;case 28:r.addClass(a[s-3]),r.addMembers(a[s-3],a[s-1]);break;case 29:r.addClass(a[s-5]),r.setCssClass(a[s-5],a[s-3]),r.addMembers(a[s-5],a[s-1]);break;case 30:r.addAnnotation(a[s],a[s-2]);break;case 31:this.$=[a[s]];break;case 32:a[s].push(a[s-1]),this.$=a[s];break;case 33:break;case 34:r.addMember(a[s-1],r.cleanupLabel(a[s]));break;case 35:case 36:break;case 37:this.$={id1:a[s-2],id2:a[s],relation:a[s-1],relationTitle1:"none",relationTitle2:"none"};break;case 38:this.$={id1:a[s-3],id2:a[s],relation:a[s-1],relationTitle1:a[s-2],relationTitle2:"none"};break;case 39:this.$={id1:a[s-3],id2:a[s],relation:a[s-2],relationTitle1:"none",relationTitle2:a[s-1]};break;case 40:this.$={id1:a[s-4],id2:a[s],relation:a[s-2],relationTitle1:a[s-3],relationTitle2:a[s-1]};break;case 41:this.$={type1:a[s-2],type2:a[s],lineType:a[s-1]};break;case 42:this.$={type1:"none",type2:a[s],lineType:a[s-1]};break;case 43:this.$={type1:a[s-1],type2:"none",lineType:a[s]};break;case 44:this.$={type1:"none",type2:"none",lineType:a[s]};break;case 45:this.$=r.relationType.AGGREGATION;break;case 46:this.$=r.relationType.EXTENSION;break;case 47:this.$=r.relationType.COMPOSITION;break;case 48:this.$=r.relationType.DEPENDENCY;break;case 49:this.$=r.lineType.LINE;break;case 50:this.$=r.lineType.DOTTED_LINE;break;case 51:case 57:this.$=a[s-2],r.setClickEvent(a[s-1],a[s]);break;case 52:case 58:this.$=a[s-3],r.setClickEvent(a[s-2],a[s-1]),r.setTooltip(a[s-2],a[s]);break;case 53:case 61:this.$=a[s-2],r.setLink(a[s-1],a[s]);break;case 54:this.$=a[s-3],r.setLink(a[s-2],a[s-1],a[s]);break;case 55:case 63:this.$=a[s-3],r.setLink(a[s-2],a[s-1]),r.setTooltip(a[s-2],a[s]);break;case 56:case 64:this.$=a[s-4],r.setLink(a[s-3],a[s-2],a[s]),r.setTooltip(a[s-3],a[s-1]);break;case 59:this.$=a[s-3],r.setClickEvent(a[s-2],a[s-1],a[s]);break;case 60:this.$=a[s-4],r.setClickEvent(a[s-3],a[s-2],a[s-1]),r.setTooltip(a[s-3],a[s]);break;case 62:this.$=a[s-3],r.setLink(a[s-2],a[s-1],a[s]);break;case 65:r.setCssClass(a[s-1],a[s])}},table:[{3:1,4:2,5:3,6:4,7:5,13:e,17:n},{1:[3]},{1:[2,1]},{3:8,4:2,5:3,6:4,7:5,13:e,17:n},{1:[2,3]},{8:9,14:[1,10]},{10:[1,11]},{14:[2,6]},{1:[2,2]},{9:12,11:[1,13],16:r},t([11,16],[2,7]),{5:23,7:5,13:e,18:15,20:16,21:24,22:33,24:17,26:18,27:19,28:20,29:21,30:22,31:i,36:a,38:o,39:s,50:c,51:u,53:l,57:h,71:f,72:d,73:p},{10:[1,37]},{12:38,15:[1,39]},{10:[2,9]},{19:[1,40]},{10:[1,41],19:[2,11]},t(g,[2,18],{25:[1,42]}),t(g,[2,20]),t(g,[2,21]),t(g,[2,22]),t(g,[2,23]),t(g,[2,24]),t(g,[2,25]),t(g,[2,33],{40:43,42:46,43:47,25:[1,45],41:[1,44],44:y,45:v,46:m,47:b,48:x,49:_}),{21:54,22:33,71:f,72:d,73:p},t(g,[2,35]),t(g,[2,36]),{22:55,71:f,72:d,73:p},{21:56,22:33,71:f,72:d,73:p},{21:57,22:33,71:f,72:d,73:p},{21:58,22:33,71:f,72:d,73:p},{41:[1,59]},t(k,[2,14],{22:33,21:60,23:[1,61],71:f,72:d,73:p}),t(w,[2,79]),t(w,[2,80]),t(w,[2,81]),t(E,[2,4]),{9:62,16:r},{16:[2,8]},{1:[2,10]},{5:23,7:5,13:e,18:63,19:[2,12],20:16,21:24,22:33,24:17,26:18,27:19,28:20,29:21,30:22,31:i,36:a,38:o,39:s,50:c,51:u,53:l,57:h,71:f,72:d,73:p},t(g,[2,19]),{21:64,22:33,41:[1,65],71:f,72:d,73:p},{40:66,42:46,43:47,44:y,45:v,46:m,47:b,48:x,49:_},t(g,[2,34]),{43:67,48:x,49:_},t(T,[2,44],{42:68,44:y,45:v,46:m,47:b}),t(C,[2,45]),t(C,[2,46]),t(C,[2,47]),t(C,[2,48]),t(A,[2,49]),t(A,[2,50]),t(g,[2,26],{32:[1,69],33:[1,70]}),{37:[1,71]},{41:[1,72]},{41:[1,73]},{54:[1,74],56:[1,75]},{22:76,71:f,72:d,73:p},t(k,[2,15]),t(k,[2,17],{22:33,21:77,71:f,72:d,73:p}),{10:[1,78]},{19:[2,13]},t(S,[2,37]),{21:79,22:33,71:f,72:d,73:p},{21:80,22:33,41:[1,81],71:f,72:d,73:p},t(T,[2,43],{42:82,44:y,45:v,46:m,47:b}),t(T,[2,42]),{22:83,71:f,72:d,73:p},{34:84,38:M},{21:86,22:33,71:f,72:d,73:p},t(g,[2,51],{41:[1,87]}),t(g,[2,53],{41:[1,89],52:[1,88]}),t(g,[2,57],{41:[1,90],55:[1,91]}),t(g,[2,61],{41:[1,93],52:[1,92]}),t(g,[2,65]),t(k,[2,16]),t(E,[2,5]),t(S,[2,39]),t(S,[2,38]),{21:94,22:33,71:f,72:d,73:p},t(T,[2,41]),t(g,[2,27],{33:[1,95]}),{35:[1,96]},{34:97,35:[2,31],38:M},t(g,[2,30]),t(g,[2,52]),t(g,[2,54]),t(g,[2,55],{52:[1,98]}),t(g,[2,58]),t(g,[2,59],{41:[1,99]}),t(g,[2,62]),t(g,[2,63],{52:[1,100]}),t(S,[2,40]),{34:101,38:M},t(g,[2,28]),{35:[2,32]},t(g,[2,56]),t(g,[2,60]),t(g,[2,64]),{35:[1,102]},t(g,[2,29])],defaultActions:{2:[2,1],4:[2,3],7:[2,6],8:[2,2],14:[2,9],39:[2,8],40:[2,10],63:[2,13],97:[2,32]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),g={yy:{}};for(var y in this.yy)Object.prototype.hasOwnProperty.call(this.yy,y)&&(g.yy[y]=this.yy[y]);p.setInput(t,g.yy),g.yy.lexer=p,g.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var v=p.yylloc;a.push(v);var m=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof g.yy.parseError?this.parseError=g.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,_,k,w,E,T,C,A,S,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==x&&(x=b()),w=o[k]&&o[k][x]),void 0===w||!w.length||!w[0]){var O="";for(T in S=[],o[k])this.terminals_[T]&&T>h&&S.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:v,expected:S})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,v=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},m&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,u,c,g.yy,w[1],i,a].concat(d))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),A=o[n[n.length-2]][n[n.length-1]],n.push(A);break;case 3:return!0}}return!0}},D={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),13;case 1:return this.begin("type_directive"),14;case 2:return this.popState(),this.begin("arg_directive"),11;case 3:return this.popState(),this.popState(),16;case 4:return 15;case 5:case 6:break;case 7:return 10;case 8:break;case 9:case 10:return 17;case 11:return this.begin("struct"),33;case 12:return"EOF_IN_STRUCT";case 13:return"OPEN_IN_STRUCT";case 14:return this.popState(),35;case 15:break;case 16:return"MEMBER";case 17:return 31;case 18:return 57;case 19:return 50;case 20:return 51;case 21:return 53;case 22:return 36;case 23:return 37;case 24:this.begin("generic");break;case 25:this.popState();break;case 26:return"GENERICTYPE";case 27:this.begin("string");break;case 28:this.popState();break;case 29:return"STR";case 30:this.begin("href");break;case 31:this.popState();break;case 32:return 56;case 33:this.begin("callback_name");break;case 34:this.popState();break;case 35:this.popState(),this.begin("callback_args");break;case 36:return 54;case 37:this.popState();break;case 38:return 55;case 39:case 40:case 41:case 42:return 52;case 43:case 44:return 45;case 45:case 46:return 47;case 47:return 46;case 48:return 44;case 49:return 48;case 50:return 49;case 51:return 25;case 52:return 32;case 53:return 69;case 54:return"DOT";case 55:return"PLUS";case 56:return 66;case 57:case 58:return"EQUALS";case 59:return 73;case 60:return"PUNCTUATION";case 61:return 72;case 62:return 71;case 63:return 68;case 64:return 19}},rules:[/^(?:%%\{)/,/^(?:((?:(?!\}%%)[^:.])*))/,/^(?::)/,/^(?:\}%%)/,/^(?:((?:(?!\}%%).|\n)*))/,/^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/,/^(?:%%[^\n]*(\r?\n)*)/,/^(?:(\r?\n)+)/,/^(?:\s+)/,/^(?:classDiagram-v2\b)/,/^(?:classDiagram\b)/,/^(?:[{])/,/^(?:$)/,/^(?:[{])/,/^(?:[}])/,/^(?:[\n])/,/^(?:[^{}\n]*)/,/^(?:class\b)/,/^(?:cssClass\b)/,/^(?:callback\b)/,/^(?:link\b)/,/^(?:click\b)/,/^(?:<<)/,/^(?:>>)/,/^(?:[~])/,/^(?:[~])/,/^(?:[^~]*)/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:href[\s]+["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:\s*<\|)/,/^(?:\s*\|>)/,/^(?:\s*>)/,/^(?:\s*<)/,/^(?:\s*\*)/,/^(?:\s*o\b)/,/^(?:--)/,/^(?:\.\.)/,/^(?::{1}[^:\n;]+)/,/^(?::{3})/,/^(?:-)/,/^(?:\.)/,/^(?:\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:\w+)/,/^(?:[!"#$%&'*+,-.`?\\/])/,/^(?:[0-9]+)/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\s)/,/^(?:$)/],conditions:{arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},callback_args:{rules:[37,38],inclusive:!1},callback_name:{rules:[34,35,36],inclusive:!1},href:{rules:[31,32],inclusive:!1},struct:{rules:[12,13,14,15,16],inclusive:!1},generic:{rules:[25,26],inclusive:!1},string:{rules:[28,29],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,17,18,19,20,21,22,23,24,27,30,33,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64],inclusive:!0}}};function N(){this.yy={}}return O.lexer=D,N.prototype=O,O.Parser=N,new N}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(19).readFileSync(n(20).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(14),n(7)(t))},function(t,e){var n,r,i=t.exports={};function a(){throw new Error("setTimeout has not been defined")}function o(){throw new Error("clearTimeout has not been defined")}function s(t){if(n===setTimeout)return setTimeout(t,0);if((n===a||!n)&&setTimeout)return n=setTimeout,setTimeout(t,0);try{return n(t,0)}catch(e){try{return n.call(null,t,0)}catch(e){return n.call(this,t,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:a}catch(t){n=a}try{r="function"==typeof clearTimeout?clearTimeout:o}catch(t){r=o}}();var c,u=[],l=!1,h=-1;function f(){l&&c&&(l=!1,c.length?u=c.concat(u):h=-1,u.length&&d())}function d(){if(!l){var t=s(f);l=!0;for(var e=u.length;e;){for(c=u,u=[];++h1)for(var n=1;n=0;r--){var i=t[r];"."===i?t.splice(r,1):".."===i?(t.splice(r,1),n++):n&&(t.splice(r,1),n--)}if(e)for(;n--;n)t.unshift("..");return t}function r(t,e){if(t.filter)return t.filter(e);for(var n=[],r=0;r=-1&&!i;a--){var o=a>=0?arguments[a]:t.cwd();if("string"!=typeof o)throw new TypeError("Arguments to path.resolve must be strings");o&&(e=o+"/"+e,i="/"===o.charAt(0))}return(i?"/":"")+(e=n(r(e.split("/"),(function(t){return!!t})),!i).join("/"))||"."},e.normalize=function(t){var a=e.isAbsolute(t),o="/"===i(t,-1);return(t=n(r(t.split("/"),(function(t){return!!t})),!a).join("/"))||a||(t="."),t&&o&&(t+="/"),(a?"/":"")+t},e.isAbsolute=function(t){return"/"===t.charAt(0)},e.join=function(){var t=Array.prototype.slice.call(arguments,0);return e.normalize(r(t,(function(t,e){if("string"!=typeof t)throw new TypeError("Arguments to path.join must be strings");return t})).join("/"))},e.relative=function(t,n){function r(t){for(var e=0;e=0&&""===t[n];n--);return e>n?[]:t.slice(e,n-e+1)}t=e.resolve(t).substr(1),n=e.resolve(n).substr(1);for(var i=r(t.split("/")),a=r(n.split("/")),o=Math.min(i.length,a.length),s=o,c=0;c=1;--a)if(47===(e=t.charCodeAt(a))){if(!i){r=a;break}}else i=!1;return-1===r?n?"/":".":n&&1===r?"/":t.slice(0,r)},e.basename=function(t,e){var n=function(t){"string"!=typeof t&&(t+="");var e,n=0,r=-1,i=!0;for(e=t.length-1;e>=0;--e)if(47===t.charCodeAt(e)){if(!i){n=e+1;break}}else-1===r&&(i=!1,r=e+1);return-1===r?"":t.slice(n,r)}(t);return e&&n.substr(-1*e.length)===e&&(n=n.substr(0,n.length-e.length)),n},e.extname=function(t){"string"!=typeof t&&(t+="");for(var e=-1,n=0,r=-1,i=!0,a=0,o=t.length-1;o>=0;--o){var s=t.charCodeAt(o);if(47!==s)-1===r&&(i=!1,r=o+1),46===s?-1===e?e=o:1!==a&&(a=1):-1!==e&&(a=-1);else if(!i){n=o+1;break}}return-1===e||-1===r||0===a||1===a&&e===r-1&&e===n+1?"":t.slice(e,r)};var i="b"==="ab".substr(-1)?function(t,e,n){return t.substr(e,n)}:function(t,e,n){return e<0&&(e=t.length+e),t.substr(e,n)}}).call(this,n(14))},function(t,e){t.exports=function(t){return null!=t&&"object"==typeof t}},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,2],n=[1,3],r=[1,5],i=[1,7],a=[2,5],o=[1,15],s=[1,17],c=[1,19],u=[1,20],l=[1,21],h=[1,22],f=[1,28],d=[1,23],p=[1,24],g=[1,25],y=[1,26],v=[1,29],m=[1,32],b=[1,4,5,14,15,17,19,20,22,23,24,25,26,36,39],x=[1,4,5,12,13,14,15,17,19,20,22,23,24,25,26,36,39],_=[1,4,5,7,14,15,17,19,20,22,23,24,25,26,36,39],k=[4,5,14,15,17,19,20,22,23,24,25,26,36,39],w={trace:function(){},yy:{},symbols_:{error:2,start:3,SPACE:4,NL:5,directive:6,SD:7,document:8,line:9,statement:10,idStatement:11,DESCR:12,"--\x3e":13,HIDE_EMPTY:14,scale:15,WIDTH:16,COMPOSIT_STATE:17,STRUCT_START:18,STRUCT_STOP:19,STATE_DESCR:20,AS:21,ID:22,FORK:23,JOIN:24,CONCURRENT:25,note:26,notePosition:27,NOTE_TEXT:28,openDirective:29,typeDirective:30,closeDirective:31,":":32,argDirective:33,eol:34,";":35,EDGE_STATE:36,left_of:37,right_of:38,open_directive:39,type_directive:40,arg_directive:41,close_directive:42,$accept:0,$end:1},terminals_:{2:"error",4:"SPACE",5:"NL",7:"SD",12:"DESCR",13:"--\x3e",14:"HIDE_EMPTY",15:"scale",16:"WIDTH",17:"COMPOSIT_STATE",18:"STRUCT_START",19:"STRUCT_STOP",20:"STATE_DESCR",21:"AS",22:"ID",23:"FORK",24:"JOIN",25:"CONCURRENT",26:"note",28:"NOTE_TEXT",32:":",35:";",36:"EDGE_STATE",37:"left_of",38:"right_of",39:"open_directive",40:"type_directive",41:"arg_directive",42:"close_directive"},productions_:[0,[3,2],[3,2],[3,2],[3,2],[8,0],[8,2],[9,2],[9,1],[9,1],[10,1],[10,2],[10,3],[10,4],[10,1],[10,2],[10,1],[10,4],[10,3],[10,6],[10,1],[10,1],[10,1],[10,4],[10,4],[10,1],[6,3],[6,5],[34,1],[34,1],[11,1],[11,1],[27,1],[27,1],[29,1],[30,1],[33,1],[31,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 4:return r.setRootDoc(a[s]),a[s];case 5:this.$=[];break;case 6:"nl"!=a[s]&&(a[s-1].push(a[s]),this.$=a[s-1]);break;case 7:case 8:this.$=a[s];break;case 9:this.$="nl";break;case 10:this.$={stmt:"state",id:a[s],type:"default",description:""};break;case 11:this.$={stmt:"state",id:a[s-1],type:"default",description:r.trimColon(a[s])};break;case 12:this.$={stmt:"relation",state1:{stmt:"state",id:a[s-2],type:"default",description:""},state2:{stmt:"state",id:a[s],type:"default",description:""}};break;case 13:this.$={stmt:"relation",state1:{stmt:"state",id:a[s-3],type:"default",description:""},state2:{stmt:"state",id:a[s-1],type:"default",description:""},description:a[s].substr(1).trim()};break;case 17:this.$={stmt:"state",id:a[s-3],type:"default",description:"",doc:a[s-1]};break;case 18:var c=a[s],u=a[s-2].trim();if(a[s].match(":")){var l=a[s].split(":");c=l[0],u=[u,l[1]]}this.$={stmt:"state",id:c,type:"default",description:u};break;case 19:this.$={stmt:"state",id:a[s-3],type:"default",description:a[s-5],doc:a[s-1]};break;case 20:this.$={stmt:"state",id:a[s],type:"fork"};break;case 21:this.$={stmt:"state",id:a[s],type:"join"};break;case 22:this.$={stmt:"state",id:r.getDividerId(),type:"divider"};break;case 23:this.$={stmt:"state",id:a[s-1].trim(),note:{position:a[s-2].trim(),text:a[s].trim()}};break;case 30:case 31:this.$=a[s];break;case 34:r.parseDirective("%%{","open_directive");break;case 35:r.parseDirective(a[s],"type_directive");break;case 36:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 37:r.parseDirective("}%%","close_directive","state")}},table:[{3:1,4:e,5:n,6:4,7:r,29:6,39:i},{1:[3]},{3:8,4:e,5:n,6:4,7:r,29:6,39:i},{3:9,4:e,5:n,6:4,7:r,29:6,39:i},{3:10,4:e,5:n,6:4,7:r,29:6,39:i},t([1,4,5,14,15,17,20,22,23,24,25,26,36,39],a,{8:11}),{30:12,40:[1,13]},{40:[2,34]},{1:[2,1]},{1:[2,2]},{1:[2,3]},{1:[2,4],4:o,5:s,6:27,9:14,10:16,11:18,14:c,15:u,17:l,20:h,22:f,23:d,24:p,25:g,26:y,29:6,36:v,39:i},{31:30,32:[1,31],42:m},t([32,42],[2,35]),t(b,[2,6]),{6:27,10:33,11:18,14:c,15:u,17:l,20:h,22:f,23:d,24:p,25:g,26:y,29:6,36:v,39:i},t(b,[2,8]),t(b,[2,9]),t(b,[2,10],{12:[1,34],13:[1,35]}),t(b,[2,14]),{16:[1,36]},t(b,[2,16],{18:[1,37]}),{21:[1,38]},t(b,[2,20]),t(b,[2,21]),t(b,[2,22]),{27:39,28:[1,40],37:[1,41],38:[1,42]},t(b,[2,25]),t(x,[2,30]),t(x,[2,31]),t(_,[2,26]),{33:43,41:[1,44]},t(_,[2,37]),t(b,[2,7]),t(b,[2,11]),{11:45,22:f,36:v},t(b,[2,15]),t(k,a,{8:46}),{22:[1,47]},{22:[1,48]},{21:[1,49]},{22:[2,32]},{22:[2,33]},{31:50,42:m},{42:[2,36]},t(b,[2,12],{12:[1,51]}),{4:o,5:s,6:27,9:14,10:16,11:18,14:c,15:u,17:l,19:[1,52],20:h,22:f,23:d,24:p,25:g,26:y,29:6,36:v,39:i},t(b,[2,18],{18:[1,53]}),{28:[1,54]},{22:[1,55]},t(_,[2,27]),t(b,[2,13]),t(b,[2,17]),t(k,a,{8:56}),t(b,[2,23]),t(b,[2,24]),{4:o,5:s,6:27,9:14,10:16,11:18,14:c,15:u,17:l,19:[1,57],20:h,22:f,23:d,24:p,25:g,26:y,29:6,36:v,39:i},t(b,[2,19])],defaultActions:{7:[2,34],8:[2,1],9:[2,2],10:[2,3],41:[2,32],42:[2,33],44:[2,36]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),g={yy:{}};for(var y in this.yy)Object.prototype.hasOwnProperty.call(this.yy,y)&&(g.yy[y]=this.yy[y]);p.setInput(t,g.yy),g.yy.lexer=p,g.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var v=p.yylloc;a.push(v);var m=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof g.yy.parseError?this.parseError=g.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,_,k,w,E,T,C,A,S,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==x&&(x=b()),w=o[k]&&o[k][x]),void 0===w||!w.length||!w[0]){var O="";for(T in S=[],o[k])this.terminals_[T]&&T>h&&S.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:v,expected:S})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,v=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},m&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,u,c,g.yy,w[1],i,a].concat(d))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),A=o[n[n.length-2]][n[n.length-1]],n.push(A);break;case 3:return!0}}return!0}},E={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),39;case 1:return this.begin("type_directive"),40;case 2:return this.popState(),this.begin("arg_directive"),32;case 3:return this.popState(),this.popState(),42;case 4:return 41;case 5:break;case 6:console.log("Crap after close");break;case 7:return 5;case 8:case 9:case 10:case 11:break;case 12:return this.pushState("SCALE"),15;case 13:return 16;case 14:this.popState();break;case 15:this.pushState("STATE");break;case 16:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),23;case 17:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),24;case 18:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),23;case 19:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),24;case 20:this.begin("STATE_STRING");break;case 21:return this.popState(),this.pushState("STATE_ID"),"AS";case 22:return this.popState(),"ID";case 23:this.popState();break;case 24:return"STATE_DESCR";case 25:return 17;case 26:this.popState();break;case 27:return this.popState(),this.pushState("struct"),18;case 28:return this.popState(),19;case 29:break;case 30:return this.begin("NOTE"),26;case 31:return this.popState(),this.pushState("NOTE_ID"),37;case 32:return this.popState(),this.pushState("NOTE_ID"),38;case 33:this.popState(),this.pushState("FLOATING_NOTE");break;case 34:return this.popState(),this.pushState("FLOATING_NOTE_ID"),"AS";case 35:break;case 36:return"NOTE_TEXT";case 37:return this.popState(),"ID";case 38:return this.popState(),this.pushState("NOTE_TEXT"),22;case 39:return this.popState(),e.yytext=e.yytext.substr(2).trim(),28;case 40:return this.popState(),e.yytext=e.yytext.slice(0,-8).trim(),28;case 41:case 42:return 7;case 43:return 14;case 44:return 36;case 45:return 22;case 46:return e.yytext=e.yytext.trim(),12;case 47:return 13;case 48:return 25;case 49:return 5;case 50:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:[\s]+)/i,/^(?:((?!\n)\s)+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:scale\s+)/i,/^(?:\d+)/i,/^(?:\s+width\b)/i,/^(?:state\s+)/i,/^(?:.*<>)/i,/^(?:.*<>)/i,/^(?:.*\[\[fork\]\])/i,/^(?:.*\[\[join\]\])/i,/^(?:["])/i,/^(?:\s*as\s+)/i,/^(?:[^\n\{]*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n\s\{]+)/i,/^(?:\n)/i,/^(?:\{)/i,/^(?:\})/i,/^(?:[\n])/i,/^(?:note\s+)/i,/^(?:left of\b)/i,/^(?:right of\b)/i,/^(?:")/i,/^(?:\s*as\s*)/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[^\n]*)/i,/^(?:\s*[^:\n\s\-]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:[\s\S]*?end note\b)/i,/^(?:stateDiagram\s+)/i,/^(?:stateDiagram-v2\s+)/i,/^(?:hide empty description\b)/i,/^(?:\[\*\])/i,/^(?:[^:\n\s\-\{]+)/i,/^(?:\s*:[^:\n;]+)/i,/^(?:-->)/i,/^(?:--)/i,/^(?:$)/i,/^(?:.)/i],conditions:{LINE:{rules:[9,10],inclusive:!1},close_directive:{rules:[9,10],inclusive:!1},arg_directive:{rules:[3,4,9,10],inclusive:!1},type_directive:{rules:[2,3,9,10],inclusive:!1},open_directive:{rules:[1,9,10],inclusive:!1},struct:{rules:[9,10,15,28,29,30,44,45,46,47,48],inclusive:!1},FLOATING_NOTE_ID:{rules:[37],inclusive:!1},FLOATING_NOTE:{rules:[34,35,36],inclusive:!1},NOTE_TEXT:{rules:[39,40],inclusive:!1},NOTE_ID:{rules:[38],inclusive:!1},NOTE:{rules:[31,32,33],inclusive:!1},SCALE:{rules:[13,14],inclusive:!1},ALIAS:{rules:[],inclusive:!1},STATE_ID:{rules:[22],inclusive:!1},STATE_STRING:{rules:[23,24],inclusive:!1},FORK_STATE:{rules:[],inclusive:!1},STATE:{rules:[9,10,16,17,18,19,20,21,25,26,27],inclusive:!1},ID:{rules:[9,10],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,10,11,12,15,27,30,41,42,43,44,45,46,47,49,50],inclusive:!0}}};function T(){this.yy={}}return w.lexer=E,T.prototype=w,w.Parser=T,new T}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(19).readFileSync(n(20).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(14),n(7)(t))},function(t,e,n){(function(t){t.exports=function(){"use strict";var e,r;function i(){return e.apply(null,arguments)}function a(t){return t instanceof Array||"[object Array]"===Object.prototype.toString.call(t)}function o(t){return null!=t&&"[object Object]"===Object.prototype.toString.call(t)}function s(t){return void 0===t}function c(t){return"number"==typeof t||"[object Number]"===Object.prototype.toString.call(t)}function u(t){return t instanceof Date||"[object Date]"===Object.prototype.toString.call(t)}function l(t,e){var n,r=[];for(n=0;n>>0,r=0;ryt(t)?(a=t+1,s-yt(t)):(a=t,s),{year:a,dayOfYear:o}}function Pt(t,e,n){var r,i,a=Bt(t.year(),e,n),o=Math.floor((t.dayOfYear()-a-1)/7)+1;return o<1?r=o+It(i=t.year()-1,e,n):o>It(t.year(),e,n)?(r=o-It(t.year(),e,n),i=t.year()+1):(i=t.year(),r=o),{week:r,year:i}}function It(t,e,n){var r=Bt(t,e,n),i=Bt(t+1,e,n);return(yt(t)-r+i)/7}function Ft(t,e){return t.slice(e,7).concat(t.slice(0,e))}W("w",["ww",2],"wo","week"),W("W",["WW",2],"Wo","isoWeek"),L("week","w"),L("isoWeek","W"),j("week",5),j("isoWeek",5),lt("w",K),lt("ww",K,q),lt("W",K),lt("WW",K,q),gt(["w","ww","W","WW"],(function(t,e,n,r){e[r.substr(0,1)]=w(t)})),W("d",0,"do","day"),W("dd",0,0,(function(t){return this.localeData().weekdaysMin(this,t)})),W("ddd",0,0,(function(t){return this.localeData().weekdaysShort(this,t)})),W("dddd",0,0,(function(t){return this.localeData().weekdays(this,t)})),W("e",0,0,"weekday"),W("E",0,0,"isoWeekday"),L("day","d"),L("weekday","e"),L("isoWeekday","E"),j("day",11),j("weekday",11),j("isoWeekday",11),lt("d",K),lt("e",K),lt("E",K),lt("dd",(function(t,e){return e.weekdaysMinRegex(t)})),lt("ddd",(function(t,e){return e.weekdaysShortRegex(t)})),lt("dddd",(function(t,e){return e.weekdaysRegex(t)})),gt(["dd","ddd","dddd"],(function(t,e,n,r){var i=n._locale.weekdaysParse(t,r,n._strict);null!=i?e.d=i:p(n).invalidWeekday=t})),gt(["d","e","E"],(function(t,e,n,r){e[r]=w(t)}));var jt="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Rt="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),Yt="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),zt=ct,Ut=ct,$t=ct;function Wt(){function t(t,e){return e.length-t.length}var e,n,r,i,a,o=[],s=[],c=[],u=[];for(e=0;e<7;e++)n=d([2e3,1]).day(e),r=this.weekdaysMin(n,""),i=this.weekdaysShort(n,""),a=this.weekdays(n,""),o.push(r),s.push(i),c.push(a),u.push(r),u.push(i),u.push(a);for(o.sort(t),s.sort(t),c.sort(t),u.sort(t),e=0;e<7;e++)s[e]=ft(s[e]),c[e]=ft(c[e]),u[e]=ft(u[e]);this._weekdaysRegex=new RegExp("^("+u.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+c.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+s.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+o.join("|")+")","i")}function Ht(){return this.hours()%12||12}function Vt(t,e){W(t,0,0,(function(){return this.localeData().meridiem(this.hours(),this.minutes(),e)}))}function Gt(t,e){return e._meridiemParse}W("H",["HH",2],0,"hour"),W("h",["hh",2],0,Ht),W("k",["kk",2],0,(function(){return this.hours()||24})),W("hmm",0,0,(function(){return""+Ht.apply(this)+R(this.minutes(),2)})),W("hmmss",0,0,(function(){return""+Ht.apply(this)+R(this.minutes(),2)+R(this.seconds(),2)})),W("Hmm",0,0,(function(){return""+this.hours()+R(this.minutes(),2)})),W("Hmmss",0,0,(function(){return""+this.hours()+R(this.minutes(),2)+R(this.seconds(),2)})),Vt("a",!0),Vt("A",!1),L("hour","h"),j("hour",13),lt("a",Gt),lt("A",Gt),lt("H",K),lt("h",K),lt("k",K),lt("HH",K,q),lt("hh",K,q),lt("kk",K,q),lt("hmm",Q),lt("hmmss",tt),lt("Hmm",Q),lt("Hmmss",tt),pt(["H","HH"],3),pt(["k","kk"],(function(t,e,n){var r=w(t);e[3]=24===r?0:r})),pt(["a","A"],(function(t,e,n){n._isPm=n._locale.isPM(t),n._meridiem=t})),pt(["h","hh"],(function(t,e,n){e[3]=w(t),p(n).bigHour=!0})),pt("hmm",(function(t,e,n){var r=t.length-2;e[3]=w(t.substr(0,r)),e[4]=w(t.substr(r)),p(n).bigHour=!0})),pt("hmmss",(function(t,e,n){var r=t.length-4,i=t.length-2;e[3]=w(t.substr(0,r)),e[4]=w(t.substr(r,2)),e[5]=w(t.substr(i)),p(n).bigHour=!0})),pt("Hmm",(function(t,e,n){var r=t.length-2;e[3]=w(t.substr(0,r)),e[4]=w(t.substr(r))})),pt("Hmmss",(function(t,e,n){var r=t.length-4,i=t.length-2;e[3]=w(t.substr(0,r)),e[4]=w(t.substr(r,2)),e[5]=w(t.substr(i))}));var qt,Xt=xt("Hours",!0),Zt={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:Tt,monthsShort:Ct,week:{dow:0,doy:6},weekdays:jt,weekdaysMin:Yt,weekdaysShort:Rt,meridiemParse:/[ap]\.?m?\.?/i},Jt={},Kt={};function Qt(t){return t?t.toLowerCase().replace("_","-"):t}function te(e){var r=null;if(!Jt[e]&&void 0!==t&&t&&t.exports)try{r=qt._abbr,n(171)("./"+e),ee(r)}catch(e){}return Jt[e]}function ee(t,e){var n;return t&&((n=s(e)?re(t):ne(t,e))?qt=n:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+t+" not found. Did you forget to load it?")),qt._abbr}function ne(t,e){if(null===e)return delete Jt[t],null;var n,r=Zt;if(e.abbr=t,null!=Jt[t])M("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),r=Jt[t]._config;else if(null!=e.parentLocale)if(null!=Jt[e.parentLocale])r=Jt[e.parentLocale]._config;else{if(null==(n=te(e.parentLocale)))return Kt[e.parentLocale]||(Kt[e.parentLocale]=[]),Kt[e.parentLocale].push({name:t,config:e}),null;r=n._config}return Jt[t]=new N(D(r,e)),Kt[t]&&Kt[t].forEach((function(t){ne(t.name,t.config)})),ee(t),Jt[t]}function re(t){var e;if(t&&t._locale&&t._locale._abbr&&(t=t._locale._abbr),!t)return qt;if(!a(t)){if(e=te(t))return e;t=[t]}return function(t){for(var e,n,r,i,a=0;a=e&&E(i,n,!0)>=e-1)break;e--}a++}return qt}(t)}function ie(t){var e,n=t._a;return n&&-2===p(t).overflow&&(e=n[1]<0||11wt(n[0],n[1])?2:n[3]<0||24It(n,a,o)?p(t)._overflowWeeks=!0:null!=c?p(t)._overflowWeekday=!0:(s=Lt(n,r,i,a,o),t._a[0]=s.year,t._dayOfYear=s.dayOfYear)}(t),null!=t._dayOfYear&&(o=ae(t._a[0],r[0]),(t._dayOfYear>yt(o)||0===t._dayOfYear)&&(p(t)._overflowDayOfYear=!0),n=Nt(o,0,t._dayOfYear),t._a[1]=n.getUTCMonth(),t._a[2]=n.getUTCDate()),e=0;e<3&&null==t._a[e];++e)t._a[e]=s[e]=r[e];for(;e<7;e++)t._a[e]=s[e]=null==t._a[e]?2===e?1:0:t._a[e];24===t._a[3]&&0===t._a[4]&&0===t._a[5]&&0===t._a[6]&&(t._nextDay=!0,t._a[3]=0),t._d=(t._useUTC?Nt:function(t,e,n,r,i,a,o){var s;return t<100&&0<=t?(s=new Date(t+400,e,n,r,i,a,o),isFinite(s.getFullYear())&&s.setFullYear(t)):s=new Date(t,e,n,r,i,a,o),s}).apply(null,s),a=t._useUTC?t._d.getUTCDay():t._d.getDay(),null!=t._tzm&&t._d.setUTCMinutes(t._d.getUTCMinutes()-t._tzm),t._nextDay&&(t._a[3]=24),t._w&&void 0!==t._w.d&&t._w.d!==a&&(p(t).weekdayMismatch=!0)}}var se=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,ce=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/,ue=/Z|[+-]\d\d(?::?\d\d)?/,le=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/]],he=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],fe=/^\/?Date\((\-?\d+)/i;function de(t){var e,n,r,i,a,o,s=t._i,c=se.exec(s)||ce.exec(s);if(c){for(p(t).iso=!0,e=0,n=le.length;en.valueOf():n.valueOf()this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},on.isLocal=function(){return!!this.isValid()&&!this._isUTC},on.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},on.isUtc=Be,on.isUTC=Be,on.zoneAbbr=function(){return this._isUTC?"UTC":""},on.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},on.dates=C("dates accessor is deprecated. Use date instead.",Qe),on.months=C("months accessor is deprecated. Use month instead",St),on.years=C("years accessor is deprecated. Use year instead",bt),on.zone=C("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",(function(t,e){return null!=t?("string"!=typeof t&&(t=-t),this.utcOffset(t,e),this):-this.utcOffset()})),on.isDSTShifted=C("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",(function(){if(!s(this._isDSTShifted))return this._isDSTShifted;var t={};if(m(t,this),(t=me(t))._a){var e=t._isUTC?d(t._a):xe(t._a);this._isDSTShifted=this.isValid()&&0h&&S.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:v,expected:S})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,v=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},m&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,u,c,g.yy,w[1],i,a].concat(d))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),A=o[n[n.length-2]][n[n.length-1]],n.push(A);break;case 3:return!0}}return!0}},qt={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),12;case 1:return this.begin("type_directive"),13;case 2:return this.popState(),this.begin("arg_directive"),10;case 3:return this.popState(),this.popState(),15;case 4:return 14;case 5:case 6:break;case 7:this.begin("string");break;case 8:this.popState();break;case 9:return"STR";case 10:return 75;case 11:return 84;case 12:return 76;case 13:return 93;case 14:return 77;case 15:return 78;case 16:this.begin("href");break;case 17:this.popState();break;case 18:return 89;case 19:this.begin("callbackname");break;case 20:this.popState();break;case 21:this.popState(),this.begin("callbackargs");break;case 22:return 87;case 23:this.popState();break;case 24:return 88;case 25:this.begin("click");break;case 26:this.popState();break;case 27:return 79;case 28:case 29:return t.lex.firstGraph()&&this.begin("dir"),24;case 30:return 38;case 31:return 42;case 32:case 33:case 34:case 35:return 90;case 36:return this.popState(),25;case 37:case 38:case 39:case 40:case 41:case 42:case 43:case 44:case 45:case 46:return this.popState(),26;case 47:return 94;case 48:return 102;case 49:return 47;case 50:return 99;case 51:return 46;case 52:return 20;case 53:return 95;case 54:return 113;case 55:case 56:case 57:return 70;case 58:case 59:case 60:return 69;case 61:return 51;case 62:return 52;case 63:return 53;case 64:return 54;case 65:return 55;case 66:return 56;case 67:return 57;case 68:return 58;case 69:return 100;case 70:return 103;case 71:return 114;case 72:return 111;case 73:return 104;case 74:case 75:return 112;case 76:return 105;case 77:return 61;case 78:return 81;case 79:return"SEP";case 80:return 80;case 81:return 98;case 82:return 63;case 83:return 62;case 84:return 65;case 85:return 64;case 86:return 109;case 87:return 110;case 88:return 71;case 89:return 49;case 90:return 50;case 91:return 40;case 92:return 41;case 93:return 59;case 94:return 60;case 95:return 120;case 96:return 21;case 97:return 22;case 98:return 23}},rules:[/^(?:%%\{)/,/^(?:((?:(?!\}%%)[^:.])*))/,/^(?::)/,/^(?:\}%%)/,/^(?:((?:(?!\}%%).|\n)*))/,/^(?:%%(?!\{)[^\n]*)/,/^(?:[^\}]%%[^\n]*)/,/^(?:["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:style\b)/,/^(?:default\b)/,/^(?:linkStyle\b)/,/^(?:interpolate\b)/,/^(?:classDef\b)/,/^(?:class\b)/,/^(?:href[\s]+["])/,/^(?:["])/,/^(?:[^"]*)/,/^(?:call[\s]+)/,/^(?:\([\s]*\))/,/^(?:\()/,/^(?:[^(]*)/,/^(?:\))/,/^(?:[^)]*)/,/^(?:click[\s]+)/,/^(?:[\s\n])/,/^(?:[^\s\n]*)/,/^(?:graph\b)/,/^(?:flowchart\b)/,/^(?:subgraph\b)/,/^(?:end\b\s*)/,/^(?:_self\b)/,/^(?:_blank\b)/,/^(?:_parent\b)/,/^(?:_top\b)/,/^(?:(\r?\n)*\s*\n)/,/^(?:\s*LR\b)/,/^(?:\s*RL\b)/,/^(?:\s*TB\b)/,/^(?:\s*BT\b)/,/^(?:\s*TD\b)/,/^(?:\s*BR\b)/,/^(?:\s*<)/,/^(?:\s*>)/,/^(?:\s*\^)/,/^(?:\s*v\b)/,/^(?:[0-9]+)/,/^(?:#)/,/^(?::::)/,/^(?::)/,/^(?:&)/,/^(?:;)/,/^(?:,)/,/^(?:\*)/,/^(?:\s*[xo<]?--+[-xo>]\s*)/,/^(?:\s*[xo<]?==+[=xo>]\s*)/,/^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/,/^(?:\s*[xo<]?--\s*)/,/^(?:\s*[xo<]?==\s*)/,/^(?:\s*[xo<]?-\.\s*)/,/^(?:\(-)/,/^(?:-\))/,/^(?:\(\[)/,/^(?:\]\))/,/^(?:\[\[)/,/^(?:\]\])/,/^(?:\[\()/,/^(?:\)\])/,/^(?:-)/,/^(?:\.)/,/^(?:[\_])/,/^(?:\+)/,/^(?:%)/,/^(?:=)/,/^(?:=)/,/^(?:<)/,/^(?:>)/,/^(?:\^)/,/^(?:\\\|)/,/^(?:v\b)/,/^(?:[A-Za-z]+)/,/^(?:\\\])/,/^(?:\[\/)/,/^(?:\/\])/,/^(?:\[\\)/,/^(?:[!"#$%&'*+,-.`?\\_/])/,/^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/,/^(?:\|)/,/^(?:\()/,/^(?:\))/,/^(?:\[)/,/^(?:\])/,/^(?:\{)/,/^(?:\})/,/^(?:")/,/^(?:(\r?\n)+)/,/^(?:\s)/,/^(?:$)/],conditions:{close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},callbackargs:{rules:[23,24],inclusive:!1},callbackname:{rules:[20,21,22],inclusive:!1},href:{rules:[17,18],inclusive:!1},click:{rules:[26,27],inclusive:!1},vertex:{rules:[],inclusive:!1},dir:{rules:[36,37,38,39,40,41,42,43,44,45,46],inclusive:!1},string:{rules:[8,9],inclusive:!1},INITIAL:{rules:[0,5,6,7,10,11,12,13,14,15,16,19,25,28,29,30,31,32,33,34,35,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98],inclusive:!0}}};function Xt(){this.yy={}}return Gt.lexer=qt,Xt.prototype=Gt,Gt.Parser=Xt,new Xt}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(19).readFileSync(n(20).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(14),n(7)(t))},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,3],n=[1,5],r=[7,9,11,12,13,14,15,16,17,18,20,27,32],i=[1,15],a=[1,16],o=[1,17],s=[1,18],c=[1,19],u=[1,20],l=[1,21],h=[1,23],f=[1,25],d=[1,28],p=[5,7,9,11,12,13,14,15,16,17,18,20,27,32],g={trace:function(){},yy:{},symbols_:{error:2,start:3,directive:4,gantt:5,document:6,EOF:7,line:8,SPACE:9,statement:10,NL:11,dateFormat:12,inclusiveEndDates:13,axisFormat:14,excludes:15,todayMarker:16,title:17,section:18,clickStatement:19,taskTxt:20,taskData:21,openDirective:22,typeDirective:23,closeDirective:24,":":25,argDirective:26,click:27,callbackname:28,callbackargs:29,href:30,clickStatementDebug:31,open_directive:32,type_directive:33,arg_directive:34,close_directive:35,$accept:0,$end:1},terminals_:{2:"error",5:"gantt",7:"EOF",9:"SPACE",11:"NL",12:"dateFormat",13:"inclusiveEndDates",14:"axisFormat",15:"excludes",16:"todayMarker",17:"title",18:"section",20:"taskTxt",21:"taskData",25:":",27:"click",28:"callbackname",29:"callbackargs",30:"href",32:"open_directive",33:"type_directive",34:"arg_directive",35:"close_directive"},productions_:[0,[3,2],[3,3],[6,0],[6,2],[8,2],[8,1],[8,1],[8,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,1],[10,2],[10,1],[4,4],[4,6],[19,2],[19,3],[19,3],[19,4],[19,3],[19,4],[19,2],[31,2],[31,3],[31,3],[31,4],[31,3],[31,4],[31,2],[22,1],[23,1],[26,1],[24,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 2:return a[s-1];case 3:this.$=[];break;case 4:a[s-1].push(a[s]),this.$=a[s-1];break;case 5:case 6:this.$=a[s];break;case 7:case 8:this.$=[];break;case 9:r.setDateFormat(a[s].substr(11)),this.$=a[s].substr(11);break;case 10:r.enableInclusiveEndDates(),this.$=a[s].substr(18);break;case 11:r.setAxisFormat(a[s].substr(11)),this.$=a[s].substr(11);break;case 12:r.setExcludes(a[s].substr(9)),this.$=a[s].substr(9);break;case 13:r.setTodayMarker(a[s].substr(12)),this.$=a[s].substr(12);break;case 14:r.setTitle(a[s].substr(6)),this.$=a[s].substr(6);break;case 15:r.addSection(a[s].substr(8)),this.$=a[s].substr(8);break;case 17:r.addTask(a[s-1],a[s]),this.$="task";break;case 21:this.$=a[s-1],r.setClickEvent(a[s-1],a[s],null);break;case 22:this.$=a[s-2],r.setClickEvent(a[s-2],a[s-1],a[s]);break;case 23:this.$=a[s-2],r.setClickEvent(a[s-2],a[s-1],null),r.setLink(a[s-2],a[s]);break;case 24:this.$=a[s-3],r.setClickEvent(a[s-3],a[s-2],a[s-1]),r.setLink(a[s-3],a[s]);break;case 25:this.$=a[s-2],r.setClickEvent(a[s-2],a[s],null),r.setLink(a[s-2],a[s-1]);break;case 26:this.$=a[s-3],r.setClickEvent(a[s-3],a[s-1],a[s]),r.setLink(a[s-3],a[s-2]);break;case 27:this.$=a[s-1],r.setLink(a[s-1],a[s]);break;case 28:case 34:this.$=a[s-1]+" "+a[s];break;case 29:case 30:case 32:this.$=a[s-2]+" "+a[s-1]+" "+a[s];break;case 31:case 33:this.$=a[s-3]+" "+a[s-2]+" "+a[s-1]+" "+a[s];break;case 35:r.parseDirective("%%{","open_directive");break;case 36:r.parseDirective(a[s],"type_directive");break;case 37:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 38:r.parseDirective("}%%","close_directive","gantt")}},table:[{3:1,4:2,5:e,22:4,32:n},{1:[3]},{3:6,4:2,5:e,22:4,32:n},t(r,[2,3],{6:7}),{23:8,33:[1,9]},{33:[2,35]},{1:[2,1]},{4:24,7:[1,10],8:11,9:[1,12],10:13,11:[1,14],12:i,13:a,14:o,15:s,16:c,17:u,18:l,19:22,20:h,22:4,27:f,32:n},{24:26,25:[1,27],35:d},t([25,35],[2,36]),t(r,[2,8],{1:[2,2]}),t(r,[2,4]),{4:24,10:29,12:i,13:a,14:o,15:s,16:c,17:u,18:l,19:22,20:h,22:4,27:f,32:n},t(r,[2,6]),t(r,[2,7]),t(r,[2,9]),t(r,[2,10]),t(r,[2,11]),t(r,[2,12]),t(r,[2,13]),t(r,[2,14]),t(r,[2,15]),t(r,[2,16]),{21:[1,30]},t(r,[2,18]),{28:[1,31],30:[1,32]},{11:[1,33]},{26:34,34:[1,35]},{11:[2,38]},t(r,[2,5]),t(r,[2,17]),t(r,[2,21],{29:[1,36],30:[1,37]}),t(r,[2,27],{28:[1,38]}),t(p,[2,19]),{24:39,35:d},{35:[2,37]},t(r,[2,22],{30:[1,40]}),t(r,[2,23]),t(r,[2,25],{29:[1,41]}),{11:[1,42]},t(r,[2,24]),t(r,[2,26]),t(p,[2,20])],defaultActions:{5:[2,35],6:[2,1],28:[2,38],35:[2,37]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),g={yy:{}};for(var y in this.yy)Object.prototype.hasOwnProperty.call(this.yy,y)&&(g.yy[y]=this.yy[y]);p.setInput(t,g.yy),g.yy.lexer=p,g.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var v=p.yylloc;a.push(v);var m=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof g.yy.parseError?this.parseError=g.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,_,k,w,E,T,C,A,S,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==x&&(x=b()),w=o[k]&&o[k][x]),void 0===w||!w.length||!w[0]){var O="";for(T in S=[],o[k])this.terminals_[T]&&T>h&&S.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:v,expected:S})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,v=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},m&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,u,c,g.yy,w[1],i,a].concat(d))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),A=o[n[n.length-2]][n[n.length-1]],n.push(A);break;case 3:return!0}}return!0}},y={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),32;case 1:return this.begin("type_directive"),33;case 2:return this.popState(),this.begin("arg_directive"),25;case 3:return this.popState(),this.popState(),35;case 4:return 34;case 5:case 6:case 7:break;case 8:return 11;case 9:case 10:case 11:break;case 12:this.begin("href");break;case 13:this.popState();break;case 14:return 30;case 15:this.begin("callbackname");break;case 16:this.popState();break;case 17:this.popState(),this.begin("callbackargs");break;case 18:return 28;case 19:this.popState();break;case 20:return 29;case 21:this.begin("click");break;case 22:this.popState();break;case 23:return 27;case 24:return 5;case 25:return 12;case 26:return 13;case 27:return 14;case 28:return 15;case 29:return 16;case 30:return"date";case 31:return 17;case 32:return 18;case 33:return 20;case 34:return 21;case 35:return 25;case 36:return 7;case 37:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%%(?!\{)*[^\n]*)/i,/^(?:[^\}]%%*[^\n]*)/i,/^(?:%%*[^\n]*[\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:href[\s]+["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:call[\s]+)/i,/^(?:\([\s]*\))/i,/^(?:\()/i,/^(?:[^(]*)/i,/^(?:\))/i,/^(?:[^)]*)/i,/^(?:click[\s]+)/i,/^(?:[\s\n])/i,/^(?:[^\s\n]*)/i,/^(?:gantt\b)/i,/^(?:dateFormat\s[^#\n;]+)/i,/^(?:inclusiveEndDates\b)/i,/^(?:axisFormat\s[^#\n;]+)/i,/^(?:excludes\s[^#\n;]+)/i,/^(?:todayMarker\s[^\n;]+)/i,/^(?:\d\d\d\d-\d\d-\d\d\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},callbackargs:{rules:[19,20],inclusive:!1},callbackname:{rules:[16,17,18],inclusive:!1},href:{rules:[13,14],inclusive:!1},click:{rules:[22,23],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,12,15,21,24,25,26,27,28,29,30,31,32,33,34,35,36,37],inclusive:!0}}};function v(){this.yy={}}return g.lexer=y,v.prototype=g,g.Parser=v,new v}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(19).readFileSync(n(20).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(14),n(7)(t))},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,2],n=[1,5],r=[6,9,11,17,18,19,21],i=[1,15],a=[1,16],o=[1,17],s=[1,21],c=[4,6,9,11,17,18,19,21],u={trace:function(){},yy:{},symbols_:{error:2,start:3,journey:4,document:5,EOF:6,directive:7,line:8,SPACE:9,statement:10,NEWLINE:11,openDirective:12,typeDirective:13,closeDirective:14,":":15,argDirective:16,title:17,section:18,taskName:19,taskData:20,open_directive:21,type_directive:22,arg_directive:23,close_directive:24,$accept:0,$end:1},terminals_:{2:"error",4:"journey",6:"EOF",9:"SPACE",11:"NEWLINE",15:":",17:"title",18:"section",19:"taskName",20:"taskData",21:"open_directive",22:"type_directive",23:"arg_directive",24:"close_directive"},productions_:[0,[3,3],[3,2],[5,0],[5,2],[8,2],[8,1],[8,1],[8,1],[7,4],[7,6],[10,1],[10,1],[10,2],[10,1],[12,1],[13,1],[16,1],[14,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 1:return a[s-1];case 3:this.$=[];break;case 4:a[s-1].push(a[s]),this.$=a[s-1];break;case 5:case 6:this.$=a[s];break;case 7:case 8:this.$=[];break;case 11:r.setTitle(a[s].substr(6)),this.$=a[s].substr(6);break;case 12:r.addSection(a[s].substr(8)),this.$=a[s].substr(8);break;case 13:r.addTask(a[s-1],a[s]),this.$="task";break;case 15:r.parseDirective("%%{","open_directive");break;case 16:r.parseDirective(a[s],"type_directive");break;case 17:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 18:r.parseDirective("}%%","close_directive","journey")}},table:[{3:1,4:e,7:3,12:4,21:n},{1:[3]},t(r,[2,3],{5:6}),{3:7,4:e,7:3,12:4,21:n},{13:8,22:[1,9]},{22:[2,15]},{6:[1,10],7:18,8:11,9:[1,12],10:13,11:[1,14],12:4,17:i,18:a,19:o,21:n},{1:[2,2]},{14:19,15:[1,20],24:s},t([15,24],[2,16]),t(r,[2,8],{1:[2,1]}),t(r,[2,4]),{7:18,10:22,12:4,17:i,18:a,19:o,21:n},t(r,[2,6]),t(r,[2,7]),t(r,[2,11]),t(r,[2,12]),{20:[1,23]},t(r,[2,14]),{11:[1,24]},{16:25,23:[1,26]},{11:[2,18]},t(r,[2,5]),t(r,[2,13]),t(c,[2,9]),{14:27,24:s},{24:[2,17]},{11:[1,28]},t(c,[2,10])],defaultActions:{5:[2,15],7:[2,2],21:[2,18],26:[2,17]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),g={yy:{}};for(var y in this.yy)Object.prototype.hasOwnProperty.call(this.yy,y)&&(g.yy[y]=this.yy[y]);p.setInput(t,g.yy),g.yy.lexer=p,g.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var v=p.yylloc;a.push(v);var m=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof g.yy.parseError?this.parseError=g.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,_,k,w,E,T,C,A,S,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==x&&(x=b()),w=o[k]&&o[k][x]),void 0===w||!w.length||!w[0]){var O="";for(T in S=[],o[k])this.terminals_[T]&&T>h&&S.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:v,expected:S})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,v=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},m&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,u,c,g.yy,w[1],i,a].concat(d))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),A=o[n[n.length-2]][n[n.length-1]],n.push(A);break;case 3:return!0}}return!0}},l={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),21;case 1:return this.begin("type_directive"),22;case 2:return this.popState(),this.begin("arg_directive"),15;case 3:return this.popState(),this.popState(),24;case 4:return 23;case 5:case 6:break;case 7:return 11;case 8:case 9:break;case 10:return 4;case 11:return 17;case 12:return 18;case 13:return 19;case 14:return 20;case 15:return 15;case 16:return 6;case 17:return"INVALID"}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:journey\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i],conditions:{open_directive:{rules:[1],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,12,13,14,15,16,17],inclusive:!0}}};function h(){this.yy={}}return u.lexer=l,h.prototype=u,u.Parser=h,new h}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(19).readFileSync(n(20).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(14),n(7)(t))},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(9),i=n(15);e.default=function(t,e){return r.default.lang.round(i.default.parse(t)[e])}},function(t,e,n){var r=n(112),i=n(82),a=n(24);t.exports=function(t){return a(t)?r(t):i(t)}},function(t,e,n){var r;if(!r)try{r=n(0)}catch(t){}r||(r=window.d3),t.exports=r},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(9),i=n(15);e.default=function(t,e,n){var a=i.default.parse(t),o=a[e],s=r.default.channel.clamp[e](o+n);return o!==s&&(a[e]=s),i.default.stringify(a)}},function(t,e,n){var r=n(210),i=n(216);t.exports=function(t,e){var n=i(t,e);return r(n)?n:void 0}},function(t,e,n){var r=n(38),i=n(212),a=n(213),o=r?r.toStringTag:void 0;t.exports=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":o&&o in Object(t)?i(t):a(t)}},function(t,e){t.exports=function(t){return t}},function(t,e){t.exports=function(t,e){return t===e||t!=t&&e!=e}},function(t,e,n){var r=n(34),i=n(11);t.exports=function(t){if(!i(t))return!1;var e=r(t);return"[object Function]"==e||"[object GeneratorFunction]"==e||"[object AsyncFunction]"==e||"[object Proxy]"==e}},function(t,e,n){var r=n(16).Symbol;t.exports=r},function(t,e,n){(function(t){var r=n(16),i=n(232),a=e&&!e.nodeType&&e,o=a&&"object"==typeof t&&t&&!t.nodeType&&t,s=o&&o.exports===a?r.Buffer:void 0,c=(s?s.isBuffer:void 0)||i;t.exports=c}).call(this,n(7)(t))},function(t,e,n){var r=n(112),i=n(236),a=n(24);t.exports=function(t){return a(t)?r(t,!0):i(t)}},function(t,e,n){var r=n(241),i=n(77),a=n(242),o=n(121),s=n(243),c=n(34),u=n(110),l=u(r),h=u(i),f=u(a),d=u(o),p=u(s),g=c;(r&&"[object DataView]"!=g(new r(new ArrayBuffer(1)))||i&&"[object Map]"!=g(new i)||a&&"[object Promise]"!=g(a.resolve())||o&&"[object Set]"!=g(new o)||s&&"[object WeakMap]"!=g(new s))&&(g=function(t){var e=c(t),n="[object Object]"==e?t.constructor:void 0,r=n?u(n):"";if(r)switch(r){case l:return"[object DataView]";case h:return"[object Map]";case f:return"[object Promise]";case d:return"[object Set]";case p:return"[object WeakMap]"}return e}),t.exports=g},function(t,e,n){var r=n(34),i=n(21);t.exports=function(t){return"symbol"==typeof t||i(t)&&"[object Symbol]"==r(t)}},function(t,e,n){var r;try{r={defaults:n(154),each:n(87),isFunction:n(37),isPlainObject:n(158),pick:n(161),has:n(93),range:n(162),uniqueId:n(163)}}catch(t){}r||(r=window._),t.exports=r},function(t){t.exports=JSON.parse('{"name":"mermaid","version":"8.9.0","description":"Markdownish syntax for generating flowcharts, sequence diagrams, class diagrams, gantt charts and git graphs.","main":"dist/mermaid.core.js","keywords":["diagram","markdown","flowchart","sequence diagram","gantt","class diagram","git graph"],"scripts":{"build:development":"webpack --progress --colors","build:production":"yarn build:development -p --config webpack.config.prod.babel.js","build":"yarn build:development && yarn build:production","postbuild":"documentation build src/mermaidAPI.js src/config.js --shallow -f md --markdown-toc false > docs/Setup.md","build:watch":"yarn build --watch","minify":"minify ./dist/mermaid.js > ./dist/mermaid.min.js","release":"yarn build","lint":"eslint src","e2e:depr":"yarn lint && jest e2e --config e2e/jest.config.js","cypress":"percy exec -- cypress run","e2e":"start-server-and-test dev http://localhost:9000/ cypress","e2e-upd":"yarn lint && jest e2e -u --config e2e/jest.config.js","dev":"webpack-dev-server --config webpack.config.e2e.js","test":"yarn lint && jest src/.*","test:watch":"jest --watch src","prepublishOnly":"yarn build && yarn test","prepare":"yarn build"},"repository":{"type":"git","url":"https://github.com/knsv/mermaid"},"author":"Knut Sveidqvist","license":"MIT","standard":{"ignore":["**/parser/*.js","dist/**/*.js","cypress/**/*.js"],"globals":["page"]},"dependencies":{"@braintree/sanitize-url":"^3.1.0","d3":"^5.7.0","dagre":"^0.8.4","dagre-d3":"^0.6.4","entity-decode":"^2.0.2","graphlib":"^2.1.7","he":"^1.2.0","khroma":"^1.1.0","minify":"^4.1.1","moment-mini":"^2.22.1","stylis":"^3.5.2"},"devDependencies":{"@babel/core":"^7.2.2","@babel/preset-env":"^7.8.4","@babel/register":"^7.0.0","@percy/cypress":"*","babel-core":"7.0.0-bridge.0","babel-eslint":"^10.1.0","babel-jest":"^24.9.0","babel-loader":"^8.0.4","coveralls":"^3.0.2","css-loader":"^2.0.1","css-to-string-loader":"^0.1.3","cypress":"4.0.1","documentation":"^12.0.1","eslint":"^6.3.0","eslint-config-prettier":"^6.3.0","eslint-plugin-prettier":"^3.1.0","husky":"^1.2.1","identity-obj-proxy":"^3.0.0","jest":"^24.9.0","jison":"^0.4.18","moment":"^2.23.0","node-sass":"^4.12.0","prettier":"^1.18.2","puppeteer":"^1.17.0","sass-loader":"^7.1.0","start-server-and-test":"^1.10.6","terser-webpack-plugin":"^2.2.2","webpack":"^4.41.2","webpack-bundle-analyzer":"^3.7.0","webpack-cli":"^3.1.2","webpack-dev-server":"^3.4.1","webpack-node-externals":"^1.7.2","yarn-upgrade-all":"^0.5.0"},"files":["dist"],"yarn-upgrade-all":{"ignore":["babel-core"]},"sideEffects":["**/*.css","**/*.scss"],"husky":{"hooks":{"pre-push":"yarn test"}}}')},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=new(n(176).default)({r:0,g:0,b:0,a:0},"transparent");e.default=r},function(t,e,n){var r=n(58),i=n(59);t.exports=function(t,e,n,a){var o=!n;n||(n={});for(var s=-1,c=e.length;++s-1&&t%1==0&&t-1}(s)?s:(n=s.match(a))?(e=n[0],r.test(e)?"about:blank":s):"about:blank"}}},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[2,3],n=[1,7],r=[7,12,15,17,19,20,21],i=[7,11,12,15,17,19,20,21],a=[2,20],o=[1,32],s={trace:function(){},yy:{},symbols_:{error:2,start:3,GG:4,":":5,document:6,EOF:7,DIR:8,options:9,body:10,OPT:11,NL:12,line:13,statement:14,COMMIT:15,commit_arg:16,BRANCH:17,ID:18,CHECKOUT:19,MERGE:20,RESET:21,reset_arg:22,STR:23,HEAD:24,reset_parents:25,CARET:26,$accept:0,$end:1},terminals_:{2:"error",4:"GG",5:":",7:"EOF",8:"DIR",11:"OPT",12:"NL",15:"COMMIT",17:"BRANCH",18:"ID",19:"CHECKOUT",20:"MERGE",21:"RESET",23:"STR",24:"HEAD",26:"CARET"},productions_:[0,[3,4],[3,5],[6,0],[6,2],[9,2],[9,1],[10,0],[10,2],[13,2],[13,1],[14,2],[14,2],[14,2],[14,2],[14,2],[16,0],[16,1],[22,2],[22,2],[25,0],[25,2]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 1:return a[s-1];case 2:return r.setDirection(a[s-3]),a[s-1];case 4:r.setOptions(a[s-1]),this.$=a[s];break;case 5:a[s-1]+=a[s],this.$=a[s-1];break;case 7:this.$=[];break;case 8:a[s-1].push(a[s]),this.$=a[s-1];break;case 9:this.$=a[s-1];break;case 11:r.commit(a[s]);break;case 12:r.branch(a[s]);break;case 13:r.checkout(a[s]);break;case 14:r.merge(a[s]);break;case 15:r.reset(a[s]);break;case 16:this.$="";break;case 17:this.$=a[s];break;case 18:this.$=a[s-1]+":"+a[s];break;case 19:this.$=a[s-1]+":"+r.count,r.count=0;break;case 20:r.count=0;break;case 21:r.count+=1}},table:[{3:1,4:[1,2]},{1:[3]},{5:[1,3],8:[1,4]},{6:5,7:e,9:6,12:n},{5:[1,8]},{7:[1,9]},t(r,[2,7],{10:10,11:[1,11]}),t(i,[2,6]),{6:12,7:e,9:6,12:n},{1:[2,1]},{7:[2,4],12:[1,15],13:13,14:14,15:[1,16],17:[1,17],19:[1,18],20:[1,19],21:[1,20]},t(i,[2,5]),{7:[1,21]},t(r,[2,8]),{12:[1,22]},t(r,[2,10]),{12:[2,16],16:23,23:[1,24]},{18:[1,25]},{18:[1,26]},{18:[1,27]},{18:[1,30],22:28,24:[1,29]},{1:[2,2]},t(r,[2,9]),{12:[2,11]},{12:[2,17]},{12:[2,12]},{12:[2,13]},{12:[2,14]},{12:[2,15]},{12:a,25:31,26:o},{12:a,25:33,26:o},{12:[2,18]},{12:a,25:34,26:o},{12:[2,19]},{12:[2,21]}],defaultActions:{9:[2,1],21:[2,2],23:[2,11],24:[2,17],25:[2,12],26:[2,13],27:[2,14],28:[2,15],31:[2,18],33:[2,19],34:[2,21]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),g={yy:{}};for(var y in this.yy)Object.prototype.hasOwnProperty.call(this.yy,y)&&(g.yy[y]=this.yy[y]);p.setInput(t,g.yy),g.yy.lexer=p,g.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var v=p.yylloc;a.push(v);var m=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof g.yy.parseError?this.parseError=g.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,_,k,w,E,T,C,A,S,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==x&&(x=b()),w=o[k]&&o[k][x]),void 0===w||!w.length||!w[0]){var O="";for(T in S=[],o[k])this.terminals_[T]&&T>h&&S.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:v,expected:S})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,v=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},m&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,u,c,g.yy,w[1],i,a].concat(d))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),A=o[n[n.length-2]][n[n.length-1]],n.push(A);break;case 3:return!0}}return!0}},c={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return 12;case 1:case 2:case 3:break;case 4:return 4;case 5:return 15;case 6:return 17;case 7:return 20;case 8:return 21;case 9:return 19;case 10:case 11:return 8;case 12:return 5;case 13:return 26;case 14:this.begin("options");break;case 15:this.popState();break;case 16:return 11;case 17:this.begin("string");break;case 18:this.popState();break;case 19:return 23;case 20:return 18;case 21:return 7}},rules:[/^(?:(\r?\n)+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:gitGraph\b)/i,/^(?:commit\b)/i,/^(?:branch\b)/i,/^(?:merge\b)/i,/^(?:reset\b)/i,/^(?:checkout\b)/i,/^(?:LR\b)/i,/^(?:BT\b)/i,/^(?::)/i,/^(?:\^)/i,/^(?:options\r?\n)/i,/^(?:end\r?\n)/i,/^(?:[^\n]+\r?\n)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:[a-zA-Z][-_\.a-zA-Z0-9]*[-_a-zA-Z0-9])/i,/^(?:$)/i],conditions:{options:{rules:[15,16],inclusive:!1},string:{rules:[18,19],inclusive:!1},INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,17,20,21],inclusive:!0}}};function u(){this.yy={}}return s.lexer=c,u.prototype=s,s.Parser=u,new u}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(19).readFileSync(n(20).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(14),n(7)(t))},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[6,9,10],n={trace:function(){},yy:{},symbols_:{error:2,start:3,info:4,document:5,EOF:6,line:7,statement:8,NL:9,showInfo:10,$accept:0,$end:1},terminals_:{2:"error",4:"info",6:"EOF",9:"NL",10:"showInfo"},productions_:[0,[3,3],[5,0],[5,2],[7,1],[7,1],[8,1]],performAction:function(t,e,n,r,i,a,o){switch(a.length,i){case 1:return r;case 4:break;case 6:r.setInfo(!0)}},table:[{3:1,4:[1,2]},{1:[3]},t(e,[2,2],{5:3}),{6:[1,4],7:5,8:6,9:[1,7],10:[1,8]},{1:[2,1]},t(e,[2,3]),t(e,[2,4]),t(e,[2,5]),t(e,[2,6])],defaultActions:{4:[2,1]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),g={yy:{}};for(var y in this.yy)Object.prototype.hasOwnProperty.call(this.yy,y)&&(g.yy[y]=this.yy[y]);p.setInput(t,g.yy),g.yy.lexer=p,g.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var v=p.yylloc;a.push(v);var m=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof g.yy.parseError?this.parseError=g.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,_,k,w,E,T,C,A,S,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==x&&(x=b()),w=o[k]&&o[k][x]),void 0===w||!w.length||!w[0]){var O="";for(T in S=[],o[k])this.terminals_[T]&&T>h&&S.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:v,expected:S})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,v=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},m&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,u,c,g.yy,w[1],i,a].concat(d))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),A=o[n[n.length-2]][n[n.length-1]],n.push(A);break;case 3:return!0}}return!0}},r={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return 4;case 1:return 9;case 2:return"space";case 3:return 10;case 4:return 6;case 5:return"TXT"}},rules:[/^(?:info\b)/i,/^(?:[\s\n\r]+)/i,/^(?:[\s]+)/i,/^(?:showInfo\b)/i,/^(?:$)/i,/^(?:.)/i],conditions:{INITIAL:{rules:[0,1,2,3,4,5],inclusive:!0}}};function i(){this.yy={}}return n.lexer=r,i.prototype=n,n.Parser=i,new i}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(19).readFileSync(n(20).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(14),n(7)(t))},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,4],n=[1,5],r=[1,6],i=[1,7],a=[1,9],o=[1,10,12,19,20,21,22],s=[1,6,10,12,19,20,21,22],c=[19,20,21],u=[1,22],l=[6,19,20,21,22],h={trace:function(){},yy:{},symbols_:{error:2,start:3,eol:4,directive:5,PIE:6,document:7,line:8,statement:9,txt:10,value:11,title:12,title_value:13,openDirective:14,typeDirective:15,closeDirective:16,":":17,argDirective:18,NEWLINE:19,";":20,EOF:21,open_directive:22,type_directive:23,arg_directive:24,close_directive:25,$accept:0,$end:1},terminals_:{2:"error",6:"PIE",10:"txt",11:"value",12:"title",13:"title_value",17:":",19:"NEWLINE",20:";",21:"EOF",22:"open_directive",23:"type_directive",24:"arg_directive",25:"close_directive"},productions_:[0,[3,2],[3,2],[3,2],[7,0],[7,2],[8,2],[9,0],[9,2],[9,2],[9,1],[5,3],[5,5],[4,1],[4,1],[4,1],[14,1],[15,1],[18,1],[16,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 6:this.$=a[s-1];break;case 8:r.addSection(a[s-1],r.cleanupValue(a[s]));break;case 9:this.$=a[s].trim(),r.setTitle(this.$);break;case 16:r.parseDirective("%%{","open_directive");break;case 17:r.parseDirective(a[s],"type_directive");break;case 18:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 19:r.parseDirective("}%%","close_directive","pie")}},table:[{3:1,4:2,5:3,6:e,14:8,19:n,20:r,21:i,22:a},{1:[3]},{3:10,4:2,5:3,6:e,14:8,19:n,20:r,21:i,22:a},{3:11,4:2,5:3,6:e,14:8,19:n,20:r,21:i,22:a},t(o,[2,4],{7:12}),t(s,[2,13]),t(s,[2,14]),t(s,[2,15]),{15:13,23:[1,14]},{23:[2,16]},{1:[2,1]},{1:[2,2]},t(c,[2,7],{14:8,8:15,9:16,5:19,1:[2,3],10:[1,17],12:[1,18],22:a}),{16:20,17:[1,21],25:u},t([17,25],[2,17]),t(o,[2,5]),{4:23,19:n,20:r,21:i},{11:[1,24]},{13:[1,25]},t(c,[2,10]),t(l,[2,11]),{18:26,24:[1,27]},t(l,[2,19]),t(o,[2,6]),t(c,[2,8]),t(c,[2,9]),{16:28,25:u},{25:[2,18]},t(l,[2,12])],defaultActions:{9:[2,16],10:[2,1],11:[2,2],27:[2,18]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),g={yy:{}};for(var y in this.yy)Object.prototype.hasOwnProperty.call(this.yy,y)&&(g.yy[y]=this.yy[y]);p.setInput(t,g.yy),g.yy.lexer=p,g.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var v=p.yylloc;a.push(v);var m=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof g.yy.parseError?this.parseError=g.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,_,k,w,E,T,C,A,S,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==x&&(x=b()),w=o[k]&&o[k][x]),void 0===w||!w.length||!w[0]){var O="";for(T in S=[],o[k])this.terminals_[T]&&T>h&&S.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:v,expected:S})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,v=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},m&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,u,c,g.yy,w[1],i,a].concat(d))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),A=o[n[n.length-2]][n[n.length-1]],n.push(A);break;case 3:return!0}}return!0}},f={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),22;case 1:return this.begin("type_directive"),23;case 2:return this.popState(),this.begin("arg_directive"),17;case 3:return this.popState(),this.popState(),25;case 4:return 24;case 5:case 6:break;case 7:return 19;case 8:case 9:break;case 10:return this.begin("title"),12;case 11:return this.popState(),"title_value";case 12:this.begin("string");break;case 13:this.popState();break;case 14:return"txt";case 15:return 6;case 16:return"value";case 17:return 21}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n\r]+)/i,/^(?:%%[^\n]*)/i,/^(?:[\s]+)/i,/^(?:title\b)/i,/^(?:(?!\n||)*[^\n]*)/i,/^(?:["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:pie\b)/i,/^(?::[\s]*[\d]+(?:\.[\d]+)?)/i,/^(?:$)/i],conditions:{close_directive:{rules:[],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},open_directive:{rules:[1],inclusive:!1},title:{rules:[11],inclusive:!1},string:{rules:[13,14],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,12,15,16,17],inclusive:!0}}};function d(){this.yy={}}return h.lexer=f,d.prototype=h,h.Parser=d,new d}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(19).readFileSync(n(20).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(14),n(7)(t))},function(t,e,n){(function(t,r){var i=function(){var t=function(t,e,n,r){for(n=n||{},r=t.length;r--;n[t[r]]=e);return n},e=[1,2],n=[1,5],r=[6,9,11,23,37],i=[1,17],a=[1,20],o=[1,25],s=[1,26],c=[1,27],u=[1,28],l=[1,37],h=[23,34,35],f=[4,6,9,11,23,37],d=[30,31,32,33],p=[22,27],g={trace:function(){},yy:{},symbols_:{error:2,start:3,ER_DIAGRAM:4,document:5,EOF:6,directive:7,line:8,SPACE:9,statement:10,NEWLINE:11,openDirective:12,typeDirective:13,closeDirective:14,":":15,argDirective:16,entityName:17,relSpec:18,role:19,BLOCK_START:20,attributes:21,BLOCK_STOP:22,ALPHANUM:23,attribute:24,attributeType:25,attributeName:26,ATTRIBUTE_WORD:27,cardinality:28,relType:29,ZERO_OR_ONE:30,ZERO_OR_MORE:31,ONE_OR_MORE:32,ONLY_ONE:33,NON_IDENTIFYING:34,IDENTIFYING:35,WORD:36,open_directive:37,type_directive:38,arg_directive:39,close_directive:40,$accept:0,$end:1},terminals_:{2:"error",4:"ER_DIAGRAM",6:"EOF",9:"SPACE",11:"NEWLINE",15:":",20:"BLOCK_START",22:"BLOCK_STOP",23:"ALPHANUM",27:"ATTRIBUTE_WORD",30:"ZERO_OR_ONE",31:"ZERO_OR_MORE",32:"ONE_OR_MORE",33:"ONLY_ONE",34:"NON_IDENTIFYING",35:"IDENTIFYING",36:"WORD",37:"open_directive",38:"type_directive",39:"arg_directive",40:"close_directive"},productions_:[0,[3,3],[3,2],[5,0],[5,2],[8,2],[8,1],[8,1],[8,1],[7,4],[7,6],[10,1],[10,5],[10,4],[10,3],[10,1],[17,1],[21,1],[21,2],[24,2],[25,1],[26,1],[18,3],[28,1],[28,1],[28,1],[28,1],[29,1],[29,1],[19,1],[19,1],[12,1],[13,1],[16,1],[14,1]],performAction:function(t,e,n,r,i,a,o){var s=a.length-1;switch(i){case 1:break;case 3:this.$=[];break;case 4:a[s-1].push(a[s]),this.$=a[s-1];break;case 5:case 6:this.$=a[s];break;case 7:case 8:this.$=[];break;case 12:r.addEntity(a[s-4]),r.addEntity(a[s-2]),r.addRelationship(a[s-4],a[s],a[s-2],a[s-3]);break;case 13:r.addEntity(a[s-3]),r.addAttributes(a[s-3],a[s-1]);break;case 14:r.addEntity(a[s-2]);break;case 15:r.addEntity(a[s]);break;case 16:this.$=a[s];break;case 17:this.$=[a[s]];break;case 18:a[s].push(a[s-1]),this.$=a[s];break;case 19:this.$={attributeType:a[s-1],attributeName:a[s]};break;case 20:case 21:this.$=a[s];break;case 22:this.$={cardA:a[s],relType:a[s-1],cardB:a[s-2]};break;case 23:this.$=r.Cardinality.ZERO_OR_ONE;break;case 24:this.$=r.Cardinality.ZERO_OR_MORE;break;case 25:this.$=r.Cardinality.ONE_OR_MORE;break;case 26:this.$=r.Cardinality.ONLY_ONE;break;case 27:this.$=r.Identification.NON_IDENTIFYING;break;case 28:this.$=r.Identification.IDENTIFYING;break;case 29:this.$=a[s].replace(/"/g,"");break;case 30:this.$=a[s];break;case 31:r.parseDirective("%%{","open_directive");break;case 32:r.parseDirective(a[s],"type_directive");break;case 33:a[s]=a[s].trim().replace(/'/g,'"'),r.parseDirective(a[s],"arg_directive");break;case 34:r.parseDirective("}%%","close_directive","er")}},table:[{3:1,4:e,7:3,12:4,37:n},{1:[3]},t(r,[2,3],{5:6}),{3:7,4:e,7:3,12:4,37:n},{13:8,38:[1,9]},{38:[2,31]},{6:[1,10],7:15,8:11,9:[1,12],10:13,11:[1,14],12:4,17:16,23:i,37:n},{1:[2,2]},{14:18,15:[1,19],40:a},t([15,40],[2,32]),t(r,[2,8],{1:[2,1]}),t(r,[2,4]),{7:15,10:21,12:4,17:16,23:i,37:n},t(r,[2,6]),t(r,[2,7]),t(r,[2,11]),t(r,[2,15],{18:22,28:24,20:[1,23],30:o,31:s,32:c,33:u}),t([6,9,11,15,20,23,30,31,32,33,37],[2,16]),{11:[1,29]},{16:30,39:[1,31]},{11:[2,34]},t(r,[2,5]),{17:32,23:i},{21:33,22:[1,34],24:35,25:36,27:l},{29:38,34:[1,39],35:[1,40]},t(h,[2,23]),t(h,[2,24]),t(h,[2,25]),t(h,[2,26]),t(f,[2,9]),{14:41,40:a},{40:[2,33]},{15:[1,42]},{22:[1,43]},t(r,[2,14]),{21:44,22:[2,17],24:35,25:36,27:l},{26:45,27:[1,46]},{27:[2,20]},{28:47,30:o,31:s,32:c,33:u},t(d,[2,27]),t(d,[2,28]),{11:[1,48]},{19:49,23:[1,51],36:[1,50]},t(r,[2,13]),{22:[2,18]},t(p,[2,19]),t(p,[2,21]),{23:[2,22]},t(f,[2,10]),t(r,[2,12]),t(r,[2,29]),t(r,[2,30])],defaultActions:{5:[2,31],7:[2,2],20:[2,34],31:[2,33],37:[2,20],44:[2,18],47:[2,22]},parseError:function(t,e){if(!e.recoverable){var n=new Error(t);throw n.hash=e,n}this.trace(t)},parse:function(t){var e=this,n=[0],r=[],i=[null],a=[],o=this.table,s="",c=0,u=0,l=0,h=2,f=1,d=a.slice.call(arguments,1),p=Object.create(this.lexer),g={yy:{}};for(var y in this.yy)Object.prototype.hasOwnProperty.call(this.yy,y)&&(g.yy[y]=this.yy[y]);p.setInput(t,g.yy),g.yy.lexer=p,g.yy.parser=this,void 0===p.yylloc&&(p.yylloc={});var v=p.yylloc;a.push(v);var m=p.options&&p.options.ranges;function b(){var t;return"number"!=typeof(t=r.pop()||p.lex()||f)&&(t instanceof Array&&(t=(r=t).pop()),t=e.symbols_[t]||t),t}"function"==typeof g.yy.parseError?this.parseError=g.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,_,k,w,E,T,C,A,S,M={};;){if(k=n[n.length-1],this.defaultActions[k]?w=this.defaultActions[k]:(null==x&&(x=b()),w=o[k]&&o[k][x]),void 0===w||!w.length||!w[0]){var O="";for(T in S=[],o[k])this.terminals_[T]&&T>h&&S.push("'"+this.terminals_[T]+"'");O=p.showPosition?"Parse error on line "+(c+1)+":\n"+p.showPosition()+"\nExpecting "+S.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(c+1)+": Unexpected "+(x==f?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(O,{text:p.match,token:this.terminals_[x]||x,line:p.yylineno,loc:v,expected:S})}if(w[0]instanceof Array&&w.length>1)throw new Error("Parse Error: multiple actions possible at state: "+k+", token: "+x);switch(w[0]){case 1:n.push(x),i.push(p.yytext),a.push(p.yylloc),n.push(w[1]),x=null,_?(x=_,_=null):(u=p.yyleng,s=p.yytext,c=p.yylineno,v=p.yylloc,l>0&&l--);break;case 2:if(C=this.productions_[w[1]][1],M.$=i[i.length-C],M._$={first_line:a[a.length-(C||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(C||1)].first_column,last_column:a[a.length-1].last_column},m&&(M._$.range=[a[a.length-(C||1)].range[0],a[a.length-1].range[1]]),void 0!==(E=this.performAction.apply(M,[s,u,c,g.yy,w[1],i,a].concat(d))))return E;C&&(n=n.slice(0,-1*C*2),i=i.slice(0,-1*C),a=a.slice(0,-1*C)),n.push(this.productions_[w[1]][0]),i.push(M.$),a.push(M._$),A=o[n[n.length-2]][n[n.length-1]],n.push(A);break;case 3:return!0}}return!0}},y={EOF:1,parseError:function(t,e){if(!this.yy.parser)throw new Error(t);this.yy.parser.parseError(t,e)},setInput:function(t,e){return this.yy=e||this.yy||{},this._input=t,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var t=this._input[0];return this.yytext+=t,this.yyleng++,this.offset++,this.match+=t,this.matched+=t,t.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),t},unput:function(t){var e=t.length,n=t.split(/(?:\r\n?|\n)/g);this._input=t+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-e),this.offset-=e;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var i=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-e},this.options.ranges&&(this.yylloc.range=[i[0],i[0]+this.yyleng-e]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(t){this.unput(this.match.slice(t))},pastInput:function(){var t=this.matched.substr(0,this.matched.length-this.match.length);return(t.length>20?"...":"")+t.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var t=this.match;return t.length<20&&(t+=this._input.substr(0,20-t.length)),(t.substr(0,20)+(t.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var t=this.pastInput(),e=new Array(t.length+1).join("-");return t+this.upcomingInput()+"\n"+e+"^"},test_match:function(t,e){var n,r,i;if(this.options.backtrack_lexer&&(i={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(i.yylloc.range=this.yylloc.range.slice(0))),(r=t[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+t[0].length},this.yytext+=t[0],this.match+=t[0],this.matches=t,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(t[0].length),this.matched+=t[0],n=this.performAction.call(this,this.yy,this,e,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in i)this[a]=i[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var t,e,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var i=this._currentRules(),a=0;ae[0].length)){if(e=n,r=a,this.options.backtrack_lexer){if(!1!==(t=this.test_match(n,i[a])))return t;if(this._backtrack){e=!1;continue}return!1}if(!this.options.flex)break}return e?!1!==(t=this.test_match(e,i[r]))&&t:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){return this.next()||this.lex()},begin:function(t){this.conditionStack.push(t)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(t){return(t=this.conditionStack.length-1-Math.abs(t||0))>=0?this.conditionStack[t]:"INITIAL"},pushState:function(t){this.begin(t)},stateStackSize:function(){return this.conditionStack.length},options:{"case-insensitive":!0},performAction:function(t,e,n,r){switch(n){case 0:return this.begin("open_directive"),37;case 1:return this.begin("type_directive"),38;case 2:return this.popState(),this.begin("arg_directive"),15;case 3:return this.popState(),this.popState(),40;case 4:return 39;case 5:case 6:break;case 7:return 11;case 8:break;case 9:return 9;case 10:return 36;case 11:return 4;case 12:return this.begin("block"),20;case 13:break;case 14:return 27;case 15:break;case 16:return this.popState(),22;case 17:return e.yytext[0];case 18:return 30;case 19:return 31;case 20:return 32;case 21:return 33;case 22:return 30;case 23:return 31;case 24:return 32;case 25:return 34;case 26:return 35;case 27:case 28:return 34;case 29:return 23;case 30:return e.yytext[0];case 31:return 6}},rules:[/^(?:%%\{)/i,/^(?:((?:(?!\}%%)[^:.])*))/i,/^(?::)/i,/^(?:\}%%)/i,/^(?:((?:(?!\}%%).|\n)*))/i,/^(?:%(?!\{)[^\n]*)/i,/^(?:[^\}]%%[^\n]*)/i,/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:[\s]+)/i,/^(?:"[^"]*")/i,/^(?:erDiagram\b)/i,/^(?:\{)/i,/^(?:\s+)/i,/^(?:[A-Za-z][A-Za-z0-9\-_]*)/i,/^(?:[\n]+)/i,/^(?:\})/i,/^(?:.)/i,/^(?:\|o\b)/i,/^(?:\}o\b)/i,/^(?:\}\|)/i,/^(?:\|\|)/i,/^(?:o\|)/i,/^(?:o\{)/i,/^(?:\|\{)/i,/^(?:\.\.)/i,/^(?:--)/i,/^(?:\.-)/i,/^(?:-\.)/i,/^(?:[A-Za-z][A-Za-z0-9\-_]*)/i,/^(?:.)/i,/^(?:$)/i],conditions:{open_directive:{rules:[1],inclusive:!1},type_directive:{rules:[2,3],inclusive:!1},arg_directive:{rules:[3,4],inclusive:!1},block:{rules:[13,14,15,16,17],inclusive:!1},INITIAL:{rules:[0,5,6,7,8,9,10,11,12,18,19,20,21,22,23,24,25,26,27,28,29,30,31],inclusive:!0}}};function v(){this.yy={}}return g.lexer=y,v.prototype=g,g.Parser=v,new v}();e.parser=i,e.Parser=i.Parser,e.parse=function(){return i.parse.apply(i,arguments)},e.main=function(r){r[1]||(console.log("Usage: "+r[0]+" FILE"),t.exit(1));var i=n(19).readFileSync(n(20).normalize(r[1]),"utf8");return e.parser.parse(i)},n.c[n.s]===r&&e.main(t.argv.slice(1))}).call(this,n(14),n(7)(t))},function(t,e,n){"use strict";var r;Object.defineProperty(e,"__esModule",{value:!0}),function(t){t[t.ALL=0]="ALL",t[t.RGB=1]="RGB",t[t.HSL=2]="HSL"}(r||(r={})),e.TYPE=r},function(t,e,n){"use strict";var r=n(10);function i(t){this._isDirected=!r.has(t,"directed")||t.directed,this._isMultigraph=!!r.has(t,"multigraph")&&t.multigraph,this._isCompound=!!r.has(t,"compound")&&t.compound,this._label=void 0,this._defaultNodeLabelFn=r.constant(void 0),this._defaultEdgeLabelFn=r.constant(void 0),this._nodes={},this._isCompound&&(this._parent={},this._children={},this._children["\0"]={}),this._in={},this._preds={},this._out={},this._sucs={},this._edgeObjs={},this._edgeLabels={}}function a(t,e){t[e]?t[e]++:t[e]=1}function o(t,e){--t[e]||delete t[e]}function s(t,e,n,i){var a=""+e,o=""+n;if(!t&&a>o){var s=a;a=o,o=s}return a+""+o+""+(r.isUndefined(i)?"\0":i)}function c(t,e,n,r){var i=""+e,a=""+n;if(!t&&i>a){var o=i;i=a,a=o}var s={v:i,w:a};return r&&(s.name=r),s}function u(t,e){return s(t,e.v,e.w,e.name)}t.exports=i,i.prototype._nodeCount=0,i.prototype._edgeCount=0,i.prototype.isDirected=function(){return this._isDirected},i.prototype.isMultigraph=function(){return this._isMultigraph},i.prototype.isCompound=function(){return this._isCompound},i.prototype.setGraph=function(t){return this._label=t,this},i.prototype.graph=function(){return this._label},i.prototype.setDefaultNodeLabel=function(t){return r.isFunction(t)||(t=r.constant(t)),this._defaultNodeLabelFn=t,this},i.prototype.nodeCount=function(){return this._nodeCount},i.prototype.nodes=function(){return r.keys(this._nodes)},i.prototype.sources=function(){var t=this;return r.filter(this.nodes(),(function(e){return r.isEmpty(t._in[e])}))},i.prototype.sinks=function(){var t=this;return r.filter(this.nodes(),(function(e){return r.isEmpty(t._out[e])}))},i.prototype.setNodes=function(t,e){var n=arguments,i=this;return r.each(t,(function(t){n.length>1?i.setNode(t,e):i.setNode(t)})),this},i.prototype.setNode=function(t,e){return r.has(this._nodes,t)?(arguments.length>1&&(this._nodes[t]=e),this):(this._nodes[t]=arguments.length>1?e:this._defaultNodeLabelFn(t),this._isCompound&&(this._parent[t]="\0",this._children[t]={},this._children["\0"][t]=!0),this._in[t]={},this._preds[t]={},this._out[t]={},this._sucs[t]={},++this._nodeCount,this)},i.prototype.node=function(t){return this._nodes[t]},i.prototype.hasNode=function(t){return r.has(this._nodes,t)},i.prototype.removeNode=function(t){var e=this;if(r.has(this._nodes,t)){var n=function(t){e.removeEdge(e._edgeObjs[t])};delete this._nodes[t],this._isCompound&&(this._removeFromParentsChildList(t),delete this._parent[t],r.each(this.children(t),(function(t){e.setParent(t)})),delete this._children[t]),r.each(r.keys(this._in[t]),n),delete this._in[t],delete this._preds[t],r.each(r.keys(this._out[t]),n),delete this._out[t],delete this._sucs[t],--this._nodeCount}return this},i.prototype.setParent=function(t,e){if(!this._isCompound)throw new Error("Cannot set parent in a non-compound graph");if(r.isUndefined(e))e="\0";else{for(var n=e+="";!r.isUndefined(n);n=this.parent(n))if(n===t)throw new Error("Setting "+e+" as parent of "+t+" would create a cycle");this.setNode(e)}return this.setNode(t),this._removeFromParentsChildList(t),this._parent[t]=e,this._children[e][t]=!0,this},i.prototype._removeFromParentsChildList=function(t){delete this._children[this._parent[t]][t]},i.prototype.parent=function(t){if(this._isCompound){var e=this._parent[t];if("\0"!==e)return e}},i.prototype.children=function(t){if(r.isUndefined(t)&&(t="\0"),this._isCompound){var e=this._children[t];if(e)return r.keys(e)}else{if("\0"===t)return this.nodes();if(this.hasNode(t))return[]}},i.prototype.predecessors=function(t){var e=this._preds[t];if(e)return r.keys(e)},i.prototype.successors=function(t){var e=this._sucs[t];if(e)return r.keys(e)},i.prototype.neighbors=function(t){var e=this.predecessors(t);if(e)return r.union(e,this.successors(t))},i.prototype.isLeaf=function(t){return 0===(this.isDirected()?this.successors(t):this.neighbors(t)).length},i.prototype.filterNodes=function(t){var e=new this.constructor({directed:this._isDirected,multigraph:this._isMultigraph,compound:this._isCompound});e.setGraph(this.graph());var n=this;r.each(this._nodes,(function(n,r){t(r)&&e.setNode(r,n)})),r.each(this._edgeObjs,(function(t){e.hasNode(t.v)&&e.hasNode(t.w)&&e.setEdge(t,n.edge(t))}));var i={};return this._isCompound&&r.each(e.nodes(),(function(t){e.setParent(t,function t(r){var a=n.parent(r);return void 0===a||e.hasNode(a)?(i[r]=a,a):a in i?i[a]:t(a)}(t))})),e},i.prototype.setDefaultEdgeLabel=function(t){return r.isFunction(t)||(t=r.constant(t)),this._defaultEdgeLabelFn=t,this},i.prototype.edgeCount=function(){return this._edgeCount},i.prototype.edges=function(){return r.values(this._edgeObjs)},i.prototype.setPath=function(t,e){var n=this,i=arguments;return r.reduce(t,(function(t,r){return i.length>1?n.setEdge(t,r,e):n.setEdge(t,r),r})),this},i.prototype.setEdge=function(){var t,e,n,i,o=!1,u=arguments[0];"object"==typeof u&&null!==u&&"v"in u?(t=u.v,e=u.w,n=u.name,2===arguments.length&&(i=arguments[1],o=!0)):(t=u,e=arguments[1],n=arguments[3],arguments.length>2&&(i=arguments[2],o=!0)),t=""+t,e=""+e,r.isUndefined(n)||(n=""+n);var l=s(this._isDirected,t,e,n);if(r.has(this._edgeLabels,l))return o&&(this._edgeLabels[l]=i),this;if(!r.isUndefined(n)&&!this._isMultigraph)throw new Error("Cannot set a named edge when isMultigraph = false");this.setNode(t),this.setNode(e),this._edgeLabels[l]=o?i:this._defaultEdgeLabelFn(t,e,n);var h=c(this._isDirected,t,e,n);return t=h.v,e=h.w,Object.freeze(h),this._edgeObjs[l]=h,a(this._preds[e],t),a(this._sucs[t],e),this._in[e][l]=h,this._out[t][l]=h,this._edgeCount++,this},i.prototype.edge=function(t,e,n){var r=1===arguments.length?u(this._isDirected,arguments[0]):s(this._isDirected,t,e,n);return this._edgeLabels[r]},i.prototype.hasEdge=function(t,e,n){var i=1===arguments.length?u(this._isDirected,arguments[0]):s(this._isDirected,t,e,n);return r.has(this._edgeLabels,i)},i.prototype.removeEdge=function(t,e,n){var r=1===arguments.length?u(this._isDirected,arguments[0]):s(this._isDirected,t,e,n),i=this._edgeObjs[r];return i&&(t=i.v,e=i.w,delete this._edgeLabels[r],delete this._edgeObjs[r],o(this._preds[e],t),o(this._sucs[t],e),delete this._in[e][r],delete this._out[t][r],this._edgeCount--),this},i.prototype.inEdges=function(t,e){var n=this._in[t];if(n){var i=r.values(n);return e?r.filter(i,(function(t){return t.v===e})):i}},i.prototype.outEdges=function(t,e){var n=this._out[t];if(n){var i=r.values(n);return e?r.filter(i,(function(t){return t.w===e})):i}},i.prototype.nodeEdges=function(t,e){var n=this.inEdges(t,e);if(n)return n.concat(this.outEdges(t,e))}},function(t,e,n){var r=n(33)(n(16),"Map");t.exports=r},function(t,e,n){var r=n(217),i=n(224),a=n(226),o=n(227),s=n(228);function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e-1&&t%1==0&&t<=9007199254740991}},function(t,e,n){(function(t){var r=n(109),i=e&&!e.nodeType&&e,a=i&&"object"==typeof t&&t&&!t.nodeType&&t,o=a&&a.exports===i&&r.process,s=function(){try{return a&&a.require&&a.require("util").types||o&&o.binding&&o.binding("util")}catch(t){}}();t.exports=s}).call(this,n(7)(t))},function(t,e,n){var r=n(62),i=n(234),a=Object.prototype.hasOwnProperty;t.exports=function(t){if(!r(t))return i(t);var e=[];for(var n in Object(t))a.call(t,n)&&"constructor"!=n&&e.push(n);return e}},function(t,e,n){var r=n(116),i=n(117),a=Object.prototype.propertyIsEnumerable,o=Object.getOwnPropertySymbols,s=o?function(t){return null==t?[]:(t=Object(t),r(o(t),(function(e){return a.call(t,e)})))}:i;t.exports=s},function(t,e){t.exports=function(t,e){for(var n=-1,r=e.length,i=t.length;++n0&&a(l)?n>1?t(l,n-1,a,o,s):r(s,l):o||(s[s.length]=l)}return s}},function(t,e,n){var r=n(42);t.exports=function(t,e,n){for(var i=-1,a=t.length;++i4,u=c?1:17,l=c?8:4,h=s?0:-1,f=c?255:15;return i.default.set({r:(r>>l*(h+3)&f)*u,g:(r>>l*(h+2)&f)*u,b:(r>>l*(h+1)&f)*u,a:s?(r&f)*u/255:1},t)}}},stringify:function(t){return t.a<1?"#"+a.DEC2HEX[Math.round(t.r)]+a.DEC2HEX[Math.round(t.g)]+a.DEC2HEX[Math.round(t.b)]+r.default.unit.frac2hex(t.a):"#"+a.DEC2HEX[Math.round(t.r)]+a.DEC2HEX[Math.round(t.g)]+a.DEC2HEX[Math.round(t.b)]}};e.default=o},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(9),i=n(45),a=n(15);e.default=function(t,e,n,o){void 0===o&&(o=1);var s=i.default.set({h:r.default.channel.clamp.h(t),s:r.default.channel.clamp.s(e),l:r.default.channel.clamp.l(n),a:r.default.channel.clamp.a(o)});return a.default.stringify(s)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(29);e.default=function(t){return r.default(t,"a")}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(9),i=n(15);e.default=function(t){var e=i.default.parse(t),n=e.r,a=e.g,o=e.b,s=.2126*r.default.channel.toLinear(n)+.7152*r.default.channel.toLinear(a)+.0722*r.default.channel.toLinear(o);return r.default.lang.round(s)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(102);e.default=function(t){return r.default(t)>=.5}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(32);e.default=function(t,e){return r.default(t,"a",e)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(32);e.default=function(t,e){return r.default(t,"a",-e)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(15),i=n(52);e.default=function(t,e){var n=r.default.parse(t),a={};for(var o in e)e[o]&&(a[o]=n[o]+e[o]);return i.default(t,a)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(15),i=n(51);e.default=function(t,e,n){void 0===n&&(n=50);var a=r.default.parse(t),o=a.r,s=a.g,c=a.b,u=a.a,l=r.default.parse(e),h=l.r,f=l.g,d=l.b,p=l.a,g=n/100,y=2*g-1,v=u-p,m=((y*v==-1?y:(y+v)/(1+y*v))+1)/2,b=1-m,x=o*m+h*b,_=s*m+f*b,k=c*m+d*b,w=u*g+p*(1-g);return i.default(x,_,k,w)}},function(t,e,n){var r=n(53),i=n(79),a=n(58),o=n(229),s=n(235),c=n(114),u=n(115),l=n(238),h=n(239),f=n(119),d=n(240),p=n(41),g=n(244),y=n(245),v=n(124),m=n(5),b=n(39),x=n(249),_=n(11),k=n(251),w=n(30),E={};E["[object Arguments]"]=E["[object Array]"]=E["[object ArrayBuffer]"]=E["[object DataView]"]=E["[object Boolean]"]=E["[object Date]"]=E["[object Float32Array]"]=E["[object Float64Array]"]=E["[object Int8Array]"]=E["[object Int16Array]"]=E["[object Int32Array]"]=E["[object Map]"]=E["[object Number]"]=E["[object Object]"]=E["[object RegExp]"]=E["[object Set]"]=E["[object String]"]=E["[object Symbol]"]=E["[object Uint8Array]"]=E["[object Uint8ClampedArray]"]=E["[object Uint16Array]"]=E["[object Uint32Array]"]=!0,E["[object Error]"]=E["[object Function]"]=E["[object WeakMap]"]=!1,t.exports=function t(e,n,T,C,A,S){var M,O=1&n,D=2&n,N=4&n;if(T&&(M=A?T(e,C,A,S):T(e)),void 0!==M)return M;if(!_(e))return e;var B=m(e);if(B){if(M=g(e),!O)return u(e,M)}else{var L=p(e),P="[object Function]"==L||"[object GeneratorFunction]"==L;if(b(e))return c(e,O);if("[object Object]"==L||"[object Arguments]"==L||P&&!A){if(M=D||P?{}:v(e),!O)return D?h(e,s(M,e)):l(e,o(M,e))}else{if(!E[L])return A?e:{};M=y(e,L,O)}}S||(S=new r);var I=S.get(e);if(I)return I;S.set(e,M),k(e)?e.forEach((function(r){M.add(t(r,n,T,r,e,S))})):x(e)&&e.forEach((function(r,i){M.set(i,t(r,n,T,i,e,S))}));var F=N?D?d:f:D?keysIn:w,j=B?void 0:F(e);return i(j||e,(function(r,i){j&&(r=e[i=r]),a(M,i,t(r,n,T,i,e,S))})),M}},function(t,e,n){(function(e){var n="object"==typeof e&&e&&e.Object===Object&&e;t.exports=n}).call(this,n(211))},function(t,e){var n=Function.prototype.toString;t.exports=function(t){if(null!=t){try{return n.call(t)}catch(t){}try{return t+""}catch(t){}}return""}},function(t,e,n){var r=n(33),i=function(){try{var t=r(Object,"defineProperty");return t({},"",{}),t}catch(t){}}();t.exports=i},function(t,e,n){var r=n(230),i=n(47),a=n(5),o=n(39),s=n(60),c=n(48),u=Object.prototype.hasOwnProperty;t.exports=function(t,e){var n=a(t),l=!n&&i(t),h=!n&&!l&&o(t),f=!n&&!l&&!h&&c(t),d=n||l||h||f,p=d?r(t.length,String):[],g=p.length;for(var y in t)!e&&!u.call(t,y)||d&&("length"==y||h&&("offset"==y||"parent"==y)||f&&("buffer"==y||"byteLength"==y||"byteOffset"==y)||s(y,g))||p.push(y);return p}},function(t,e){t.exports=function(t,e){return function(n){return t(e(n))}}},function(t,e,n){(function(t){var r=n(16),i=e&&!e.nodeType&&e,a=i&&"object"==typeof t&&t&&!t.nodeType&&t,o=a&&a.exports===i?r.Buffer:void 0,s=o?o.allocUnsafe:void 0;t.exports=function(t,e){if(e)return t.slice();var n=t.length,r=s?s(n):new t.constructor(n);return t.copy(r),r}}).call(this,n(7)(t))},function(t,e){t.exports=function(t,e){var n=-1,r=t.length;for(e||(e=Array(r));++nl))return!1;var f=c.get(t);if(f&&c.get(e))return f==e;var d=-1,p=!0,g=2&n?new r:void 0;for(c.set(t,e),c.set(e,t);++d0&&(a=c.removeMin(),(o=s[a]).distance!==Number.POSITIVE_INFINITY);)r(a).forEach(u);return s}(t,String(e),n||a,r||function(e){return t.outEdges(e)})};var a=r.constant(1)},function(t,e,n){var r=n(10);function i(){this._arr=[],this._keyIndices={}}t.exports=i,i.prototype.size=function(){return this._arr.length},i.prototype.keys=function(){return this._arr.map((function(t){return t.key}))},i.prototype.has=function(t){return r.has(this._keyIndices,t)},i.prototype.priority=function(t){var e=this._keyIndices[t];if(void 0!==e)return this._arr[e].priority},i.prototype.min=function(){if(0===this.size())throw new Error("Queue underflow");return this._arr[0].key},i.prototype.add=function(t,e){var n=this._keyIndices;if(t=String(t),!r.has(n,t)){var i=this._arr,a=i.length;return n[t]=a,i.push({key:t,priority:e}),this._decrease(a),!0}return!1},i.prototype.removeMin=function(){this._swap(0,this._arr.length-1);var t=this._arr.pop();return delete this._keyIndices[t.key],this._heapify(0),t.key},i.prototype.decrease=function(t,e){var n=this._keyIndices[t];if(e>this._arr[n].priority)throw new Error("New priority is greater than current priority. Key: "+t+" Old: "+this._arr[n].priority+" New: "+e);this._arr[n].priority=e,this._decrease(n)},i.prototype._heapify=function(t){var e=this._arr,n=2*t,r=n+1,i=t;n>1].priority2?e[2]:void 0;for(u&&a(e[0],e[1],u)&&(r=1);++n1&&o.sort((function(t,e){var r=t.x-n.x,i=t.y-n.y,a=Math.sqrt(r*r+i*i),o=e.x-n.x,s=e.y-n.y,c=Math.sqrt(o*o+s*s);return aMath.abs(o)*u?(s<0&&(u=-u),n=0===s?0:u*o/s,r=u):(o<0&&(c=-c),n=c,r=0===o?0:c*s/o),{x:i+n,y:a+r}}},function(t,e,n){t.exports=function t(e){"use strict";var n=/^\0+/g,r=/[\0\r\f]/g,i=/: */g,a=/zoo|gra/,o=/([,: ])(transform)/g,s=/,+\s*(?![^(]*[)])/g,c=/ +\s*(?![^(]*[)])/g,u=/ *[\0] */g,l=/,\r+?/g,h=/([\t\r\n ])*\f?&/g,f=/:global\(((?:[^\(\)\[\]]*|\[.*\]|\([^\(\)]*\))*)\)/g,d=/\W+/g,p=/@(k\w+)\s*(\S*)\s*/,g=/::(place)/g,y=/:(read-only)/g,v=/\s+(?=[{\];=:>])/g,m=/([[}=:>])\s+/g,b=/(\{[^{]+?);(?=\})/g,x=/\s{2,}/g,_=/([^\(])(:+) */g,k=/[svh]\w+-[tblr]{2}/,w=/\(\s*(.*)\s*\)/g,E=/([\s\S]*?);/g,T=/-self|flex-/g,C=/[^]*?(:[rp][el]a[\w-]+)[^]*/,A=/stretch|:\s*\w+\-(?:conte|avail)/,S=/([^-])(image-set\()/,M="-webkit-",O="-moz-",D="-ms-",N=1,B=1,L=0,P=1,I=1,F=1,j=0,R=0,Y=0,z=[],U=[],$=0,W=null,H=0,V=1,G="",q="",X="";function Z(t,e,i,a,o){for(var s,c,l=0,h=0,f=0,d=0,v=0,m=0,b=0,x=0,k=0,E=0,T=0,C=0,A=0,S=0,O=0,D=0,j=0,U=0,W=0,K=i.length,it=K-1,at="",ot="",st="",ct="",ut="",lt="";O0&&(ot=ot.replace(r,"")),ot.trim().length>0)){switch(b){case 32:case 9:case 59:case 13:case 10:break;default:ot+=i.charAt(O)}b=59}if(1===j)switch(b){case 123:case 125:case 59:case 34:case 39:case 40:case 41:case 44:j=0;case 9:case 13:case 10:case 32:break;default:for(j=0,W=O,v=b,O--,b=59;W0&&(++O,b=v);case 123:W=K}}switch(b){case 123:for(v=(ot=ot.trim()).charCodeAt(0),T=1,W=++O;O0&&(ot=ot.replace(r,"")),m=ot.charCodeAt(1)){case 100:case 109:case 115:case 45:s=e;break;default:s=z}if(W=(st=Z(e,s,st,m,o+1)).length,Y>0&&0===W&&(W=ot.length),$>0&&(c=nt(3,st,s=J(z,ot,U),e,B,N,W,m,o,a),ot=s.join(""),void 0!==c&&0===(W=(st=c.trim()).length)&&(m=0,st="")),W>0)switch(m){case 115:ot=ot.replace(w,et);case 100:case 109:case 45:st=ot+"{"+st+"}";break;case 107:st=(ot=ot.replace(p,"$1 $2"+(V>0?G:"")))+"{"+st+"}",st=1===I||2===I&&tt("@"+st,3)?"@"+M+st+"@"+st:"@"+st;break;default:st=ot+st,112===a&&(ct+=st,st="")}else st="";break;default:st=Z(e,J(e,ot,U),st,a,o+1)}ut+=st,C=0,j=0,S=0,D=0,U=0,A=0,ot="",st="",b=i.charCodeAt(++O);break;case 125:case 59:if((W=(ot=(D>0?ot.replace(r,""):ot).trim()).length)>1)switch(0===S&&(45===(v=ot.charCodeAt(0))||v>96&&v<123)&&(W=(ot=ot.replace(" ",":")).length),$>0&&void 0!==(c=nt(1,ot,e,t,B,N,ct.length,a,o,a))&&0===(W=(ot=c.trim()).length)&&(ot="\0\0"),v=ot.charCodeAt(0),m=ot.charCodeAt(1),v){case 0:break;case 64:if(105===m||99===m){lt+=ot+i.charAt(O);break}default:if(58===ot.charCodeAt(W-1))break;ct+=Q(ot,v,m,ot.charCodeAt(2))}C=0,j=0,S=0,D=0,U=0,ot="",b=i.charCodeAt(++O)}}switch(b){case 13:case 10:if(h+d+f+l+R===0)switch(E){case 41:case 39:case 34:case 64:case 126:case 62:case 42:case 43:case 47:case 45:case 58:case 44:case 59:case 123:case 125:break;default:S>0&&(j=1)}47===h?h=0:P+C===0&&107!==a&&ot.length>0&&(D=1,ot+="\0"),$*H>0&&nt(0,ot,e,t,B,N,ct.length,a,o,a),N=1,B++;break;case 59:case 125:if(h+d+f+l===0){N++;break}default:switch(N++,at=i.charAt(O),b){case 9:case 32:if(d+l+h===0)switch(x){case 44:case 58:case 9:case 32:at="";break;default:32!==b&&(at=" ")}break;case 0:at="\\0";break;case 12:at="\\f";break;case 11:at="\\v";break;case 38:d+h+l===0&&P>0&&(U=1,D=1,at="\f"+at);break;case 108:if(d+h+l+L===0&&S>0)switch(O-S){case 2:112===x&&58===i.charCodeAt(O-3)&&(L=x);case 8:111===k&&(L=k)}break;case 58:d+h+l===0&&(S=O);break;case 44:h+f+d+l===0&&(D=1,at+="\r");break;case 34:case 39:0===h&&(d=d===b?0:0===d?b:d);break;case 91:d+h+f===0&&l++;break;case 93:d+h+f===0&&l--;break;case 41:d+h+l===0&&f--;break;case 40:if(d+h+l===0){if(0===C)switch(2*x+3*k){case 533:break;default:T=0,C=1}f++}break;case 64:h+f+d+l+S+A===0&&(A=1);break;case 42:case 47:if(d+l+f>0)break;switch(h){case 0:switch(2*b+3*i.charCodeAt(O+1)){case 235:h=47;break;case 220:W=O,h=42}break;case 42:47===b&&42===x&&W+2!==O&&(33===i.charCodeAt(W+2)&&(ct+=i.substring(W,O+1)),at="",h=0)}}if(0===h){if(P+d+l+A===0&&107!==a&&59!==b)switch(b){case 44:case 126:case 62:case 43:case 41:case 40:if(0===C){switch(x){case 9:case 32:case 10:case 13:at+="\0";break;default:at="\0"+at+(44===b?"":"\0")}D=1}else switch(b){case 40:S+7===O&&108===x&&(S=0),C=++T;break;case 41:0==(C=--T)&&(D=1,at+="\0")}break;case 9:case 32:switch(x){case 0:case 123:case 125:case 59:case 44:case 12:case 9:case 32:case 10:case 13:break;default:0===C&&(D=1,at+="\0")}}ot+=at,32!==b&&9!==b&&(E=b)}}k=x,x=b,O++}if(W=ct.length,Y>0&&0===W&&0===ut.length&&0===e[0].length==0&&(109!==a||1===e.length&&(P>0?q:X)===e[0])&&(W=e.join(",").length+2),W>0){if(s=0===P&&107!==a?function(t){for(var e,n,i=0,a=t.length,o=Array(a);i1)){if(f=c.charCodeAt(c.length-1),d=n.charCodeAt(0),e="",0!==l)switch(f){case 42:case 126:case 62:case 43:case 32:case 40:break;default:e=" "}switch(d){case 38:n=e+q;case 126:case 62:case 43:case 32:case 41:case 40:break;case 91:n=e+n+q;break;case 58:switch(2*n.charCodeAt(1)+3*n.charCodeAt(2)){case 530:if(F>0){n=e+n.substring(8,h-1);break}default:(l<1||s[l-1].length<1)&&(n=e+q+n)}break;case 44:e="";default:n=h>1&&n.indexOf(":")>0?e+n.replace(_,"$1"+q+"$2"):e+n+q}c+=n}o[i]=c.replace(r,"").trim()}return o}(e):e,$>0&&void 0!==(c=nt(2,ct,s,t,B,N,W,a,o,a))&&0===(ct=c).length)return lt+ct+ut;if(ct=s.join(",")+"{"+ct+"}",I*L!=0){switch(2!==I||tt(ct,2)||(L=0),L){case 111:ct=ct.replace(y,":-moz-$1")+ct;break;case 112:ct=ct.replace(g,"::-webkit-input-$1")+ct.replace(g,"::-moz-$1")+ct.replace(g,":-ms-input-$1")+ct}L=0}}return lt+ct+ut}function J(t,e,n){var r=e.trim().split(l),i=r,a=r.length,o=t.length;switch(o){case 0:case 1:for(var s=0,c=0===o?"":t[0]+" ";s0&&P>0)return i.replace(f,"$1").replace(h,"$1"+X);break;default:return t.trim()+i.replace(h,"$1"+t.trim())}default:if(n*P>0&&i.indexOf("\f")>0)return i.replace(h,(58===t.charCodeAt(0)?"":"$1")+t.trim())}return t+i}function Q(t,e,n,r){var u,l=0,h=t+";",f=2*e+3*n+4*r;if(944===f)return function(t){var e=t.length,n=t.indexOf(":",9)+1,r=t.substring(0,n).trim(),i=t.substring(n,e-1).trim();switch(t.charCodeAt(9)*V){case 0:break;case 45:if(110!==t.charCodeAt(10))break;default:var a=i.split((i="",s)),o=0;for(n=0,e=a.length;o64&&h<90||h>96&&h<123||95===h||45===h&&45!==u.charCodeAt(1)))switch(isNaN(parseFloat(u))+(-1!==u.indexOf("("))){case 1:switch(u){case"infinite":case"alternate":case"backwards":case"running":case"normal":case"forwards":case"both":case"none":case"linear":case"ease":case"ease-in":case"ease-out":case"ease-in-out":case"paused":case"reverse":case"alternate-reverse":case"inherit":case"initial":case"unset":case"step-start":case"step-end":break;default:u+=G}}l[n++]=u}i+=(0===o?"":",")+l.join(" ")}}return i=r+i+";",1===I||2===I&&tt(i,1)?M+i+i:i}(h);if(0===I||2===I&&!tt(h,1))return h;switch(f){case 1015:return 97===h.charCodeAt(10)?M+h+h:h;case 951:return 116===h.charCodeAt(3)?M+h+h:h;case 963:return 110===h.charCodeAt(5)?M+h+h:h;case 1009:if(100!==h.charCodeAt(4))break;case 969:case 942:return M+h+h;case 978:return M+h+O+h+h;case 1019:case 983:return M+h+O+h+D+h+h;case 883:return 45===h.charCodeAt(8)?M+h+h:h.indexOf("image-set(",11)>0?h.replace(S,"$1-webkit-$2")+h:h;case 932:if(45===h.charCodeAt(4))switch(h.charCodeAt(5)){case 103:return M+"box-"+h.replace("-grow","")+M+h+D+h.replace("grow","positive")+h;case 115:return M+h+D+h.replace("shrink","negative")+h;case 98:return M+h+D+h.replace("basis","preferred-size")+h}return M+h+D+h+h;case 964:return M+h+D+"flex-"+h+h;case 1023:if(99!==h.charCodeAt(8))break;return u=h.substring(h.indexOf(":",15)).replace("flex-","").replace("space-between","justify"),M+"box-pack"+u+M+h+D+"flex-pack"+u+h;case 1005:return a.test(h)?h.replace(i,":"+M)+h.replace(i,":"+O)+h:h;case 1e3:switch(l=(u=h.substring(13).trim()).indexOf("-")+1,u.charCodeAt(0)+u.charCodeAt(l)){case 226:u=h.replace(k,"tb");break;case 232:u=h.replace(k,"tb-rl");break;case 220:u=h.replace(k,"lr");break;default:return h}return M+h+D+u+h;case 1017:if(-1===h.indexOf("sticky",9))return h;case 975:switch(l=(h=t).length-10,f=(u=(33===h.charCodeAt(l)?h.substring(0,l):h).substring(t.indexOf(":",7)+1).trim()).charCodeAt(0)+(0|u.charCodeAt(7))){case 203:if(u.charCodeAt(8)<111)break;case 115:h=h.replace(u,M+u)+";"+h;break;case 207:case 102:h=h.replace(u,M+(f>102?"inline-":"")+"box")+";"+h.replace(u,M+u)+";"+h.replace(u,D+u+"box")+";"+h}return h+";";case 938:if(45===h.charCodeAt(5))switch(h.charCodeAt(6)){case 105:return u=h.replace("-items",""),M+h+M+"box-"+u+D+"flex-"+u+h;case 115:return M+h+D+"flex-item-"+h.replace(T,"")+h;default:return M+h+D+"flex-line-pack"+h.replace("align-content","").replace(T,"")+h}break;case 973:case 989:if(45!==h.charCodeAt(3)||122===h.charCodeAt(4))break;case 931:case 953:if(!0===A.test(t))return 115===(u=t.substring(t.indexOf(":")+1)).charCodeAt(0)?Q(t.replace("stretch","fill-available"),e,n,r).replace(":fill-available",":stretch"):h.replace(u,M+u)+h.replace(u,O+u.replace("fill-",""))+h;break;case 962:if(h=M+h+(102===h.charCodeAt(5)?D+h:"")+h,n+r===211&&105===h.charCodeAt(13)&&h.indexOf("transform",10)>0)return h.substring(0,h.indexOf(";",27)+1).replace(o,"$1-webkit-$2")+h}return h}function tt(t,e){var n=t.indexOf(1===e?":":"{"),r=t.substring(0,3!==e?n:10),i=t.substring(n+1,t.length-1);return W(2!==e?r:r.replace(C,"$1"),i,e)}function et(t,e){var n=Q(e,e.charCodeAt(0),e.charCodeAt(1),e.charCodeAt(2));return n!==e+";"?n.replace(E," or ($1)").substring(4):"("+e+")"}function nt(t,e,n,r,i,a,o,s,c,u){for(var l,h=0,f=e;h<$;++h)switch(l=U[h].call(at,t,f,n,r,i,a,o,s,c,u)){case void 0:case!1:case!0:case null:break;default:f=l}if(f!==e)return f}function rt(t,e,n,r){for(var i=e+1;i0&&(G=i.replace(d,91===a?"":"-")),a=1,1===P?X=i:q=i;var o,s=[X];$>0&&void 0!==(o=nt(-1,n,s,s,B,N,0,0,0,0))&&"string"==typeof o&&(n=o);var c=Z(z,s,n,0,0);return $>0&&void 0!==(o=nt(-2,c,s,s,B,N,c.length,0,0,0))&&"string"!=typeof(c=o)&&(a=0),G="",X="",q="",L=0,B=1,N=1,j*a==0?c:function(t){return t.replace(r,"").replace(v,"").replace(m,"$1").replace(b,"$1").replace(x," ")}(c)}return at.use=function t(e){switch(e){case void 0:case null:$=U.length=0;break;default:if("function"==typeof e)U[$++]=e;else if("object"==typeof e)for(var n=0,r=e.length;n=255?255:t<0?0:t},g:function(t){return t>=255?255:t<0?0:t},b:function(t){return t>=255?255:t<0?0:t},h:function(t){return t%360},s:function(t){return t>=100?100:t<0?0:t},l:function(t){return t>=100?100:t<0?0:t},a:function(t){return t>=1?1:t<0?0:t}},toLinear:function(t){var e=t/255;return t>.03928?Math.pow((e+.055)/1.055,2.4):e/12.92},hue2rgb:function(t,e,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+(e-t)*(2/3-n)*6:t},hsl2rgb:function(t,e){var n=t.h,i=t.s,a=t.l;if(100===i)return 2.55*a;n/=360,i/=100;var o=(a/=100)<.5?a*(1+i):a+i-a*i,s=2*a-o;switch(e){case"r":return 255*r.hue2rgb(s,o,n+1/3);case"g":return 255*r.hue2rgb(s,o,n);case"b":return 255*r.hue2rgb(s,o,n-1/3)}},rgb2hsl:function(t,e){var n=t.r,r=t.g,i=t.b;n/=255,r/=255,i/=255;var a=Math.max(n,r,i),o=Math.min(n,r,i),s=(a+o)/2;if("l"===e)return 100*s;if(a===o)return 0;var c=a-o;if("s"===e)return 100*(s>.5?c/(2-a-o):c/(a+o));switch(a){case n:return 60*((r-i)/c+(r1?e:"0"+e},dec2hex:function(t){var e=Math.round(t).toString(16);return e.length>1?e:"0"+e}};e.default=r},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(9),i=n(75),a=n(177),o=function(){function t(t,e){this.color=e,this.changed=!1,this.data=t,this.type=new a.default}return t.prototype.set=function(t,e){return this.color=e,this.changed=!1,this.data=t,this.type.type=i.TYPE.ALL,this},t.prototype._ensureHSL=function(){void 0===this.data.h&&(this.data.h=r.default.channel.rgb2hsl(this.data,"h")),void 0===this.data.s&&(this.data.s=r.default.channel.rgb2hsl(this.data,"s")),void 0===this.data.l&&(this.data.l=r.default.channel.rgb2hsl(this.data,"l"))},t.prototype._ensureRGB=function(){void 0===this.data.r&&(this.data.r=r.default.channel.hsl2rgb(this.data,"r")),void 0===this.data.g&&(this.data.g=r.default.channel.hsl2rgb(this.data,"g")),void 0===this.data.b&&(this.data.b=r.default.channel.hsl2rgb(this.data,"b"))},Object.defineProperty(t.prototype,"r",{get:function(){return this.type.is(i.TYPE.HSL)||void 0===this.data.r?(this._ensureHSL(),r.default.channel.hsl2rgb(this.data,"r")):this.data.r},set:function(t){this.type.set(i.TYPE.RGB),this.changed=!0,this.data.r=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"g",{get:function(){return this.type.is(i.TYPE.HSL)||void 0===this.data.g?(this._ensureHSL(),r.default.channel.hsl2rgb(this.data,"g")):this.data.g},set:function(t){this.type.set(i.TYPE.RGB),this.changed=!0,this.data.g=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"b",{get:function(){return this.type.is(i.TYPE.HSL)||void 0===this.data.b?(this._ensureHSL(),r.default.channel.hsl2rgb(this.data,"b")):this.data.b},set:function(t){this.type.set(i.TYPE.RGB),this.changed=!0,this.data.b=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"h",{get:function(){return this.type.is(i.TYPE.RGB)||void 0===this.data.h?(this._ensureRGB(),r.default.channel.rgb2hsl(this.data,"h")):this.data.h},set:function(t){this.type.set(i.TYPE.HSL),this.changed=!0,this.data.h=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"s",{get:function(){return this.type.is(i.TYPE.RGB)||void 0===this.data.s?(this._ensureRGB(),r.default.channel.rgb2hsl(this.data,"s")):this.data.s},set:function(t){this.type.set(i.TYPE.HSL),this.changed=!0,this.data.s=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"l",{get:function(){return this.type.is(i.TYPE.RGB)||void 0===this.data.l?(this._ensureRGB(),r.default.channel.rgb2hsl(this.data,"l")):this.data.l},set:function(t){this.type.set(i.TYPE.HSL),this.changed=!0,this.data.l=t},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"a",{get:function(){return this.data.a},set:function(t){this.changed=!0,this.data.a=t},enumerable:!0,configurable:!0}),t}();e.default=o},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(75),i=function(){function t(){this.type=r.TYPE.ALL}return t.prototype.get=function(){return this.type},t.prototype.set=function(t){if(this.type&&this.type!==t)throw new Error("Cannot change both RGB and HSL channels at the same time");this.type=t},t.prototype.reset=function(){this.type=r.TYPE.ALL},t.prototype.is=function(t){return this.type===t},t}();e.default=i},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(9),i={};e.DEC2HEX=i;for(var a=0;a<=255;a++)i[a]=r.default.unit.dec2hex(a)},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(99),i={colors:{aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyanaqua:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",transparent:"#00000000",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},parse:function(t){t=t.toLowerCase();var e=i.colors[t];if(e)return r.default.parse(e)},stringify:function(t){var e=r.default.stringify(t);for(var n in i.colors)if(i.colors[n]===e)return n}};e.default=i},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(9),i=n(45),a={re:/^rgba?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?)))?\s*?\)$/i,parse:function(t){var e=t.charCodeAt(0);if(114===e||82===e){var n=t.match(a.re);if(n){var o=n[1],s=n[2],c=n[3],u=n[4],l=n[5],h=n[6],f=n[7],d=n[8];return i.default.set({r:r.default.channel.clamp.r(s?2.55*parseFloat(o):parseFloat(o)),g:r.default.channel.clamp.g(u?2.55*parseFloat(c):parseFloat(c)),b:r.default.channel.clamp.b(h?2.55*parseFloat(l):parseFloat(l)),a:f?r.default.channel.clamp.a(d?parseFloat(f)/100:parseFloat(f)):1},t)}}},stringify:function(t){return t.a<1?"rgba("+r.default.lang.round(t.r)+", "+r.default.lang.round(t.g)+", "+r.default.lang.round(t.b)+", "+r.default.lang.round(t.a)+")":"rgb("+r.default.lang.round(t.r)+", "+r.default.lang.round(t.g)+", "+r.default.lang.round(t.b)+")"}};e.default=a},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(9),i=n(45),a={re:/^hsla?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(?:deg|grad|rad|turn)?)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(%)?))?\s*?\)$/i,hueRe:/^(.+?)(deg|grad|rad|turn)$/i,_hue2deg:function(t){var e=t.match(a.hueRe);if(e){var n=e[1];switch(e[2]){case"grad":return r.default.channel.clamp.h(.9*parseFloat(n));case"rad":return r.default.channel.clamp.h(180*parseFloat(n)/Math.PI);case"turn":return r.default.channel.clamp.h(360*parseFloat(n))}}return r.default.channel.clamp.h(parseFloat(t))},parse:function(t){var e=t.charCodeAt(0);if(104===e||72===e){var n=t.match(a.re);if(n){var o=n[1],s=n[2],c=n[3],u=n[4],l=n[5];return i.default.set({h:a._hue2deg(o),s:r.default.channel.clamp.s(parseFloat(s)),l:r.default.channel.clamp.l(parseFloat(c)),a:u?r.default.channel.clamp.a(l?parseFloat(u)/100:parseFloat(u)):1},t)}}},stringify:function(t){return t.a<1?"hsla("+r.default.lang.round(t.h)+", "+r.default.lang.round(t.s)+"%, "+r.default.lang.round(t.l)+"%, "+t.a+")":"hsl("+r.default.lang.round(t.h)+", "+r.default.lang.round(t.s)+"%, "+r.default.lang.round(t.l)+"%)"}};e.default=a},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(29);e.default=function(t){return r.default(t,"r")}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(29);e.default=function(t){return r.default(t,"g")}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(29);e.default=function(t){return r.default(t,"b")}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(29);e.default=function(t){return r.default(t,"h")}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(29);e.default=function(t){return r.default(t,"s")}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(29);e.default=function(t){return r.default(t,"l")}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(103);e.default=function(t){return!r.default(t)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(15);e.default=function(t){try{return r.default.parse(t),!0}catch(t){return!1}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(32);e.default=function(t,e){return r.default(t,"s",e)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(32);e.default=function(t,e){return r.default(t,"s",-e)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(32);e.default=function(t,e){return r.default(t,"l",e)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(32);e.default=function(t,e){return r.default(t,"l",-e)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(32);e.default=function(t){return r.default(t,"h",180)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(52);e.default=function(t){return r.default(t,{s:0})}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(15),i=n(107);e.default=function(t,e){void 0===e&&(e=100);var n=r.default.parse(t);return n.r=255-n.r,n.g=255-n.g,n.b=255-n.b,i.default(n,t,e)}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(9),i=n(15),a=n(106);e.default=function(t,e){var n,o,s,c=i.default.parse(t),u={};for(var l in e)u[l]=(n=c[l],o=e[l],s=r.default.channel.max[l],o>0?(s-n)*o/100:n*o/100);return a.default(t,u)}},function(t,e,n){t.exports={Graph:n(76),version:n(300)}},function(t,e,n){var r=n(108);t.exports=function(t){return r(t,4)}},function(t,e){t.exports=function(){this.__data__=[],this.size=0}},function(t,e,n){var r=n(55),i=Array.prototype.splice;t.exports=function(t){var e=this.__data__,n=r(e,t);return!(n<0||(n==e.length-1?e.pop():i.call(e,n,1),--this.size,0))}},function(t,e,n){var r=n(55);t.exports=function(t){var e=this.__data__,n=r(e,t);return n<0?void 0:e[n][1]}},function(t,e,n){var r=n(55);t.exports=function(t){return r(this.__data__,t)>-1}},function(t,e,n){var r=n(55);t.exports=function(t,e){var n=this.__data__,i=r(n,t);return i<0?(++this.size,n.push([t,e])):n[i][1]=e,this}},function(t,e,n){var r=n(54);t.exports=function(){this.__data__=new r,this.size=0}},function(t,e){t.exports=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n}},function(t,e){t.exports=function(t){return this.__data__.get(t)}},function(t,e){t.exports=function(t){return this.__data__.has(t)}},function(t,e,n){var r=n(54),i=n(77),a=n(78);t.exports=function(t,e){var n=this.__data__;if(n instanceof r){var o=n.__data__;if(!i||o.length<199)return o.push([t,e]),this.size=++n.size,this;n=this.__data__=new a(o)}return n.set(t,e),this.size=n.size,this}},function(t,e,n){var r=n(37),i=n(214),a=n(11),o=n(110),s=/^\[object .+?Constructor\]$/,c=Function.prototype,u=Object.prototype,l=c.toString,h=u.hasOwnProperty,f=RegExp("^"+l.call(h).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");t.exports=function(t){return!(!a(t)||i(t))&&(r(t)?f:s).test(o(t))}},function(t,e){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(t){"object"==typeof window&&(n=window)}t.exports=n},function(t,e,n){var r=n(38),i=Object.prototype,a=i.hasOwnProperty,o=i.toString,s=r?r.toStringTag:void 0;t.exports=function(t){var e=a.call(t,s),n=t[s];try{t[s]=void 0;var r=!0}catch(t){}var i=o.call(t);return r&&(e?t[s]=n:delete t[s]),i}},function(t,e){var n=Object.prototype.toString;t.exports=function(t){return n.call(t)}},function(t,e,n){var r,i=n(215),a=(r=/[^.]+$/.exec(i&&i.keys&&i.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"";t.exports=function(t){return!!a&&a in t}},function(t,e,n){var r=n(16)["__core-js_shared__"];t.exports=r},function(t,e){t.exports=function(t,e){return null==t?void 0:t[e]}},function(t,e,n){var r=n(218),i=n(54),a=n(77);t.exports=function(){this.size=0,this.__data__={hash:new r,map:new(a||i),string:new r}}},function(t,e,n){var r=n(219),i=n(220),a=n(221),o=n(222),s=n(223);function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e0){if(++e>=800)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}},function(t,e,n){var r=n(131),i=n(292),a=n(296),o=n(132),s=n(297),c=n(90);t.exports=function(t,e,n){var u=-1,l=i,h=t.length,f=!0,d=[],p=d;if(n)f=!1,l=a;else if(h>=200){var g=e?null:s(t);if(g)return c(g);f=!1,l=o,p=new r}else p=e?[]:d;t:for(;++u-1}},function(t,e,n){var r=n(145),i=n(294),a=n(295);t.exports=function(t,e,n){return e==e?a(t,e,n):r(t,i,n)}},function(t,e){t.exports=function(t){return t!=t}},function(t,e){t.exports=function(t,e,n){for(var r=n-1,i=t.length;++r1||1===e.length&&t.hasEdge(e[0],e[0])}))}},function(t,e,n){var r=n(10);t.exports=function(t,e,n){return function(t,e,n){var r={},i=t.nodes();return i.forEach((function(t){r[t]={},r[t][t]={distance:0},i.forEach((function(e){t!==e&&(r[t][e]={distance:Number.POSITIVE_INFINITY})})),n(t).forEach((function(n){var i=n.v===t?n.w:n.v,a=e(n);r[t][i]={distance:a,predecessor:t}}))})),i.forEach((function(t){var e=r[t];i.forEach((function(n){var a=r[n];i.forEach((function(n){var r=a[t],i=e[n],o=a[n],s=r.distance+i.distance;s0;){if(n=c.removeMin(),r.has(s,n))o.setEdge(n,s[n]);else{if(l)throw new Error("Input graph is not connected: "+t);l=!0}t.nodeEdges(n).forEach(u)}return o}},function(t,e,n){var r;try{r=n(3)}catch(t){}r||(r=window.graphlib),t.exports=r},function(t,e,n){"use strict";var r=n(4),i=n(345),a=n(348),o=n(349),s=n(8).normalizeRanks,c=n(351),u=n(8).removeEmptyRanks,l=n(352),h=n(353),f=n(354),d=n(355),p=n(364),g=n(8),y=n(17).Graph;t.exports=function(t,e){var n=e&&e.debugTiming?g.time:g.notime;n("layout",(function(){var e=n(" buildLayoutGraph",(function(){return function(t){var e=new y({multigraph:!0,compound:!0}),n=C(t.graph());return e.setGraph(r.merge({},m,T(n,v),r.pick(n,b))),r.forEach(t.nodes(),(function(n){var i=C(t.node(n));e.setNode(n,r.defaults(T(i,x),_)),e.setParent(n,t.parent(n))})),r.forEach(t.edges(),(function(n){var i=C(t.edge(n));e.setEdge(n,r.merge({},w,T(i,k),r.pick(i,E)))})),e}(t)}));n(" runLayout",(function(){!function(t,e){e(" makeSpaceForEdgeLabels",(function(){!function(t){var e=t.graph();e.ranksep/=2,r.forEach(t.edges(),(function(n){var r=t.edge(n);r.minlen*=2,"c"!==r.labelpos.toLowerCase()&&("TB"===e.rankdir||"BT"===e.rankdir?r.width+=r.labeloffset:r.height+=r.labeloffset)}))}(t)})),e(" removeSelfEdges",(function(){!function(t){r.forEach(t.edges(),(function(e){if(e.v===e.w){var n=t.node(e.v);n.selfEdges||(n.selfEdges=[]),n.selfEdges.push({e:e,label:t.edge(e)}),t.removeEdge(e)}}))}(t)})),e(" acyclic",(function(){i.run(t)})),e(" nestingGraph.run",(function(){l.run(t)})),e(" rank",(function(){o(g.asNonCompoundGraph(t))})),e(" injectEdgeLabelProxies",(function(){!function(t){r.forEach(t.edges(),(function(e){var n=t.edge(e);if(n.width&&n.height){var r=t.node(e.v),i={rank:(t.node(e.w).rank-r.rank)/2+r.rank,e:e};g.addDummyNode(t,"edge-proxy",i,"_ep")}}))}(t)})),e(" removeEmptyRanks",(function(){u(t)})),e(" nestingGraph.cleanup",(function(){l.cleanup(t)})),e(" normalizeRanks",(function(){s(t)})),e(" assignRankMinMax",(function(){!function(t){var e=0;r.forEach(t.nodes(),(function(n){var i=t.node(n);i.borderTop&&(i.minRank=t.node(i.borderTop).rank,i.maxRank=t.node(i.borderBottom).rank,e=r.max(e,i.maxRank))})),t.graph().maxRank=e}(t)})),e(" removeEdgeLabelProxies",(function(){!function(t){r.forEach(t.nodes(),(function(e){var n=t.node(e);"edge-proxy"===n.dummy&&(t.edge(n.e).labelRank=n.rank,t.removeNode(e))}))}(t)})),e(" normalize.run",(function(){a.run(t)})),e(" parentDummyChains",(function(){c(t)})),e(" addBorderSegments",(function(){h(t)})),e(" order",(function(){d(t)})),e(" insertSelfEdges",(function(){!function(t){var e=g.buildLayerMatrix(t);r.forEach(e,(function(e){var n=0;r.forEach(e,(function(e,i){var a=t.node(e);a.order=i+n,r.forEach(a.selfEdges,(function(e){g.addDummyNode(t,"selfedge",{width:e.label.width,height:e.label.height,rank:a.rank,order:i+ ++n,e:e.e,label:e.label},"_se")})),delete a.selfEdges}))}))}(t)})),e(" adjustCoordinateSystem",(function(){f.adjust(t)})),e(" position",(function(){p(t)})),e(" positionSelfEdges",(function(){!function(t){r.forEach(t.nodes(),(function(e){var n=t.node(e);if("selfedge"===n.dummy){var r=t.node(n.e.v),i=r.x+r.width/2,a=r.y,o=n.x-i,s=r.height/2;t.setEdge(n.e,n.label),t.removeNode(e),n.label.points=[{x:i+2*o/3,y:a-s},{x:i+5*o/6,y:a-s},{x:i+o,y:a},{x:i+5*o/6,y:a+s},{x:i+2*o/3,y:a+s}],n.label.x=n.x,n.label.y=n.y}}))}(t)})),e(" removeBorderNodes",(function(){!function(t){r.forEach(t.nodes(),(function(e){if(t.children(e).length){var n=t.node(e),i=t.node(n.borderTop),a=t.node(n.borderBottom),o=t.node(r.last(n.borderLeft)),s=t.node(r.last(n.borderRight));n.width=Math.abs(s.x-o.x),n.height=Math.abs(a.y-i.y),n.x=o.x+n.width/2,n.y=i.y+n.height/2}})),r.forEach(t.nodes(),(function(e){"border"===t.node(e).dummy&&t.removeNode(e)}))}(t)})),e(" normalize.undo",(function(){a.undo(t)})),e(" fixupEdgeLabelCoords",(function(){!function(t){r.forEach(t.edges(),(function(e){var n=t.edge(e);if(r.has(n,"x"))switch("l"!==n.labelpos&&"r"!==n.labelpos||(n.width-=n.labeloffset),n.labelpos){case"l":n.x-=n.width/2+n.labeloffset;break;case"r":n.x+=n.width/2+n.labeloffset}}))}(t)})),e(" undoCoordinateSystem",(function(){f.undo(t)})),e(" translateGraph",(function(){!function(t){var e=Number.POSITIVE_INFINITY,n=0,i=Number.POSITIVE_INFINITY,a=0,o=t.graph(),s=o.marginx||0,c=o.marginy||0;function u(t){var r=t.x,o=t.y,s=t.width,c=t.height;e=Math.min(e,r-s/2),n=Math.max(n,r+s/2),i=Math.min(i,o-c/2),a=Math.max(a,o+c/2)}r.forEach(t.nodes(),(function(e){u(t.node(e))})),r.forEach(t.edges(),(function(e){var n=t.edge(e);r.has(n,"x")&&u(n)})),e-=s,i-=c,r.forEach(t.nodes(),(function(n){var r=t.node(n);r.x-=e,r.y-=i})),r.forEach(t.edges(),(function(n){var a=t.edge(n);r.forEach(a.points,(function(t){t.x-=e,t.y-=i})),r.has(a,"x")&&(a.x-=e),r.has(a,"y")&&(a.y-=i)})),o.width=n-e+s,o.height=a-i+c}(t)})),e(" assignNodeIntersects",(function(){!function(t){r.forEach(t.edges(),(function(e){var n,r,i=t.edge(e),a=t.node(e.v),o=t.node(e.w);i.points?(n=i.points[0],r=i.points[i.points.length-1]):(i.points=[],n=o,r=a),i.points.unshift(g.intersectRect(a,n)),i.points.push(g.intersectRect(o,r))}))}(t)})),e(" reversePoints",(function(){!function(t){r.forEach(t.edges(),(function(e){var n=t.edge(e);n.reversed&&n.points.reverse()}))}(t)})),e(" acyclic.undo",(function(){i.undo(t)}))}(e,n)})),n(" updateInputGraph",(function(){!function(t,e){r.forEach(t.nodes(),(function(n){var r=t.node(n),i=e.node(n);r&&(r.x=i.x,r.y=i.y,e.children(n).length&&(r.width=i.width,r.height=i.height))})),r.forEach(t.edges(),(function(n){var i=t.edge(n),a=e.edge(n);i.points=a.points,r.has(a,"x")&&(i.x=a.x,i.y=a.y)})),t.graph().width=e.graph().width,t.graph().height=e.graph().height}(t,e)}))}))};var v=["nodesep","edgesep","ranksep","marginx","marginy"],m={ranksep:50,edgesep:20,nodesep:50,rankdir:"tb"},b=["acyclicer","ranker","rankdir","align"],x=["width","height"],_={width:0,height:0},k=["minlen","weight","width","height","labeloffset"],w={minlen:1,weight:1,width:0,height:0,labeloffset:10,labelpos:"r"},E=["labelpos"];function T(t,e){return r.mapValues(r.pick(t,e),Number)}function C(t){var e={};return r.forEach(t,(function(t,n){e[n.toLowerCase()]=t})),e}},function(t,e,n){var r=n(108);t.exports=function(t){return r(t,5)}},function(t,e,n){var r=n(315)(n(316));t.exports=r},function(t,e,n){var r=n(25),i=n(24),a=n(30);t.exports=function(t){return function(e,n,o){var s=Object(e);if(!i(e)){var c=r(n,3);e=a(e),n=function(t){return c(s[t],t,s)}}var u=t(e,n,o);return u>-1?s[c?e[u]:u]:void 0}}},function(t,e,n){var r=n(145),i=n(25),a=n(317),o=Math.max;t.exports=function(t,e,n){var s=null==t?0:t.length;if(!s)return-1;var c=null==n?0:a(n);return c<0&&(c=o(s+c,0)),r(t,i(e,3),c)}},function(t,e,n){var r=n(155);t.exports=function(t){var e=r(t),n=e%1;return e==e?n?e-n:e:0}},function(t,e,n){var r=n(11),i=n(42),a=/^\s+|\s+$/g,o=/^[-+]0x[0-9a-f]+$/i,s=/^0b[01]+$/i,c=/^0o[0-7]+$/i,u=parseInt;t.exports=function(t){if("number"==typeof t)return t;if(i(t))return NaN;if(r(t)){var e="function"==typeof t.valueOf?t.valueOf():t;t=r(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(a,"");var n=s.test(t);return n||c.test(t)?u(t.slice(2),n?2:8):o.test(t)?NaN:+t}},function(t,e,n){var r=n(89),i=n(127),a=n(40);t.exports=function(t,e){return null==t?t:r(t,i(e),a)}},function(t,e){t.exports=function(t){var e=null==t?0:t.length;return e?t[e-1]:void 0}},function(t,e,n){var r=n(59),i=n(88),a=n(25);t.exports=function(t,e){var n={};return e=a(e,3),i(t,(function(t,i,a){r(n,i,e(t,i,a))})),n}},function(t,e,n){var r=n(95),i=n(323),a=n(35);t.exports=function(t){return t&&t.length?r(t,a,i):void 0}},function(t,e){t.exports=function(t,e){return t>e}},function(t,e,n){var r=n(325),i=n(328)((function(t,e,n){r(t,e,n)}));t.exports=i},function(t,e,n){var r=n(53),i=n(157),a=n(89),o=n(326),s=n(11),c=n(40),u=n(159);t.exports=function t(e,n,l,h,f){e!==n&&a(n,(function(a,c){if(f||(f=new r),s(a))o(e,n,c,l,t,h,f);else{var d=h?h(u(e,c),a,c+"",e,n,f):void 0;void 0===d&&(d=a),i(e,c,d)}}),c)}},function(t,e,n){var r=n(157),i=n(114),a=n(123),o=n(115),s=n(124),c=n(47),u=n(5),l=n(146),h=n(39),f=n(37),d=n(11),p=n(158),g=n(48),y=n(159),v=n(327);t.exports=function(t,e,n,m,b,x,_){var k=y(t,n),w=y(e,n),E=_.get(w);if(E)r(t,n,E);else{var T=x?x(k,w,n+"",t,e,_):void 0,C=void 0===T;if(C){var A=u(w),S=!A&&h(w),M=!A&&!S&&g(w);T=w,A||S||M?u(k)?T=k:l(k)?T=o(k):S?(C=!1,T=i(w,!0)):M?(C=!1,T=a(w,!0)):T=[]:p(w)||c(w)?(T=k,c(k)?T=v(k):d(k)&&!f(k)||(T=s(w))):C=!1}C&&(_.set(w,T),b(T,w,m,x,_),_.delete(w)),r(t,n,T)}}},function(t,e,n){var r=n(46),i=n(40);t.exports=function(t){return r(t,i(t))}},function(t,e,n){var r=n(67),i=n(68);t.exports=function(t){return r((function(e,n){var r=-1,a=n.length,o=a>1?n[a-1]:void 0,s=a>2?n[2]:void 0;for(o=t.length>3&&"function"==typeof o?(a--,o):void 0,s&&i(n[0],n[1],s)&&(o=a<3?void 0:o,a=1),e=Object(e);++r1&&o(t,e[0],e[1])?e=[]:n>2&&o(e[0],e[1],e[2])&&(e=[e[0]]),i(t,r(e,1),[])}));t.exports=s},function(t,e,n){var r=n(66),i=n(25),a=n(141),o=n(340),s=n(61),c=n(341),u=n(35);t.exports=function(t,e,n){var l=-1;e=r(e.length?e:[u],s(i));var h=a(t,(function(t,n,i){return{criteria:r(e,(function(e){return e(t)})),index:++l,value:t}}));return o(h,(function(t,e){return c(t,e,n)}))}},function(t,e){t.exports=function(t,e){var n=t.length;for(t.sort(e);n--;)t[n]=t[n].value;return t}},function(t,e,n){var r=n(342);t.exports=function(t,e,n){for(var i=-1,a=t.criteria,o=e.criteria,s=a.length,c=n.length;++i=c?u:u*("desc"==n[i]?-1:1)}return t.index-e.index}},function(t,e,n){var r=n(42);t.exports=function(t,e){if(t!==e){var n=void 0!==t,i=null===t,a=t==t,o=r(t),s=void 0!==e,c=null===e,u=e==e,l=r(e);if(!c&&!l&&!o&&t>e||o&&s&&u&&!c&&!l||i&&s&&u||!n&&u||!a)return 1;if(!i&&!o&&!l&&t0;--c)if(r=e[c].dequeue()){i=i.concat(s(t,e,n,r,!0));break}}return i}(n.graph,n.buckets,n.zeroIdx);return r.flatten(r.map(u,(function(e){return t.outEdges(e.v,e.w)})),!0)};var o=r.constant(1);function s(t,e,n,i,a){var o=a?[]:void 0;return r.forEach(t.inEdges(i.v),(function(r){var i=t.edge(r),s=t.node(r.v);a&&o.push({v:r.v,w:r.w}),s.out-=i,c(e,n,s)})),r.forEach(t.outEdges(i.v),(function(r){var i=t.edge(r),a=r.w,o=t.node(a);o.in-=i,c(e,n,o)})),t.removeNode(i.v),o}function c(t,e,n){n.out?n.in?t[n.out-n.in+e].enqueue(n):t[t.length-1].enqueue(n):t[0].enqueue(n)}},function(t,e){function n(){var t={};t._next=t._prev=t,this._sentinel=t}function r(t){t._prev._next=t._next,t._next._prev=t._prev,delete t._next,delete t._prev}function i(t,e){if("_next"!==t&&"_prev"!==t)return e}t.exports=n,n.prototype.dequeue=function(){var t=this._sentinel,e=t._prev;if(e!==t)return r(e),e},n.prototype.enqueue=function(t){var e=this._sentinel;t._prev&&t._next&&r(t),t._next=e._next,e._next._prev=t,e._next=t,t._prev=e},n.prototype.toString=function(){for(var t=[],e=this._sentinel,n=e._prev;n!==e;)t.push(JSON.stringify(n,i)),n=n._prev;return"["+t.join(", ")+"]"}},function(t,e,n){"use strict";var r=n(4),i=n(8);t.exports={run:function(t){t.graph().dummyChains=[],r.forEach(t.edges(),(function(e){!function(t,e){var n,r,a,o=e.v,s=t.node(o).rank,c=e.w,u=t.node(c).rank,l=e.name,h=t.edge(e),f=h.labelRank;if(u!==s+1){for(t.removeEdge(e),a=0,++s;sc.lim&&(u=c,l=!0);var h=r.filter(e.edges(),(function(e){return l===m(0,t.node(e.v),u)&&l!==m(0,t.node(e.w),u)}));return r.minBy(h,(function(t){return a(e,t)}))}function v(t,e,n,i){var a=n.v,o=n.w;t.removeEdge(a,o),t.setEdge(i.v,i.w,{}),d(t),h(t,e),function(t,e){var n=r.find(t.nodes(),(function(t){return!e.node(t).parent})),i=s(t,n);i=i.slice(1),r.forEach(i,(function(n){var r=t.node(n).parent,i=e.edge(n,r),a=!1;i||(i=e.edge(r,n),a=!0),e.node(n).rank=e.node(r).rank+(a?i.minlen:-i.minlen)}))}(t,e)}function m(t,e,n){return n.low<=e.lim&&e.lim<=n.lim}t.exports=l,l.initLowLimValues=d,l.initCutValues=h,l.calcCutValue=f,l.leaveEdge=g,l.enterEdge=y,l.exchangeEdges=v},function(t,e,n){var r=n(4);t.exports=function(t){var e=function(t){var e={},n=0;return r.forEach(t.children(),(function i(a){var o=n;r.forEach(t.children(a),i),e[a]={low:o,lim:n++}})),e}(t);r.forEach(t.graph().dummyChains,(function(n){for(var r=t.node(n),i=r.edgeObj,a=function(t,e,n,r){var i,a,o=[],s=[],c=Math.min(e[n].low,e[r].low),u=Math.max(e[n].lim,e[r].lim);i=n;do{i=t.parent(i),o.push(i)}while(i&&(e[i].low>c||u>e[i].lim));for(a=i,i=r;(i=t.parent(i))!==a;)s.push(i);return{path:o.concat(s.reverse()),lca:a}}(t,e,i.v,i.w),o=a.path,s=a.lca,c=0,u=o[c],l=!0;n!==i.w;){if(r=t.node(n),l){for(;(u=o[c])!==s&&t.node(u).maxRank=2),s=l.buildLayerMatrix(t);var y=a(t,s);y0;)e%2&&(n+=c[e+1]),c[e=e-1>>1]+=t.weight;u+=t.weight*n}))),u}t.exports=function(t,e){for(var n=0,r=1;r=t.barycenter)&&function(t,e){var n=0,r=0;t.weight&&(n+=t.barycenter*t.weight,r+=t.weight),e.weight&&(n+=e.barycenter*e.weight,r+=e.weight),t.vs=e.vs.concat(t.vs),t.barycenter=n/r,t.weight=r,t.i=Math.min(e.i,t.i),e.merged=!0}(t,e)}}function i(e){return function(n){n.in.push(e),0==--n.indegree&&t.push(n)}}for(;t.length;){var a=t.pop();e.push(a),r.forEach(a.in.reverse(),n(a)),r.forEach(a.out,i(a))}return r.map(r.filter(e,(function(t){return!t.merged})),(function(t){return r.pick(t,["vs","i","barycenter","weight"])}))}(r.filter(n,(function(t){return!t.indegree})))}},function(t,e,n){var r=n(4),i=n(8);function a(t,e,n){for(var i;e.length&&(i=r.last(e)).i<=n;)e.pop(),t.push(i.vs),n++;return n}t.exports=function(t,e){var n,o=i.partition(t,(function(t){return r.has(t,"barycenter")})),s=o.lhs,c=r.sortBy(o.rhs,(function(t){return-t.i})),u=[],l=0,h=0,f=0;s.sort((n=!!e,function(t,e){return t.barycentere.barycenter?1:n?e.i-t.i:t.i-e.i})),f=a(u,c,f),r.forEach(s,(function(t){f+=t.vs.length,u.push(t.vs),l+=t.barycenter*t.weight,h+=t.weight,f=a(u,c,f)}));var d={vs:r.flatten(u,!0)};return h&&(d.barycenter=l/h,d.weight=h),d}},function(t,e,n){var r=n(4),i=n(17).Graph;t.exports=function(t,e,n){var a=function(t){for(var e;t.hasNode(e=r.uniqueId("_root")););return e}(t),o=new i({compound:!0}).setGraph({root:a}).setDefaultNodeLabel((function(e){return t.node(e)}));return r.forEach(t.nodes(),(function(i){var s=t.node(i),c=t.parent(i);(s.rank===e||s.minRank<=e&&e<=s.maxRank)&&(o.setNode(i),o.setParent(i,c||a),r.forEach(t[n](i),(function(e){var n=e.v===i?e.w:e.v,a=o.edge(n,i),s=r.isUndefined(a)?0:a.weight;o.setEdge(n,i,{weight:t.edge(e).weight+s})})),r.has(s,"minRank")&&o.setNode(i,{borderLeft:s.borderLeft[e],borderRight:s.borderRight[e]}))})),o}},function(t,e,n){var r=n(4);t.exports=function(t,e,n){var i,a={};r.forEach(n,(function(n){for(var r,o,s=t.parent(n);s;){if((r=t.parent(s))?(o=a[r],a[r]=s):(o=i,i=s),o&&o!==s)return void e.setEdge(o,s);s=r}}))}},function(t,e,n){"use strict";var r=n(4),i=n(8),a=n(365).positionX;t.exports=function(t){(function(t){var e=i.buildLayerMatrix(t),n=t.graph().ranksep,a=0;r.forEach(e,(function(e){var i=r.max(r.map(e,(function(e){return t.node(e).height})));r.forEach(e,(function(e){t.node(e).y=a+i/2})),a+=i+n}))})(t=i.asNonCompoundGraph(t)),r.forEach(a(t),(function(e,n){t.node(n).x=e}))}},function(t,e,n){"use strict";var r=n(4),i=n(17).Graph,a=n(8);function o(t,e){var n={};return r.reduce(e,(function(e,i){var a=0,o=0,s=e.length,u=r.last(i);return r.forEach(i,(function(e,l){var h=function(t,e){if(t.node(e).dummy)return r.find(t.predecessors(e),(function(e){return t.node(e).dummy}))}(t,e),f=h?t.node(h).order:s;(h||e===u)&&(r.forEach(i.slice(o,l+1),(function(e){r.forEach(t.predecessors(e),(function(r){var i=t.node(r),o=i.order;!(os)&&c(n,e,u)}))}))}return r.reduce(e,(function(e,n){var a,o=-1,s=0;return r.forEach(n,(function(r,c){if("border"===t.node(r).dummy){var u=t.predecessors(r);u.length&&(a=t.node(u[0]).order,i(n,s,c,o,a),s=c,o=a)}i(n,s,n.length,a,e.length)})),n})),n}function c(t,e,n){if(e>n){var r=e;e=n,n=r}var i=t[e];i||(t[e]=i={}),i[n]=!0}function u(t,e,n){if(e>n){var i=e;e=n,n=i}return r.has(t[e],n)}function l(t,e,n,i){var a={},o={},s={};return r.forEach(e,(function(t){r.forEach(t,(function(t,e){a[t]=t,o[t]=t,s[t]=e}))})),r.forEach(e,(function(t){var e=-1;r.forEach(t,(function(t){var c=i(t);if(c.length)for(var l=((c=r.sortBy(c,(function(t){return s[t]}))).length-1)/2,h=Math.floor(l),f=Math.ceil(l);h<=f;++h){var d=c[h];o[t]===t&&e0}t.exports=function(t,e,r,i){var a,o,s,c,u,l,h,f,d,p,g,y,v;if(a=e.y-t.y,s=t.x-e.x,u=e.x*t.y-t.x*e.y,d=a*r.x+s*r.y+u,p=a*i.x+s*i.y+u,!(0!==d&&0!==p&&n(d,p)||(o=i.y-r.y,c=r.x-i.x,l=i.x*r.y-r.x*i.y,h=o*t.x+c*t.y+l,f=o*e.x+c*e.y+l,0!==h&&0!==f&&n(h,f)||0==(g=a*c-o*s))))return y=Math.abs(g/2),{x:(v=s*l-c*u)<0?(v-y)/g:(v+y)/g,y:(v=o*u-a*l)<0?(v-y)/g:(v+y)/g}}},function(t,e,n){var r=n(43),i=n(31),a=n(153).layout;t.exports=function(){var t=n(371),e=n(374),i=n(375),u=n(376),l=n(377),h=n(378),f=n(379),d=n(380),p=n(381),g=function(n,g){!function(t){t.nodes().forEach((function(e){var n=t.node(e);r.has(n,"label")||t.children(e).length||(n.label=e),r.has(n,"paddingX")&&r.defaults(n,{paddingLeft:n.paddingX,paddingRight:n.paddingX}),r.has(n,"paddingY")&&r.defaults(n,{paddingTop:n.paddingY,paddingBottom:n.paddingY}),r.has(n,"padding")&&r.defaults(n,{paddingLeft:n.padding,paddingRight:n.padding,paddingTop:n.padding,paddingBottom:n.padding}),r.defaults(n,o),r.each(["paddingLeft","paddingRight","paddingTop","paddingBottom"],(function(t){n[t]=Number(n[t])})),r.has(n,"width")&&(n._prevWidth=n.width),r.has(n,"height")&&(n._prevHeight=n.height)})),t.edges().forEach((function(e){var n=t.edge(e);r.has(n,"label")||(n.label=""),r.defaults(n,s)}))}(g);var y=c(n,"output"),v=c(y,"clusters"),m=c(y,"edgePaths"),b=i(c(y,"edgeLabels"),g),x=t(c(y,"nodes"),g,d);a(g),l(x,g),h(b,g),u(m,g,p);var _=e(v,g);f(_,g),function(t){r.each(t.nodes(),(function(e){var n=t.node(e);r.has(n,"_prevWidth")?n.width=n._prevWidth:delete n.width,r.has(n,"_prevHeight")?n.height=n._prevHeight:delete n.height,delete n._prevWidth,delete n._prevHeight}))}(g)};return g.createNodes=function(e){return arguments.length?(t=e,g):t},g.createClusters=function(t){return arguments.length?(e=t,g):e},g.createEdgeLabels=function(t){return arguments.length?(i=t,g):i},g.createEdgePaths=function(t){return arguments.length?(u=t,g):u},g.shapes=function(t){return arguments.length?(d=t,g):d},g.arrows=function(t){return arguments.length?(p=t,g):p},g};var o={paddingLeft:10,paddingRight:10,paddingTop:10,paddingBottom:10,rx:0,ry:0,shape:"rect"},s={arrowhead:"normal",curve:i.curveLinear};function c(t,e){var n=t.select("g."+e);return n.empty()&&(n=t.append("g").attr("class",e)),n}},function(t,e,n){"use strict";var r=n(43),i=n(97),a=n(12),o=n(31);t.exports=function(t,e,n){var s,c=e.nodes().filter((function(t){return!a.isSubgraph(e,t)})),u=t.selectAll("g.node").data(c,(function(t){return t})).classed("update",!0);return u.exit().remove(),u.enter().append("g").attr("class","node").style("opacity",0),(u=t.selectAll("g.node")).each((function(t){var s=e.node(t),c=o.select(this);a.applyClass(c,s.class,(c.classed("update")?"update ":"")+"node"),c.select("g.label").remove();var u=c.append("g").attr("class","label"),l=i(u,s),h=n[s.shape],f=r.pick(l.node().getBBox(),"width","height");s.elem=this,s.id&&c.attr("id",s.id),s.labelId&&u.attr("id",s.labelId),r.has(s,"width")&&(f.width=s.width),r.has(s,"height")&&(f.height=s.height),f.width+=s.paddingLeft+s.paddingRight,f.height+=s.paddingTop+s.paddingBottom,u.attr("transform","translate("+(s.paddingLeft-s.paddingRight)/2+","+(s.paddingTop-s.paddingBottom)/2+")");var d=o.select(this);d.select(".label-container").remove();var p=h(d,f,s).classed("label-container",!0);a.applyStyle(p,s.style);var g=p.node().getBBox();s.width=g.width,s.height=g.height})),s=u.exit?u.exit():u.selectAll(null),a.applyTransition(s,e).style("opacity",0).remove(),u}},function(t,e,n){var r=n(12);t.exports=function(t,e){for(var n=t.append("text"),i=function(t){for(var e,n="",r=!1,i=0;i0&&void 0!==arguments[0]?arguments[0]:"fatal";isNaN(t)&&(t=t.toLowerCase(),void 0!==s[t]&&(t=s[t])),c.trace=function(){},c.debug=function(){},c.info=function(){},c.warn=function(){},c.error=function(){},c.fatal=function(){},t<=s.fatal&&(c.fatal=console.error?console.error.bind(console,l("FATAL"),"color: orange"):console.log.bind(console,"",l("FATAL"))),t<=s.error&&(c.error=console.error?console.error.bind(console,l("ERROR"),"color: orange"):console.log.bind(console,"",l("ERROR"))),t<=s.warn&&(c.warn=console.warn?console.warn.bind(console,l("WARN"),"color: orange"):console.log.bind(console,"",l("WARN"))),t<=s.info&&(c.info=console.info?console.info.bind(console,l("INFO"),"color: lightblue"):console.log.bind(console,"",l("INFO"))),t<=s.debug&&(c.debug=console.debug?console.debug.bind(console,l("DEBUG"),"color: lightgreen"):console.log.bind(console,"",l("DEBUG")))},l=function(t){var e=o()().format("ss.SSS");return"%c".concat(e," : ").concat(t," : ")},h=n(169),f=n.n(h),d=n(0),p=n(44),g=n(70),y=function(t){for(var e="",n=0;n>=0;){if(!((n=t.indexOf("=0)){e+=t,n=-1;break}e+=t.substr(0,n),(n=(t=t.substr(n+1)).indexOf("<\/script>"))>=0&&(n+=9,t=t.substr(n))}return e},v=//gi,m=function(t){return t.replace(v,"#br#")},b={getRows:function(t){if(!t)return 1;var e=m(t);return(e=e.replace(/\\n/g,"#br#")).split("#br#")},sanitizeText:function(t,e){var n=t,r=!0;if(!e.flowchart||!1!==e.flowchart.htmlLabels&&"false"!==e.flowchart.htmlLabels||(r=!1),r){var i=e.securityLevel;"antiscript"===i?n=y(n):"loose"!==i&&(n=function(t){return t.replace(/#br#/g,"
")}(n=(n=(n=m(n)).replace(//g,">")).replace(/=/g,"=")))}return n},hasBreaks:function(t){return//gi.test(t)},splitBreaks:function(t){return t.split(//gi)},lineBreakRegex:v,removeScript:y};function x(t,e){for(var n=0;n1&&void 0!==arguments[1]?arguments[1]:null;try{var n=new RegExp("[%]{2}(?![{]".concat(T.source,")(?=[}][%]{2}).*\n"),"ig");t=t.trim().replace(n,"").replace(/'/gm,'"'),c.debug("Detecting diagram directive".concat(null!==e?" type:"+e:""," based on the text:").concat(t));for(var r,i=[];null!==(r=E.exec(t));)if(r.index===E.lastIndex&&E.lastIndex++,r&&!e||e&&r[1]&&r[1].match(e)||e&&r[2]&&r[2].match(e)){var a=r[1]?r[1]:r[2],o=r[3]?r[3].trim():r[4]?JSON.parse(r[4].trim()):null;i.push({type:a,args:o})}return 0===i.length&&i.push({type:t,args:null}),1===i.length?i[0]:i}catch(n){return c.error("ERROR: ".concat(n.message," - Unable to parse directive").concat(null!==e?" type:"+e:""," based on the text:").concat(t)),{type:null,args:null}}},S=function(t){return t=t.replace(E,"").replace(C,"\n"),c.debug("Detecting diagram type based on the text "+t),t.match(/^\s*sequenceDiagram/)?"sequence":t.match(/^\s*gantt/)?"gantt":t.match(/^\s*classDiagram-v2/)?"classDiagram":t.match(/^\s*classDiagram/)?"class":t.match(/^\s*stateDiagram-v2/)?"stateDiagram":t.match(/^\s*stateDiagram/)?"state":t.match(/^\s*gitGraph/)?"git":t.match(/^\s*flowchart/)?"flowchart-v2":t.match(/^\s*info/)?"info":t.match(/^\s*pie/)?"pie":t.match(/^\s*erDiagram/)?"er":t.match(/^\s*journey/)?"journey":"flowchart"},M=function(t,e){var n={};return function(){for(var r=arguments.length,i=new Array(r),a=0;a"},n),b.lineBreakRegex.test(t))return t;var r=t.split(" "),i=[],a="";return r.forEach((function(t,o){var s=Y("".concat(t," "),n),c=Y(a,n);if(s>e){var u=R(t,e,"-",n),l=u.hyphenatedStrings,h=u.remainingWord;i.push.apply(i,[a].concat(k(l))),a=h}else c+s>=e?(i.push(a),a=t):a=[a,t].filter(Boolean).join(" ");o+1===r.length&&i.push(a)})),i.filter((function(t){return""!==t})).join(n.joinWith)}),(function(t,e,n){return"".concat(t,"-").concat(e,"-").concat(n.fontSize,"-").concat(n.fontWeight,"-").concat(n.fontFamily,"-").concat(n.joinWith)})),R=M((function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"-",r=arguments.length>3?arguments[3]:void 0;r=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:0},r);var i=t.split(""),a=[],o="";return i.forEach((function(t,s){var c="".concat(o).concat(t);if(Y(c,r)>=e){var u=s+1,l=i.length===u,h="".concat(c).concat(n);a.push(l?c:h),o=""}else o=c})),{hyphenatedStrings:a,remainingWord:o}}),(function(t,e){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"-",r=arguments.length>3?arguments[3]:void 0;return"".concat(t,"-").concat(e,"-").concat(n,"-").concat(r.fontSize,"-").concat(r.fontWeight,"-").concat(r.fontFamily)})),Y=function(t,e){return e=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial"},e),z(t,e).width},z=M((function(t,e){var n=e=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial"},e),r=n.fontSize,i=n.fontFamily,a=n.fontWeight;if(!t)return{width:0,height:0};var o=["sans-serif",i],s=t.split(b.lineBreakRegex),c=[],u=Object(d.select)("body");if(!u.remove)return{width:0,height:0,lineHeight:0};for(var l=u.append("svg"),h=0,f=o;hc[1].height&&c[0].width>c[1].width&&c[0].lineHeight>c[1].lineHeight?0:1]}),(function(t,e){return"".concat(t,"-").concat(e.fontSize,"-").concat(e.fontWeight,"-").concat(e.fontFamily)})),U=function(t,e,n){var r=new Map;return r.set("height",t),n?(r.set("width","100%"),r.set("style","max-width: ".concat(e,"px;"))):r.set("width",e),r},$=function(t,e,n,r){!function(t,e){var n=!0,r=!1,i=void 0;try{for(var a,o=e[Symbol.iterator]();!(n=(a=o.next()).done);n=!0){var s=a.value;t.attr(s[0],s[1])}}catch(t){r=!0,i=t}finally{try{n||null==o.return||o.return()}finally{if(r)throw i}}}(t,U(e,n,r))},W={assignWithDepth:I,wrapLabel:j,calculateTextHeight:function(t,e){return e=Object.assign({fontSize:12,fontWeight:400,fontFamily:"Arial",margin:15},e),z(t,e).height},calculateTextWidth:Y,calculateTextDimensions:z,calculateSvgSizeAttrs:U,configureSvgSize:$,detectInit:function(t){var e=A(t,/(?:init\b)|(?:initialize\b)/),n={};if(Array.isArray(e)){var r=e.map((function(t){return t.args}));n=I(n,k(r))}else n=e.args;if(n){var i=S(t);["config"].forEach((function(t){void 0!==n[t]&&("flowchart-v2"===i&&(i="flowchart"),n[i]=n[t],delete n[t])}))}return n},detectDirective:A,detectType:S,isSubstringInArray:function(t,e){for(var n=0;n=1&&(i={x:t.x,y:t.y}),a>0&&a<1&&(i={x:(1-a)*e.x+a*t.x,y:(1-a)*e.y+a*t.y})}}e=t})),i}(t)},calcCardinalityPosition:function(t,e,n){var r;c.info("our points",e),e[0]!==n&&(e=e.reverse()),e.forEach((function(t){D(t,r),r=t}));var i,a=25;r=void 0,e.forEach((function(t){if(r&&!i){var e=D(t,r);if(e=1&&(i={x:t.x,y:t.y}),n>0&&n<1&&(i={x:(1-n)*r.x+n*t.x,y:(1-n)*r.y+n*t.y})}}r=t}));var o=t?10:5,s=Math.atan2(e[0].y-i.y,e[0].x-i.x),u={x:0,y:0};return u.x=Math.sin(s)*o+(e[0].x+i.x)/2,u.y=-Math.cos(s)*o+(e[0].y+i.y)/2,u},calcTerminalLabelPosition:function(t,e,n){var r,i=JSON.parse(JSON.stringify(n));c.info("our points",i),"start_left"!==e&&"start_right"!==e&&(i=i.reverse()),i.forEach((function(t){D(t,r),r=t}));var a,o=25;r=void 0,i.forEach((function(t){if(r&&!a){var e=D(t,r);if(e=1&&(a={x:t.x,y:t.y}),n>0&&n<1&&(a={x:(1-n)*r.x+n*t.x,y:(1-n)*r.y+n*t.y})}}r=t}));var s=10,u=Math.atan2(i[0].y-a.y,i[0].x-a.x),l={x:0,y:0};return l.x=Math.sin(u)*s+(i[0].x+a.x)/2,l.y=-Math.cos(u)*s+(i[0].y+a.y)/2,"start_left"===e&&(l.x=Math.sin(u+Math.PI)*s+(i[0].x+a.x)/2,l.y=-Math.cos(u+Math.PI)*s+(i[0].y+a.y)/2),"end_right"===e&&(l.x=Math.sin(u-Math.PI)*s+(i[0].x+a.x)/2-5,l.y=-Math.cos(u-Math.PI)*s+(i[0].y+a.y)/2-5),"end_left"===e&&(l.x=Math.sin(u)*s+(i[0].x+a.x)/2-5,l.y=-Math.cos(u)*s+(i[0].y+a.y)/2-5),l},formatUrl:function(t,e){var n=t.trim();if(n)return"loose"!==e.securityLevel?Object(g.sanitizeUrl)(n):n},getStylesFromArray:N,generateId:L,random:P,memoize:M,runFunc:function(t){for(var e,n=t.split("."),r=n.length-1,i=n[r],a=window,o=0;o1?s-1:0),u=1;u=0&&(n=!0)})),n},Vt=function(t,e){var n=[];return t.nodes.forEach((function(r,i){Ht(e,r)||n.push(t.nodes[i])})),{nodes:n}},Gt={parseDirective:function(t,e,n){_o.parseDirective(this,t,e,n)},defaultConfig:function(){return pt.flowchart},addVertex:function(t,e,n,r,i){var a,o=t;void 0!==o&&0!==o.trim().length&&(void 0===Mt[o]&&(Mt[o]={id:o,domId:"flowchart-"+o+"-"+At,styles:[],classes:[]}),At++,void 0!==e?(St=xt(),'"'===(a=b.sanitizeText(e.trim(),St))[0]&&'"'===a[a.length-1]&&(a=a.substring(1,a.length-1)),Mt[o].text=a):void 0===Mt[o].text&&(Mt[o].text=t),void 0!==n&&(Mt[o].type=n),null!=r&&r.forEach((function(t){Mt[o].styles.push(t)})),null!=i&&i.forEach((function(t){Mt[o].classes.push(t)})))},lookUpDomId:jt,addLink:function(t,e,n,r){var i,a;for(i=0;i/)&&(Tt="LR"),Tt.match(/.*v/)&&(Tt="TB")},setClass:Yt,setTooltip:function(t,e){t.split(",").forEach((function(t){void 0!==e&&(Lt["gen-1"===Ct?jt(t):t]=b.sanitizeText(e,St))}))},getTooltip:function(t){return Lt[t]},setClickEvent:function(t,e,n){t.split(",").forEach((function(t){!function(t,e,n){var r=jt(t);if("loose"===xt().securityLevel&&void 0!==e){var i=[];if("string"==typeof n){i=n.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(var a=0;a=0)&&s.push(t))})),"gen-1"===Ct){c.warn("LOOKING UP");for(var l=0;l0&&function t(e,n){var r=Nt[n].nodes;if(!(($t+=1)>2e3)){if(Wt[$t]=n,Nt[n].id===e)return{result:!0,count:0};for(var i=0,a=1;i=0){var s=t(e,o);if(s.result)return{result:!0,count:a+s.count};a+=s.count}i+=1}return{result:!1,count:a}}}("none",Nt.length-1)},getSubGraphs:function(){return Nt},destructLink:function(t,e){var n,r=function(t){var e=t.trim(),n=e.slice(0,-1),r="arrow_open";switch(e.slice(-1)){case"x":r="arrow_cross","x"===e[0]&&(r="double_"+r,n=n.slice(1));break;case">":r="arrow_point","<"===e[0]&&(r="double_"+r,n=n.slice(1));break;case"o":r="arrow_circle","o"===e[0]&&(r="double_"+r,n=n.slice(1))}var i="normal",a=n.length-1;"="===n[0]&&(i="thick");var o=function(t,e){for(var n=e.length,r=0,i=0;in.height/2-a)){var o=a*a*(1-r*r/(i*i));0!=o&&(o=Math.sqrt(o)),o=a-o,t.y-n.y>0&&(o=-o),e.y+=o}return e},c}function he(t,e,n,r){return t.insert("polygon",":first-child").attr("points",r.map((function(t){return t.x+","+t.y})).join(" ")).attr("transform","translate("+-e/2+","+n/2+")")}var fe=function(t){t.shapes().question=te,t.shapes().hexagon=ee,t.shapes().stadium=ce,t.shapes().subroutine=ue,t.shapes().cylinder=le,t.shapes().rect_left_inv_arrow=ne,t.shapes().lean_right=re,t.shapes().lean_left=ie,t.shapes().trapezoid=ae,t.shapes().inv_trapezoid=oe,t.shapes().rect_right_inv_arrow=se},de={},pe=function(t,e,n){var r=Object(d.select)('[id="'.concat(n,'"]'));Object.keys(t).forEach((function(n){var i=t[n],a="default";i.classes.length>0&&(a=i.classes.join(" "));var o,s=N(i.styles),u=void 0!==i.text?i.text:i.id;if(xt().flowchart.htmlLabels){var l={label:u.replace(/fa[lrsb]?:fa-[\w-]+/g,(function(t){return"")}))};(o=Qt()(r,l).node()).parentNode.removeChild(o)}else{var h=document.createElementNS("http://www.w3.org/2000/svg","text");h.setAttribute("style",s.labelStyle.replace("color:","fill:"));for(var f=u.split(b.lineBreakRegex),d=0;d').concat(a.text.replace(/fa[lrsb]?:fa-[\w-]+/g,(function(t){return"")})),"")):(u.labelType="text",u.label=a.text.replace(b.lineBreakRegex,"\n"),void 0===a.style&&(u.style=u.style||"stroke: #333; stroke-width: 1.5px;fill:none"),u.labelStyle=u.labelStyle.replace("color:","fill:"))),u.id=o,u.class=s+" "+c,u.minlen=a.length||1,e.setEdge(Gt.lookUpDomId(a.start),Gt.lookUpDomId(a.end),u,i)}))},ye=function(t){for(var e=Object.keys(t),n=0;n"),c.info("vertexText"+i),function(t){var e,n=Object(d.select)(document.createElementNS("http://www.w3.org/2000/svg","foreignObject")),r=n.append("xhtml:div"),i=t.label,a=t.isNode?"nodeLabel":"edgeLabel";return r.html(''+i+""),(e=t.labelStyle)&&r.attr("style",e),r.style("display","inline-block"),r.style("white-space","nowrap"),r.attr("xmlns","http://www.w3.org/1999/xhtml"),n.node()}({isNode:r,label:i.replace(/fa[lrsb]?:fa-[\w-]+/g,(function(t){return"")})),labelStyle:e.replace("fill:","color:")});var a=document.createElementNS("http://www.w3.org/2000/svg","text");a.setAttribute("style",e.replace("color:","fill:"));var o=[];o="string"==typeof i?i.split(/\\n|\n|/gi):Array.isArray(i)?i:[];for(var s=0;s0)t(a,n,r,i);else{var o=n.node(a);c.info("cp ",a," to ",i," with parent ",e),r.setNode(a,o),i!==n.parent(a)&&(c.warn("Setting parent",a,n.parent(a)),r.setParent(a,n.parent(a))),e!==i&&a!==e?(c.debug("Setting parent",a,e),r.setParent(a,e)):(c.info("In copy ",e,"root",i,"data",n.node(e),i),c.debug("Not Setting parent for node=",a,"cluster!==rootId",e!==i,"node!==clusterId",a!==e));var s=n.edges(a);c.debug("Copying Edges",s),s.forEach((function(t){c.info("Edge",t);var a=n.edge(t.v,t.w,t.name);c.info("Edge data",a,i);try{!function(t,e){return c.info("Decendants of ",e," is ",Te[e]),c.info("Edge is ",t),t.v!==e&&t.w!==e&&(Te[e]?(c.info("Here "),Te[e].indexOf(t.v)>=0||!!Ae(t.v,e)||!!Ae(t.w,e)||Te[e].indexOf(t.w)>=0):(c.debug("Tilt, ",e,",not in decendants"),!1))}(t,i)?c.info("Skipping copy of edge ",t.v,"--\x3e",t.w," rootId: ",i," clusterId:",e):(c.info("Copying as ",t.v,t.w,a,t.name),r.setEdge(t.v,t.w,a,t.name),c.info("newGraph edges ",r.edges(),r.edge(r.edges()[0])))}catch(t){c.error(t)}}))}c.debug("Removing node",a),n.removeNode(a)}))},Me=function t(e,n){c.trace("Searching",e);var r=n.children(e);if(c.trace("Searching children of id ",e,r),r.length<1)return c.trace("This is a valid node",e),e;for(var i=0;i ",a),a}},Oe=function(t){return Ee[t]&&Ee[t].externalConnections&&Ee[t]?Ee[t].id:t},De=function t(e,n){if(c.warn("extractor - ",n,V.a.json.write(e),e.children("D")),n>10)c.error("Bailing out");else{for(var r=e.nodes(),i=!1,a=0;a0}if(i){c.debug("Nodes = ",r,n);for(var u=0;u0){c.warn("Cluster without external connections, without a parent and with children",l,n);var h=e.graph(),f=new V.a.Graph({multigraph:!0,compound:!0}).setGraph({rankdir:"TB"===h.rankdir?"LR":"TB",nodesep:50,ranksep:50,marginx:8,marginy:8}).setDefaultEdgeLabel((function(){return{}}));c.warn("Old graph before copy",V.a.json.write(e)),Se(l,e,f,l),e.setNode(l,{clusterNode:!0,id:l,clusterData:Ee[l].clusterData,labelText:Ee[l].labelText,graph:f}),c.warn("New graph after copy node: (",l,")",V.a.json.write(f)),c.debug("Old graph after copy",V.a.json.write(e))}else c.warn("Cluster ** ",l," **not meeting the criteria !externalConnections:",!Ee[l].externalConnections," no parent: ",!e.parent(l)," children ",e.children(l)&&e.children(l).length>0,e.children("D"),n),c.debug(Ee);else c.debug("Not a cluster",l,n)}r=e.nodes(),c.warn("New list of nodes",r);for(var d=0;d0}var Pe=function(t,e,n,r){var i,a,o,s,c,u,l,h,f,d,p,g,y;if(i=e.y-t.y,o=t.x-e.x,c=e.x*t.y-t.x*e.y,f=i*n.x+o*n.y+c,d=i*r.x+o*r.y+c,!(0!==f&&0!==d&&Le(f,d)||(a=r.y-n.y,s=n.x-r.x,u=r.x*n.y-n.x*r.y,l=a*t.x+s*t.y+u,h=a*e.x+s*e.y+u,0!==l&&0!==h&&Le(l,h)||0==(p=i*s-a*o))))return g=Math.abs(p/2),{x:(y=o*u-s*c)<0?(y-g)/p:(y+g)/p,y:(y=a*c-i*u)<0?(y-g)/p:(y+g)/p}},Ie=function(t,e){var n,r,i=t.x,a=t.y,o=e.x-i,s=e.y-a,c=t.width/2,u=t.height/2;return Math.abs(s)*c>Math.abs(o)*u?(s<0&&(u=-u),n=0===s?0:u*o/s,r=u):(o<0&&(c=-c),n=c,r=0===o?0:c*s/o),{x:i+n,y:a+r}},Fe=(n.n(Ne).a,function(t,e,n){return Be(t,e,e,n)}),je=function(t,e,n){var r=t.x,i=t.y,a=[],o=Number.POSITIVE_INFINITY,s=Number.POSITIVE_INFINITY;"function"==typeof e.forEach?e.forEach((function(t){o=Math.min(o,t.x),s=Math.min(s,t.y)})):(o=Math.min(o,e.x),s=Math.min(s,e.y));for(var c=r-t.width/2-o,u=i-t.height/2-s,l=0;l1&&a.sort((function(t,e){var r=t.x-n.x,i=t.y-n.y,a=Math.sqrt(r*r+i*i),o=e.x-n.x,s=e.y-n.y,c=Math.sqrt(o*o+s*s);return a0){var r=t.split("~");n=r[0],e=r[1]}return{className:n,type:e}},He=function(t){var e=We(t);void 0===ze[e.className]&&(ze[e.className]={id:e.className,type:e.type,cssClasses:[],methods:[],members:[],annotations:[],domId:"classid-"+e.className+"-"+Ue},Ue++)},Ve=function(t){for(var e=Object.keys(ze),n=0;n>")?r.annotations.push(i.substring(2,i.length-2)):i.indexOf(")")>0?r.methods.push(i):i&&r.members.push(i)}},qe=function(t,e){t.split(",").forEach((function(t){var n=t;t[0].match(/\d/)&&(n="classid-"+n),void 0!==ze[n]&&ze[n].cssClasses.push(e)}))},Xe=function(t,e,n){var r=xt(),i=t,a=Ve(i);if("loose"===r.securityLevel&&void 0!==e&&void 0!==ze[i]){var o=[];if("string"==typeof n){o=n.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);for(var s=0;s1&&a>i&&a<=t.length){var o="",s="",c=t.substring(0,1);c.match(/\w/)?s=t.substring(0,i).trim():(c.match(/\+|-|~|#/)&&(o=c),s=t.substring(1,i).trim());var u=t.substring(i+1,a),l=t.substring(a+1,1);n=sn(l),e=o+s+"("+on(u.trim())+")",a<"".length&&""!==(r=t.substring(a+2).trim())&&(r=" : "+on(r))}else e=on(t);return{displayText:e,cssStyle:n}},an=function(t,e,n,r){var i=tn(e),a=t.append("tspan").attr("x",r.padding).text(i.displayText);""!==i.cssStyle&&a.attr("style",i.cssStyle),n||a.attr("dy",r.textHeight)},on=function t(e){var n=e;return-1!=e.indexOf("~")?t(n=(n=n.replace("~","<")).replace("~",">")):n},sn=function(t){switch(t){case"*":return"font-style:italic;";case"$":return"text-decoration:underline;";default:return""}},cn=function(t,e,n){c.info("Rendering class "+e);var r,i=e.id,a={id:i,label:e.id,width:0,height:0},o=t.append("g").attr("id",Ve(i)).attr("class","classGroup");r=e.link?o.append("svg:a").attr("xlink:href",e.link).attr("target",e.linkTarget).append("text").attr("y",n.textHeight+n.padding).attr("x",0):o.append("text").attr("y",n.textHeight+n.padding).attr("x",0);var s=!0;e.annotations.forEach((function(t){var e=r.append("tspan").text("«"+t+"»");s||e.attr("dy",n.textHeight),s=!1}));var u=e.id;void 0!==e.type&&""!==e.type&&(u+="<"+e.type+">");var l=r.append("tspan").text(u).attr("class","title");s||l.attr("dy",n.textHeight);var h=r.node().getBBox().height,f=o.append("line").attr("x1",0).attr("y1",n.padding+h+n.dividerMargin/2).attr("y2",n.padding+h+n.dividerMargin/2),d=o.append("text").attr("x",n.padding).attr("y",h+n.dividerMargin+n.textHeight).attr("fill","white").attr("class","classText");s=!0,e.members.forEach((function(t){an(d,t,s,n),s=!1}));var p=d.node().getBBox(),g=o.append("line").attr("x1",0).attr("y1",n.padding+h+n.dividerMargin+p.height).attr("y2",n.padding+h+n.dividerMargin+p.height),y=o.append("text").attr("x",n.padding).attr("y",h+2*n.dividerMargin+p.height+n.textHeight).attr("fill","white").attr("class","classText");s=!0,e.methods.forEach((function(t){an(y,t,s,n),s=!1}));var v=o.node().getBBox(),m=" ";e.cssClasses.length>0&&(m+=e.cssClasses.join(" "));var b=o.insert("rect",":first-child").attr("x",0).attr("y",0).attr("width",v.width+2*n.padding).attr("height",v.height+n.padding+.5*n.dividerMargin).attr("class",m).node().getBBox().width;return r.node().childNodes.forEach((function(t){t.setAttribute("x",(b-t.getBBox().width)/2)})),e.tooltip&&r.insert("title").text(e.tooltip),f.attr("x2",b),g.attr("x2",b),a.width=b,a.height=v.height+n.padding+.5*n.dividerMargin,a},un=function(t,e,n){var r=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),i=70,a=10;"LR"===n&&(i=10,a=70);var o=r.append("rect").style("stroke","black").style("fill","black").attr("x",-1*i/2).attr("y",-1*a/2).attr("width",i).attr("height",a).attr("class","fork-join");return ke(e,o),e.height=e.height+e.padding/2,e.width=e.width+e.padding/2,e.intersect=function(t){return Re(e,t)},r},ln={question:function(t,e){var n=_e(t,e,void 0,!0),r=n.shapeSvg,i=n.bbox,a=i.width+e.padding+(i.height+e.padding),o=[{x:a/2,y:0},{x:a,y:-a/2},{x:a/2,y:-a},{x:0,y:-a/2}];c.info("Question main (Circle)");var s=we(r,a,a,o);return ke(e,s),e.intersect=function(t){return c.warn("Intersect called"),je(e,o,t)},r},rect:function(t,e){var n=_e(t,e,"node "+e.classes,!0),r=n.shapeSvg,i=n.bbox,a=n.halfPadding;c.trace("Classes = ",e.classes);var o=r.insert("rect",":first-child");return o.attr("class","basic label-container").attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",-i.width/2-a).attr("y",-i.height/2-a).attr("width",i.width+e.padding).attr("height",i.height+e.padding),ke(e,o),e.intersect=function(t){return Re(e,t)},r},rectWithTitle:function(t,e){var n;n=e.classes?"node "+e.classes:"node default";var r=t.insert("g").attr("class",n).attr("id",e.domId||e.id),i=r.insert("rect",":first-child"),a=r.insert("line"),o=r.insert("g").attr("class","label"),s=e.labelText.flat();c.info("Label text",s[0]);var u,l=o.node().appendChild(xe(s[0],e.labelStyle,!0,!0));if(xt().flowchart.htmlLabels){var h=l.children[0],f=Object(d.select)(l);u=h.getBoundingClientRect(),f.attr("width",u.width),f.attr("height",u.height)}c.info("Text 2",s);var p=s.slice(1,s.length),g=l.getBBox(),y=o.node().appendChild(xe(p.join("
"),e.labelStyle,!0,!0));if(xt().flowchart.htmlLabels){var v=y.children[0],m=Object(d.select)(y);u=v.getBoundingClientRect(),m.attr("width",u.width),m.attr("height",u.height)}var b=e.padding/2;return Object(d.select)(y).attr("transform","translate( "+(u.width>g.width?0:(g.width-u.width)/2)+", "+(g.height+b+5)+")"),Object(d.select)(l).attr("transform","translate( "+(u.widthe.height/2-s)){var i=s*s*(1-r*r/(o*o));0!=i&&(i=Math.sqrt(i)),i=s-i,t.y-e.y>0&&(i=-i),n.y+=i}return n},r},start:function(t,e){var n=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),r=n.insert("circle",":first-child");return r.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),ke(e,r),e.intersect=function(t){return Fe(e,7,t)},n},end:function(t,e){var n=t.insert("g").attr("class","node default").attr("id",e.domId||e.id),r=n.insert("circle",":first-child"),i=n.insert("circle",":first-child");return i.attr("class","state-start").attr("r",7).attr("width",14).attr("height",14),r.attr("class","state-end").attr("r",5).attr("width",10).attr("height",10),ke(e,i),e.intersect=function(t){return Fe(e,7,t)},n},note:function(t,e){var n=_e(t,e,"node "+e.classes,!0),r=n.shapeSvg,i=n.bbox,a=n.halfPadding;c.info("Classes = ",e.classes);var o=r.insert("rect",":first-child");return o.attr("rx",e.rx).attr("ry",e.ry).attr("x",-i.width/2-a).attr("y",-i.height/2-a).attr("width",i.width+e.padding).attr("height",i.height+e.padding),ke(e,o),e.intersect=function(t){return Re(e,t)},r},subroutine:function(t,e){var n=_e(t,e,void 0,!0),r=n.shapeSvg,i=n.bbox,a=i.width+e.padding,o=i.height+e.padding,s=we(r,a,o,[{x:0,y:0},{x:a,y:0},{x:a,y:-o},{x:0,y:-o},{x:0,y:0},{x:-8,y:0},{x:a+8,y:0},{x:a+8,y:-o},{x:-8,y:-o},{x:-8,y:0}]);return ke(e,s),e.intersect=function(t){return je(e,t)},r},fork:un,join:un,class_box:function(t,e){var n,r=e.padding/2;n=e.classes?"node "+e.classes:"node default";var i=t.insert("g").attr("class",n).attr("id",e.domId||e.id),a=i.insert("rect",":first-child"),o=i.insert("line"),s=i.insert("line"),c=0,u=4,l=i.insert("g").attr("class","label"),h=0,f=e.classData.annotations&&e.classData.annotations[0],p=e.classData.annotations[0]?"«"+e.classData.annotations[0]+"»":"",g=l.node().appendChild(xe(p,e.labelStyle,!0,!0)),y=g.getBBox();if(xt().flowchart.htmlLabels){var v=g.children[0],m=Object(d.select)(g);y=v.getBoundingClientRect(),m.attr("width",y.width),m.attr("height",y.height)}e.classData.annotations[0]&&(u+=y.height+4,c+=y.width);var b=e.classData.id;void 0!==e.classData.type&&""!==e.classData.type&&(b+="<"+e.classData.type+">");var x=l.node().appendChild(xe(b,e.labelStyle,!0,!0));Object(d.select)(x).attr("class","classTitle");var _=x.getBBox();if(xt().flowchart.htmlLabels){var k=x.children[0],w=Object(d.select)(x);_=k.getBoundingClientRect(),w.attr("width",_.width),w.attr("height",_.height)}u+=_.height+4,_.width>c&&(c=_.width);var E=[];e.classData.members.forEach((function(t){var n=tn(t).displayText,r=l.node().appendChild(xe(n,e.labelStyle,!0,!0)),i=r.getBBox();if(xt().flowchart.htmlLabels){var a=r.children[0],o=Object(d.select)(r);i=a.getBoundingClientRect(),o.attr("width",i.width),o.attr("height",i.height)}i.width>c&&(c=i.width),u+=i.height+4,E.push(r)})),u+=8;var T=[];if(e.classData.methods.forEach((function(t){var n=tn(t).displayText,r=l.node().appendChild(xe(n,e.labelStyle,!0,!0)),i=r.getBBox();if(xt().flowchart.htmlLabels){var a=r.children[0],o=Object(d.select)(r);i=a.getBoundingClientRect(),o.attr("width",i.width),o.attr("height",i.height)}i.width>c&&(c=i.width),u+=i.height+4,T.push(r)})),u+=8,f){var C=(c-y.width)/2;Object(d.select)(g).attr("transform","translate( "+(-1*c/2+C)+", "+-1*u/2+")"),h=y.height+4}var A=(c-_.width)/2;return Object(d.select)(x).attr("transform","translate( "+(-1*c/2+A)+", "+(-1*u/2+h)+")"),h+=_.height+4,o.attr("class","divider").attr("x1",-c/2-r).attr("x2",c/2+r).attr("y1",-u/2-r+8+h).attr("y2",-u/2-r+8+h),h+=8,E.forEach((function(t){Object(d.select)(t).attr("transform","translate( "+-c/2+", "+(-1*u/2+h+4)+")"),h+=_.height+4})),h+=8,s.attr("class","divider").attr("x1",-c/2-r).attr("x2",c/2+r).attr("y1",-u/2-r+8+h).attr("y2",-u/2-r+8+h),h+=8,T.forEach((function(t){Object(d.select)(t).attr("transform","translate( "+-c/2+", "+(-1*u/2+h)+")"),h+=_.height+4})),a.attr("class","outer title-state").attr("x",-c/2-r).attr("y",-u/2-r).attr("width",c+e.padding).attr("height",u+e.padding),ke(e,a),e.intersect=function(t){return Re(e,t)},i}},hn={},fn=function(t){var e=hn[t.id];c.trace("Transforming node",t,"translate("+(t.x-t.width/2-5)+", "+(t.y-t.height/2-5)+")"),t.clusterNode?e.attr("transform","translate("+(t.x-t.width/2-8)+", "+(t.y-t.height/2-8)+")"):e.attr("transform","translate("+t.x+", "+t.y+")")},dn={rect:function(t,e){c.trace("Creating subgraph rect for ",e.id,e);var n=t.insert("g").attr("class","cluster"+(e.class?" "+e.class:"")).attr("id",e.id),r=n.insert("rect",":first-child"),i=n.insert("g").attr("class","cluster-label"),a=i.node().appendChild(xe(e.labelText,e.labelStyle,void 0,!0)),o=a.getBBox();if(xt().flowchart.htmlLabels){var s=a.children[0],u=Object(d.select)(a);o=s.getBoundingClientRect(),u.attr("width",o.width),u.attr("height",o.height)}var l=0*e.padding,h=l/2;c.trace("Data ",e,JSON.stringify(e)),r.attr("style",e.style).attr("rx",e.rx).attr("ry",e.ry).attr("x",e.x-e.width/2-h).attr("y",e.y-e.height/2-h).attr("width",e.width+l).attr("height",e.height+l),i.attr("transform","translate("+(e.x-o.width/2)+", "+(e.y-e.height/2+e.padding/3)+")");var f=r.node().getBBox();return e.width=f.width,e.height=f.height,e.intersect=function(t){return Ie(e,t)},n},roundedWithTitle:function(t,e){var n=t.insert("g").attr("class",e.classes).attr("id",e.id),r=n.insert("rect",":first-child"),i=n.insert("g").attr("class","cluster-label"),a=n.append("rect"),o=i.node().appendChild(xe(e.labelText,e.labelStyle,void 0,!0)),s=o.getBBox();if(xt().flowchart.htmlLabels){var c=o.children[0],u=Object(d.select)(o);s=c.getBoundingClientRect(),u.attr("width",s.width),u.attr("height",s.height)}s=o.getBBox();var l=0*e.padding,h=l/2;r.attr("class","outer").attr("x",e.x-e.width/2-h).attr("y",e.y-e.height/2-h).attr("width",e.width+l).attr("height",e.height+l),a.attr("class","inner").attr("x",e.x-e.width/2-h).attr("y",e.y-e.height/2-h+s.height-1).attr("width",e.width+l).attr("height",e.height+l-s.height-3),i.attr("transform","translate("+(e.x-s.width/2)+", "+(e.y-e.height/2-e.padding/3+(xt().flowchart.htmlLabels?5:3))+")");var f=r.node().getBBox();return e.width=f.width,e.height=f.height,e.intersect=function(t){return Ie(e,t)},n},noteGroup:function(t,e){var n=t.insert("g").attr("class","note-cluster").attr("id",e.id),r=n.insert("rect",":first-child"),i=0*e.padding,a=i/2;r.attr("rx",e.rx).attr("ry",e.ry).attr("x",e.x-e.width/2-a).attr("y",e.y-e.height/2-a).attr("width",e.width+i).attr("height",e.height+i).attr("fill","none");var o=r.node().getBBox();return e.width=o.width,e.height=o.height,e.intersect=function(t){return Ie(e,t)},n},divider:function(t,e){var n=t.insert("g").attr("class",e.classes).attr("id",e.id),r=n.insert("rect",":first-child"),i=0*e.padding,a=i/2;r.attr("class","divider").attr("x",e.x-e.width/2-a).attr("y",e.y-e.height/2).attr("width",e.width+i).attr("height",e.height+i);var o=r.node().getBBox();return e.width=o.width,e.height=o.height,e.intersect=function(t){return Ie(e,t)},n}},pn={},gn={},yn={},vn=function(t,e){var n=t.x,r=t.y,i=Math.abs(e.x-n),a=Math.abs(e.y-r),o=t.width/2,s=t.height/2;return i>=o||a>=s},mn=function(t,e,n){c.warn("intersection calc o:",e," i:",n,t);var r=t.x,i=t.y,a=Math.abs(r-n.x),o=t.width/2,s=n.xMath.abs(r-e.x)*u){var y=n.y0&&c.info("Recursive edges",n.edge(n.edges()[0]));var s=o.insert("g").attr("class","clusters"),u=o.insert("g").attr("class","edgePaths"),l=o.insert("g").attr("class","edgeLabels"),h=o.insert("g").attr("class","nodes");return n.nodes().forEach((function(e){var o=n.node(e);if(void 0!==i){var s=JSON.parse(JSON.stringify(i.clusterData));c.info("Setting data for cluster XXX (",e,") ",s,i),n.setNode(i.id,s),n.parent(e)||(c.warn("Setting parent",e,i.id),n.setParent(e,i.id,s))}if(c.info("(Insert) Node XXX"+e+": "+JSON.stringify(n.node(e))),o&&o.clusterNode){c.info("Cluster identified",e,o,n.node(e));var u=t(h,o.graph,r,n.node(e));ke(o,u),function(t,e){hn[e.id]=t}(u,o),c.warn("Recursive render complete",u,o)}else n.children(e).length>0?(c.info("Cluster - the non recursive path XXX",e,o.id,o,n),c.info(Me(o.id,n)),Ee[o.id]={id:Me(o.id,n),node:o}):(c.info("Node - the non recursive path",e,o.id,o),function(t,e,n){var r,i;e.link?(r=t.insert("svg:a").attr("xlink:href",e.link).attr("target",e.linkTarget||"_blank"),i=ln[e.shape](r,e,n)):r=i=ln[e.shape](t,e,n),e.tooltip&&i.attr("title",e.tooltip),e.class&&i.attr("class","node default "+e.class),hn[e.id]=r,e.haveCallback&&hn[e.id].attr("class",hn[e.id].attr("class")+" clickable")}(h,n.node(e),a))})),n.edges().forEach((function(t){var e=n.edge(t.v,t.w,t.name);c.info("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(t)),c.info("Edge "+t.v+" -> "+t.w+": ",t," ",JSON.stringify(n.edge(t))),c.info("Fix",Ee,"ids:",t.v,t.w,"Translateing: ",Ee[t.v],Ee[t.w]),function(t,e){var n=xe(e.label,e.labelStyle),r=t.insert("g").attr("class","edgeLabel"),i=r.insert("g").attr("class","label");i.node().appendChild(n);var a=n.getBBox();if(xt().flowchart.htmlLabels){var o=n.children[0],s=Object(d.select)(n);a=o.getBoundingClientRect(),s.attr("width",a.width),s.attr("height",a.height)}if(i.attr("transform","translate("+-a.width/2+", "+-a.height/2+")"),gn[e.id]=r,e.width=a.width,e.height=a.height,e.startLabelLeft){var c=xe(e.startLabelLeft,e.labelStyle),u=t.insert("g").attr("class","edgeTerminals"),l=u.insert("g").attr("class","inner");l.node().appendChild(c);var h=c.getBBox();l.attr("transform","translate("+-h.width/2+", "+-h.height/2+")"),yn[e.id]||(yn[e.id]={}),yn[e.id].startLeft=u}if(e.startLabelRight){var f=xe(e.startLabelRight,e.labelStyle),p=t.insert("g").attr("class","edgeTerminals"),g=p.insert("g").attr("class","inner");p.node().appendChild(f),g.node().appendChild(f);var y=f.getBBox();g.attr("transform","translate("+-y.width/2+", "+-y.height/2+")"),yn[e.id]||(yn[e.id]={}),yn[e.id].startRight=p}if(e.endLabelLeft){var v=xe(e.endLabelLeft,e.labelStyle),m=t.insert("g").attr("class","edgeTerminals"),b=m.insert("g").attr("class","inner");b.node().appendChild(v);var x=v.getBBox();b.attr("transform","translate("+-x.width/2+", "+-x.height/2+")"),m.node().appendChild(v),yn[e.id]||(yn[e.id]={}),yn[e.id].endLeft=m}if(e.endLabelRight){var _=xe(e.endLabelRight,e.labelStyle),k=t.insert("g").attr("class","edgeTerminals"),w=k.insert("g").attr("class","inner");w.node().appendChild(_);var E=_.getBBox();w.attr("transform","translate("+-E.width/2+", "+-E.height/2+")"),k.node().appendChild(_),yn[e.id]||(yn[e.id]={}),yn[e.id].endRight=k}}(l,e)})),n.edges().forEach((function(t){c.info("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(t))})),c.info("#############################################"),c.info("### Layout ###"),c.info("#############################################"),c.info(n),me.a.layout(n),c.info("Graph after layout:",V.a.json.write(n)),function(t){return function t(e,n){if(0===n.length)return[];var r=Object.assign(n);return n.forEach((function(n){var i=e.children(n),a=t(e,i);r=r.concat(a)})),r}(t,t.children())}(n).forEach((function(t){var e=n.node(t);c.info("Position "+t+": "+JSON.stringify(n.node(t))),c.info("Position "+t+": ("+e.x,","+e.y,") width: ",e.width," height: ",e.height),e&&e.clusterNode?fn(e):n.children(t).length>0?(function(t,e){c.trace("Inserting cluster");var n=e.shape||"rect";pn[e.id]=dn[n](t,e)}(s,e),Ee[e.id].node=e):fn(e)})),n.edges().forEach((function(t){var e=n.edge(t);c.info("Edge "+t.v+" -> "+t.w+": "+JSON.stringify(e),e),function(t,e){c.info("Moving label",t.id,t.label,gn[t.id]);var n=e.updatedPath?e.updatedPath:e.originalPath;if(t.label){var r=gn[t.id],i=t.x,a=t.y;if(n){var o=W.calcLabelPosition(n);c.info("Moving label from (",i,",",a,") to (",o.x,",",o.y,")")}r.attr("transform","translate("+i+", "+a+")")}if(t.startLabelLeft){var s=yn[t.id].startLeft,u=t.x,l=t.y;if(n){var h=W.calcTerminalLabelPosition(0,"start_left",n);u=h.x,l=h.y}s.attr("transform","translate("+u+", "+l+")")}if(t.startLabelRight){var f=yn[t.id].startRight,d=t.x,p=t.y;if(n){var g=W.calcTerminalLabelPosition(0,"start_right",n);d=g.x,p=g.y}f.attr("transform","translate("+d+", "+p+")")}if(t.endLabelLeft){var y=yn[t.id].endLeft,v=t.x,m=t.y;if(n){var b=W.calcTerminalLabelPosition(0,"end_left",n);v=b.x,m=b.y}y.attr("transform","translate("+v+", "+m+")")}if(t.endLabelRight){var x=yn[t.id].endRight,_=t.x,k=t.y;if(n){var w=W.calcTerminalLabelPosition(0,"end_right",n);_=w.x,k=w.y}x.attr("transform","translate("+_+", "+k+")")}}(e,function(t,e,n,r,i,a){var o=n.points,s=!1,u=a.node(e.v),l=a.node(e.w);if(l.intersect&&u.intersect&&((o=o.slice(1,n.points.length-1)).unshift(u.intersect(o[0])),c.info("Last point",o[o.length-1],l,l.intersect(o[o.length-1])),o.push(l.intersect(o[o.length-1]))),n.toCluster){var h;c.trace("edge",n),c.trace("to cluster",r[n.toCluster]),o=[];var f=!1;n.points.forEach((function(t){var e=r[n.toCluster].node;if(vn(e,t)||f)f||o.push(t);else{c.trace("inside",n.toCluster,t,h);var i=mn(e,h,t),a=!1;o.forEach((function(t){a=a||t.x===i.x&&t.y===i.y})),o.find((function(t){return t.x===i.x&&t.y===i.y}))?c.warn("no intersect",i,o):o.push(i),f=!0}h=t})),s=!0}if(n.fromCluster){c.trace("edge",n),c.warn("from cluster",r[n.fromCluster]);for(var p,g=[],y=!1,v=o.length-1;v>=0;v--){var m=o[v],b=r[n.fromCluster].node;if(vn(b,m)||y)c.trace("Outside point",m),y||g.unshift(m);else{c.warn("inside",n.fromCluster,m,b);var x=mn(b,p,m);g.unshift(x),y=!0}p=m}o=g,s=!0}var _,k=o.filter((function(t){return!Number.isNaN(t.y)})),w=Object(d.line)().x((function(t){return t.x})).y((function(t){return t.y})).curve(d.curveBasis);switch(n.thickness){case"normal":_="edge-thickness-normal";break;case"thick":_="edge-thickness-thick";break;default:_=""}switch(n.pattern){case"solid":_+=" edge-pattern-solid";break;case"dotted":_+=" edge-pattern-dotted";break;case"dashed":_+=" edge-pattern-dashed"}var E=t.append("path").attr("d",w(k)).attr("id",n.id).attr("class"," "+_+(n.classes?" "+n.classes:"")).attr("style",n.style),T="";switch(xt().state.arrowMarkerAbsolute&&(T=(T=(T=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search).replace(/\(/g,"\\(")).replace(/\)/g,"\\)")),c.info("arrowTypeStart",n.arrowTypeStart),c.info("arrowTypeEnd",n.arrowTypeEnd),n.arrowTypeStart){case"arrow_cross":E.attr("marker-start","url("+T+"#"+i+"-crossStart)");break;case"arrow_point":E.attr("marker-start","url("+T+"#"+i+"-pointStart)");break;case"arrow_barb":E.attr("marker-start","url("+T+"#"+i+"-barbStart)");break;case"arrow_circle":E.attr("marker-start","url("+T+"#"+i+"-circleStart)");break;case"aggregation":E.attr("marker-start","url("+T+"#"+i+"-aggregationStart)");break;case"extension":E.attr("marker-start","url("+T+"#"+i+"-extensionStart)");break;case"composition":E.attr("marker-start","url("+T+"#"+i+"-compositionStart)");break;case"dependency":E.attr("marker-start","url("+T+"#"+i+"-dependencyStart)")}switch(n.arrowTypeEnd){case"arrow_cross":E.attr("marker-end","url("+T+"#"+i+"-crossEnd)");break;case"arrow_point":E.attr("marker-end","url("+T+"#"+i+"-pointEnd)");break;case"arrow_barb":E.attr("marker-end","url("+T+"#"+i+"-barbEnd)");break;case"arrow_circle":E.attr("marker-end","url("+T+"#"+i+"-circleEnd)");break;case"aggregation":E.attr("marker-end","url("+T+"#"+i+"-aggregationEnd)");break;case"extension":E.attr("marker-end","url("+T+"#"+i+"-extensionEnd)");break;case"composition":E.attr("marker-end","url("+T+"#"+i+"-compositionEnd)");break;case"dependency":E.attr("marker-end","url("+T+"#"+i+"-dependencyEnd)")}var C={};return s&&(C.updatedPath=o),C.originalPath=n.points,C}(u,t,e,Ee,r,n))})),o},xn=function(t,e,n,r,i){(function(t,e,n,r){e.forEach((function(e){be[e](t,n,r)}))})(t,n,r,i),hn={},gn={},yn={},pn={},Te={},Ce={},Ee={},c.warn("Graph at first:",V.a.json.write(e)),function(t,e){!t||e>10?c.debug("Opting out, no graph "):(c.debug("Opting in, graph "),t.nodes().forEach((function(e){t.children(e).length>0&&(c.warn("Cluster identified",e," Replacement id in edges: ",Me(e,t)),Te[e]=function t(e,n){for(var r=n.children(e),i=[].concat(r),a=0;a0?(c.debug("Cluster identified",e,Te),r.forEach((function(t){t.v!==e&&t.w!==e&&Ae(t.v,e)^Ae(t.w,e)&&(c.warn("Edge: ",t," leaves cluster ",e),c.warn("Decendants of XXX ",e,": ",Te[e]),Ee[e].externalConnections=!0)}))):c.debug("Not a cluster ",e,Te)})),t.edges().forEach((function(e){var n=t.edge(e);c.warn("Edge "+e.v+" -> "+e.w+": "+JSON.stringify(e)),c.warn("Edge "+e.v+" -> "+e.w+": "+JSON.stringify(t.edge(e)));var r=e.v,i=e.w;c.warn("Fix XXX",Ee,"ids:",e.v,e.w,"Translateing: ",Ee[e.v]," --- ",Ee[e.w]),(Ee[e.v]||Ee[e.w])&&(c.warn("Fixing and trixing - removing XXX",e.v,e.w,e.name),r=Oe(e.v),i=Oe(e.w),t.removeEdge(e.v,e.w,e.name),r!==e.v&&(n.fromCluster=e.v),i!==e.w&&(n.toCluster=e.w),c.warn("Fix Replacing with XXX",r,i,e.name),t.setEdge(r,i,n,e.name))})),c.warn("Adjusted Graph",V.a.json.write(t)),De(t,0),c.trace(Ee))}(e),c.warn("Graph after:",V.a.json.write(e)),bn(t,e,r)},_n={},kn=function(t,e,n){var r=Object(d.select)('[id="'.concat(n,'"]'));Object.keys(t).forEach((function(n){var i=t[n],a="default";i.classes.length>0&&(a=i.classes.join(" "));var o,s=N(i.styles),u=void 0!==i.text?i.text:i.id;if(xt().flowchart.htmlLabels){var l={label:u.replace(/fa[lrsb]?:fa-[\w-]+/g,(function(t){return"")}))};(o=Qt()(r,l).node()).parentNode.removeChild(o)}else{var h=document.createElementNS("http://www.w3.org/2000/svg","text");h.setAttribute("style",s.labelStyle.replace("color:","fill:"));for(var f=u.split(b.lineBreakRegex),d=0;d0)switch(e.valign){case"top":case"start":s=function(){return Math.round(e.y+e.textMargin)};break;case"middle":case"center":s=function(){return Math.round(e.y+(n+r+e.textMargin)/2)};break;case"bottom":case"end":s=function(){return Math.round(e.y+(n+r+2*e.textMargin)-e.textMargin)}}if(void 0!==e.anchor&&void 0!==e.textMargin&&void 0!==e.width)switch(e.anchor){case"left":case"start":e.x=Math.round(e.x+e.textMargin),e.anchor="start",e.dominantBaseline="text-after-edge",e.alignmentBaseline="middle";break;case"middle":case"center":e.x=Math.round(e.x+e.width/2),e.anchor="middle",e.dominantBaseline="middle",e.alignmentBaseline="middle";break;case"right":case"end":e.x=Math.round(e.x+e.width-e.textMargin),e.anchor="end",e.dominantBaseline="text-before-edge",e.alignmentBaseline="middle"}for(var c=0;c0&&(r+=(l._groups||l)[0][0].getBBox().height,n=r),a.push(l)}return a},An=function(t,e){var n,r,i,a,o=t.append("polygon");return o.attr("points",(n=e.x)+","+(r=e.y)+" "+(n+(i=e.width))+","+r+" "+(n+i)+","+(r+(a=e.height)-7)+" "+(n+i-8.4)+","+(r+a)+" "+n+","+(r+a)),o.attr("class","labelBox"),e.y=e.y+e.height/2,Cn(t,e),o},Sn=-1,Mn=function(){return{x:0,y:0,fill:void 0,anchor:void 0,style:"#666",width:void 0,height:void 0,textMargin:0,rx:0,ry:0,tspan:!0,valign:void 0}},On=function(){return{x:0,y:0,fill:"#EDF2AE",stroke:"#666",width:100,anchor:"start",height:100,rx:0,ry:0}},Dn=function(){function t(t,e,n,i,a,o,s){r(e.append("text").attr("x",n+a/2).attr("y",i+o/2+5).style("text-anchor","middle").text(t),s)}function e(t,e,n,i,a,o,s,c){for(var u=c.actorFontSize,l=c.actorFontFamily,h=c.actorFontWeight,f=t.split(b.lineBreakRegex),d=0;d2&&void 0!==arguments[2]?arguments[2]:{text:void 0,wrap:void 0},r=arguments.length>3?arguments[3]:void 0;if(r===ir.ACTIVE_END){var i=er(t.actor);if(i<1){var a=new Error("Trying to inactivate an inactive participant ("+t.actor+")");throw a.hash={text:"->>-",token:"->>-",line:"1",loc:{first_line:1,last_line:1,first_column:1,last_column:1},expected:["'ACTIVE_PARTICIPANT'"]},a}}return qn.push({from:t,to:e,message:n.text,wrap:void 0===n.wrap&&rr()||!!n.wrap,type:r}),!0},rr=function(){return Qn},ir={SOLID:0,DOTTED:1,NOTE:2,SOLID_CROSS:3,DOTTED_CROSS:4,SOLID_OPEN:5,DOTTED_OPEN:6,LOOP_START:10,LOOP_END:11,ALT_START:12,ALT_ELSE:13,ALT_END:14,OPT_START:15,OPT_END:16,ACTIVE_START:17,ACTIVE_END:18,PAR_START:19,PAR_AND:20,PAR_END:21,RECT_START:22,RECT_END:23,SOLID_POINT:24,DOTTED_POINT:25},ar=function(t,e,n){var r={actor:t,placement:e,message:n.text,wrap:void 0===n.wrap&&rr()||!!n.wrap},i=[].concat(t,t);Xn.push(r),qn.push({from:i[0],to:i[1],message:n.text,wrap:void 0===n.wrap&&rr()||!!n.wrap,type:ir.NOTE,placement:e})},or=function(t){Zn=t.text,Jn=void 0===t.wrap&&rr()||!!t.wrap},sr={addActor:tr,addMessage:function(t,e,n,r){qn.push({from:t,to:e,message:n.text,wrap:void 0===n.wrap&&rr()||!!n.wrap,answer:r})},addSignal:nr,autoWrap:rr,setWrap:function(t){Qn=t},enableSequenceNumbers:function(){Kn=!0},showSequenceNumbers:function(){return Kn},getMessages:function(){return qn},getActors:function(){return Gn},getActor:function(t){return Gn[t]},getActorKeys:function(){return Object.keys(Gn)},getTitle:function(){return Zn},parseDirective:function(t,e,n){_o.parseDirective(this,t,e,n)},getConfig:function(){return xt().sequence},getTitleWrapped:function(){return Jn},clear:function(){Gn={},qn=[]},parseMessage:function(t){var e=t.trim(),n={text:e.replace(/^[:]?(?:no)?wrap:/,"").trim(),wrap:null!==e.match(/^[:]?wrap:/)||null===e.match(/^[:]?nowrap:/)&&void 0};return c.debug("parseMessage:",n),n},LINETYPE:ir,ARROWTYPE:{FILLED:0,OPEN:1},PLACEMENT:{LEFTOF:0,RIGHTOF:1,OVER:2},addNote:ar,setTitle:or,apply:function t(e){if(e instanceof Array)e.forEach((function(e){t(e)}));else switch(e.type){case"addActor":tr(e.actor,e.actor,e.description);break;case"activeStart":case"activeEnd":nr(e.actor,void 0,void 0,e.signalType);break;case"addNote":ar(e.actor,e.placement,e.text);break;case"addMessage":nr(e.from,e.to,e.msg,e.signalType);break;case"loopStart":nr(void 0,void 0,e.loopText,e.signalType);break;case"loopEnd":nr(void 0,void 0,void 0,e.signalType);break;case"rectStart":nr(void 0,void 0,e.color,e.signalType);break;case"rectEnd":nr(void 0,void 0,void 0,e.signalType);break;case"optStart":nr(void 0,void 0,e.optText,e.signalType);break;case"optEnd":nr(void 0,void 0,void 0,e.signalType);break;case"altStart":case"else":nr(void 0,void 0,e.altText,e.signalType);break;case"altEnd":nr(void 0,void 0,void 0,e.signalType);break;case"setTitle":or(e.text);break;case"parStart":case"and":nr(void 0,void 0,e.parText,e.signalType);break;case"parEnd":nr(void 0,void 0,void 0,e.signalType)}}};Wn.parser.yy=sr;var cr={},ur={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],activations:[],models:{getHeight:function(){return Math.max.apply(null,0===this.actors.length?[0]:this.actors.map((function(t){return t.height||0})))+(0===this.loops.length?0:this.loops.map((function(t){return t.height||0})).reduce((function(t,e){return t+e})))+(0===this.messages.length?0:this.messages.map((function(t){return t.height||0})).reduce((function(t,e){return t+e})))+(0===this.notes.length?0:this.notes.map((function(t){return t.height||0})).reduce((function(t,e){return t+e})))},clear:function(){this.actors=[],this.loops=[],this.messages=[],this.notes=[]},addActor:function(t){this.actors.push(t)},addLoop:function(t){this.loops.push(t)},addMessage:function(t){this.messages.push(t)},addNote:function(t){this.notes.push(t)},lastActor:function(){return this.actors[this.actors.length-1]},lastLoop:function(){return this.loops[this.loops.length-1]},lastMessage:function(){return this.messages[this.messages.length-1]},lastNote:function(){return this.notes[this.notes.length-1]},actors:[],loops:[],messages:[],notes:[]},init:function(){this.sequenceItems=[],this.activations=[],this.models.clear(),this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0,pr(Wn.parser.yy.getConfig())},updateVal:function(t,e,n,r){void 0===t[e]?t[e]=n:t[e]=r(n,t[e])},updateBounds:function(t,e,n,r){var i=this,a=0;function o(o){return function(s){a++;var c=i.sequenceItems.length-a+1;i.updateVal(s,"starty",e-c*cr.boxMargin,Math.min),i.updateVal(s,"stopy",r+c*cr.boxMargin,Math.max),i.updateVal(ur.data,"startx",t-c*cr.boxMargin,Math.min),i.updateVal(ur.data,"stopx",n+c*cr.boxMargin,Math.max),"activation"!==o&&(i.updateVal(s,"startx",t-c*cr.boxMargin,Math.min),i.updateVal(s,"stopx",n+c*cr.boxMargin,Math.max),i.updateVal(ur.data,"starty",e-c*cr.boxMargin,Math.min),i.updateVal(ur.data,"stopy",r+c*cr.boxMargin,Math.max))}}this.sequenceItems.forEach(o()),this.activations.forEach(o("activation"))},insert:function(t,e,n,r){var i=Math.min(t,n),a=Math.max(t,n),o=Math.min(e,r),s=Math.max(e,r);this.updateVal(ur.data,"startx",i,Math.min),this.updateVal(ur.data,"starty",o,Math.min),this.updateVal(ur.data,"stopx",a,Math.max),this.updateVal(ur.data,"stopy",s,Math.max),this.updateBounds(i,o,a,s)},newActivation:function(t,e,n){var r=n[t.from.actor],i=gr(t.from.actor).length||0,a=r.x+r.width/2+(i-1)*cr.activationWidth/2;this.activations.push({startx:a,starty:this.verticalPos+2,stopx:a+cr.activationWidth,stopy:void 0,actor:t.from.actor,anchored:Ln(e)})},endActivation:function(t){var e=this.activations.map((function(t){return t.actor})).lastIndexOf(t.from.actor);return this.activations.splice(e,1)[0]},createLoop:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{message:void 0,wrap:!1,width:void 0},e=arguments.length>1?arguments[1]:void 0;return{startx:void 0,starty:this.verticalPos,stopx:void 0,stopy:void 0,title:t.message,wrap:t.wrap,width:t.width,height:0,fill:e}},newLoop:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{message:void 0,wrap:!1,width:void 0},e=arguments.length>1?arguments[1]:void 0;this.sequenceItems.push(this.createLoop(t,e))},endLoop:function(){return this.sequenceItems.pop()},addSectionToLoop:function(t){var e=this.sequenceItems.pop();e.sections=e.sections||[],e.sectionTitles=e.sectionTitles||[],e.sections.push({y:ur.getVerticalPos(),height:0}),e.sectionTitles.push(t),this.sequenceItems.push(e)},bumpVerticalPos:function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=this.verticalPos},getVerticalPos:function(){return this.verticalPos},getBounds:function(){return{bounds:this.data,models:this.models}}},lr=function(t){return{fontFamily:t.messageFontFamily,fontSize:t.messageFontSize,fontWeight:t.messageFontWeight}},hr=function(t){return{fontFamily:t.noteFontFamily,fontSize:t.noteFontSize,fontWeight:t.noteFontWeight}},fr=function(t){return{fontFamily:t.actorFontFamily,fontSize:t.actorFontSize,fontWeight:t.actorFontWeight}},dr=function(t,e,n,r){for(var i=0,a=0,o=0;o0&&o.forEach((function(r){if(n=r,i.startx===i.stopx){var a=e[t.from],o=e[t.to];n.from=Math.min(a.x-i.width/2,a.x-a.width/2,n.from),n.to=Math.max(o.x+i.width/2,o.x+a.width/2,n.to),n.width=Math.max(n.width,Math.abs(n.to-n.from))-cr.labelBoxWidth}else n.from=Math.min(i.startx,n.from),n.to=Math.max(i.stopx,n.to),n.width=Math.max(n.width,i.width)-cr.labelBoxWidth})))})),ur.activations=[],c.debug("Loop type widths:",a),a}(a,r);jn(n),zn(n),Rn(n),Yn(n);var l=1;a.forEach((function(t){var e,i,a;switch(t.type){case Wn.parser.yy.LINETYPE.NOTE:i=t.noteModel,function(t,e){ur.bumpVerticalPos(cr.boxMargin),e.height=cr.boxMargin,e.starty=ur.getVerticalPos();var n=$n();n.x=e.startx,n.y=e.starty,n.width=e.width||cr.width,n.class="note";var r=t.append("g"),i=Nn(r,n),a=Un();a.x=e.startx,a.y=e.starty,a.width=n.width,a.dy="1em",a.text=e.message,a.class="noteText",a.fontFamily=cr.noteFontFamily,a.fontSize=cr.noteFontSize,a.fontWeight=cr.noteFontWeight,a.anchor=cr.noteAlign,a.textMargin=cr.noteMargin,a.valign=cr.noteAlign;var o=Cn(r,a),s=Math.round(o.map((function(t){return(t._groups||t)[0][0].getBBox().height})).reduce((function(t,e){return t+e})));i.attr("height",s+2*cr.noteMargin),e.height+=s+2*cr.noteMargin,ur.bumpVerticalPos(s+2*cr.noteMargin),e.stopy=e.starty+s+2*cr.noteMargin,e.stopx=e.startx+n.width,ur.insert(e.startx,e.starty,e.stopx,e.stopy),ur.models.addNote(e)}(n,i);break;case Wn.parser.yy.LINETYPE.ACTIVE_START:ur.newActivation(t,n,r);break;case Wn.parser.yy.LINETYPE.ACTIVE_END:!function(t,e){var r=ur.endActivation(t);r.starty+18>e&&(r.starty=e-6,e+=12),Pn(n,r,e,cr,gr(t.from.actor).length),ur.insert(r.startx,e-10,r.stopx,e)}(t,ur.getVerticalPos());break;case Wn.parser.yy.LINETYPE.LOOP_START:vr(u,t,cr.boxMargin,cr.boxMargin+cr.boxTextMargin,(function(t){return ur.newLoop(t)}));break;case Wn.parser.yy.LINETYPE.LOOP_END:e=ur.endLoop(),In(n,e,"loop",cr),ur.bumpVerticalPos(e.stopy-ur.getVerticalPos()),ur.models.addLoop(e);break;case Wn.parser.yy.LINETYPE.RECT_START:vr(u,t,cr.boxMargin,cr.boxMargin,(function(t){return ur.newLoop(void 0,t.message)}));break;case Wn.parser.yy.LINETYPE.RECT_END:e=ur.endLoop(),Fn(n,e),ur.models.addLoop(e),ur.bumpVerticalPos(e.stopy-ur.getVerticalPos());break;case Wn.parser.yy.LINETYPE.OPT_START:vr(u,t,cr.boxMargin,cr.boxMargin+cr.boxTextMargin,(function(t){return ur.newLoop(t)}));break;case Wn.parser.yy.LINETYPE.OPT_END:e=ur.endLoop(),In(n,e,"opt",cr),ur.bumpVerticalPos(e.stopy-ur.getVerticalPos()),ur.models.addLoop(e);break;case Wn.parser.yy.LINETYPE.ALT_START:vr(u,t,cr.boxMargin,cr.boxMargin+cr.boxTextMargin,(function(t){return ur.newLoop(t)}));break;case Wn.parser.yy.LINETYPE.ALT_ELSE:vr(u,t,cr.boxMargin+cr.boxTextMargin,cr.boxMargin,(function(t){return ur.addSectionToLoop(t)}));break;case Wn.parser.yy.LINETYPE.ALT_END:e=ur.endLoop(),In(n,e,"alt",cr),ur.bumpVerticalPos(e.stopy-ur.getVerticalPos()),ur.models.addLoop(e);break;case Wn.parser.yy.LINETYPE.PAR_START:vr(u,t,cr.boxMargin,cr.boxMargin+cr.boxTextMargin,(function(t){return ur.newLoop(t)}));break;case Wn.parser.yy.LINETYPE.PAR_AND:vr(u,t,cr.boxMargin+cr.boxTextMargin,cr.boxMargin,(function(t){return ur.addSectionToLoop(t)}));break;case Wn.parser.yy.LINETYPE.PAR_END:e=ur.endLoop(),In(n,e,"par",cr),ur.bumpVerticalPos(e.stopy-ur.getVerticalPos()),ur.models.addLoop(e);break;default:try{(a=t.msgModel).starty=ur.getVerticalPos(),a.sequenceIndex=l,function(t,e){ur.bumpVerticalPos(10);var n=e.startx,r=e.stopx,i=e.starty,a=e.message,o=e.type,s=e.sequenceIndex,c=b.splitBreaks(a).length,u=W.calculateTextDimensions(a,lr(cr)),l=u.height/c;e.height+=l,ur.bumpVerticalPos(l);var h=Un();h.x=n,h.y=i+10,h.width=r-n,h.class="messageText",h.dy="1em",h.text=a,h.fontFamily=cr.messageFontFamily,h.fontSize=cr.messageFontSize,h.fontWeight=cr.messageFontWeight,h.anchor=cr.messageAlign,h.valign=cr.messageAlign,h.textMargin=cr.wrapPadding,h.tspan=!1,Cn(t,h);var f,d,p=u.height-10,g=u.width;if(n===r){d=ur.getVerticalPos()+p,cr.rightAngles?f=t.append("path").attr("d","M ".concat(n,",").concat(d," H ").concat(n+Math.max(cr.width/2,g/2)," V ").concat(d+25," H ").concat(n)):(p+=cr.boxMargin,d=ur.getVerticalPos()+p,f=t.append("path").attr("d","M "+n+","+d+" C "+(n+60)+","+(d-10)+" "+(n+60)+","+(d+30)+" "+n+","+(d+20))),p+=30;var y=Math.max(g/2,cr.width/2);ur.insert(n-y,ur.getVerticalPos()-10+p,r+y,ur.getVerticalPos()+30+p)}else p+=cr.boxMargin,d=ur.getVerticalPos()+p,(f=t.append("line")).attr("x1",n),f.attr("y1",d),f.attr("x2",r),f.attr("y2",d),ur.insert(n,d-10,r,d);o===Wn.parser.yy.LINETYPE.DOTTED||o===Wn.parser.yy.LINETYPE.DOTTED_CROSS||o===Wn.parser.yy.LINETYPE.DOTTED_POINT||o===Wn.parser.yy.LINETYPE.DOTTED_OPEN?(f.style("stroke-dasharray","3, 3"),f.attr("class","messageLine1")):f.attr("class","messageLine0");var v="";cr.arrowMarkerAbsolute&&(v=(v=(v=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search).replace(/\(/g,"\\(")).replace(/\)/g,"\\)")),f.attr("stroke-width",2),f.attr("stroke","none"),f.style("fill","none"),o!==Wn.parser.yy.LINETYPE.SOLID&&o!==Wn.parser.yy.LINETYPE.DOTTED||f.attr("marker-end","url("+v+"#arrowhead)"),o!==Wn.parser.yy.LINETYPE.SOLID_POINT&&o!==Wn.parser.yy.LINETYPE.DOTTED_POINT||f.attr("marker-end","url("+v+"#filled-head)"),o!==Wn.parser.yy.LINETYPE.SOLID_CROSS&&o!==Wn.parser.yy.LINETYPE.DOTTED_CROSS||f.attr("marker-end","url("+v+"#crosshead)"),(sr.showSequenceNumbers()||cr.showSequenceNumbers)&&(f.attr("marker-start","url("+v+"#sequencenumber)"),t.append("text").attr("x",n).attr("y",d+4).attr("font-family","sans-serif").attr("font-size","12px").attr("text-anchor","middle").attr("textLength","16px").attr("class","sequenceNumber").text(s)),ur.bumpVerticalPos(p),e.height+=p,e.stopy=e.starty+e.height,ur.insert(e.fromBounds,e.starty,e.toBounds,e.stopy)}(n,a),ur.models.addMessage(a)}catch(t){c.error("error while drawing message",t)}}[Wn.parser.yy.LINETYPE.SOLID_OPEN,Wn.parser.yy.LINETYPE.DOTTED_OPEN,Wn.parser.yy.LINETYPE.SOLID,Wn.parser.yy.LINETYPE.DOTTED,Wn.parser.yy.LINETYPE.SOLID_CROSS,Wn.parser.yy.LINETYPE.DOTTED_CROSS,Wn.parser.yy.LINETYPE.SOLID_POINT,Wn.parser.yy.LINETYPE.DOTTED_POINT].includes(t.type)&&l++})),cr.mirrorActors&&(ur.bumpVerticalPos(2*cr.boxMargin),dr(n,r,i,ur.getVerticalPos()));var h=ur.getBounds().bounds;c.debug("For line height fix Querying: #"+e+" .actor-line"),Object(d.selectAll)("#"+e+" .actor-line").attr("y2",h.stopy);var f=h.stopy-h.starty+2*cr.diagramMarginY;cr.mirrorActors&&(f=f-cr.boxMargin+cr.bottomMarginAdj);var p=h.stopx-h.startx+2*cr.diagramMarginX;o&&n.append("text").text(o).attr("x",(h.stopx-h.startx)/2-2*cr.diagramMarginX).attr("y",-25),$(n,f,p,cr.useMaxWidth);var g=o?40:0;n.attr("viewBox",h.startx-cr.diagramMarginX+" -"+(cr.diagramMarginY+g)+" "+p+" "+(f+g)),c.debug("models:",ur.models)}},_r=n(27),kr=n.n(_r),wr="",Er="",Tr="",Cr=[],Ar="",Sr=[],Mr=[],Or="",Dr=["active","done","crit","milestone"],Nr=[],Br=!1,Lr=0,Pr=function(t,e,n){return t.isoWeekday()>=6&&n.indexOf("weekends")>=0||n.indexOf(t.format("dddd").toLowerCase())>=0||n.indexOf(t.format(e.trim()))>=0},Ir=function(t,e,n){if(n.length&&!t.manualEndTime){var r=o()(t.startTime,e,!0);r.add(1,"d");var i=o()(t.endTime,e,!0),a=Fr(r,i,e,n);t.endTime=i.toDate(),t.renderEndTime=a}},Fr=function(t,e,n,r){for(var i=!1,a=null;t<=e;)i||(a=e.toDate()),(i=Pr(t,n,r))&&e.add(1,"d"),t.add(1,"d");return a},jr=function(t,e,n){n=n.trim();var r=/^after\s+([\d\w- ]+)/.exec(n.trim());if(null!==r){var i=null;if(r[1].split(" ").forEach((function(t){var e=Hr(t);void 0!==e&&(i?e.endTime>i.endTime&&(i=e):i=e)})),i)return i.endTime;var a=new Date;return a.setHours(0,0,0,0),a}var s=o()(n,e.trim(),!0);return s.isValid()?s.toDate():(c.debug("Invalid date:"+n),c.debug("With date format:"+e.trim()),new Date)},Rr=function(t,e){if(null!==t)switch(t[2]){case"s":e.add(t[1],"seconds");break;case"m":e.add(t[1],"minutes");break;case"h":e.add(t[1],"hours");break;case"d":e.add(t[1],"days");break;case"w":e.add(t[1],"weeks")}return e.toDate()},Yr=function(t,e,n,r){r=r||!1,n=n.trim();var i=o()(n,e.trim(),!0);return i.isValid()?(r&&i.add(1,"d"),i.toDate()):Rr(/^([\d]+)([wdhms])/.exec(n.trim()),o()(t))},zr=0,Ur=function(t){return void 0===t?"task"+(zr+=1):t},$r=[],Wr={},Hr=function(t){var e=Wr[t];return $r[e]},Vr=function(){for(var t=function(t){var e=$r[t],n="";switch($r[t].raw.startTime.type){case"prevTaskEnd":var r=Hr(e.prevTaskId);e.startTime=r.endTime;break;case"getStartDate":(n=jr(0,wr,$r[t].raw.startTime.startData))&&($r[t].startTime=n)}return $r[t].startTime&&($r[t].endTime=Yr($r[t].startTime,wr,$r[t].raw.endTime.data,Br),$r[t].endTime&&($r[t].processed=!0,$r[t].manualEndTime=o()($r[t].raw.endTime.data,"YYYY-MM-DD",!0).isValid(),Ir($r[t],wr,Cr))),$r[t].processed},e=!0,n=0;n<$r.length;n++)t(n),e=e&&$r[n].processed;return e},Gr=function(t,e){t.split(",").forEach((function(t){var n=Hr(t);void 0!==n&&n.classes.push(e)}))},qr=function(t,e){Nr.push((function(){var n=document.querySelector('[id="'.concat(t,'"]'));null!==n&&n.addEventListener("click",(function(){e()}))})),Nr.push((function(){var n=document.querySelector('[id="'.concat(t,'-text"]'));null!==n&&n.addEventListener("click",(function(){e()}))}))},Xr={parseDirective:function(t,e,n){_o.parseDirective(this,t,e,n)},getConfig:function(){return xt().gantt},clear:function(){Sr=[],Mr=[],Or="",Nr=[],Ar="",zr=0,mr=void 0,br=void 0,$r=[],wr="",Er="",Tr="",Cr=[],Br=!1,Lr=0},setDateFormat:function(t){wr=t},getDateFormat:function(){return wr},enableInclusiveEndDates:function(){Br=!0},endDatesAreInclusive:function(){return Br},setAxisFormat:function(t){Er=t},getAxisFormat:function(){return Er},setTodayMarker:function(t){Tr=t},getTodayMarker:function(){return Tr},setTitle:function(t){Ar=t},getTitle:function(){return Ar},addSection:function(t){Or=t,Sr.push(t)},getSections:function(){return Sr},getTasks:function(){for(var t=Vr(),e=0;!t&&e<10;)t=Vr(),e++;return Mr=$r},addTask:function(t,e){var n={section:Or,type:Or,processed:!1,manualEndTime:!1,renderEndTime:null,raw:{data:e},task:t,classes:[]},r=function(t,e){var n=(":"===e.substr(0,1)?e.substr(1,e.length):e).split(","),r={};Zr(n,r,Dr);for(var i=0;ir?i=1:n0&&(e=t.classes.join(" "));for(var n=0,r=0;rn-e?n+a+1.5*Kr.leftPadding>u?e+r-5:n+r+5:(n-e)/2+e+r})).attr("y",(function(t,r){return t.order*e+Kr.barHeight/2+(Kr.fontSize/2-2)+n})).attr("text-height",i).attr("class",(function(t){var e=o(t.startTime),n=o(t.endTime);t.milestone&&(n=e+i);var r=this.getBBox().width,a="";t.classes.length>0&&(a=t.classes.join(" "));for(var c=0,l=0;ln-e?n+r+1.5*Kr.leftPadding>u?a+" taskTextOutsideLeft taskTextOutside"+c+" "+h:a+" taskTextOutsideRight taskTextOutside"+c+" "+h+" width-"+r:a+" taskText taskText"+c+" "+h+" width-"+r}))}(t,i,c,h,r,0,e),function(t,e){for(var n=[],r=0,i=0;i0&&a.setAttribute("dy","1em"),a.textContent=e[i],r.appendChild(a)}return r})).attr("x",10).attr("y",(function(i,a){if(!(a>0))return i[1]*t/2+e;for(var o=0;o "+t.w+": "+JSON.stringify(i.edge(t))),function(t,e,n,r){var i=function(t){switch(t){case Ze.AGGREGATION:return"aggregation";case Ze.EXTENSION:return"extension";case Ze.COMPOSITION:return"composition";case Ze.DEPENDENCY:return"dependency"}};e.points=e.points.filter((function(t){return!Number.isNaN(t.y)}));var a,o,s=e.points,u=Object(d.line)().x((function(t){return t.x})).y((function(t){return t.y})).curve(d.curveBasis),l=t.append("path").attr("d",u(s)).attr("id","edge"+Qe).attr("class","relation"),h="";r.arrowMarkerAbsolute&&(h=(h=(h=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search).replace(/\(/g,"\\(")).replace(/\)/g,"\\)")),1==n.relation.lineType&&l.attr("class","relation dashed-line"),"none"!==n.relation.type1&&l.attr("marker-start","url("+h+"#"+i(n.relation.type1)+"Start)"),"none"!==n.relation.type2&&l.attr("marker-end","url("+h+"#"+i(n.relation.type2)+"End)");var f,p,g,y,v=e.points.length,m=W.calcLabelPosition(e.points);if(a=m.x,o=m.y,v%2!=0&&v>1){var b=W.calcCardinalityPosition("none"!==n.relation.type1,e.points,e.points[0]),x=W.calcCardinalityPosition("none"!==n.relation.type2,e.points,e.points[v-1]);c.debug("cardinality_1_point "+JSON.stringify(b)),c.debug("cardinality_2_point "+JSON.stringify(x)),f=b.x,p=b.y,g=x.x,y=x.y}if(void 0!==n.title){var _=t.append("g").attr("class","classLabel"),k=_.append("text").attr("class","label").attr("x",a).attr("y",o).attr("fill","red").attr("text-anchor","middle").text(n.title);window.label=k;var w=k.node().getBBox();_.insert("rect",":first-child").attr("class","box").attr("x",w.x-r.padding/2).attr("y",w.y-r.padding/2).attr("width",w.width+r.padding).attr("height",w.height+r.padding)}c.info("Rendering relation "+JSON.stringify(n)),void 0!==n.relationTitle1&&"none"!==n.relationTitle1&&t.append("g").attr("class","cardinality").append("text").attr("class","type1").attr("x",f).attr("y",p).attr("fill","black").attr("font-size","6").text(n.relationTitle1),void 0!==n.relationTitle2&&"none"!==n.relationTitle2&&t.append("g").attr("class","cardinality").append("text").attr("class","type2").attr("x",g).attr("y",y).attr("fill","black").attr("font-size","6").text(n.relationTitle2),Qe++}(r,i.edge(t),i.edge(t).relation,ii))}));var h=r.node().getBBox(),f=h.width+40,p=h.height+40;$(r,p,f,ii.useMaxWidth);var g="".concat(h.x-20," ").concat(h.y-20," ").concat(f," ").concat(p);c.debug("viewBox ".concat(g)),r.attr("viewBox",g)};ei.parser.yy=Ke;var ci={dividerMargin:10,padding:5,textHeight:10},ui=function(t,e){c.info("Drawing class"),Ke.clear(),ei.parser.parse(t);var n=xt().flowchart;c.info("config:",n);var r=n.nodeSpacing||50,i=n.rankSpacing||50,a=new V.a.Graph({multigraph:!0,compound:!0}).setGraph({rankdir:"TD",nodesep:r,ranksep:i,marginx:8,marginy:8}).setDefaultEdgeLabel((function(){return{}})),o=Ke.getClasses(),s=Ke.getRelations();c.info(s),function(t,e){var n=Object.keys(t);c.info("keys:",n),c.info(t),n.forEach((function(n){var r=t[n],i="";r.cssClasses.length>0&&(i=i+" "+r.cssClasses.join(" "));var a={labelStyle:""},o=void 0!==r.text?r.text:r.id,s="";switch(r.type){case"class":s="class_box";break;default:s="class_box"}e.setNode(r.id,{labelStyle:a.labelStyle,shape:s,labelText:o,classData:r,rx:0,ry:0,class:i,style:a.style,id:r.id,domId:r.domId,haveCallback:r.haveCallback,link:r.link,width:"group"===r.type?500:void 0,type:r.type,padding:xt().flowchart.padding}),c.info("setNode",{labelStyle:a.labelStyle,shape:s,labelText:o,rx:0,ry:0,class:i,style:a.style,id:r.id,width:"group"===r.type?500:void 0,type:r.type,padding:xt().flowchart.padding})}))}(o,a),function(t,e){var n=0;t.forEach((function(r){n++;var i={classes:"relation"};i.pattern=1==r.relation.lineType?"dashed":"solid",i.id="id"+n,"arrow_open"===r.type?i.arrowhead="none":i.arrowhead="normal",c.info(i,r),i.startLabelRight="none"===r.relationTitle1?"":r.relationTitle1,i.endLabelLeft="none"===r.relationTitle2?"":r.relationTitle2,i.arrowTypeStart=li(r.relation.type1),i.arrowTypeEnd=li(r.relation.type2);var a="",o="";if(void 0!==r.style){var s=N(r.style);a=s.style,o=s.labelStyle}else a="fill:none";i.style=a,i.labelStyle=o,void 0!==r.interpolate?i.curve=O(r.interpolate,d.curveLinear):void 0!==t.defaultInterpolate?i.curve=O(t.defaultInterpolate,d.curveLinear):i.curve=O(ci.curve,d.curveLinear),r.text=r.title,void 0===r.text?void 0!==r.style&&(i.arrowheadStyle="fill: #333"):(i.arrowheadStyle="fill: #333",i.labelpos="c",xt().flowchart.htmlLabels,i.labelType="text",i.label=r.text.replace(b.lineBreakRegex,"\n"),void 0===r.style&&(i.style=i.style||"stroke: #333; stroke-width: 1.5px;fill:none"),i.labelStyle=i.labelStyle.replace("color:","fill:")),e.setEdge(r.id1,r.id2,i,n)}))}(s,a);var u=Object(d.select)('[id="'.concat(e,'"]'));u.attr("xmlns:xlink","http://www.w3.org/1999/xlink");var l=Object(d.select)("#"+e+" g");xn(l,a,["aggregation","extension","composition","dependency"],"classDiagram",e);var h=u.node().getBBox(),f=h.width+16,p=h.height+16;if(c.debug("new ViewBox 0 0 ".concat(f," ").concat(p),"translate(".concat(8-a._label.marginx,", ").concat(8-a._label.marginy,")")),$(u,p,f,n.useMaxWidth),u.attr("viewBox","0 0 ".concat(f," ").concat(p)),u.select("g").attr("transform","translate(".concat(8-a._label.marginx,", ").concat(8-h.y,")")),!n.htmlLabels)for(var g=document.querySelectorAll('[id="'+e+'"] .edgeLabel .label'),y=0;y0&&o.length>0){var c={stmt:"state",id:L(),type:"divider",doc:di(o)};i.push(di(c)),n.doc=i}n.doc.forEach((function(e){return t(n,e,!0)}))}}({id:"root"},{id:"root",doc:pi},!0),{id:"root",doc:pi}},extract:function(t){var e;e=t.doc?t.doc:t,c.info(e),bi(),c.info("Extract",e),e.forEach((function(t){"state"===t.stmt&&mi(t.id,t.type,t.doc,t.description,t.note),"relation"===t.stmt&&xi(t.state1.id,t.state2.id,t.description)}))},trimColon:function(t){return t&&":"===t[0]?t.substr(1).trim():t.trim()}},Ti=n(22),Ci=n.n(Ti),Ai={},Si=function(t,e,n){var r,i=xt().state.padding,a=2*xt().state.padding,o=t.node().getBBox(),s=o.width,c=o.x,u=t.append("text").attr("x",0).attr("y",xt().state.titleShift).attr("font-size",xt().state.fontSize).attr("class","state-title").text(e.id),l=u.node().getBBox().width+a,h=Math.max(l,s);h===s&&(h+=a);var f=t.node().getBBox();e.doc,r=c-i,l>s&&(r=(s-h)/2+i),Math.abs(c-f.x)s&&(r=c-(l-s)/2);var d=1-xt().state.textHeight;return t.insert("rect",":first-child").attr("x",r).attr("y",d).attr("class",n?"alt-composit":"composit").attr("width",h).attr("height",f.height+xt().state.textHeight+xt().state.titleShift+1).attr("rx","0"),u.attr("x",r+i),l<=s&&u.attr("x",c+(h-a)/2-l/2+i),t.insert("rect",":first-child").attr("x",r).attr("y",xt().state.titleShift-xt().state.textHeight-xt().state.padding).attr("width",h).attr("height",3*xt().state.textHeight).attr("rx",xt().state.radius),t.insert("rect",":first-child").attr("x",r).attr("y",xt().state.titleShift-xt().state.textHeight-xt().state.padding).attr("width",h).attr("height",f.height+3+2*xt().state.textHeight).attr("rx",xt().state.radius),t},Mi=function(t,e){var n=e.id,r={id:n,label:e.id,width:0,height:0},i=t.append("g").attr("id",n).attr("class","stateGroup");"start"===e.type&&function(t){t.append("circle").attr("class","start-state").attr("r",xt().state.sizeUnit).attr("cx",xt().state.padding+xt().state.sizeUnit).attr("cy",xt().state.padding+xt().state.sizeUnit)}(i),"end"===e.type&&function(t){t.append("circle").attr("class","end-state-outer").attr("r",xt().state.sizeUnit+xt().state.miniPadding).attr("cx",xt().state.padding+xt().state.sizeUnit+xt().state.miniPadding).attr("cy",xt().state.padding+xt().state.sizeUnit+xt().state.miniPadding),t.append("circle").attr("class","end-state-inner").attr("r",xt().state.sizeUnit).attr("cx",xt().state.padding+xt().state.sizeUnit+2).attr("cy",xt().state.padding+xt().state.sizeUnit+2)}(i),"fork"!==e.type&&"join"!==e.type||function(t,e){var n=xt().state.forkWidth,r=xt().state.forkHeight;if(e.parentId){var i=n;n=r,r=i}t.append("rect").style("stroke","black").style("fill","black").attr("width",n).attr("height",r).attr("x",xt().state.padding).attr("y",xt().state.padding)}(i,e),"note"===e.type&&function(t,e){e.attr("class","state-note");var n=e.append("rect").attr("x",0).attr("y",xt().state.padding),r=function(t,e,n,r){var i=0,a=r.append("text");a.style("text-anchor","start"),a.attr("class","noteText");var o=t.replace(/\r\n/g,"
"),s=(o=o.replace(/\n/g,"
")).split(b.lineBreakRegex),c=1.25*xt().state.noteMargin,u=!0,l=!1,h=void 0;try{for(var f,d=s[Symbol.iterator]();!(u=(f=d.next()).done);u=!0){var p=f.value.trim();if(p.length>0){var g=a.append("tspan");g.text(p),0===c&&(c+=g.node().getBBox().height),i+=c,g.attr("x",0+xt().state.noteMargin),g.attr("y",0+i+1.25*xt().state.noteMargin)}}}catch(t){l=!0,h=t}finally{try{u||null==d.return||d.return()}finally{if(l)throw h}}return{textWidth:a.node().getBBox().width,textHeight:i}}(t,0,0,e.append("g")),i=r.textWidth,a=r.textHeight;n.attr("height",a+2*xt().state.noteMargin),n.attr("width",i+2*xt().state.noteMargin)}(e.note.text,i),"divider"===e.type&&function(t){t.append("line").style("stroke","grey").style("stroke-dasharray","3").attr("x1",xt().state.textHeight).attr("class","divider").attr("x2",2*xt().state.textHeight).attr("y1",0).attr("y2",0)}(i),"default"===e.type&&0===e.descriptions.length&&function(t,e){var n=t.append("text").attr("x",2*xt().state.padding).attr("y",xt().state.textHeight+2*xt().state.padding).attr("font-size",xt().state.fontSize).attr("class","state-title").text(e.id).node().getBBox();t.insert("rect",":first-child").attr("x",xt().state.padding).attr("y",xt().state.padding).attr("width",n.width+2*xt().state.padding).attr("height",n.height+2*xt().state.padding).attr("rx",xt().state.radius)}(i,e),"default"===e.type&&e.descriptions.length>0&&function(t,e){var n=t.append("text").attr("x",2*xt().state.padding).attr("y",xt().state.textHeight+1.3*xt().state.padding).attr("font-size",xt().state.fontSize).attr("class","state-title").text(e.descriptions[0]).node().getBBox(),r=n.height,i=t.append("text").attr("x",xt().state.padding).attr("y",r+.4*xt().state.padding+xt().state.dividerMargin+xt().state.textHeight).attr("class","state-description"),a=!0,o=!0;e.descriptions.forEach((function(t){a||(function(t,e,n){var r=t.append("tspan").attr("x",2*xt().state.padding).text(e);n||r.attr("dy",xt().state.textHeight)}(i,t,o),o=!1),a=!1}));var s=t.append("line").attr("x1",xt().state.padding).attr("y1",xt().state.padding+r+xt().state.dividerMargin/2).attr("y2",xt().state.padding+r+xt().state.dividerMargin/2).attr("class","descr-divider"),c=i.node().getBBox(),u=Math.max(c.width,n.width);s.attr("x2",u+3*xt().state.padding),t.insert("rect",":first-child").attr("x",xt().state.padding).attr("y",xt().state.padding).attr("width",u+2*xt().state.padding).attr("height",c.height+r+2*xt().state.padding).attr("rx",xt().state.radius)}(i,e);var a=i.node().getBBox();return r.width=a.width+2*xt().state.padding,r.height=a.height+2*xt().state.padding,function(t,e){Ai[t]=e}(n,r),r},Oi=0;Ti.parser.yy=Ei;var Di={},Ni=function(t,e){fi=xt().state,Ti.parser.yy.clear(),Ti.parser.parse(t),c.debug("Rendering diagram "+t);var n=Object(d.select)("[id='".concat(e,"']"));n.append("defs").append("marker").attr("id","dependencyEnd").attr("refX",19).attr("refY",7).attr("markerWidth",20).attr("markerHeight",28).attr("orient","auto").append("path").attr("d","M 19,7 L9,13 L14,7 L9,1 Z"),new V.a.Graph({multigraph:!0,compound:!0,rankdir:"RL"}).setDefaultEdgeLabel((function(){return{}})),function t(e,n,r,i){var a,o=new V.a.Graph({compound:!0,multigraph:!0}),s=!0;for(a=0;a "+t.w+": "+JSON.stringify(o.edge(t))),function(t,e,n){e.points=e.points.filter((function(t){return!Number.isNaN(t.y)}));var r=e.points,i=Object(d.line)().x((function(t){return t.x})).y((function(t){return t.y})).curve(d.curveBasis),a=t.append("path").attr("d",i(r)).attr("id","edge"+Oi).attr("class","transition"),o="";if(xt().state.arrowMarkerAbsolute&&(o=(o=(o=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search).replace(/\(/g,"\\(")).replace(/\)/g,"\\)")),a.attr("marker-end","url("+o+"#"+function(t){switch(t){case Ei.relationType.AGGREGATION:return"aggregation";case Ei.relationType.EXTENSION:return"extension";case Ei.relationType.COMPOSITION:return"composition";case Ei.relationType.DEPENDENCY:return"dependency"}}(Ei.relationType.DEPENDENCY)+"End)"),void 0!==n.title){for(var s=t.append("g").attr("class","stateLabel"),u=W.calcLabelPosition(e.points),l=u.x,h=u.y,f=b.getRows(n.title),p=0,g=[],y=0,v=0,m=0;m<=f.length;m++){var x=s.append("text").attr("text-anchor","middle").text(f[m]).attr("x",l).attr("y",h+p),_=x.node().getBBox();if(y=Math.max(y,_.width),v=Math.min(v,_.x),c.info(_.x,l,h+p),0===p){var k=x.node().getBBox();p=k.height,c.info("Title height",p,h)}g.push(x)}var w=p*f.length;if(f.length>1){var E=(f.length-1)*p*.5;g.forEach((function(t,e){return t.attr("y",h+e*p-E)})),w=p*f.length}var T=s.node().getBBox();s.insert("rect",":first-child").attr("class","box").attr("x",l-y/2-xt().state.padding/2).attr("y",h-w/2-xt().state.padding/2-3.5).attr("width",y+xt().state.padding).attr("height",w+xt().state.padding),c.info(T)}Oi++}(n,o.edge(t),o.edge(t).relation))})),w=k.getBBox();var E={id:r||"root",label:r||"root",width:0,height:0};return E.width=w.width+2*fi.padding,E.height=w.height+2*fi.padding,c.debug("Doc rendered",E,o),E}(Ei.getRootDoc(),n,void 0,!1);var r=fi.padding,i=n.node().getBBox(),a=i.width+2*r,o=i.height+2*r;$(n,o,1.75*a,fi.useMaxWidth),n.attr("viewBox","".concat(i.x-fi.padding," ").concat(i.y-fi.padding," ")+a+" "+o)},Bi={},Li={},Pi=function(t,e,n,r){if("root"!==n.id){var i="rect";!0===n.start&&(i="start"),!1===n.start&&(i="end"),"default"!==n.type&&(i=n.type),Li[n.id]||(Li[n.id]={id:n.id,shape:i,description:n.id,classes:"statediagram-state"}),n.description&&(Array.isArray(Li[n.id].description)?(Li[n.id].shape="rectWithTitle",Li[n.id].description.push(n.description)):Li[n.id].description.length>0?(Li[n.id].shape="rectWithTitle",Li[n.id].description===n.id?Li[n.id].description=[n.description]:Li[n.id].description=[Li[n.id].description,n.description]):(Li[n.id].shape="rect",Li[n.id].description=n.description)),!Li[n.id].type&&n.doc&&(c.info("Setting cluser for ",n.id),Li[n.id].type="group",Li[n.id].shape="divider"===n.type?"divider":"roundedWithTitle",Li[n.id].classes=Li[n.id].classes+" "+(r?"statediagram-cluster statediagram-cluster-alt":"statediagram-cluster"));var a={labelStyle:"",shape:Li[n.id].shape,labelText:Li[n.id].description,classes:Li[n.id].classes,style:"",id:n.id,domId:"state-"+n.id+"-"+Ii,type:Li[n.id].type,padding:15};if(n.note){var o={labelStyle:"",shape:"note",labelText:n.note.text,classes:"statediagram-note",style:"",id:n.id+"----note",domId:"state-"+n.id+"----note-"+Ii,type:Li[n.id].type,padding:15},s={labelStyle:"",shape:"noteGroup",labelText:n.note.text,classes:Li[n.id].classes,style:"",id:n.id+"----parent",domId:"state-"+n.id+"----parent-"+Ii,type:"group",padding:0};Ii++,t.setNode(n.id+"----parent",s),t.setNode(o.id,o),t.setNode(n.id,a),t.setParent(n.id,n.id+"----parent"),t.setParent(o.id,n.id+"----parent");var u=n.id,l=o.id;"left of"===n.note.position&&(u=o.id,l=n.id),t.setEdge(u,l,{arrowhead:"none",arrowType:"",style:"fill:none",labelStyle:"",classes:"transition note-edge",arrowheadStyle:"fill: #333",labelpos:"c",labelType:"text",thickness:"normal"})}else t.setNode(n.id,a)}e&&"root"!==e.id&&(c.info("Setting node ",n.id," to be child of its parent ",e.id),t.setParent(n.id,e.id)),n.doc&&(c.info("Adding nodes children "),Fi(t,n,n.doc,!r))},Ii=0,Fi=function(t,e,n,r){Ii=0,c.trace("items",n),n.forEach((function(n){if("state"===n.stmt||"default"===n.stmt)Pi(t,e,n,r);else if("relation"===n.stmt){Pi(t,e,n.state1,r),Pi(t,e,n.state2,r);var i={id:"edge"+Ii,arrowhead:"normal",arrowTypeEnd:"arrow_barb",style:"fill:none",labelStyle:"",label:n.description,arrowheadStyle:"fill: #333",labelpos:"c",labelType:"text",thickness:"normal",classes:"transition"},a=n.state1.id,o=n.state2.id;t.setEdge(a,o,i,Ii),Ii++}}))},ji=function(t){for(var e=Object.keys(t),n=0;ne.seq&&Vi(e,t)}(e,n))c.debug("Already merged");else{if(Vi(e,n))zi[Ui]=zi[t],Yi=Ri[zi[Ui]];else{var r={id:Hi(),message:"merged branch "+t+" into "+Ui,seq:Wi++,parent:[null==Yi?null:Yi.id,zi[t]]};Yi=r,Ri[r.id]=r,zi[Ui]=r.id}c.debug(zi),c.debug("in mergeBranch")}},checkout:function(t){c.debug("in checkout");var e=zi[Ui=t];Yi=Ri[e]},reset:function(t){c.debug("in reset",t);var e=t.split(":")[0],n=parseInt(t.split(":")[1]),r="HEAD"===e?Yi:Ri[zi[e]];for(c.debug(r,n);n>0;)if(n--,!(r=Ri[r.parent])){var i="Critical error - unique parent commit not found during reset";throw c.error(i),i}Yi=r,zi[Ui]=r.id},prettyPrint:function(){c.debug(Ri),function t(e){var n=e.reduce((function(t,e){return t.seq>e.seq?t:e}),e[0]),r="";e.forEach((function(t){r+=t===n?"\t*":"\t|"}));var i,a,o,s=[r,n.id,n.seq];for(var u in zi)zi[u]===n.id&&s.push(u);if(c.debug(s.join(" ")),Array.isArray(n.parent)){var l=Ri[n.parent[0]];qi(e,n,l),e.push(Ri[n.parent[1]])}else{if(null==n.parent)return;var h=Ri[n.parent];qi(e,n,h)}i=e,a=function(t){return t.id},o=Object.create(null),t(e=i.reduce((function(t,e){var n=a(e);return o[n]||(o[n]=!0,t.push(e)),t}),[]))}([Zi()[0]])},clear:function(){Ri={},zi={master:Yi=null},Ui="master",Wi=0},getBranchesAsObjArray:function(){var t=[];for(var e in zi)t.push({name:e,commit:Ri[zi[e]]});return t},getBranches:function(){return zi},getCommits:function(){return Ri},getCommitsArray:Zi,getCurrentBranch:function(){return Ui},getDirection:function(){return $i},getHead:function(){return Yi}},Ki=n(71),Qi=n.n(Ki),ta={},ea={nodeSpacing:150,nodeFillColor:"yellow",nodeStrokeWidth:2,nodeStrokeColor:"grey",lineStrokeWidth:4,branchOffset:50,lineColor:"grey",leftMargin:50,branchColors:["#442f74","#983351","#609732","#AA9A39"],nodeRadius:10,nodeLabel:{width:75,height:100,x:-25,y:0}},na={};function ra(t,e,n,r){var i=O(r,d.curveBasis),a=ea.branchColors[n%ea.branchColors.length],o=Object(d.line)().x((function(t){return Math.round(t.x)})).y((function(t){return Math.round(t.y)})).curve(i);t.append("svg:path").attr("d",o(e)).style("stroke",a).style("stroke-width",ea.lineStrokeWidth).style("fill","none")}function ia(t,e){e=e||t.node().getBBox();var n=t.node().getCTM();return{left:n.e+e.x*n.a,top:n.f+e.y*n.d,width:e.width,height:e.height}}function aa(t,e,n,r,i){c.debug("svgDrawLineForCommits: ",e,n);var a=ia(t.select("#node-"+e+" circle")),o=ia(t.select("#node-"+n+" circle"));switch(r){case"LR":if(a.left-o.left>ea.nodeSpacing){var s={x:a.left-ea.nodeSpacing,y:o.top+o.height/2};ra(t,[s,{x:o.left+o.width,y:o.top+o.height/2}],i,"linear"),ra(t,[{x:a.left,y:a.top+a.height/2},{x:a.left-ea.nodeSpacing/2,y:a.top+a.height/2},{x:a.left-ea.nodeSpacing/2,y:s.y},s],i)}else ra(t,[{x:a.left,y:a.top+a.height/2},{x:a.left-ea.nodeSpacing/2,y:a.top+a.height/2},{x:a.left-ea.nodeSpacing/2,y:o.top+o.height/2},{x:o.left+o.width,y:o.top+o.height/2}],i);break;case"BT":if(o.top-a.top>ea.nodeSpacing){var u={x:o.left+o.width/2,y:a.top+a.height+ea.nodeSpacing};ra(t,[u,{x:o.left+o.width/2,y:o.top}],i,"linear"),ra(t,[{x:a.left+a.width/2,y:a.top+a.height},{x:a.left+a.width/2,y:a.top+a.height+ea.nodeSpacing/2},{x:o.left+o.width/2,y:u.y-ea.nodeSpacing/2},u],i)}else ra(t,[{x:a.left+a.width/2,y:a.top+a.height},{x:a.left+a.width/2,y:a.top+ea.nodeSpacing/2},{x:o.left+o.width/2,y:o.top-ea.nodeSpacing/2},{x:o.left+o.width/2,y:o.top}],i)}}function oa(t,e){return t.select(e).node().cloneNode(!0)}function sa(t,e,n,r){var i,a=Object.keys(ta).length;if("string"==typeof e)do{if(i=ta[e],c.debug("in renderCommitHistory",i.id,i.seq),t.select("#node-"+e).size()>0)return;t.append((function(){return oa(t,"#def-commit")})).attr("class","commit").attr("id",(function(){return"node-"+i.id})).attr("transform",(function(){switch(r){case"LR":return"translate("+(i.seq*ea.nodeSpacing+ea.leftMargin)+", "+Xi*ea.branchOffset+")";case"BT":return"translate("+(Xi*ea.branchOffset+ea.leftMargin)+", "+(a-i.seq)*ea.nodeSpacing+")"}})).attr("fill",ea.nodeFillColor).attr("stroke",ea.nodeStrokeColor).attr("stroke-width",ea.nodeStrokeWidth);var o=void 0;for(var s in n)if(n[s].commit===i){o=n[s];break}o&&(c.debug("found branch ",o.name),t.select("#node-"+i.id+" p").append("xhtml:span").attr("class","branch-label").text(o.name+", ")),t.select("#node-"+i.id+" p").append("xhtml:span").attr("class","commit-id").text(i.id),""!==i.message&&"BT"===r&&t.select("#node-"+i.id+" p").append("xhtml:span").attr("class","commit-msg").text(", "+i.message),e=i.parent}while(e&&ta[e]);Array.isArray(e)&&(c.debug("found merge commmit",e),sa(t,e[0],n,r),Xi++,sa(t,e[1],n,r),Xi--)}function ca(t,e,n,r){for(r=r||0;e.seq>0&&!e.lineDrawn;)"string"==typeof e.parent?(aa(t,e.id,e.parent,n,r),e.lineDrawn=!0,e=ta[e.parent]):Array.isArray(e.parent)&&(aa(t,e.id,e.parent[0],n,r),aa(t,e.id,e.parent[1],n,r+1),ca(t,ta[e.parent[1]],n,r+1),e.lineDrawn=!0,e=ta[e.parent[0]])}var ua,la=function(t){na=t},ha="",fa=!1,da={setMessage:function(t){c.debug("Setting message to: "+t),ha=t},getMessage:function(){return ha},setInfo:function(t){fa=t},getInfo:function(){return fa}},pa=n(72),ga=n.n(pa),ya={},va=function(t){Object.keys(t).forEach((function(e){ya[e]=t[e]}))},ma={},ba={},xa="",_a={parseDirective:function(t,e,n){_o.parseDirective(this,t,e,n)},getConfig:function(){return xt().pie},addSection:function(t,e){void 0===ba[t]&&(ba[t]=e,c.debug("Added new section :",t))},getSections:function(){return ba},cleanupValue:function(t){return":"===t.substring(0,1)?(t=t.substring(1).trim(),Number(t.trim())):Number(t.trim())},clear:function(){ba={},xa=""},setTitle:function(t){xa=t},getTitle:function(){return xa}},ka=n(73),wa=n.n(ka),Ea={},Ta=function(t){Object.keys(t).forEach((function(e){Ea[e]=t[e]}))},Ca={},Aa=[],Sa="",Ma=function(t){return void 0===Ca[t]&&(Ca[t]={attributes:[]},c.info("Added new entity :",t)),Ca[t]},Oa={Cardinality:{ZERO_OR_ONE:"ZERO_OR_ONE",ZERO_OR_MORE:"ZERO_OR_MORE",ONE_OR_MORE:"ONE_OR_MORE",ONLY_ONE:"ONLY_ONE"},Identification:{NON_IDENTIFYING:"NON_IDENTIFYING",IDENTIFYING:"IDENTIFYING"},parseDirective:function(t,e,n){_o.parseDirective(this,t,e,n)},getConfig:function(){return xt().er},addEntity:Ma,addAttributes:function(t,e){var n,r=Ma(t);for(n=e.length-1;n>=0;n--)r.attributes.push(e[n]),c.debug("Added attribute ",e[n].attributeName)},getEntities:function(){return Ca},addRelationship:function(t,e,n,r){var i={entityA:t,roleA:e,entityB:n,relSpec:r};Aa.push(i),c.debug("Added new relationship :",i)},getRelationships:function(){return Aa},clear:function(){Ca={},Aa=[],Sa=""},setTitle:function(t){Sa=t},getTitle:function(){return Sa}},Da=n(74),Na=n.n(Da),Ba={ONLY_ONE_START:"ONLY_ONE_START",ONLY_ONE_END:"ONLY_ONE_END",ZERO_OR_ONE_START:"ZERO_OR_ONE_START",ZERO_OR_ONE_END:"ZERO_OR_ONE_END",ONE_OR_MORE_START:"ONE_OR_MORE_START",ONE_OR_MORE_END:"ONE_OR_MORE_END",ZERO_OR_MORE_START:"ZERO_OR_MORE_START",ZERO_OR_MORE_END:"ZERO_OR_MORE_END"},La=Ba,Pa={},Ia=function(t){return(t.entityA+t.roleA+t.entityB).replace(/\s/g,"")},Fa=0,ja=function(t){for(var e=Object.keys(t),n=0;n0?l:Math.max(Pa.minEntityHeight,o.height+2*Pa.entityPadding)},d=Math.max(0,f.width-(c+u)-4*i);if(n.length>0){e.attr("transform","translate("+f.width/2+","+(r+o.height/2)+")");var p=o.height+2*r,g="attributeBoxOdd";s.forEach((function(e){var n=p+r+Math.max(e.tn.node().getBBox().height,e.nn.node().getBBox().height)/2;e.tn.attr("transform","translate("+i+","+n+")");var a=t.insert("rect","#"+e.tn.node().id).attr("class","er ".concat(g)).attr("fill",Pa.fill).attr("fill-opacity","100%").attr("stroke",Pa.stroke).attr("x",0).attr("y",p).attr("width",c+2*i+d/2).attr("height",e.tn.node().getBBox().height+2*r);e.nn.attr("transform","translate("+(parseFloat(a.attr("width"))+i)+","+n+")"),t.insert("rect","#"+e.nn.node().id).attr("class","er ".concat(g)).attr("fill",Pa.fill).attr("fill-opacity","100%").attr("stroke",Pa.stroke).attr("x","".concat(a.attr("x")+a.attr("width"))).attr("y",p).attr("width",u+2*i+d/2).attr("height",e.nn.node().getBBox().height+2*r),p+=Math.max(e.tn.node().getBBox().height,e.nn.node().getBBox().height)+2*r,g="attributeBoxOdd"==g?"attributeBoxEven":"attributeBoxOdd"}))}else f.height=Math.max(Pa.minEntityHeight,l),e.attr("transform","translate("+f.width/2+","+f.height/2+")");return f}(a,s,e[i].attributes),u=c.width,l=c.height,h=a.insert("rect","#"+o).attr("class","er entityBox").attr("fill",Pa.fill).attr("fill-opacity","100%").attr("stroke",Pa.stroke).attr("x",0).attr("y",0).attr("width",u).attr("height",l).node().getBBox();n.setNode(i,{width:h.width,height:h.height,shape:"rect",id:i})})),r}(i,Oa.getEntities(),r),u=function(t,e){return t.forEach((function(t){e.setEdge(t.entityA,t.entityB,{relationship:t},Ia(t))})),t}(Oa.getRelationships(),r);me.a.layout(r),a=i,(o=r).nodes().forEach((function(t){void 0!==t&&void 0!==o.node(t)&&a.select("#"+t).attr("transform","translate("+(o.node(t).x-o.node(t).width/2)+","+(o.node(t).y-o.node(t).height/2)+" )")})),u.forEach((function(t){!function(t,e,n,r){Fa++;var i=n.edge(e.entityA,e.entityB,Ia(e)),a=Object(d.line)().x((function(t){return t.x})).y((function(t){return t.y})).curve(d.curveBasis),o=t.insert("path","#"+r).attr("class","er relationshipLine").attr("d",a(i.points)).attr("stroke",Pa.stroke).attr("fill","none");e.relSpec.relType===Oa.Identification.NON_IDENTIFYING&&o.attr("stroke-dasharray","8,8");var s="";switch(Pa.arrowMarkerAbsolute&&(s=(s=(s=window.location.protocol+"//"+window.location.host+window.location.pathname+window.location.search).replace(/\(/g,"\\(")).replace(/\)/g,"\\)")),e.relSpec.cardA){case Oa.Cardinality.ZERO_OR_ONE:o.attr("marker-end","url("+s+"#"+La.ZERO_OR_ONE_END+")");break;case Oa.Cardinality.ZERO_OR_MORE:o.attr("marker-end","url("+s+"#"+La.ZERO_OR_MORE_END+")");break;case Oa.Cardinality.ONE_OR_MORE:o.attr("marker-end","url("+s+"#"+La.ONE_OR_MORE_END+")");break;case Oa.Cardinality.ONLY_ONE:o.attr("marker-end","url("+s+"#"+La.ONLY_ONE_END+")")}switch(e.relSpec.cardB){case Oa.Cardinality.ZERO_OR_ONE:o.attr("marker-start","url("+s+"#"+La.ZERO_OR_ONE_START+")");break;case Oa.Cardinality.ZERO_OR_MORE:o.attr("marker-start","url("+s+"#"+La.ZERO_OR_MORE_START+")");break;case Oa.Cardinality.ONE_OR_MORE:o.attr("marker-start","url("+s+"#"+La.ONE_OR_MORE_START+")");break;case Oa.Cardinality.ONLY_ONE:o.attr("marker-start","url("+s+"#"+La.ONLY_ONE_START+")")}var c=o.node().getTotalLength(),u=o.node().getPointAtLength(.5*c),l="rel"+Fa,h=t.append("text").attr("class","er relationshipLabel").attr("id",l).attr("x",u.x).attr("y",u.y).attr("text-anchor","middle").attr("dominant-baseline","middle").attr("style","font-family: "+xt().fontFamily+"; font-size: "+Pa.fontSize+"px").text(e.roleA).node().getBBox();t.insert("rect","#"+l).attr("class","er relationshipLabelBox").attr("x",u.x-h.width/2).attr("y",u.y-h.height/2).attr("width",h.width).attr("height",h.height).attr("fill","white").attr("fill-opacity","85%")}(i,t,r,s)}));var l=Pa.diagramPadding,h=i.node().getBBox(),f=h.width+2*l,p=h.height+2*l;$(i,p,f,Pa.useMaxWidth),i.attr("viewBox","".concat(h.x-l," ").concat(h.y-l," ").concat(f," ").concat(p))},Ya=n(28),za=n.n(Ya);function Ua(t){return function(t){if(Array.isArray(t)){for(var e=0,n=new Array(t.length);e/gi),d=0;d/gi," "),r=t.append("text");r.attr("x",e.x),r.attr("y",e.y),r.attr("class","legend"),r.style("text-anchor",e.anchor),void 0!==e.class&&r.attr("class",e.class);var i=r.append("tspan");return i.attr("x",e.x+2*e.textMargin),i.text(n),r},ro=function(t,e,n){var r,i,a,o=e.x+n.width/2,s=t.append("g");Ka++,s.append("line").attr("id","task"+Ka).attr("x1",o).attr("y1",e.y).attr("x2",o).attr("y2",450).attr("class","task-line").attr("stroke-width","1px").attr("stroke-dasharray","4 2").attr("stroke","#666"),r=s,i={cx:o,cy:300+30*(5-e.score),score:e.score},r.append("circle").attr("cx",i.cx).attr("cy",i.cy).attr("class","face").attr("r",15).attr("stroke-width",2).attr("overflow","visible"),(a=r.append("g")).append("circle").attr("cx",i.cx-5).attr("cy",i.cy-5).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),a.append("circle").attr("cx",i.cx+5).attr("cy",i.cy-5).attr("r",1.5).attr("stroke-width",2).attr("fill","#666").attr("stroke","#666"),i.score>3?function(t){var e=Object(d.arc)().startAngle(Math.PI/2).endAngle(Math.PI/2*3).innerRadius(7.5).outerRadius(15/2.2);t.append("path").attr("class","mouth").attr("d",e).attr("transform","translate("+i.cx+","+(i.cy+2)+")")}(a):i.score<3?function(t){var e=Object(d.arc)().startAngle(3*Math.PI/2).endAngle(Math.PI/2*5).innerRadius(7.5).outerRadius(15/2.2);t.append("path").attr("class","mouth").attr("d",e).attr("transform","translate("+i.cx+","+(i.cy+7)+")")}(a):function(t){t.append("line").attr("class","mouth").attr("stroke",2).attr("x1",i.cx-5).attr("y1",i.cy+7).attr("x2",i.cx+5).attr("y2",i.cy+7).attr("class","mouth").attr("stroke-width","1px").attr("stroke","#666")}(a);var c={x:0,y:0,width:100,anchor:"start",height:100,rx:0,ry:0};c.x=e.x,c.y=e.y,c.fill=e.fill,c.width=n.width,c.height=n.height,c.class="task task-type-"+e.num,c.rx=3,c.ry=3,Za(s,c);var u=e.x+14;e.people.forEach((function(t){var n=e.actors[t],r={cx:u,cy:e.y,r:7,fill:n,stroke:"#000",title:t};Ja(s,r),u+=10})),Qa(n)(e.task,s,c.x,c.y,c.width,c.height,{class:"task"},n,e.colour)};Ya.parser.yy=Xa;var io={leftMargin:150,diagramMarginX:50,diagramMarginY:20,taskMargin:50,width:150,height:50,taskFontSize:14,taskFontFamily:'"Open-Sans", "sans-serif"',boxMargin:10,boxTextMargin:5,noteMargin:10,messageMargin:35,messageAlign:"center",bottomMarginAdj:1,activationWidth:10,textPlacement:"fo",actorColours:["#8FBC8F","#7CFC00","#00FFFF","#20B2AA","#B0E0E6","#FFFFE0"],sectionFills:["#191970","#8B008B","#4B0082","#2F4F4F","#800000","#8B4513","#00008B"],sectionColours:["#fff"]},ao={},oo=io.leftMargin,so={data:{startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},verticalPos:0,sequenceItems:[],init:function(){this.sequenceItems=[],this.data={startx:void 0,stopx:void 0,starty:void 0,stopy:void 0},this.verticalPos=0},updateVal:function(t,e,n,r){void 0===t[e]?t[e]=n:t[e]=r(n,t[e])},updateBounds:function(t,e,n,r){var i=this,a=0;this.sequenceItems.forEach((function(o){a++;var s=i.sequenceItems.length-a+1;i.updateVal(o,"starty",e-s*io.boxMargin,Math.min),i.updateVal(o,"stopy",r+s*io.boxMargin,Math.max),i.updateVal(so.data,"startx",t-s*io.boxMargin,Math.min),i.updateVal(so.data,"stopx",n+s*io.boxMargin,Math.max),i.updateVal(o,"startx",t-s*io.boxMargin,Math.min),i.updateVal(o,"stopx",n+s*io.boxMargin,Math.max),i.updateVal(so.data,"starty",e-s*io.boxMargin,Math.min),i.updateVal(so.data,"stopy",r+s*io.boxMargin,Math.max)}))},insert:function(t,e,n,r){var i=Math.min(t,n),a=Math.max(t,n),o=Math.min(e,r),s=Math.max(e,r);this.updateVal(so.data,"startx",i,Math.min),this.updateVal(so.data,"starty",o,Math.min),this.updateVal(so.data,"stopx",a,Math.max),this.updateVal(so.data,"stopy",s,Math.max),this.updateBounds(i,o,a,s)},bumpVerticalPos:function(t){this.verticalPos=this.verticalPos+t,this.data.stopy=this.verticalPos},getVerticalPos:function(){return this.verticalPos},getBounds:function(){return this.data}},co=io.sectionFills,uo=io.sectionColours,lo=function(t){Object.keys(t).forEach((function(e){io[e]=t[e]}))},ho=function(t,e){Ya.parser.yy.clear(),Ya.parser.parse(t+"\n"),so.init();var n=Object(d.select)("#"+e);n.attr("xmlns:xlink","http://www.w3.org/1999/xlink"),function(t){t.append("defs").append("marker").attr("id","arrowhead").attr("refX",5).attr("refY",2).attr("markerWidth",6).attr("markerHeight",4).attr("orient","auto").append("path").attr("d","M 0,0 V 4 L6,2 Z")}(n);var r=Ya.parser.yy.getTasks(),i=Ya.parser.yy.getTitle(),a=Ya.parser.yy.getActors();for(var o in ao)delete ao[o];var s=0;a.forEach((function(t){ao[t]=io.actorColours[s%io.actorColours.length],s++})),function(t){var e=60;Object.keys(ao).forEach((function(n){var r=ao[n];to(t,{cx:20,cy:e,r:7,fill:r,stroke:"#000"});var i={x:40,y:e+7,fill:"#666",text:n,textMargin:5|io.boxTextMargin};no(t,i),e+=20}))}(n),so.insert(0,0,oo,50*Object.keys(ao).length),function(t,e,n){for(var r="",i=n+(2*io.height+io.diagramMarginY),a=0,o="#CCC",s="black",c=0,u=0;u tspan {\n fill: ").concat(t.actorTextColor,";\n stroke: none;\n }\n\n .actor-line {\n stroke: ").concat(t.actorLineColor,";\n }\n\n .messageLine0 {\n stroke-width: 1.5;\n stroke-dasharray: none;\n stroke: ").concat(t.signalColor,";\n }\n\n .messageLine1 {\n stroke-width: 1.5;\n stroke-dasharray: 2, 2;\n stroke: ").concat(t.signalColor,";\n }\n\n #arrowhead path {\n fill: ").concat(t.signalColor,";\n stroke: ").concat(t.signalColor,";\n }\n\n .sequenceNumber {\n fill: ").concat(t.sequenceNumberColor,";\n }\n\n #sequencenumber {\n fill: ").concat(t.signalColor,";\n }\n\n #crosshead path {\n fill: ").concat(t.signalColor,";\n stroke: ").concat(t.signalColor,";\n }\n\n .messageText {\n fill: ").concat(t.signalTextColor,";\n stroke: ").concat(t.signalTextColor,";\n }\n\n .labelBox {\n stroke: ").concat(t.labelBoxBorderColor,";\n fill: ").concat(t.labelBoxBkgColor,";\n }\n\n .labelText, .labelText > tspan {\n fill: ").concat(t.labelTextColor,";\n stroke: none;\n }\n\n .loopText, .loopText > tspan {\n fill: ").concat(t.loopTextColor,";\n stroke: none;\n }\n\n .loopLine {\n stroke-width: 2px;\n stroke-dasharray: 2, 2;\n stroke: ").concat(t.labelBoxBorderColor,";\n fill: ").concat(t.labelBoxBorderColor,";\n }\n\n .note {\n //stroke: #decc93;\n stroke: ").concat(t.noteBorderColor,";\n fill: ").concat(t.noteBkgColor,";\n }\n\n .noteText, .noteText > tspan {\n fill: ").concat(t.noteTextColor,";\n stroke: none;\n }\n\n .activation0 {\n fill: ").concat(t.activationBkgColor,";\n stroke: ").concat(t.activationBorderColor,";\n }\n\n .activation1 {\n fill: ").concat(t.activationBkgColor,";\n stroke: ").concat(t.activationBorderColor,";\n }\n\n .activation2 {\n fill: ").concat(t.activationBkgColor,";\n stroke: ").concat(t.activationBorderColor,";\n }\n")},gantt:function(t){return'\n .mermaid-main-font {\n font-family: "trebuchet ms", verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n\n .section {\n stroke: none;\n opacity: 0.2;\n }\n\n .section0 {\n fill: '.concat(t.sectionBkgColor,";\n }\n\n .section2 {\n fill: ").concat(t.sectionBkgColor2,";\n }\n\n .section1,\n .section3 {\n fill: ").concat(t.altSectionBkgColor,";\n opacity: 0.2;\n }\n\n .sectionTitle0 {\n fill: ").concat(t.titleColor,";\n }\n\n .sectionTitle1 {\n fill: ").concat(t.titleColor,";\n }\n\n .sectionTitle2 {\n fill: ").concat(t.titleColor,";\n }\n\n .sectionTitle3 {\n fill: ").concat(t.titleColor,";\n }\n\n .sectionTitle {\n text-anchor: start;\n font-size: 11px;\n text-height: 14px;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n\n }\n\n\n /* Grid and axis */\n\n .grid .tick {\n stroke: ").concat(t.gridColor,";\n opacity: 0.8;\n shape-rendering: crispEdges;\n text {\n font-family: ").concat(t.fontFamily,";\n fill: ").concat(t.textColor,";\n }\n }\n\n .grid path {\n stroke-width: 0;\n }\n\n\n /* Today line */\n\n .today {\n fill: none;\n stroke: ").concat(t.todayLineColor,";\n stroke-width: 2px;\n }\n\n\n /* Task styling */\n\n /* Default task */\n\n .task {\n stroke-width: 2;\n }\n\n .taskText {\n text-anchor: middle;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n\n .taskText:not([font-size]) {\n font-size: 11px;\n }\n\n .taskTextOutsideRight {\n fill: ").concat(t.taskTextDarkColor,";\n text-anchor: start;\n font-size: 11px;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n\n }\n\n .taskTextOutsideLeft {\n fill: ").concat(t.taskTextDarkColor,";\n text-anchor: end;\n font-size: 11px;\n }\n\n /* Special case clickable */\n .task.clickable {\n cursor: pointer;\n }\n .taskText.clickable {\n cursor: pointer;\n fill: ").concat(t.taskTextClickableColor," !important;\n font-weight: bold;\n }\n\n .taskTextOutsideLeft.clickable {\n cursor: pointer;\n fill: ").concat(t.taskTextClickableColor," !important;\n font-weight: bold;\n }\n\n .taskTextOutsideRight.clickable {\n cursor: pointer;\n fill: ").concat(t.taskTextClickableColor," !important;\n font-weight: bold;\n }\n\n /* Specific task settings for the sections*/\n\n .taskText0,\n .taskText1,\n .taskText2,\n .taskText3 {\n fill: ").concat(t.taskTextColor,";\n }\n\n .task0,\n .task1,\n .task2,\n .task3 {\n fill: ").concat(t.taskBkgColor,";\n stroke: ").concat(t.taskBorderColor,";\n }\n\n .taskTextOutside0,\n .taskTextOutside2\n {\n fill: ").concat(t.taskTextOutsideColor,";\n }\n\n .taskTextOutside1,\n .taskTextOutside3 {\n fill: ").concat(t.taskTextOutsideColor,";\n }\n\n\n /* Active task */\n\n .active0,\n .active1,\n .active2,\n .active3 {\n fill: ").concat(t.activeTaskBkgColor,";\n stroke: ").concat(t.activeTaskBorderColor,";\n }\n\n .activeText0,\n .activeText1,\n .activeText2,\n .activeText3 {\n fill: ").concat(t.taskTextDarkColor," !important;\n }\n\n\n /* Completed task */\n\n .done0,\n .done1,\n .done2,\n .done3 {\n stroke: ").concat(t.doneTaskBorderColor,";\n fill: ").concat(t.doneTaskBkgColor,";\n stroke-width: 2;\n }\n\n .doneText0,\n .doneText1,\n .doneText2,\n .doneText3 {\n fill: ").concat(t.taskTextDarkColor," !important;\n }\n\n\n /* Tasks on the critical line */\n\n .crit0,\n .crit1,\n .crit2,\n .crit3 {\n stroke: ").concat(t.critBorderColor,";\n fill: ").concat(t.critBkgColor,";\n stroke-width: 2;\n }\n\n .activeCrit0,\n .activeCrit1,\n .activeCrit2,\n .activeCrit3 {\n stroke: ").concat(t.critBorderColor,";\n fill: ").concat(t.activeTaskBkgColor,";\n stroke-width: 2;\n }\n\n .doneCrit0,\n .doneCrit1,\n .doneCrit2,\n .doneCrit3 {\n stroke: ").concat(t.critBorderColor,";\n fill: ").concat(t.doneTaskBkgColor,";\n stroke-width: 2;\n cursor: pointer;\n shape-rendering: crispEdges;\n }\n\n .milestone {\n transform: rotate(45deg) scale(0.8,0.8);\n }\n\n .milestoneText {\n font-style: italic;\n }\n .doneCritText0,\n .doneCritText1,\n .doneCritText2,\n .doneCritText3 {\n fill: ").concat(t.taskTextDarkColor," !important;\n }\n\n .activeCritText0,\n .activeCritText1,\n .activeCritText2,\n .activeCritText3 {\n fill: ").concat(t.taskTextDarkColor," !important;\n }\n\n .titleText {\n text-anchor: middle;\n font-size: 18px;\n fill: ").concat(t.textColor," ;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n")},classDiagram:fo,"classDiagram-v2":fo,class:fo,stateDiagram:go,state:go,git:function(){return"\n .commit-id,\n .commit-msg,\n .branch-label {\n fill: lightgrey;\n color: lightgrey;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n }\n"},info:function(){return""},pie:function(t){return".pieTitleText {\n text-anchor: middle;\n font-size: 25px;\n fill: ".concat(t.taskTextDarkColor,";\n font-family: ").concat(t.fontFamily,";\n }\n .slice {\n font-family: ").concat(t.fontFamily,";\n fill: ").concat(t.textColor,";\n // fill: white;\n }\n .legend text {\n fill: ").concat(t.taskTextDarkColor,";\n font-family: ").concat(t.fontFamily,";\n font-size: 17px;\n }\n")},er:function(t){return"\n .entityBox {\n fill: ".concat(t.mainBkg,";\n stroke: ").concat(t.nodeBorder,";\n }\n\n .attributeBoxOdd {\n fill: #ffffff;\n stroke: ").concat(t.nodeBorder,";\n }\n\n .attributeBoxEven {\n fill: #f2f2f2;\n stroke: ").concat(t.nodeBorder,";\n }\n\n .relationshipLabelBox {\n fill: ").concat(t.tertiaryColor,";\n opacity: 0.7;\n background-color: ").concat(t.tertiaryColor,";\n rect {\n opacity: 0.5;\n }\n }\n\n .relationshipLine {\n stroke: ").concat(t.lineColor,";\n }\n")},journey:function(t){return".label {\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n color: ".concat(t.textColor,";\n }\n .mouth {\n stroke: #666;\n }\n\n line {\n stroke: ").concat(t.textColor,"\n }\n\n .legend {\n fill: ").concat(t.textColor,";\n }\n\n .label text {\n fill: #333;\n }\n .label {\n color: ").concat(t.textColor,"\n }\n\n .face {\n fill: #FFF8DC;\n stroke: #999;\n }\n\n .node rect,\n .node circle,\n .node ellipse,\n .node polygon,\n .node path {\n fill: ").concat(t.mainBkg,";\n stroke: ").concat(t.nodeBorder,";\n stroke-width: 1px;\n }\n\n .node .label {\n text-align: center;\n }\n .node.clickable {\n cursor: pointer;\n }\n\n .arrowheadPath {\n fill: ").concat(t.arrowheadColor,";\n }\n\n .edgePath .path {\n stroke: ").concat(t.lineColor,";\n stroke-width: 1.5px;\n }\n\n .flowchart-link {\n stroke: ").concat(t.lineColor,";\n fill: none;\n }\n\n .edgeLabel {\n background-color: ").concat(t.edgeLabelBackground,";\n rect {\n opacity: 0.5;\n }\n text-align: center;\n }\n\n .cluster rect {\n }\n\n .cluster text {\n fill: ").concat(t.titleColor,";\n }\n\n div.mermaidTooltip {\n position: absolute;\n text-align: center;\n max-width: 200px;\n padding: 2px;\n font-family: 'trebuchet ms', verdana, arial, sans-serif;\n font-family: var(--mermaid-font-family);\n font-size: 12px;\n background: ").concat(t.tertiaryColor,";\n border: 1px solid ").concat(t.border2,";\n border-radius: 2px;\n pointer-events: none;\n z-index: 100;\n }\n\n .task-type-0, .section-type-0 {\n ").concat(t.fillType0?"fill: ".concat(t.fillType0):"",";\n }\n .task-type-1, .section-type-1 {\n ").concat(t.fillType0?"fill: ".concat(t.fillType1):"",";\n }\n .task-type-2, .section-type-2 {\n ").concat(t.fillType0?"fill: ".concat(t.fillType2):"",";\n }\n .task-type-3, .section-type-3 {\n ").concat(t.fillType0?"fill: ".concat(t.fillType3):"",";\n }\n .task-type-4, .section-type-4 {\n ").concat(t.fillType0?"fill: ".concat(t.fillType4):"",";\n }\n .task-type-5, .section-type-5 {\n ").concat(t.fillType0?"fill: ".concat(t.fillType5):"",";\n }\n .task-type-6, .section-type-6 {\n ").concat(t.fillType0?"fill: ".concat(t.fillType6):"",";\n }\n .task-type-7, .section-type-7 {\n ").concat(t.fillType0?"fill: ".concat(t.fillType7):"",";\n }\n")}};function vo(t){return(vo="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}var mo={};function bo(t){la(t.git),ye(t.flowchart),En(t.flowchart),void 0!==t.sequenceDiagram&&xr.setConf(I(t.sequence,t.sequenceDiagram)),xr.setConf(t.sequence),Qr(t.gantt),oi(t.class),t.state,ji(t.state),va(t.class),Ta(t.class),ja(t.er),lo(t.journey),function(t){Object.keys(t).forEach((function(e){ma[e]=t[e]}))}(t.class)}var xo=Object.freeze({render:function(t,e,n,r){wt();var i=e,a=W.detectInit(i);a&&kt(a);var o=xt();if(e.length>o.maxTextSize&&(i="graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa"),void 0!==r)r.innerHTML="",Object(d.select)(r).append("div").attr("id","d"+t).attr("style","font-family: "+o.fontFamily).append("svg").attr("id",t).attr("width","100%").attr("xmlns","http://www.w3.org/2000/svg").append("g");else{var s=document.getElementById(t);s&&s.remove();var u=document.querySelector("#d"+t);u&&u.remove(),Object(d.select)("body").append("div").attr("id","d"+t).append("svg").attr("id",t).attr("width","100%").attr("xmlns","http://www.w3.org/2000/svg").append("g")}window.txt=i,i=function(t){var e=t;return(e=(e=e.replace(/style.*:\S*#.*;/g,(function(t){return t.substring(0,t.length-1)}))).replace(/classDef.*:\S*#.*;/g,(function(t){return t.substring(0,t.length-1)}))).replace(/#\w+;/g,(function(t){var e=t.substring(1,t.length-1);return/^\+?\d+$/.test(e)?"fl°°"+e+"¶ß":"fl°"+e+"¶ß"}))}(i);var l=Object(d.select)("#d"+t).node(),h=W.detectType(i),g=l.firstChild,y=g.firstChild,v="";if(void 0!==o.themeCSS&&(v+="\n".concat(o.themeCSS)),void 0!==o.fontFamily&&(v+="\n:root { --mermaid-font-family: ".concat(o.fontFamily,"}")),void 0!==o.altFontFamily&&(v+="\n:root { --mermaid-alt-font-family: ".concat(o.altFontFamily,"}")),"flowchart"===h||"flowchart-v2"===h||"graph"===h){var m=function(t){c.info("Extracting classes"),Gt.clear();try{var e=Xt.a.parser;return e.yy=Gt,e.parse(t),Gt.getClasses()}catch(t){return}}(i);for(var b in m)v+="\n.".concat(b," > * { ").concat(m[b].styles.join(" !important; ")," !important; }"),m[b].textStyles&&(v+="\n.".concat(b," tspan { ").concat(m[b].textStyles.join(" !important; ")," !important; }"))}var x=(new f.a)("#".concat(t),function(t,e,n){return" {\n font-family: ".concat(n.fontFamily,";\n font-size: ").concat(n.fontSize,";\n fill: ").concat(n.textColor,"\n }\n\n /* Classes common for multiple diagrams */\n\n .error-icon {\n fill: ").concat(n.errorBkgColor,";\n }\n .error-text {\n fill: ").concat(n.errorTextColor,";\n stroke: ").concat(n.errorTextColor,";\n }\n\n .edge-thickness-normal {\n stroke-width: 2px;\n }\n .edge-thickness-thick {\n stroke-width: 3.5px\n }\n .edge-pattern-solid {\n stroke-dasharray: 0;\n }\n\n .edge-pattern-dashed{\n stroke-dasharray: 3;\n }\n .edge-pattern-dotted {\n stroke-dasharray: 2;\n }\n\n .marker {\n fill: ").concat(n.lineColor,";\n }\n .marker.cross {\n stroke: ").concat(n.lineColor,";\n }\n\n svg {\n font-family: ").concat(n.fontFamily,";\n font-size: ").concat(n.fontSize,";\n }\n\n ").concat(yo[t](n),"\n\n ").concat(e,"\n\n ").concat(t," { fill: apa;}\n")}(h,v,o.themeVariables)),_=document.createElement("style");_.innerHTML=x,g.insertBefore(_,y);try{switch(h){case"git":o.flowchart.arrowMarkerAbsolute=o.arrowMarkerAbsolute,la(o.git),function(t,e,n){try{var r=Qi.a.parser;r.yy=Ji,r.yy.clear(),c.debug("in gitgraph renderer",t+"\n","id:",e,n),r.parse(t+"\n"),ea=Object.assign(ea,na,Ji.getOptions()),c.debug("effective options",ea);var i=Ji.getDirection();ta=Ji.getCommits();var a=Ji.getBranchesAsObjArray();"BT"===i&&(ea.nodeLabel.x=a.length*ea.branchOffset,ea.nodeLabel.width="100%",ea.nodeLabel.y=-2*ea.nodeRadius);var o=Object(d.select)('[id="'.concat(e,'"]'));for(var s in function(t){t.append("defs").append("g").attr("id","def-commit").append("circle").attr("r",ea.nodeRadius).attr("cx",0).attr("cy",0),t.select("#def-commit").append("foreignObject").attr("width",ea.nodeLabel.width).attr("height",ea.nodeLabel.height).attr("x",ea.nodeLabel.x).attr("y",ea.nodeLabel.y).attr("class","node-label").attr("requiredFeatures","http://www.w3.org/TR/SVG11/feature#Extensibility").append("p").html("")}(o),Xi=1,a){var u=a[s];sa(o,u.commit.id,a,i),ca(o,u.commit,i),Xi++}o.attr("height",(function(){return"BT"===i?Object.keys(ta).length*ea.nodeSpacing:(a.length+1)*ea.branchOffset}))}catch(t){c.error("Error while rendering gitgraph"),c.error(t.message)}}(i,t,!1);break;case"flowchart":o.flowchart.arrowMarkerAbsolute=o.arrowMarkerAbsolute,ye(o.flowchart),function(t,e){c.info("Drawing flowchart"),Gt.clear(),Gt.setGen("gen-1");var n=Xt.a.parser;n.yy=Gt,n.parse(t);var r=Gt.getDirection();void 0===r&&(r="TD");for(var i,a=xt().flowchart,o=a.nodeSpacing||50,s=a.rankSpacing||50,u=new V.a.Graph({multigraph:!0,compound:!0}).setGraph({rankdir:r,nodesep:o,ranksep:s,marginx:8,marginy:8}).setDefaultEdgeLabel((function(){return{}})),l=Gt.getSubGraphs(),h=l.length-1;h>=0;h--)i=l[h],Gt.addVertex(i.id,i.title,"group",void 0,i.classes);var f=Gt.getVertices();c.warn("Get vertices",f);var p=Gt.getEdges(),g=0;for(g=l.length-1;g>=0;g--){i=l[g],Object(d.selectAll)("cluster").append("text");for(var y=0;y=0;h--)i=l[h],c.info("Subgraph - ",i),Gt.addVertex(i.id,i.title,"group",void 0,i.classes);var f=Gt.getVertices(),p=Gt.getEdges();c.info(p);var g=0;for(g=l.length-1;g>=0;g--){i=l[g],Object(d.selectAll)("cluster").append("text");for(var y=0;y *").attr("xmlns","http://www.w3.org/1999/xhtml");var k=Object(d.select)("#d"+t).node().innerHTML;if(c.debug("cnf.arrowMarkerAbsolute",o.arrowMarkerAbsolute),o.arrowMarkerAbsolute&&"false"!==o.arrowMarkerAbsolute||(k=k.replace(/marker-end="url\(.*?#/g,'marker-end="url(#',"g")),k=(k=function(t){var e=t;return(e=(e=e.replace(/fl°°/g,(function(){return"&#"}))).replace(/fl°/g,(function(){return"&"}))).replace(/¶ß/g,(function(){return";"}))}(k)).replace(/
/g,"
"),void 0!==n)switch(h){case"flowchart":case"flowchart-v2":n(k,Gt.bindFunctions);break;case"gantt":n(k,Xr.bindFunctions);break;case"class":case"classDiagram":n(k,Ke.bindFunctions);break;default:n(k)}else c.debug("CB = undefined!");var w=Object(d.select)("#d"+t).node();return null!==w&&"function"==typeof w.remove&&Object(d.select)("#d"+t).node().remove(),k},parse:function(t){var e=W.detectInit(t);e&&c.debug("reinit ",e);var n,r=W.detectType(t);switch(c.debug("Type "+r),r){case"git":(n=Qi.a).parser.yy=Ji;break;case"flowchart":case"flowchart-v2":Gt.clear(),(n=Xt.a).parser.yy=Gt;break;case"sequence":(n=Hn.a).parser.yy=sr;break;case"gantt":(n=kr.a).parser.yy=Xr;break;case"class":case"classDiagram":(n=ni.a).parser.yy=Ke;break;case"state":case"stateDiagram":(n=Ci.a).parser.yy=Ei;break;case"info":c.debug("info info info"),(n=ga.a).parser.yy=da;break;case"pie":c.debug("pie"),(n=wa.a).parser.yy=_a;break;case"er":c.debug("er"),(n=Na.a).parser.yy=Oa;break;case"journey":c.debug("Journey"),(n=za.a).parser.yy=Xa}return n.parser.yy.graphType=r,n.parser.yy.parseError=function(t,e){throw{str:t,hash:e}},n.parse(t),n},parseDirective:function(t,e,n,r){try{if(void 0!==e)switch(e=e.trim(),n){case"open_directive":mo={};break;case"type_directive":mo.type=e.toLowerCase();break;case"arg_directive":mo.args=JSON.parse(e);break;case"close_directive":(function(t,e,n){switch(c.debug("Directive type=".concat(e.type," with args:"),e.args),e.type){case"init":case"initialize":["config"].forEach((function(t){void 0!==e.args[t]&&("flowchart-v2"===n&&(n="flowchart"),e.args[n]=e.args[t],delete e.args[t])})),e.args,kt(e.args);break;case"wrap":case"nowrap":t&&t.setWrap&&t.setWrap("wrap"===e.type);break;default:c.warn("Unhandled directive: source: '%%{".concat(e.type,": ").concat(JSON.stringify(e.args?e.args:{}),"}%%"),e)}})(t,mo,r),mo=null}}catch(t){c.error("Error while rendering sequenceDiagram directive: ".concat(e," jison context: ").concat(n)),c.error(t.message)}},initialize:function(t){t&&t.fontFamily&&(t.themeVariables&&t.themeVariables.fontFamily||(t.themeVariables={fontFamily:t.fontFamily})),ft=I({},t),t&&t.theme&<[t.theme]?t.themeVariables=lt[t.theme].getThemeVariables(t.themeVariables):t&&(t.themeVariables=lt.default.getThemeVariables(t.themeVariables));var e="object"===vo(t)?function(t){return gt=I({},pt),gt=I(gt,t),t.theme&&(gt.themeVariables=lt[t.theme].getThemeVariables(t.themeVariables)),vt=mt(gt,yt),gt}(t):bt();bo(e),u(e.logLevel)},reinitialize:function(){},getConfig:xt,setConfig:function(t){return I(vt,t),xt()},getSiteConfig:bt,updateSiteConfig:function(t){return gt=I(gt,t),mt(gt,yt),gt},reset:function(){wt()},globalReset:function(){wt(),bo(xt())},defaultConfig:pt});u(xt().logLevel),wt(xt());var _o=xo,ko=function(){wo.startOnLoad?_o.getConfig().startOnLoad&&wo.init():void 0===wo.startOnLoad&&(c.debug("In start, no config"),_o.getConfig().startOnLoad&&wo.init())};"undefined"!=typeof document&& -/*! - * Wait for document loaded before starting the execution - */ -window.addEventListener("load",(function(){ko()}),!1);var wo={startOnLoad:!0,htmlLabels:!0,mermaidAPI:_o,parse:_o.parse,render:_o.render,init:function(){var t,e,n=this,r=_o.getConfig();arguments.length>=2?( -/*! sequence config was passed as #1 */ -void 0!==arguments[0]&&(wo.sequenceConfig=arguments[0]),t=arguments[1]):t=arguments[0],"function"==typeof arguments[arguments.length-1]?(e=arguments[arguments.length-1],c.debug("Callback function found")):void 0!==r.mermaid&&("function"==typeof r.mermaid.callback?(e=r.mermaid.callback,c.debug("Callback function found")):c.debug("No Callback function found")),t=void 0===t?document.querySelectorAll(".mermaid"):"string"==typeof t?document.querySelectorAll(t):t instanceof window.Node?[t]:t,c.debug("Start On Load before: "+wo.startOnLoad),void 0!==wo.startOnLoad&&(c.debug("Start On Load inner: "+wo.startOnLoad),_o.updateSiteConfig({startOnLoad:wo.startOnLoad})),void 0!==wo.ganttConfig&&_o.updateSiteConfig({gantt:wo.ganttConfig});for(var a,o=W.initIdGeneratior(r.deterministicIds,r.deterministicIDSeed).next,s=function(r){var s=t[r]; -/*! Check if previously processed */if(s.getAttribute("data-processed"))return"continue";s.setAttribute("data-processed",!0);var u="mermaid-".concat(o());a=i(a=s.innerHTML).trim().replace(//gi,"
");var l=W.detectInit(a);l&&c.debug("Detected early reinit: ",l);try{_o.render(u,a,(function(t,n){s.innerHTML=t,void 0!==e&&e(u),n&&n(s)}),s)}catch(t){c.warn("Syntax Error rendering"),c.warn(t),n.parseError&&n.parseError(t)}},u=0;ut("span",{class:["badge",e.type],style:{verticalAlign:e.vertical}},e.text||n().default)},p=(n(191),n(3)),l=Object(p.a)(i,void 0,void 0,!1,null,"15b7b770",null);e.default=l.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/5.cf1e5692.js b/docs/assets/js/5.cf1e5692.js deleted file mode 100644 index 3d42b67..0000000 --- a/docs/assets/js/5.cf1e5692.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[5],{166:function(e,t,c){},192:function(e,t,c){"use strict";c(166)},199:function(e,t,c){"use strict";c.r(t);var i={name:"CodeBlock",props:{title:{type:String,required:!0},active:{type:Boolean,default:!1}}},n=(c(192),c(3)),s=Object(n.a)(i,(function(){var e=this.$createElement;return(this._self._c||e)("div",{staticClass:"theme-code-block",class:{"theme-code-block__active":this.active}},[this._t("default")],2)}),[],!1,null,"6d04095e",null);t.default=s.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/6.09205619.js b/docs/assets/js/6.09205619.js deleted file mode 100644 index 2ef7b58..0000000 --- a/docs/assets/js/6.09205619.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[6],{167:function(e,t,a){},193:function(e,t,a){"use strict";a(167)},200:function(e,t,a){"use strict";a.r(t);var o={name:"CodeGroup",data:()=>({codeTabs:[],activeCodeTabIndex:-1}),watch:{activeCodeTabIndex(e){this.codeTabs.forEach(e=>{e.elm.classList.remove("theme-code-block__active")}),this.codeTabs[e].elm.classList.add("theme-code-block__active")}},mounted(){this.codeTabs=(this.$slots.default||[]).filter(e=>Boolean(e.componentOptions)).map((e,t)=>(""===e.componentOptions.propsData.active&&(this.activeCodeTabIndex=t),{title:e.componentOptions.propsData.title,elm:e.elm})),-1===this.activeCodeTabIndex&&this.codeTabs.length>0&&(this.activeCodeTabIndex=0)},methods:{changeCodeTab(e){this.activeCodeTabIndex=e}}},c=(a(193),a(3)),s=Object(c.a)(o,(function(){var e=this,t=e.$createElement,a=e._self._c||t;return a("div",{staticClass:"theme-code-group"},[a("div",{staticClass:"theme-code-group__nav"},[a("ul",{staticClass:"theme-code-group__ul"},e._l(e.codeTabs,(function(t,o){return a("li",{key:t.title,staticClass:"theme-code-group__li"},[a("button",{staticClass:"theme-code-group__nav-tab",class:{"theme-code-group__nav-tab-active":o===e.activeCodeTabIndex},on:{click:function(t){return e.changeCodeTab(o)}}},[e._v("\n "+e._s(t.title)+"\n ")])])})),0)]),e._v(" "),e._t("default"),e._v(" "),e.codeTabs.length<1?a("pre",{staticClass:"pre-blank"},[e._v("// Make sure to add code blocks to your code group")]):e._e()],2)}),[],!1,null,"32c2d7ed",null);t.default=s.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/7.b9204d54.js b/docs/assets/js/7.b9204d54.js deleted file mode 100644 index 6f80da8..0000000 --- a/docs/assets/js/7.b9204d54.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[7],{189:function(t,r,e){t.exports=e.p+"assets/img/uroboroSQLformatter_logo.e177d254.png"},222:function(t,r,e){"use strict";e.r(r);var o=e(3),u=Object(o.a)({},(function(){var t=this,r=t.$createElement,o=t._self._c||r;return o("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[o("h1",{attrs:{id:"developer-tools"}},[o("a",{staticClass:"header-anchor",attrs:{href:"#developer-tools"}},[t._v("#")]),t._v(" Developer Tools")]),t._v(" "),o("p",[o("img",{attrs:{src:e(189),alt:"uroboroSQL formatter"}})]),t._v(" "),o("ul",[o("li",[t._v("CLI\n"),o("ul",[o("li",[o("a",{attrs:{href:"https://github.com/future-architect/uroboroSQL-formatter",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://github.com/future-architect/uroboroSQL-formatter"),o("OutboundLink")],1)])])]),t._v(" "),o("li",[t._v("Sublime Text 3 Plugin\n"),o("ul",[o("li",[o("a",{attrs:{href:"https://github.com/future-architect/Sublime-uroboroSQL-formatter",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://github.com/future-architect/Sublime-uroboroSQL-formatter"),o("OutboundLink")],1)])])]),t._v(" "),o("li",[t._v("IntelliJ IDEA Platform Plugin\n"),o("ul",[o("li",[o("a",{attrs:{href:"https://github.com/future-architect/idea-uroborosql-formatter",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://github.com/future-architect/idea-uroborosql-formatter"),o("OutboundLink")],1)])])]),t._v(" "),o("li",[t._v("Eclipse Plugin\n"),o("ul",[o("li",[o("a",{attrs:{href:"https://github.com/future-architect/eclipse-uroborosql-formatter",target:"_blank",rel:"noopener noreferrer"}},[t._v("https://github.com/future-architect/eclipse-uroborosql-formatter"),o("OutboundLink")],1)])])])])])}),[],!1,null,null,null);r.default=u.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/8.2fa969e6.js b/docs/assets/js/8.2fa969e6.js deleted file mode 100644 index bed560c..0000000 --- a/docs/assets/js/8.2fa969e6.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[8],{190:function(t,s,a){t.exports=a.p+"assets/img/erd.5706ef62.png"},218:function(t,s,a){"use strict";a.r(s);var n=a(3),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("h1",{attrs:{id:"sqlファイルを使用したdbアクセス"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#sqlファイルを使用したdbアクセス"}},[t._v("#")]),t._v(" SQLファイルを使用したDBアクセス")]),t._v(" "),n("h2",{attrs:{id:"sqlconfigの生成"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#sqlconfigの生成"}},[t._v("#")]),t._v(" SqlConfigの生成")]),t._v(" "),n("p",[t._v("SQLファイルを使用したサンプルコード "),n("a",{attrs:{href:"https://github.com/future-architect/uroborosql-sample/blob/master/src/main/java/jp/co/future/uroborosql/sample/SqlFileApiSample.java",target:"_blank",rel:"noopener noreferrer"}},[t._v("SqlFileApiSample.java"),n("OutboundLink")],1),t._v(" を例として説明します。")]),t._v(" "),n("p",[t._v("まず初めにコンストラクタの中で最初に"),n("code",[t._v("SqlConfig")]),t._v("クラスを作成しています。\n"),n("code",[t._v("SqlConfig")]),t._v("は"),n("strong",[t._v("uroboroSQL")]),t._v("に対する各種の設定を保持するクラスで、"),n("code",[t._v("SqlConfig")]),t._v("の設定を変更することで"),n("strong",[t._v("uroboroSQL")]),t._v("の動作を変更することが出来ます。"),n("br"),t._v("\nここでは"),n("a",{attrs:{href:"http://www.h2database.com/html/main.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("H2DB"),n("OutboundLink")],1),t._v("のメモリDBに接続する"),n("code",[t._v("SqlConfig")]),t._v("インスタンスを生成しています。\n"),n("code",[t._v("SqlConfig")]),t._v("の生成には"),n("code",[t._v("UroboroSQL")]),t._v("クラスによるBuilderAPIを使用します。")]),t._v(" "),n("ul",[n("li",[t._v("基本的な呼出方法(DBへの接続情報のみ指定)")])]),t._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// create SqlConfig")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlConfig")]),t._v(" config "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("UroboroSQL")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("builder")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"jdbc:h2:mem:test;DB_CLOSE_DELAY=-1"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"sa"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('""')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("build")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br")])]),n("ul",[n("li",[t._v("設定のカスタマイズ(定数の指定や検索結果の取得方法変更)")])]),t._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// create SqlConfig")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlConfig")]),t._v(" config "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("UroboroSQL")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("builder")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"jdbc:h2:mem:test;DB_CLOSE_DELAY=-1"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"sa"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('""')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// SqlContextFactoryの設定(Enum定数パッケージ設定の追加)")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("setSqlContextFactory")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlContextFactoryImpl")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("setEnumConstantPackageNames")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Arrays")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("asList")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Gender")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("getPackage")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("getName")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// SqlAgentFactoryの設定(Queryの戻り値のMapのキー文字列のデフォルトCaseFormat設定の追加)")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("setSqlAgentFactory")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlAgentFactoryImpl")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("setDefaultMapKeyCaseFormat")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("CaseFormat")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("CAMEL_CASE"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// SqlManagerの設定(NioSqlManagerImplの指定)")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("setSqlManager")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("NioSqlManagerImpl")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("build")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br")])]),n("p",[n("code",[t._v("SqlConfig")]),t._v("生成時のカスタマイズの詳細については "),n("a",{attrs:{href:"../configuration"}},[t._v("設定")]),t._v("を参照してください。")]),t._v(" "),n("h2",{attrs:{id:"テーブルの作成と初期データの登録"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#テーブルの作成と初期データの登録"}},[t._v("#")]),t._v(" テーブルの作成と初期データの登録")]),t._v(" "),n("p",[t._v("次に事前準備として以降の処理で使用するテーブルの作成と初期データの登録を行います。("),n("code",[t._v("SqlFileApiSample#setupTableAndData()")]),t._v("を参照)"),n("br"),t._v("\nSQLを実行する場合は"),n("code",[t._v("SqlConfig")]),t._v("から"),n("code",[t._v("SqlAgent")]),t._v("を生成します。\n"),n("code",[t._v("SqlAgent")]),t._v("は"),n("strong",[t._v("uroboroSQL")]),t._v("の中核となるクラスで、"),n("strong",[t._v("uroboroSQL")]),t._v("の各操作はこの"),n("code",[t._v("SqlAgent")]),t._v("を使って行います。"),n("br"),t._v(" "),n("code",[t._v("SqlAgent")]),t._v("は"),n("code",[t._v("AutoClosable")]),t._v("インタフェースを実装しているので、try-with-resources文で囲むことで処理終了時に自動でクローズされます。\nこのとき"),n("code",[t._v("SqlAgent")]),t._v("の中に保持する"),n("code",[t._v("Connection")]),t._v("や"),n("code",[t._v("Statement")]),t._v("も合わせてクローズされるため、クローズ漏れによるメモリリークを防ぐことができます。")]),t._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// create SqlAgent. SqlAgent implements AutoClosable.")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("try")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SqlAgent")]),t._v(" agent "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" config"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("agent")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// ここにSQL実行の処理を実装する")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br")])]),n("div",{staticClass:"custom-block tip"},[n("p",{staticClass:"custom-block-title"},[t._v("TIP")]),t._v(" "),n("p",[t._v("以降の説明では"),n("code",[t._v("SqlAgent")]),t._v("に対する処理はtry-with-resources文の中で行っているものとします。")])]),t._v(" "),n("p",[n("strong",[t._v("uroboroSQL")]),t._v("では実行するSQLをファイルパスに似た表現(以降 "),n("em",[t._v("SQL名")]),t._v(" と呼ぶ)で指定します。\n下の例ではクラスパス上にあるsqlフォルダ配下のddl/create_tables.sqlを指定してSQL更新処理を実行します。")]),t._v(" "),n("p",[t._v("更新処理を行う場合、"),n("code",[t._v('SqlAgent#update("[SQL名]")')]),t._v("メソッドを使用して"),n("strong",[t._v("SqlUpdate")]),t._v("を取得しUpdateの実行を行います。")]),t._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// create table : テーブル作成")]),t._v("\nagent"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("update")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ddl/create_tables"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("count")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// setup data : 初期データ挿入")]),t._v("\nagent"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("update")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"setup/insert_data"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("count")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br")])]),n("p",[t._v("ddl/create_tables.sqlで作成したテーブルの構成は以下になります。")]),t._v(" "),n("p",[n("img",{attrs:{src:a(190),alt:"テーブル構成"}})]),t._v(" "),n("h2",{attrs:{id:"sqlファイルを使用した検索"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#sqlファイルを使用した検索"}},[t._v("#")]),t._v(" SQLファイルを使用した検索")]),t._v(" "),n("p",[t._v("登録したデータを検索します。検索を行う際は、"),n("code",[t._v('SqlAgent#query("[SQL名]")')]),t._v("メソッドを使用して"),n("strong",[t._v("SqlQuery")]),t._v("を取得し、バインドパラメータの設定や検索の実行を行います。")]),t._v(" "),n("p",[n("strong",[t._v("SqlQuery")]),t._v("では検索結果をいくつかの形式で取得することができます。")]),t._v(" "),n("table",[n("thead",[n("tr",[n("th",{staticStyle:{"text-align":"left"}},[t._v("メソッド")]),t._v(" "),n("th",{staticStyle:{"text-align":"left"}},[t._v("説明")])])]),t._v(" "),n("tbody",[n("tr",[n("td",{staticStyle:{"text-align":"left"}},[t._v("SqlQuery#collect()")]),t._v(" "),n("td",{staticStyle:{"text-align":"left"}},[t._v("検索結果を"),n("code",[t._v("List")]),t._v("の形式で取得する")])]),t._v(" "),n("tr",[n("td",{staticStyle:{"text-align":"left"}},[t._v("SqlQuery#stream()")]),t._v(" "),n("td",{staticStyle:{"text-align":"left"}},[t._v("検索結果を"),n("code",[t._v("java.util.Stream")]),t._v("の形式で取得する")])]),t._v(" "),n("tr",[n("td",{staticStyle:{"text-align":"left"}},[t._v("SqlQuery#resultSet()")]),t._v(" "),n("td",{staticStyle:{"text-align":"left"}},[t._v("検索結果の"),n("code",[t._v("ResultSet")]),t._v("を取得する")])]),t._v(" "),n("tr",[n("td",{staticStyle:{"text-align":"left"}},[t._v("SqlQuery#first()")]),t._v(" "),n("td",{staticStyle:{"text-align":"left"}},[t._v("検索結果の1件目を取得する。取得できない場合は"),n("code",[t._v("RuntimeException")]),t._v("がスローされる")])]),t._v(" "),n("tr",[n("td",{staticStyle:{"text-align":"left"}},[t._v("SqlQuery#findFirst()")]),t._v(" "),n("td",{staticStyle:{"text-align":"left"}},[t._v("検索結果の1件目を取得する。戻り値は"),n("code",[t._v("Optional")])])]),t._v(" "),n("tr",[n("td",{staticStyle:{"text-align":"left"}},[t._v("SqlQuery#one()")]),t._v(" "),n("td",{staticStyle:{"text-align":"left"}},[t._v("検索結果の1件目を取得する。取得できない場合、もしくは2件以上取得出来た場合は"),n("code",[t._v("RuntimeException")]),t._v("がスローされる")])]),t._v(" "),n("tr",[n("td",{staticStyle:{"text-align":"left"}},[t._v("SqlQuery#findOne()")]),t._v(" "),n("td",{staticStyle:{"text-align":"left"}},[t._v("検索結果の1件目を取得する。戻り値は"),n("code",[t._v("Optional")]),t._v("。2件以上取得出来た場合は"),n("code",[t._v("RuntimeException")]),t._v("がスローされる")])])])]),t._v(" "),n("p",[t._v("以下のように呼び出します。")]),t._v(" "),n("div",{staticClass:"language-java line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-java"}},[n("code",[n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// no parameter : バインドパラメータ指定なしで検索")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("List")]),n("span",{pre:!0,attrs:{class:"token generics"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Map")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Object")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" deps1 "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" agent"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"department/select_department"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("collect")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// add bind parameter : バインドパラメータを設定して検索")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("List")]),n("span",{pre:!0,attrs:{class:"token generics"}},[n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Map")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("<")]),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("String")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Object")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(">")])]),t._v(" deps2 "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" agent"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("query")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"department/select_department"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("param")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"deptNo"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("collect")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br")])]),n("p",[t._v("ここで実行されるSQLは以下のようになっています。")]),t._v(" "),n("ul",[n("li",[t._v("department/select_department.sql")])]),t._v(" "),n("div",{staticClass:"language-sql line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-sql"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("select")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* _SQL_ID_ */")]),t._v("\n dept"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("dept_no "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" dept_no\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" dept"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("dept_name "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" dept_name\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" dept"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("lock_version "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" lock_version\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v("\n department dept\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*BEGIN*/")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("where")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*IF SF.isNotEmpty(deptNo)*/")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("and")]),t._v(" dept"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("dept_no "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*deptNo*/")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*END*/")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*IF SF.isNotEmpty(deptName)*/")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("and")]),t._v(" dept"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("dept_name "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*deptName*/")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'sample'")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*END*/")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*END*/")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br"),n("span",{staticClass:"line-number"},[t._v("11")]),n("br"),n("span",{staticClass:"line-number"},[t._v("12")]),n("br"),n("span",{staticClass:"line-number"},[t._v("13")]),n("br"),n("span",{staticClass:"line-number"},[t._v("14")]),n("br"),n("span",{staticClass:"line-number"},[t._v("15")]),n("br")])]),n("ul",[n("li",[n("code",[t._v("/* _SQL_ID_ */")]),t._v(" はSQLを特定するID(SQL_IDといいます)を付与するための予約語で、実行時にSQLファイルを特定するための文字列に変換されます。")]),t._v(" "),n("li",[n("code",[t._v("/*IF*/ ... /*END*/")]),t._v("は条件分岐で、IFの後ろの評価式が"),n("code",[t._v("True")]),t._v("となる場合に"),n("code",[t._v("/*IF*/")]),t._v("と"),n("code",[t._v("/*END*/")]),t._v("で囲まれた部分が出力されます。")]),t._v(" "),n("li",[n("code",[t._v("/*deptNo*/")]),t._v("はバインドパラメータで、実行時に"),n("code",[t._v("?")]),t._v("に変換され、SqlQueryに設定したパラメータがSQLへバインドされます。")]),t._v(" "),n("li",[n("code",[t._v("/*deptNo*/")]),t._v("の後ろの"),n("code",[t._v("1")]),t._v("はテスト用データです。このようにテスト用データをSQL文に記述しておくことで、このSQLを\nSQLクライアントツールで実行する際にエラーにならずに文法の確認を行うことができます。")])]),t._v(" "),n("p",[t._v("SQLで使用できる構文については"),n("RouterLink",{attrs:{to:"/background/#_2waysql"}},[t._v("2WaySQL")]),t._v("を参照してください。"),n("br"),t._v("\nまた、検索のより詳しい説明は"),n("RouterLink",{attrs:{to:"/basics/sql-file-api.html#sqlによる検索-sqlagent-query-sqlagent-querywith"}},[t._v("SQLによる検索")]),t._v("を参照してください。")],1),t._v(" "),n("h2",{attrs:{id:"sqlファイルを使用した行挿入"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#sqlファイルを使用した行挿入"}},[t._v("#")]),t._v(" SQLファイルを使用した行挿入")]),t._v(" "),n("p",[t._v("テーブルに対して行挿入を行うことも出来ます。\n行挿入を行う際は、"),n("code",[t._v('SqlAgent#update("[SQL名]")')]),t._v("メソッドを使用して"),n("strong",[t._v("SqlUpdate")]),t._v("を取得し、続けてバインドパラメータの設定やSQLの実行を行います。")]),t._v(" "),n("div",{staticClass:"language-sql line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-sql"}},[n("code",[t._v("agent"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("update")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"department/insert_department"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("param"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"deptName"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"production"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("count")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br")])]),n("p",[t._v("ここで実行されるSQLは以下のようになっています。")]),t._v(" "),n("ul",[n("li",[t._v("department/insert_department.sql")])]),t._v(" "),n("div",{staticClass:"language-sql line-numbers-mode"},[n("pre",{pre:!0,attrs:{class:"language-sql"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("insert")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/* _SQL_ID_ */")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("into")]),t._v("\n department\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n dept_name\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" lock_version\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("values")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("/*deptName*/")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v("'sample'")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),n("div",{staticClass:"line-numbers-wrapper"},[n("span",{staticClass:"line-number"},[t._v("1")]),n("br"),n("span",{staticClass:"line-number"},[t._v("2")]),n("br"),n("span",{staticClass:"line-number"},[t._v("3")]),n("br"),n("span",{staticClass:"line-number"},[t._v("4")]),n("br"),n("span",{staticClass:"line-number"},[t._v("5")]),n("br"),n("span",{staticClass:"line-number"},[t._v("6")]),n("br"),n("span",{staticClass:"line-number"},[t._v("7")]),n("br"),n("span",{staticClass:"line-number"},[t._v("8")]),n("br"),n("span",{staticClass:"line-number"},[t._v("9")]),n("br"),n("span",{staticClass:"line-number"},[t._v("10")]),n("br")])]),n("p",[n("code",[t._v('SqlAgent#update("[SQL名]")')]),t._v("では実行するSQLの内容によって行挿入の他に行更新や行削除を行うことが出来ます。より詳しい説明は"),n("RouterLink",{attrs:{to:"/basics/sql-file-api.html#sqlによる更新-sqlagent-update-sqlagent-updatewith"}},[t._v("SQLによる更新")]),t._v("を参照してください。")],1)])}),[],!1,null,null,null);s.default=e.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/9.ee86939d.js b/docs/assets/js/9.ee86939d.js deleted file mode 100644 index ab49170..0000000 --- a/docs/assets/js/9.ee86939d.js +++ /dev/null @@ -1 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[9],{198:function(t,e,s){"use strict";s.r(e);const o=["There's nothing here.","How did we get here?","That's a Four-Oh-Four.","Looks like we've got some broken links."];var n={methods:{getMsg:()=>o[Math.floor(Math.random()*o.length)]}},h=s(3),i=Object(h.a)(n,(function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"theme-container"},[e("div",{staticClass:"theme-default-content"},[e("h1",[this._v("404")]),this._v(" "),e("blockquote",[this._v(this._s(this.getMsg()))]),this._v(" "),e("RouterLink",{attrs:{to:"/"}},[this._v("\n Take me home.\n ")])],1)])}),[],!1,null,null,null);e.default=i.exports}}]); \ No newline at end of file diff --git a/docs/assets/js/app.7438eacc.js b/docs/assets/js/app.7438eacc.js deleted file mode 100644 index 56dd9b5..0000000 --- a/docs/assets/js/app.7438eacc.js +++ /dev/null @@ -1,14 +0,0 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[0],[]]);!function(n){function e(e){for(var r,s,i=e[0],l=e[1],c=e[2],u=0,d=[];u

'};function a(n,e,t){return nt?t:n}function o(n){return 100*(-1+n)}t.configure=function(n){var e,t;for(e in n)void 0!==(t=n[e])&&n.hasOwnProperty(e)&&(r[e]=t);return this},t.status=null,t.set=function(n){var e=t.isStarted();n=a(n,r.minimum,1),t.status=1===n?null:n;var l=t.render(!e),c=l.querySelector(r.barSelector),p=r.speed,u=r.easing;return l.offsetWidth,s((function(e){""===r.positionUsing&&(r.positionUsing=t.getPositioningCSS()),i(c,function(n,e,t){var a;return(a="translate3d"===r.positionUsing?{transform:"translate3d("+o(n)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+o(n)+"%,0)"}:{"margin-left":o(n)+"%"}).transition="all "+e+"ms "+t,a}(n,p,u)),1===n?(i(l,{transition:"none",opacity:1}),l.offsetWidth,setTimeout((function(){i(l,{transition:"all "+p+"ms linear",opacity:0}),setTimeout((function(){t.remove(),e()}),p)}),p)):setTimeout(e,p)})),this},t.isStarted=function(){return"number"==typeof t.status},t.start=function(){t.status||t.set(0);var n=function(){setTimeout((function(){t.status&&(t.trickle(),n())}),r.trickleSpeed)};return r.trickle&&n(),this},t.done=function(n){return n||t.status?t.inc(.3+.5*Math.random()).set(1):this},t.inc=function(n){var e=t.status;return e?("number"!=typeof n&&(n=(1-e)*a(Math.random()*e,.1,.95)),e=a(e+n,0,.994),t.set(e)):t.start()},t.trickle=function(){return t.inc(Math.random()*r.trickleRate)},n=0,e=0,t.promise=function(r){return r&&"resolved"!==r.state()?(0===e&&t.start(),n++,e++,r.always((function(){0==--e?(n=0,t.done()):t.set((n-e)/n)})),this):this},t.render=function(n){if(t.isRendered())return document.getElementById("nprogress");c(document.documentElement,"nprogress-busy");var e=document.createElement("div");e.id="nprogress",e.innerHTML=r.template;var a,s=e.querySelector(r.barSelector),l=n?"-100":o(t.status||0),p=document.querySelector(r.parent);return i(s,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(a=e.querySelector(r.spinnerSelector))&&d(a),p!=document.body&&c(p,"nprogress-custom-parent"),p.appendChild(e),e},t.remove=function(){p(document.documentElement,"nprogress-busy"),p(document.querySelector(r.parent),"nprogress-custom-parent");var n=document.getElementById("nprogress");n&&d(n)},t.isRendered=function(){return!!document.getElementById("nprogress")},t.getPositioningCSS=function(){var n=document.body.style,e="WebkitTransform"in n?"Webkit":"MozTransform"in n?"Moz":"msTransform"in n?"ms":"OTransform"in n?"O":"";return e+"Perspective"in n?"translate3d":e+"Transform"in n?"translate":"margin"};var s=function(){var n=[];function e(){var t=n.shift();t&&t(e)}return function(t){n.push(t),1==n.length&&e()}}(),i=function(){var n=["Webkit","O","Moz","ms"],e={};function t(t){return t=t.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(n,e){return e.toUpperCase()})),e[t]||(e[t]=function(e){var t=document.body.style;if(e in t)return e;for(var r,a=n.length,o=e.charAt(0).toUpperCase()+e.slice(1);a--;)if((r=n[a]+o)in t)return r;return e}(t))}function r(n,e,r){e=t(e),n.style[e]=r}return function(n,e){var t,a,o=arguments;if(2==o.length)for(t in e)void 0!==(a=e[t])&&e.hasOwnProperty(t)&&r(n,t,a);else r(n,o[1],o[2])}}();function l(n,e){return("string"==typeof n?n:u(n)).indexOf(" "+e+" ")>=0}function c(n,e){var t=u(n),r=t+e;l(t,e)||(n.className=r.substring(1))}function p(n,e){var t,r=u(n);l(n,e)&&(t=r.replace(" "+e+" "," "),n.className=t.substring(1,t.length-1))}function u(n){return(" "+(n.className||"")+" ").replace(/\s+/gi," ")}function d(n){n&&n.parentNode&&n.parentNode.removeChild(n)}return t})?r.call(e,t,e,n):r)||(n.exports=a)},function(n,e,t){var r=t(52),a=t(4),o=Object.prototype,s=o.hasOwnProperty,i=o.propertyIsEnumerable,l=r(function(){return arguments}())?r:function(n){return a(n)&&s.call(n,"callee")&&!i.call(n,"callee")};n.exports=l},function(n,e,t){var r=t(2)(t(1),"Map");n.exports=r},function(n,e){n.exports=function(n){var e=typeof n;return null!=n&&("object"==e||"function"==e)}},function(n,e,t){var r=t(72),a=t(79),o=t(81),s=t(82),i=t(83);function l(n){var e=-1,t=null==n?0:n.length;for(this.clear();++e-1&&n%1==0&&n<=9007199254740991}},function(n,e,t){var r=t(0),a=t(20),o=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,s=/^\w*$/;n.exports=function(n,e){if(r(n))return!1;var t=typeof n;return!("number"!=t&&"symbol"!=t&&"boolean"!=t&&null!=n&&!a(n))||(s.test(n)||!o.test(n)||null!=e&&n in Object(e))}},function(n,e,t){var r=t(5),a=t(4);n.exports=function(n){return"symbol"==typeof n||a(n)&&"[object Symbol]"==r(n)}},function(n,e){n.exports=function(n){return n}},function(n,e){n.exports=function(n){return n.webpackPolyfill||(n.deprecate=function(){},n.paths=[],n.children||(n.children=[]),Object.defineProperty(n,"loaded",{enumerable:!0,get:function(){return n.l}}),Object.defineProperty(n,"id",{enumerable:!0,get:function(){return n.i}}),n.webpackPolyfill=1),n}},function(n,e){n.exports=function(n,e){for(var t=-1,r=e.length,a=n.length;++tp))return!1;var d=l.get(n),m=l.get(e);if(d&&m)return d==e&&m==n;var f=-1,g=!0,h=2&t?new r:void 0;for(l.set(n,e),l.set(e,n);++f-1&&n%1==0&&n=e||t<0||h&&n-c>=o}function _(){var n=m();if(b(n))return S(n);i=setTimeout(_,function(n){var t=e-(n-l);return h?d(t,o-(n-c)):t}(n))}function S(n){return i=void 0,y&&r?q(n):(r=a=void 0,s)}function x(){var n=m(),t=b(n);if(r=arguments,a=this,l=n,t){if(void 0===i)return v(l);if(h)return i=setTimeout(_,e),q(l)}return void 0===i&&(i=setTimeout(_,e)),s}return e=g(e)||0,f(t)&&(p=!!t.leading,o=(h="maxWait"in t)?u(g(t.maxWait)||0,e):o,y="trailing"in t?!!t.trailing:y),x.cancel=function(){void 0!==i&&clearTimeout(i),c=0,r=l=a=i=void 0},x.flush=function(){return void 0===i?s:S(m())},x}},function(n,e){n.exports=function(n){var e=null==n?0:n.length;return e?n[e-1]:void 0}},function(n,e,t){n.exports=t(149)},function(n,e,t){var r=t(23),a=t(51);n.exports=function n(e,t,o,s,i){var l=-1,c=e.length;for(o||(o=a),i||(i=[]);++l0&&o(p)?t>1?n(p,t-1,o,s,i):r(i,p):s||(i[i.length]=p)}return i}},function(n,e,t){var r=t(6),a=t(13),o=t(0),s=r?r.isConcatSpreadable:void 0;n.exports=function(n){return o(n)||a(n)||!!(s&&n&&n[s])}},function(n,e,t){var r=t(5),a=t(4);n.exports=function(n){return a(n)&&"[object Arguments]"==r(n)}},function(n,e,t){var r=t(6),a=Object.prototype,o=a.hasOwnProperty,s=a.toString,i=r?r.toStringTag:void 0;n.exports=function(n){var e=o.call(n,i),t=n[i];try{n[i]=void 0;var r=!0}catch(n){}var a=s.call(n);return r&&(e?n[i]=t:delete n[i]),a}},function(n,e){var t=Object.prototype.toString;n.exports=function(n){return t.call(n)}},function(n,e,t){var r=t(56),a=t(112),o=t(21),s=t(0),i=t(123);n.exports=function(n){return"function"==typeof n?n:null==n?o:"object"==typeof n?s(n)?a(n[0],n[1]):r(n):i(n)}},function(n,e,t){var r=t(57),a=t(111),o=t(40);n.exports=function(n){var e=a(n);return 1==e.length&&e[0][2]?o(e[0][0],e[0][1]):function(t){return t===n||r(t,n,e)}}},function(n,e,t){var r=t(25),a=t(29);n.exports=function(n,e,t,o){var s=t.length,i=s,l=!o;if(null==n)return!i;for(n=Object(n);s--;){var c=t[s];if(l&&c[2]?c[1]!==n[c[0]]:!(c[0]in n))return!1}for(;++s-1}},function(n,e,t){var r=t(8);n.exports=function(n,e){var t=this.__data__,a=r(t,n);return a<0?(++this.size,t.push([n,e])):t[a][1]=e,this}},function(n,e,t){var r=t(7);n.exports=function(){this.__data__=new r,this.size=0}},function(n,e){n.exports=function(n){var e=this.__data__,t=e.delete(n);return this.size=e.size,t}},function(n,e){n.exports=function(n){return this.__data__.get(n)}},function(n,e){n.exports=function(n){return this.__data__.has(n)}},function(n,e,t){var r=t(7),a=t(14),o=t(16);n.exports=function(n,e){var t=this.__data__;if(t instanceof r){var s=t.__data__;if(!a||s.length<199)return s.push([n,e]),this.size=++t.size,this;t=this.__data__=new o(s)}return t.set(n,e),this.size=t.size,this}},function(n,e,t){var r=t(27),a=t(69),o=t(15),s=t(28),i=/^\[object .+?Constructor\]$/,l=Function.prototype,c=Object.prototype,p=l.toString,u=c.hasOwnProperty,d=RegExp("^"+p.call(u).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");n.exports=function(n){return!(!o(n)||a(n))&&(r(n)?d:i).test(s(n))}},function(n,e,t){var r,a=t(70),o=(r=/[^.]+$/.exec(a&&a.keys&&a.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"";n.exports=function(n){return!!o&&o in n}},function(n,e,t){var r=t(1)["__core-js_shared__"];n.exports=r},function(n,e){n.exports=function(n,e){return null==n?void 0:n[e]}},function(n,e,t){var r=t(73),a=t(7),o=t(14);n.exports=function(){this.size=0,this.__data__={hash:new r,map:new(o||a),string:new r}}},function(n,e,t){var r=t(74),a=t(75),o=t(76),s=t(77),i=t(78);function l(n){var e=-1,t=null==n?0:n.length;for(this.clear();++e0){if(++e>=800)return arguments[0]}else e=0;return n.apply(void 0,arguments)}}},function(n,e,t){var r=t(31),a=t(135),o=t(140),s=t(32),i=t(141),l=t(17);n.exports=function(n,e,t){var c=-1,p=a,u=n.length,d=!0,m=[],f=m;if(t)d=!1,p=o;else if(u>=200){var g=e?null:i(n);if(g)return l(g);d=!1,p=s,f=new r}else f=e?[]:m;n:for(;++c-1}},function(n,e,t){var r=t(137),a=t(138),o=t(139);n.exports=function(n,e,t){return e==e?o(n,e,t):r(n,a,t)}},function(n,e){n.exports=function(n,e,t,r){for(var a=n.length,o=t+(r?1:-1);r?o--:++o=0&&Math.floor(e)===e&&isFinite(n)}function m(n){return o(n)&&"function"==typeof n.then&&"function"==typeof n.catch}function f(n){return null==n?"":Array.isArray(n)||p(n)&&n.toString===c?JSON.stringify(n,null,2):String(n)}function g(n){var e=parseFloat(n);return isNaN(e)?n:e}function h(n,e){for(var t=Object.create(null),r=n.split(","),a=0;a-1)return n.splice(t,1)}}var v=Object.prototype.hasOwnProperty;function b(n,e){return v.call(n,e)}function _(n){var e=Object.create(null);return function(t){return e[t]||(e[t]=n(t))}}var S=/-(\w)/g,x=_((function(n){return n.replace(S,(function(n,e){return e?e.toUpperCase():""}))})),E=_((function(n){return n.charAt(0).toUpperCase()+n.slice(1)})),L=/\B([A-Z])/g,w=_((function(n){return n.replace(L,"-$1").toLowerCase()}));var C=Function.prototype.bind?function(n,e){return n.bind(e)}:function(n,e){function t(t){var r=arguments.length;return r?r>1?n.apply(e,arguments):n.call(e,t):n.call(e)}return t._length=n.length,t};function A(n,e){e=e||0;for(var t=n.length-e,r=new Array(t);t--;)r[t]=n[t+e];return r}function j(n,e){for(var t in e)n[t]=e[t];return n}function T(n){for(var e={},t=0;t0,Y=H&&H.indexOf("edge/")>0,X=(H&&H.indexOf("android"),H&&/iphone|ipad|ipod|ios/.test(H)||"ios"===V),Z=(H&&/chrome\/\d+/.test(H),H&&/phantomjs/.test(H),H&&H.match(/firefox\/(\d+)/)),nn={}.watch,en=!1;if(W)try{var tn={};Object.defineProperty(tn,"passive",{get:function(){en=!0}}),window.addEventListener("test-passive",null,tn)}catch(n){}var rn=function(){return void 0===B&&(B=!W&&!G&&"undefined"!=typeof global&&(global.process&&"server"===global.process.env.VUE_ENV)),B},an=W&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function on(n){return"function"==typeof n&&/native code/.test(n.toString())}var sn,ln="undefined"!=typeof Symbol&&on(Symbol)&&"undefined"!=typeof Reflect&&on(Reflect.ownKeys);sn="undefined"!=typeof Set&&on(Set)?Set:function(){function n(){this.set=Object.create(null)}return n.prototype.has=function(n){return!0===this.set[n]},n.prototype.add=function(n){this.set[n]=!0},n.prototype.clear=function(){this.set=Object.create(null)},n}();var cn=I,pn=0,un=function(){this.id=pn++,this.subs=[]};un.prototype.addSub=function(n){this.subs.push(n)},un.prototype.removeSub=function(n){q(this.subs,n)},un.prototype.depend=function(){un.target&&un.target.addDep(this)},un.prototype.notify=function(){var n=this.subs.slice();for(var e=0,t=n.length;e-1)if(o&&!b(a,"default"))s=!1;else if(""===s||s===w(n)){var l=Un(String,a.type);(l<0||i0&&(ue((l=n(l,(t||"")+"_"+r))[0])&&ue(p)&&(u[c]=qn(p.text+l[0].text),l.shift()),u.push.apply(u,l)):i(l)?ue(p)?u[c]=qn(p.text+l):""!==l&&u.push(qn(l)):ue(l)&&ue(p)?u[c]=qn(p.text+l.text):(s(e._isVList)&&o(l.tag)&&a(l.key)&&o(t)&&(l.key="__vlist"+t+"_"+r+"__"),u.push(l)));return u}(n):void 0}function ue(n){return o(n)&&o(n.text)&&!1===n.isComment}function de(n,e){if(n){for(var t=Object.create(null),r=ln?Reflect.ownKeys(n):Object.keys(n),a=0;a0,s=n?!!n.$stable:!o,i=n&&n.$key;if(n){if(n._normalized)return n._normalized;if(s&&t&&t!==r&&i===t.$key&&!o&&!t.$hasNormal)return t;for(var l in a={},n)n[l]&&"$"!==l[0]&&(a[l]=he(e,l,n[l]))}else a={};for(var c in e)c in a||(a[c]=ye(e,c));return n&&Object.isExtensible(n)&&(n._normalized=a),$(a,"$stable",s),$(a,"$key",i),$(a,"$hasNormal",o),a}function he(n,e,t){var r=function(){var n=arguments.length?t.apply(null,arguments):t({});return(n=n&&"object"==typeof n&&!Array.isArray(n)?[n]:pe(n))&&(0===n.length||1===n.length&&n[0].isComment)?void 0:n};return t.proxy&&Object.defineProperty(n,e,{get:r,enumerable:!0,configurable:!0}),r}function ye(n,e){return function(){return n[e]}}function qe(n,e){var t,r,a,s,i;if(Array.isArray(n)||"string"==typeof n)for(t=new Array(n.length),r=0,a=n.length;rdocument.createEvent("Event").timeStamp&&(lt=function(){return ct.now()})}function pt(){var n,e;for(it=lt(),ot=!0,et.sort((function(n,e){return n.id-e.id})),st=0;stst&&et[t].id>n.id;)t--;et.splice(t+1,0,n)}else et.push(n);at||(at=!0,te(pt))}}(this)},dt.prototype.run=function(){if(this.active){var n=this.get();if(n!==this.value||l(n)||this.deep){var e=this.value;if(this.value=n,this.user)try{this.cb.call(this.vm,n,e)}catch(n){Bn(n,this.vm,'callback for watcher "'+this.expression+'"')}else this.cb.call(this.vm,n,e)}}},dt.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},dt.prototype.depend=function(){for(var n=this.deps.length;n--;)this.deps[n].depend()},dt.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||q(this.vm._watchers,this);for(var n=this.deps.length;n--;)this.deps[n].removeSub(this);this.active=!1}};var mt={enumerable:!0,configurable:!0,get:I,set:I};function ft(n,e,t){mt.get=function(){return this[e][t]},mt.set=function(n){this[e][t]=n},Object.defineProperty(n,t,mt)}function gt(n){n._watchers=[];var e=n.$options;e.props&&function(n,e){var t=n.$options.propsData||{},r=n._props={},a=n.$options._propKeys=[];n.$parent&&En(!1);var o=function(o){a.push(o);var s=Rn(o,e,t,n);Cn(r,o,s),o in n||ft(n,"_props",o)};for(var s in e)o(s);En(!0)}(n,e.props),e.methods&&function(n,e){n.$options.props;for(var t in e)n[t]="function"!=typeof e[t]?I:C(e[t],n)}(n,e.methods),e.data?function(n){var e=n.$options.data;p(e=n._data="function"==typeof e?function(n,e){mn();try{return n.call(e,e)}catch(n){return Bn(n,e,"data()"),{}}finally{fn()}}(e,n):e||{})||(e={});var t=Object.keys(e),r=n.$options.props,a=(n.$options.methods,t.length);for(;a--;){var o=t[a];0,r&&b(r,o)||(s=void 0,36!==(s=(o+"").charCodeAt(0))&&95!==s&&ft(n,"_data",o))}var s;wn(e,!0)}(n):wn(n._data={},!0),e.computed&&function(n,e){var t=n._computedWatchers=Object.create(null),r=rn();for(var a in e){var o=e[a],s="function"==typeof o?o:o.get;0,r||(t[a]=new dt(n,s||I,I,ht)),a in n||yt(n,a,o)}}(n,e.computed),e.watch&&e.watch!==nn&&function(n,e){for(var t in e){var r=e[t];if(Array.isArray(r))for(var a=0;a-1:"string"==typeof n?n.split(",").indexOf(e)>-1:!!u(n)&&n.test(e)}function Ct(n,e){var t=n.cache,r=n.keys,a=n._vnode;for(var o in t){var s=t[o];if(s){var i=Lt(s.componentOptions);i&&!e(i)&&At(t,o,r,a)}}}function At(n,e,t,r){var a=n[e];!a||r&&a.tag===r.tag||a.componentInstance.$destroy(),n[e]=null,q(t,e)}xt.prototype._init=function(n){var e=this;e._uid=_t++,e._isVue=!0,n&&n._isComponent?function(n,e){var t=n.$options=Object.create(n.constructor.options),r=e._parentVnode;t.parent=e.parent,t._parentVnode=r;var a=r.componentOptions;t.propsData=a.propsData,t._parentListeners=a.listeners,t._renderChildren=a.children,t._componentTag=a.tag,e.render&&(t.render=e.render,t.staticRenderFns=e.staticRenderFns)}(e,n):e.$options=Pn(St(e.constructor),n||{},e),e._renderProxy=e,e._self=e,function(n){var e=n.$options,t=e.parent;if(t&&!e.abstract){for(;t.$options.abstract&&t.$parent;)t=t.$parent;t.$children.push(n)}n.$parent=t,n.$root=t?t.$root:n,n.$children=[],n.$refs={},n._watcher=null,n._inactive=null,n._directInactive=!1,n._isMounted=!1,n._isDestroyed=!1,n._isBeingDestroyed=!1}(e),function(n){n._events=Object.create(null),n._hasHookEvent=!1;var e=n.$options._parentListeners;e&&Je(n,e)}(e),function(n){n._vnode=null,n._staticTrees=null;var e=n.$options,t=n.$vnode=e._parentVnode,a=t&&t.context;n.$slots=me(e._renderChildren,a),n.$scopedSlots=r,n._c=function(e,t,r,a){return Me(n,e,t,r,a,!1)},n.$createElement=function(e,t,r,a){return Me(n,e,t,r,a,!0)};var o=t&&t.data;Cn(n,"$attrs",o&&o.attrs||r,null,!0),Cn(n,"$listeners",e._parentListeners||r,null,!0)}(e),nt(e,"beforeCreate"),function(n){var e=de(n.$options.inject,n);e&&(En(!1),Object.keys(e).forEach((function(t){Cn(n,t,e[t])})),En(!0))}(e),gt(e),function(n){var e=n.$options.provide;e&&(n._provided="function"==typeof e?e.call(n):e)}(e),nt(e,"created"),e.$options.el&&e.$mount(e.$options.el)},function(n){var e={get:function(){return this._data}},t={get:function(){return this._props}};Object.defineProperty(n.prototype,"$data",e),Object.defineProperty(n.prototype,"$props",t),n.prototype.$set=An,n.prototype.$delete=jn,n.prototype.$watch=function(n,e,t){if(p(e))return bt(this,n,e,t);(t=t||{}).user=!0;var r=new dt(this,n,e,t);if(t.immediate)try{e.call(this,r.value)}catch(n){Bn(n,this,'callback for immediate watcher "'+r.expression+'"')}return function(){r.teardown()}}}(xt),function(n){var e=/^hook:/;n.prototype.$on=function(n,t){var r=this;if(Array.isArray(n))for(var a=0,o=n.length;a1?A(t):t;for(var r=A(arguments,1),a='event handler for "'+n+'"',o=0,s=t.length;oparseInt(this.max)&&At(s,i[0],i,this._vnode)),e.data.keepAlive=!0}return e||n&&n[0]}}};!function(n){var e={get:function(){return R}};Object.defineProperty(n,"config",e),n.util={warn:cn,extend:j,mergeOptions:Pn,defineReactive:Cn},n.set=An,n.delete=jn,n.nextTick=te,n.observable=function(n){return wn(n),n},n.options=Object.create(null),P.forEach((function(e){n.options[e+"s"]=Object.create(null)})),n.options._base=n,j(n.options.components,Tt),function(n){n.use=function(n){var e=this._installedPlugins||(this._installedPlugins=[]);if(e.indexOf(n)>-1)return this;var t=A(arguments,1);return t.unshift(this),"function"==typeof n.install?n.install.apply(n,t):"function"==typeof n&&n.apply(null,t),e.push(n),this}}(n),function(n){n.mixin=function(n){return this.options=Pn(this.options,n),this}}(n),Et(n),function(n){P.forEach((function(e){n[e]=function(n,t){return t?("component"===e&&p(t)&&(t.name=t.name||n,t=this.options._base.extend(t)),"directive"===e&&"function"==typeof t&&(t={bind:t,update:t}),this.options[e+"s"][n]=t,t):this.options[e+"s"][n]}}))}(n)}(xt),Object.defineProperty(xt.prototype,"$isServer",{get:rn}),Object.defineProperty(xt.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(xt,"FunctionalRenderContext",{value:Ne}),xt.version="2.6.12";var It=h("style,class"),Dt=h("input,textarea,option,select,progress"),Nt=h("contenteditable,draggable,spellcheck"),Qt=h("events,caret,typing,plaintext-only"),kt=h("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,translate,truespeed,typemustmatch,visible"),Ot="http://www.w3.org/1999/xlink",Pt=function(n){return":"===n.charAt(5)&&"xlink"===n.slice(0,5)},Ft=function(n){return Pt(n)?n.slice(6,n.length):""},Rt=function(n){return null==n||!1===n};function Mt(n){for(var e=n.data,t=n,r=n;o(r.componentInstance);)(r=r.componentInstance._vnode)&&r.data&&(e=$t(r.data,e));for(;o(t=t.parent);)t&&t.data&&(e=$t(e,t.data));return function(n,e){if(o(n)||o(e))return Ut(n,Bt(e));return""}(e.staticClass,e.class)}function $t(n,e){return{staticClass:Ut(n.staticClass,e.staticClass),class:o(n.class)?[n.class,e.class]:e.class}}function Ut(n,e){return n?e?n+" "+e:n:e||""}function Bt(n){return Array.isArray(n)?function(n){for(var e,t="",r=0,a=n.length;r-1?dr(n,e,t):kt(e)?Rt(t)?n.removeAttribute(e):(t="allowfullscreen"===e&&"EMBED"===n.tagName?"true":e,n.setAttribute(e,t)):Nt(e)?n.setAttribute(e,function(n,e){return Rt(e)||"false"===e?"false":"contenteditable"===n&&Qt(e)?e:"true"}(e,t)):Pt(e)?Rt(t)?n.removeAttributeNS(Ot,Ft(e)):n.setAttributeNS(Ot,e,t):dr(n,e,t)}function dr(n,e,t){if(Rt(t))n.removeAttribute(e);else{if(J&&!K&&"TEXTAREA"===n.tagName&&"placeholder"===e&&""!==t&&!n.__ieph){var r=function(e){e.stopImmediatePropagation(),n.removeEventListener("input",r)};n.addEventListener("input",r),n.__ieph=!0}n.setAttribute(e,t)}}var mr={create:pr,update:pr};function fr(n,e){var t=e.elm,r=e.data,s=n.data;if(!(a(r.staticClass)&&a(r.class)&&(a(s)||a(s.staticClass)&&a(s.class)))){var i=Mt(e),l=t._transitionClasses;o(l)&&(i=Ut(i,Bt(l))),i!==t._prevClass&&(t.setAttribute("class",i),t._prevClass=i)}}var gr,hr={create:fr,update:fr};function yr(n,e,t){var r=gr;return function a(){var o=e.apply(null,arguments);null!==o&&br(n,a,t,r)}}var qr=Hn&&!(Z&&Number(Z[1])<=53);function vr(n,e,t,r){if(qr){var a=it,o=e;e=o._wrapper=function(n){if(n.target===n.currentTarget||n.timeStamp>=a||n.timeStamp<=0||n.target.ownerDocument!==document)return o.apply(this,arguments)}}gr.addEventListener(n,e,en?{capture:t,passive:r}:t)}function br(n,e,t,r){(r||gr).removeEventListener(n,e._wrapper||e,t)}function _r(n,e){if(!a(n.data.on)||!a(e.data.on)){var t=e.data.on||{},r=n.data.on||{};gr=e.elm,function(n){if(o(n.__r)){var e=J?"change":"input";n[e]=[].concat(n.__r,n[e]||[]),delete n.__r}o(n.__c)&&(n.change=[].concat(n.__c,n.change||[]),delete n.__c)}(t),ie(t,r,vr,br,yr,e.context),gr=void 0}}var Sr,xr={create:_r,update:_r};function Er(n,e){if(!a(n.data.domProps)||!a(e.data.domProps)){var t,r,s=e.elm,i=n.data.domProps||{},l=e.data.domProps||{};for(t in o(l.__ob__)&&(l=e.data.domProps=j({},l)),i)t in l||(s[t]="");for(t in l){if(r=l[t],"textContent"===t||"innerHTML"===t){if(e.children&&(e.children.length=0),r===i[t])continue;1===s.childNodes.length&&s.removeChild(s.childNodes[0])}if("value"===t&&"PROGRESS"!==s.tagName){s._value=r;var c=a(r)?"":String(r);Lr(s,c)&&(s.value=c)}else if("innerHTML"===t&&Gt(s.tagName)&&a(s.innerHTML)){(Sr=Sr||document.createElement("div")).innerHTML=""+r+"";for(var p=Sr.firstChild;s.firstChild;)s.removeChild(s.firstChild);for(;p.firstChild;)s.appendChild(p.firstChild)}else if(r!==i[t])try{s[t]=r}catch(n){}}}}function Lr(n,e){return!n.composing&&("OPTION"===n.tagName||function(n,e){var t=!0;try{t=document.activeElement!==n}catch(n){}return t&&n.value!==e}(n,e)||function(n,e){var t=n.value,r=n._vModifiers;if(o(r)){if(r.number)return g(t)!==g(e);if(r.trim)return t.trim()!==e.trim()}return t!==e}(n,e))}var wr={create:Er,update:Er},Cr=_((function(n){var e={},t=/:(.+)/;return n.split(/;(?![^(]*\))/g).forEach((function(n){if(n){var r=n.split(t);r.length>1&&(e[r[0].trim()]=r[1].trim())}})),e}));function Ar(n){var e=jr(n.style);return n.staticStyle?j(n.staticStyle,e):e}function jr(n){return Array.isArray(n)?T(n):"string"==typeof n?Cr(n):n}var Tr,Ir=/^--/,Dr=/\s*!important$/,Nr=function(n,e,t){if(Ir.test(e))n.style.setProperty(e,t);else if(Dr.test(t))n.style.setProperty(w(e),t.replace(Dr,""),"important");else{var r=kr(e);if(Array.isArray(t))for(var a=0,o=t.length;a-1?e.split(Fr).forEach((function(e){return n.classList.add(e)})):n.classList.add(e);else{var t=" "+(n.getAttribute("class")||"")+" ";t.indexOf(" "+e+" ")<0&&n.setAttribute("class",(t+e).trim())}}function Mr(n,e){if(e&&(e=e.trim()))if(n.classList)e.indexOf(" ")>-1?e.split(Fr).forEach((function(e){return n.classList.remove(e)})):n.classList.remove(e),n.classList.length||n.removeAttribute("class");else{for(var t=" "+(n.getAttribute("class")||"")+" ",r=" "+e+" ";t.indexOf(r)>=0;)t=t.replace(r," ");(t=t.trim())?n.setAttribute("class",t):n.removeAttribute("class")}}function $r(n){if(n){if("object"==typeof n){var e={};return!1!==n.css&&j(e,Ur(n.name||"v")),j(e,n),e}return"string"==typeof n?Ur(n):void 0}}var Ur=_((function(n){return{enterClass:n+"-enter",enterToClass:n+"-enter-to",enterActiveClass:n+"-enter-active",leaveClass:n+"-leave",leaveToClass:n+"-leave-to",leaveActiveClass:n+"-leave-active"}})),Br=W&&!K,zr="transition",Wr="transitionend",Gr="animation",Vr="animationend";Br&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(zr="WebkitTransition",Wr="webkitTransitionEnd"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(Gr="WebkitAnimation",Vr="webkitAnimationEnd"));var Hr=W?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(n){return n()};function Jr(n){Hr((function(){Hr(n)}))}function Kr(n,e){var t=n._transitionClasses||(n._transitionClasses=[]);t.indexOf(e)<0&&(t.push(e),Rr(n,e))}function Yr(n,e){n._transitionClasses&&q(n._transitionClasses,e),Mr(n,e)}function Xr(n,e,t){var r=na(n,e),a=r.type,o=r.timeout,s=r.propCount;if(!a)return t();var i="transition"===a?Wr:Vr,l=0,c=function(){n.removeEventListener(i,p),t()},p=function(e){e.target===n&&++l>=s&&c()};setTimeout((function(){l0&&(t="transition",p=s,u=o.length):"animation"===e?c>0&&(t="animation",p=c,u=l.length):u=(t=(p=Math.max(s,c))>0?s>c?"transition":"animation":null)?"transition"===t?o.length:l.length:0,{type:t,timeout:p,propCount:u,hasTransform:"transition"===t&&Zr.test(r[zr+"Property"])}}function ea(n,e){for(;n.length1}function ia(n,e){!0!==e.data.show&&ra(e)}var la=function(n){var e,t,r={},l=n.modules,c=n.nodeOps;for(e=0;ef?v(n,a(t[y+1])?null:t[y+1].elm,t,m,y,r):m>y&&_(e,d,f)}(d,h,y,t,p):o(y)?(o(n.text)&&c.setTextContent(d,""),v(d,null,y,0,y.length-1,t)):o(h)?_(h,0,h.length-1):o(n.text)&&c.setTextContent(d,""):n.text!==e.text&&c.setTextContent(d,e.text),o(f)&&o(m=f.hook)&&o(m=m.postpatch)&&m(n,e)}}}function L(n,e,t){if(s(t)&&o(n.parent))n.parent.data.pendingInsert=e;else for(var r=0;r-1,s.selected!==o&&(s.selected=o);else if(Q(ma(s),r))return void(n.selectedIndex!==i&&(n.selectedIndex=i));a||(n.selectedIndex=-1)}}function da(n,e){return e.every((function(e){return!Q(e,n)}))}function ma(n){return"_value"in n?n._value:n.value}function fa(n){n.target.composing=!0}function ha(n){n.target.composing&&(n.target.composing=!1,ya(n.target,"input"))}function ya(n,e){var t=document.createEvent("HTMLEvents");t.initEvent(e,!0,!0),n.dispatchEvent(t)}function qa(n){return!n.componentInstance||n.data&&n.data.transition?n:qa(n.componentInstance._vnode)}var va={model:ca,show:{bind:function(n,e,t){var r=e.value,a=(t=qa(t)).data&&t.data.transition,o=n.__vOriginalDisplay="none"===n.style.display?"":n.style.display;r&&a?(t.data.show=!0,ra(t,(function(){n.style.display=o}))):n.style.display=r?o:"none"},update:function(n,e,t){var r=e.value;!r!=!e.oldValue&&((t=qa(t)).data&&t.data.transition?(t.data.show=!0,r?ra(t,(function(){n.style.display=n.__vOriginalDisplay})):aa(t,(function(){n.style.display="none"}))):n.style.display=r?n.__vOriginalDisplay:"none")},unbind:function(n,e,t,r,a){a||(n.style.display=n.__vOriginalDisplay)}}},ba={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function _a(n){var e=n&&n.componentOptions;return e&&e.Ctor.options.abstract?_a(We(e.children)):n}function Sa(n){var e={},t=n.$options;for(var r in t.propsData)e[r]=n[r];var a=t._parentListeners;for(var o in a)e[x(o)]=a[o];return e}function xa(n,e){if(/\d-keep-alive$/.test(e.tag))return n("keep-alive",{props:e.componentOptions.propsData})}var Ea=function(n){return n.tag||ze(n)},La=function(n){return"show"===n.name},wa={name:"transition",props:ba,abstract:!0,render:function(n){var e=this,t=this.$slots.default;if(t&&(t=t.filter(Ea)).length){0;var r=this.mode;0;var a=t[0];if(function(n){for(;n=n.parent;)if(n.data.transition)return!0}(this.$vnode))return a;var o=_a(a);if(!o)return a;if(this._leaving)return xa(n,a);var s="__transition-"+this._uid+"-";o.key=null==o.key?o.isComment?s+"comment":s+o.tag:i(o.key)?0===String(o.key).indexOf(s)?o.key:s+o.key:o.key;var l=(o.data||(o.data={})).transition=Sa(this),c=this._vnode,p=_a(c);if(o.data.directives&&o.data.directives.some(La)&&(o.data.show=!0),p&&p.data&&!function(n,e){return e.key===n.key&&e.tag===n.tag}(o,p)&&!ze(p)&&(!p.componentInstance||!p.componentInstance._vnode.isComment)){var u=p.data.transition=j({},l);if("out-in"===r)return this._leaving=!0,le(u,"afterLeave",(function(){e._leaving=!1,e.$forceUpdate()})),xa(n,a);if("in-out"===r){if(ze(o))return c;var d,m=function(){d()};le(l,"afterEnter",m),le(l,"enterCancelled",m),le(u,"delayLeave",(function(n){d=n}))}}return a}}},Ca=j({tag:String,moveClass:String},ba);function Aa(n){n.elm._moveCb&&n.elm._moveCb(),n.elm._enterCb&&n.elm._enterCb()}function ja(n){n.data.newPos=n.elm.getBoundingClientRect()}function Ta(n){var e=n.data.pos,t=n.data.newPos,r=e.left-t.left,a=e.top-t.top;if(r||a){n.data.moved=!0;var o=n.elm.style;o.transform=o.WebkitTransform="translate("+r+"px,"+a+"px)",o.transitionDuration="0s"}}delete Ca.mode;var Ia={Transition:wa,TransitionGroup:{props:Ca,beforeMount:function(){var n=this,e=this._update;this._update=function(t,r){var a=Ye(n);n.__patch__(n._vnode,n.kept,!1,!0),n._vnode=n.kept,a(),e.call(n,t,r)}},render:function(n){for(var e=this.tag||this.$vnode.data.tag||"span",t=Object.create(null),r=this.prevChildren=this.children,a=this.$slots.default||[],o=this.children=[],s=Sa(this),i=0;i-1?Ht[n]=e.constructor===window.HTMLUnknownElement||e.constructor===window.HTMLElement:Ht[n]=/HTMLUnknownElement/.test(e.toString())},j(xt.options.directives,va),j(xt.options.components,Ia),xt.prototype.__patch__=W?la:I,xt.prototype.$mount=function(n,e){return function(n,e,t){var r;return n.$el=e,n.$options.render||(n.$options.render=yn),nt(n,"beforeMount"),r=function(){n._update(n._render(),t)},new dt(n,r,I,{before:function(){n._isMounted&&!n._isDestroyed&&nt(n,"beforeUpdate")}},!0),t=!1,null==n.$vnode&&(n._isMounted=!0,nt(n,"mounted")),n}(this,n=n&&W?function(n){if("string"==typeof n){var e=document.querySelector(n);return e||document.createElement("div")}return n}(n):void 0,e)},W&&setTimeout((function(){R.devtools&&an&&an.emit("init",xt)}),0);var Da=xt; -/*! - * vue-router v3.5.1 - * (c) 2021 Evan You - * @license MIT - */function Na(n,e){for(var t in e)n[t]=e[t];return n}var Qa=/[!'()*]/g,ka=function(n){return"%"+n.charCodeAt(0).toString(16)},Oa=/%2C/g,Pa=function(n){return encodeURIComponent(n).replace(Qa,ka).replace(Oa,",")};function Fa(n){try{return decodeURIComponent(n)}catch(n){0}return n}var Ra=function(n){return null==n||"object"==typeof n?n:String(n)};function Ma(n){var e={};return(n=n.trim().replace(/^(\?|#|&)/,""))?(n.split("&").forEach((function(n){var t=n.replace(/\+/g," ").split("="),r=Fa(t.shift()),a=t.length>0?Fa(t.join("=")):null;void 0===e[r]?e[r]=a:Array.isArray(e[r])?e[r].push(a):e[r]=[e[r],a]})),e):e}function $a(n){var e=n?Object.keys(n).map((function(e){var t=n[e];if(void 0===t)return"";if(null===t)return Pa(e);if(Array.isArray(t)){var r=[];return t.forEach((function(n){void 0!==n&&(null===n?r.push(Pa(e)):r.push(Pa(e)+"="+Pa(n)))})),r.join("&")}return Pa(e)+"="+Pa(t)})).filter((function(n){return n.length>0})).join("&"):null;return e?"?"+e:""}var Ua=/\/?$/;function Ba(n,e,t,r){var a=r&&r.options.stringifyQuery,o=e.query||{};try{o=za(o)}catch(n){}var s={name:e.name||n&&n.name,meta:n&&n.meta||{},path:e.path||"/",hash:e.hash||"",query:o,params:e.params||{},fullPath:Va(e,a),matched:n?Ga(n):[]};return t&&(s.redirectedFrom=Va(t,a)),Object.freeze(s)}function za(n){if(Array.isArray(n))return n.map(za);if(n&&"object"==typeof n){var e={};for(var t in n)e[t]=za(n[t]);return e}return n}var Wa=Ba(null,{path:"/"});function Ga(n){for(var e=[];n;)e.unshift(n),n=n.parent;return e}function Va(n,e){var t=n.path,r=n.query;void 0===r&&(r={});var a=n.hash;return void 0===a&&(a=""),(t||"/")+(e||$a)(r)+a}function Ha(n,e,t){return e===Wa?n===e:!!e&&(n.path&&e.path?n.path.replace(Ua,"")===e.path.replace(Ua,"")&&(t||n.hash===e.hash&&Ja(n.query,e.query)):!(!n.name||!e.name)&&(n.name===e.name&&(t||n.hash===e.hash&&Ja(n.query,e.query)&&Ja(n.params,e.params))))}function Ja(n,e){if(void 0===n&&(n={}),void 0===e&&(e={}),!n||!e)return n===e;var t=Object.keys(n).sort(),r=Object.keys(e).sort();return t.length===r.length&&t.every((function(t,a){var o=n[t];if(r[a]!==t)return!1;var s=e[t];return null==o||null==s?o===s:"object"==typeof o&&"object"==typeof s?Ja(o,s):String(o)===String(s)}))}function Ka(n){for(var e=0;e=0&&(e=n.slice(r),n=n.slice(0,r));var a=n.indexOf("?");return a>=0&&(t=n.slice(a+1),n=n.slice(0,a)),{path:n,query:t,hash:e}}(a.path||""),c=e&&e.path||"/",p=l.path?Za(l.path,c,t||a.append):c,u=function(n,e,t){void 0===e&&(e={});var r,a=t||Ma;try{r=a(n||"")}catch(n){r={}}for(var o in e){var s=e[o];r[o]=Array.isArray(s)?s.map(Ra):Ra(s)}return r}(l.query,a.query,r&&r.options.parseQuery),d=a.hash||l.hash;return d&&"#"!==d.charAt(0)&&(d="#"+d),{_normalized:!0,path:p,query:u,hash:d}}var _o,So=function(){},xo={name:"RouterLink",props:{to:{type:[String,Object],required:!0},tag:{type:String,default:"a"},custom:Boolean,exact:Boolean,exactPath:Boolean,append:Boolean,replace:Boolean,activeClass:String,exactActiveClass:String,ariaCurrentValue:{type:String,default:"page"},event:{type:[String,Array],default:"click"}},render:function(n){var e=this,t=this.$router,r=this.$route,a=t.resolve(this.to,r,this.append),o=a.location,s=a.route,i=a.href,l={},c=t.options.linkActiveClass,p=t.options.linkExactActiveClass,u=null==c?"router-link-active":c,d=null==p?"router-link-exact-active":p,m=null==this.activeClass?u:this.activeClass,f=null==this.exactActiveClass?d:this.exactActiveClass,g=s.redirectedFrom?Ba(null,bo(s.redirectedFrom),null,t):s;l[f]=Ha(r,g,this.exactPath),l[m]=this.exact||this.exactPath?l[f]:function(n,e){return 0===n.path.replace(Ua,"/").indexOf(e.path.replace(Ua,"/"))&&(!e.hash||n.hash===e.hash)&&function(n,e){for(var t in e)if(!(t in n))return!1;return!0}(n.query,e.query)}(r,g);var h=l[f]?this.ariaCurrentValue:null,y=function(n){Eo(n)&&(e.replace?t.replace(o,So):t.push(o,So))},q={click:Eo};Array.isArray(this.event)?this.event.forEach((function(n){q[n]=y})):q[this.event]=y;var v={class:l},b=!this.$scopedSlots.$hasNormal&&this.$scopedSlots.default&&this.$scopedSlots.default({href:i,route:s,navigate:y,isActive:l[m],isExactActive:l[f]});if(b){if(1===b.length)return b[0];if(b.length>1||!b.length)return 0===b.length?n():n("span",{},b)}if("a"===this.tag)v.on=q,v.attrs={href:i,"aria-current":h};else{var _=function n(e){var t;if(e)for(var r=0;r-1&&(i.params[d]=t.params[d]);return i.path=vo(p.path,i.params),l(p,i,s)}if(i.path){i.params={};for(var m=0;m=n.length?t():n[a]?e(n[a],(function(){r(a+1)})):r(a+1)};r(0)}var Ko={redirected:2,aborted:4,cancelled:8,duplicated:16};function Yo(n,e){return Zo(n,e,Ko.redirected,'Redirected when going from "'+n.fullPath+'" to "'+function(n){if("string"==typeof n)return n;if("path"in n)return n.path;var e={};return ns.forEach((function(t){t in n&&(e[t]=n[t])})),JSON.stringify(e,null,2)}(e)+'" via a navigation guard.')}function Xo(n,e){return Zo(n,e,Ko.cancelled,'Navigation cancelled from "'+n.fullPath+'" to "'+e.fullPath+'" with a new navigation.')}function Zo(n,e,t,r){var a=new Error(r);return a._isRouter=!0,a.from=n,a.to=e,a.type=t,a}var ns=["params","query","hash"];function es(n){return Object.prototype.toString.call(n).indexOf("Error")>-1}function ts(n,e){return es(n)&&n._isRouter&&(null==e||n.type===e)}function rs(n){return function(e,t,r){var a=!1,o=0,s=null;as(n,(function(n,e,t,i){if("function"==typeof n&&void 0===n.cid){a=!0,o++;var l,c=is((function(e){var a;((a=e).__esModule||ss&&"Module"===a[Symbol.toStringTag])&&(e=e.default),n.resolved="function"==typeof e?e:_o.extend(e),t.components[i]=e,--o<=0&&r()})),p=is((function(n){var e="Failed to resolve async component "+i+": "+n;s||(s=es(n)?n:new Error(e),r(s))}));try{l=n(c,p)}catch(n){p(n)}if(l)if("function"==typeof l.then)l.then(c,p);else{var u=l.component;u&&"function"==typeof u.then&&u.then(c,p)}}})),a||r()}}function as(n,e){return os(n.map((function(n){return Object.keys(n.components).map((function(t){return e(n.components[t],n.instances[t],n,t)}))})))}function os(n){return Array.prototype.concat.apply([],n)}var ss="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;function is(n){var e=!1;return function(){for(var t=[],r=arguments.length;r--;)t[r]=arguments[r];if(!e)return e=!0,n.apply(this,t)}}var ls=function(n,e){this.router=n,this.base=function(n){if(!n)if(Lo){var e=document.querySelector("base");n=(n=e&&e.getAttribute("href")||"/").replace(/^https?:\/\/[^\/]+/,"")}else n="/";"/"!==n.charAt(0)&&(n="/"+n);return n.replace(/\/$/,"")}(e),this.current=Wa,this.pending=null,this.ready=!1,this.readyCbs=[],this.readyErrorCbs=[],this.errorCbs=[],this.listeners=[]};function cs(n,e,t,r){var a=as(n,(function(n,r,a,o){var s=function(n,e){"function"!=typeof n&&(n=_o.extend(n));return n.options[e]}(n,e);if(s)return Array.isArray(s)?s.map((function(n){return t(n,r,a,o)})):t(s,r,a,o)}));return os(r?a.reverse():a)}function ps(n,e){if(e)return function(){return n.apply(e,arguments)}}ls.prototype.listen=function(n){this.cb=n},ls.prototype.onReady=function(n,e){this.ready?n():(this.readyCbs.push(n),e&&this.readyErrorCbs.push(e))},ls.prototype.onError=function(n){this.errorCbs.push(n)},ls.prototype.transitionTo=function(n,e,t){var r,a=this;try{r=this.router.match(n,this.current)}catch(n){throw this.errorCbs.forEach((function(e){e(n)})),n}var o=this.current;this.confirmTransition(r,(function(){a.updateRoute(r),e&&e(r),a.ensureURL(),a.router.afterHooks.forEach((function(n){n&&n(r,o)})),a.ready||(a.ready=!0,a.readyCbs.forEach((function(n){n(r)})))}),(function(n){t&&t(n),n&&!a.ready&&(ts(n,Ko.redirected)&&o===Wa||(a.ready=!0,a.readyErrorCbs.forEach((function(e){e(n)}))))}))},ls.prototype.confirmTransition=function(n,e,t){var r=this,a=this.current;this.pending=n;var o,s,i=function(n){!ts(n)&&es(n)&&(r.errorCbs.length?r.errorCbs.forEach((function(e){e(n)})):console.error(n)),t&&t(n)},l=n.matched.length-1,c=a.matched.length-1;if(Ha(n,a)&&l===c&&n.matched[l]===a.matched[c])return this.ensureURL(),i(((s=Zo(o=a,n,Ko.duplicated,'Avoided redundant navigation to current location: "'+o.fullPath+'".')).name="NavigationDuplicated",s));var p=function(n,e){var t,r=Math.max(n.length,e.length);for(t=0;t0)){var e=this.router,t=e.options.scrollBehavior,r=Go&&t;r&&this.listeners.push(Oo());var a=function(){var t=n.current,a=ds(n.base);n.current===Wa&&a===n._startLocation||n.transitionTo(a,(function(n){r&&Po(e,n,t,!0)}))};window.addEventListener("popstate",a),this.listeners.push((function(){window.removeEventListener("popstate",a)}))}},e.prototype.go=function(n){window.history.go(n)},e.prototype.push=function(n,e,t){var r=this,a=this.current;this.transitionTo(n,(function(n){Vo(no(r.base+n.fullPath)),Po(r.router,n,a,!1),e&&e(n)}),t)},e.prototype.replace=function(n,e,t){var r=this,a=this.current;this.transitionTo(n,(function(n){Ho(no(r.base+n.fullPath)),Po(r.router,n,a,!1),e&&e(n)}),t)},e.prototype.ensureURL=function(n){if(ds(this.base)!==this.current.fullPath){var e=no(this.base+this.current.fullPath);n?Vo(e):Ho(e)}},e.prototype.getCurrentLocation=function(){return ds(this.base)},e}(ls);function ds(n){var e=window.location.pathname;return n&&0===e.toLowerCase().indexOf(n.toLowerCase())&&(e=e.slice(n.length)),(e||"/")+window.location.search+window.location.hash}var ms=function(n){function e(e,t,r){n.call(this,e,t),r&&function(n){var e=ds(n);if(!/^\/#/.test(e))return window.location.replace(no(n+"/#"+e)),!0}(this.base)||fs()}return n&&(e.__proto__=n),e.prototype=Object.create(n&&n.prototype),e.prototype.constructor=e,e.prototype.setupListeners=function(){var n=this;if(!(this.listeners.length>0)){var e=this.router.options.scrollBehavior,t=Go&&e;t&&this.listeners.push(Oo());var r=function(){var e=n.current;fs()&&n.transitionTo(gs(),(function(r){t&&Po(n.router,r,e,!0),Go||qs(r.fullPath)}))},a=Go?"popstate":"hashchange";window.addEventListener(a,r),this.listeners.push((function(){window.removeEventListener(a,r)}))}},e.prototype.push=function(n,e,t){var r=this,a=this.current;this.transitionTo(n,(function(n){ys(n.fullPath),Po(r.router,n,a,!1),e&&e(n)}),t)},e.prototype.replace=function(n,e,t){var r=this,a=this.current;this.transitionTo(n,(function(n){qs(n.fullPath),Po(r.router,n,a,!1),e&&e(n)}),t)},e.prototype.go=function(n){window.history.go(n)},e.prototype.ensureURL=function(n){var e=this.current.fullPath;gs()!==e&&(n?ys(e):qs(e))},e.prototype.getCurrentLocation=function(){return gs()},e}(ls);function fs(){var n=gs();return"/"===n.charAt(0)||(qs("/"+n),!1)}function gs(){var n=window.location.href,e=n.indexOf("#");return e<0?"":n=n.slice(e+1)}function hs(n){var e=window.location.href,t=e.indexOf("#");return(t>=0?e.slice(0,t):e)+"#"+n}function ys(n){Go?Vo(hs(n)):window.location.hash=n}function qs(n){Go?Ho(hs(n)):window.location.replace(hs(n))}var vs=function(n){function e(e,t){n.call(this,e,t),this.stack=[],this.index=-1}return n&&(e.__proto__=n),e.prototype=Object.create(n&&n.prototype),e.prototype.constructor=e,e.prototype.push=function(n,e,t){var r=this;this.transitionTo(n,(function(n){r.stack=r.stack.slice(0,r.index+1).concat(n),r.index++,e&&e(n)}),t)},e.prototype.replace=function(n,e,t){var r=this;this.transitionTo(n,(function(n){r.stack=r.stack.slice(0,r.index).concat(n),e&&e(n)}),t)},e.prototype.go=function(n){var e=this,t=this.index+n;if(!(t<0||t>=this.stack.length)){var r=this.stack[t];this.confirmTransition(r,(function(){var n=e.current;e.index=t,e.updateRoute(r),e.router.afterHooks.forEach((function(e){e&&e(r,n)}))}),(function(n){ts(n,Ko.duplicated)&&(e.index=t)}))}},e.prototype.getCurrentLocation=function(){var n=this.stack[this.stack.length-1];return n?n.fullPath:"/"},e.prototype.ensureURL=function(){},e}(ls),bs=function(n){void 0===n&&(n={}),this.app=null,this.apps=[],this.options=n,this.beforeHooks=[],this.resolveHooks=[],this.afterHooks=[],this.matcher=Ao(n.routes||[],this);var e=n.mode||"hash";switch(this.fallback="history"===e&&!Go&&!1!==n.fallback,this.fallback&&(e="hash"),Lo||(e="abstract"),this.mode=e,e){case"history":this.history=new us(this,n.base);break;case"hash":this.history=new ms(this,n.base,this.fallback);break;case"abstract":this.history=new vs(this,n.base);break;default:0}},_s={currentRoute:{configurable:!0}};function Ss(n,e){return n.push(e),function(){var t=n.indexOf(e);t>-1&&n.splice(t,1)}}bs.prototype.match=function(n,e,t){return this.matcher.match(n,e,t)},_s.currentRoute.get=function(){return this.history&&this.history.current},bs.prototype.init=function(n){var e=this;if(this.apps.push(n),n.$once("hook:destroyed",(function(){var t=e.apps.indexOf(n);t>-1&&e.apps.splice(t,1),e.app===n&&(e.app=e.apps[0]||null),e.app||e.history.teardown()})),!this.app){this.app=n;var t=this.history;if(t instanceof us||t instanceof ms){var r=function(n){t.setupListeners(),function(n){var r=t.current,a=e.options.scrollBehavior;Go&&a&&"fullPath"in n&&Po(e,n,r,!1)}(n)};t.transitionTo(t.getCurrentLocation(),r,r)}t.listen((function(n){e.apps.forEach((function(e){e._route=n}))}))}},bs.prototype.beforeEach=function(n){return Ss(this.beforeHooks,n)},bs.prototype.beforeResolve=function(n){return Ss(this.resolveHooks,n)},bs.prototype.afterEach=function(n){return Ss(this.afterHooks,n)},bs.prototype.onReady=function(n,e){this.history.onReady(n,e)},bs.prototype.onError=function(n){this.history.onError(n)},bs.prototype.push=function(n,e,t){var r=this;if(!e&&!t&&"undefined"!=typeof Promise)return new Promise((function(e,t){r.history.push(n,e,t)}));this.history.push(n,e,t)},bs.prototype.replace=function(n,e,t){var r=this;if(!e&&!t&&"undefined"!=typeof Promise)return new Promise((function(e,t){r.history.replace(n,e,t)}));this.history.replace(n,e,t)},bs.prototype.go=function(n){this.history.go(n)},bs.prototype.back=function(){this.go(-1)},bs.prototype.forward=function(){this.go(1)},bs.prototype.getMatchedComponents=function(n){var e=n?n.matched?n:this.resolve(n).route:this.currentRoute;return e?[].concat.apply([],e.matched.map((function(n){return Object.keys(n.components).map((function(e){return n.components[e]}))}))):[]},bs.prototype.resolve=function(n,e,t){var r=bo(n,e=e||this.history.current,t,this),a=this.match(r,e),o=a.redirectedFrom||a.fullPath;return{location:r,route:a,href:function(n,e,t){var r="hash"===t?"#"+e:e;return n?no(n+"/"+r):r}(this.history.base,o,this.mode),normalizedTo:r,resolved:a}},bs.prototype.getRoutes=function(){return this.matcher.getRoutes()},bs.prototype.addRoute=function(n,e){this.matcher.addRoute(n,e),this.history.current!==Wa&&this.history.transitionTo(this.history.getCurrentLocation())},bs.prototype.addRoutes=function(n){this.matcher.addRoutes(n),this.history.current!==Wa&&this.history.transitionTo(this.history.getCurrentLocation())},Object.defineProperties(bs.prototype,_s),bs.install=function n(e){if(!n.installed||_o!==e){n.installed=!0,_o=e;var t=function(n){return void 0!==n},r=function(n,e){var r=n.$options._parentVnode;t(r)&&t(r=r.data)&&t(r=r.registerRouteInstance)&&r(n,e)};e.mixin({beforeCreate:function(){t(this.$options.router)?(this._routerRoot=this,this._router=this.$options.router,this._router.init(this),e.util.defineReactive(this,"_route",this._router.history.current)):this._routerRoot=this.$parent&&this.$parent._routerRoot||this,r(this,this)},destroyed:function(){r(this)}}),Object.defineProperty(e.prototype,"$router",{get:function(){return this._routerRoot._router}}),Object.defineProperty(e.prototype,"$route",{get:function(){return this._routerRoot._route}}),e.component("RouterView",Ya),e.component("RouterLink",xo);var a=e.config.optionMergeStrategies;a.beforeRouteEnter=a.beforeRouteLeave=a.beforeRouteUpdate=a.created}},bs.version="3.5.1",bs.isNavigationFailure=ts,bs.NavigationFailureType=Ko,bs.START_LOCATION=Wa,Lo&&window.Vue&&window.Vue.use(bs);var xs=bs;var Es={NotFound:()=>t.e(9).then(t.bind(null,198)),Layout:()=>Promise.all([t.e(0),t.e(2)]).then(t.bind(null,196))},Ls={"v-c9b28f38":()=>t.e(11).then(t.bind(null,207)),"v-c4371658":()=>t.e(3).then(t.bind(null,226)),"v-f6333630":()=>t.e(12).then(t.bind(null,208)),"v-fd852198":()=>t.e(15).then(t.bind(null,212)),"v-666209f7":()=>t.e(17).then(t.bind(null,225)),"v-39881b92":()=>t.e(14).then(t.bind(null,210)),"v-4f4c3556":()=>t.e(19).then(t.bind(null,204)),"v-31f0e494":()=>t.e(13).then(t.bind(null,202)),"v-3d61421e":()=>t.e(22).then(t.bind(null,214)),"v-01387e12":()=>t.e(20).then(t.bind(null,203)),"v-111c46f7":()=>t.e(23).then(t.bind(null,205)),"v-8d9b3ed2":()=>t.e(21).then(t.bind(null,206)),"v-128c3003":()=>t.e(25).then(t.bind(null,211)),"v-735be0bb":()=>t.e(18).then(t.bind(null,213)),"v-3a989818":()=>t.e(27).then(t.bind(null,215)),"v-4b0ef5f7":()=>t.e(16).then(t.bind(null,217)),"v-e4ed7814":()=>t.e(28).then(t.bind(null,219)),"v-018ba5b7":()=>t.e(24).then(t.bind(null,221)),"v-baff27d2":()=>t.e(26).then(t.bind(null,223)),"v-a45e2f96":()=>t.e(30).then(t.bind(null,224)),"v-40edc294":()=>t.e(7).then(t.bind(null,222)),"v-9a459e98":()=>t.e(32).then(t.bind(null,220)),"v-55b77452":()=>t.e(8).then(t.bind(null,218)),"v-0dbd5a97":()=>t.e(29).then(t.bind(null,216)),"v-bbc2ee00":()=>t.e(31).then(t.bind(null,201))};function ws(n){const e=Object.create(null);return function(t){return e[t]||(e[t]=n(t))}}const Cs=/-(\w)/g,As=ws(n=>n.replace(Cs,(n,e)=>e?e.toUpperCase():"")),js=/\B([A-Z])/g,Ts=ws(n=>n.replace(js,"-$1").toLowerCase()),Is=ws(n=>n.charAt(0).toUpperCase()+n.slice(1));function Ds(n,e){if(!e)return;if(n(e))return n(e);return e.includes("-")?n(Is(As(e))):n(Is(e))||n(Ts(e))}const Ns=Object.assign({},Es,Ls),Qs=n=>Ns[n],ks=n=>Ls[n],Os=n=>Es[n],Ps=n=>Da.component(n);function Fs(n){return Ds(ks,n)}function Rs(n){return Ds(Os,n)}function Ms(n){return Ds(Qs,n)}function $s(n){return Ds(Ps,n)}function Us(...n){return Promise.all(n.filter(n=>n).map(async n=>{if(!$s(n)&&Ms(n)){const e=await Ms(n)();Da.component(n,e.default)}}))}function Bs(n,e){"undefined"!=typeof window&&window.__VUEPRESS__&&(window.__VUEPRESS__[n]=e)}var zs=t(46),Ws=t.n(zs),Gs={created(){if(this.siteMeta=this.$site.headTags.filter(([n])=>"meta"===n).map(([n,e])=>e),this.$ssrContext){const e=this.getMergedMetaTags();this.$ssrContext.title=this.$title,this.$ssrContext.lang=this.$lang,this.$ssrContext.pageMeta=(n=e)?n.map(n=>{let e="{e+=` ${t}="${n[t]}"`}),e+">"}).join("\n "):"",this.$ssrContext.canonicalLink=Hs(this.$canonicalUrl)}var n},mounted(){this.currentMetaTags=[...document.querySelectorAll("meta")],this.updateMeta(),this.updateCanonicalLink()},methods:{updateMeta(){document.title=this.$title,document.documentElement.lang=this.$lang;const n=this.getMergedMetaTags();this.currentMetaTags=Js(n,this.currentMetaTags)},getMergedMetaTags(){const n=this.$page.frontmatter.meta||[];return Ws()([{name:"description",content:this.$description}],n,this.siteMeta,Ks)},updateCanonicalLink(){Vs(),this.$canonicalUrl&&document.head.insertAdjacentHTML("beforeend",Hs(this.$canonicalUrl))}},watch:{$page(){this.updateMeta(),this.updateCanonicalLink()}},beforeDestroy(){Js(null,this.currentMetaTags),Vs()}};function Vs(){const n=document.querySelector("link[rel='canonical']");n&&n.remove()}function Hs(n=""){return n?``:""}function Js(n,e){if(e&&[...e].filter(n=>n.parentNode===document.head).forEach(n=>document.head.removeChild(n)),n)return n.map(n=>{const e=document.createElement("meta");return Object.keys(n).forEach(t=>{e.setAttribute(t,n[t])}),document.head.appendChild(e),e})}function Ks(n){for(const e of["name","property","itemprop"])if(n.hasOwnProperty(e))return n[e]+e;return JSON.stringify(n)}var Ys=t(47),Xs={mounted(){window.addEventListener("scroll",this.onScroll)},methods:{onScroll:t.n(Ys)()((function(){this.setActiveHash()}),300),setActiveHash(){const n=[].slice.call(document.querySelectorAll(".sidebar-link")),e=[].slice.call(document.querySelectorAll(".header-anchor")).filter(e=>n.some(n=>n.hash===e.hash)),t=Math.max(window.pageYOffset,document.documentElement.scrollTop,document.body.scrollTop),r=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight),a=window.innerHeight+t;for(let n=0;n=o.parentElement.offsetTop+10&&(!s||t{this.$nextTick(()=>{this.$vuepress.$set("disableScrollBehavior",!1)})})}}}},beforeDestroy(){window.removeEventListener("scroll",this.onScroll)}},Zs=t(12),ni=t.n(Zs),ei=[Gs,Xs,{mounted(){ni.a.configure({showSpinner:!1}),this.$router.beforeEach((n,e,t)=>{n.path===e.path||Da.component(n.name)||ni.a.start(),t()}),this.$router.afterEach(()=>{ni.a.done(),this.isSidebarOpen=!1})}}],ti={name:"GlobalLayout",computed:{layout(){const n=this.getLayout();return Bs("layout",n),Da.component(n)}},methods:{getLayout(){if(this.$page.path){const n=this.$page.frontmatter.layout;return n&&(this.$vuepress.getLayoutAsyncComponent(n)||this.$vuepress.getVueComponent(n))?n:"Layout"}return"NotFound"}}},ri=t(3),ai=Object(ri.a)(ti,(function(){var n=this.$createElement;return(this._self._c||n)(this.layout,{tag:"component"})}),[],!1,null,null,null).exports;!function(n,e,t){switch(e){case"components":n[e]||(n[e]={}),Object.assign(n[e],t);break;case"mixins":n[e]||(n[e]=[]),n[e].push(...t);break;default:throw new Error("Unknown option name.")}}(ai,"mixins",ei);const oi=[{name:"v-c9b28f38",path:"/",component:ai,beforeEnter:(n,e,t)=>{Us("Layout","v-c9b28f38").then(t)}},{path:"/index.html",redirect:"/"},{name:"v-c4371658",path:"/advanced/",component:ai,beforeEnter:(n,e,t)=>{Us("Layout","v-c4371658").then(t)}},{path:"/advanced/index.html",redirect:"/advanced/"},{name:"v-f6333630",path:"/about/",component:ai,beforeEnter:(n,e,t)=>{Us("Layout","v-f6333630").then(t)}},{path:"/about/index.html",redirect:"/about/"},{name:"v-fd852198",path:"/basics/",component:ai,beforeEnter:(n,e,t)=>{Us("Layout","v-fd852198").then(t)}},{path:"/basics/index.html",redirect:"/basics/"},{name:"v-666209f7",path:"/basics/sql-file-api.html",component:ai,beforeEnter:(n,e,t)=>{Us("Layout","v-666209f7").then(t)}},{name:"v-39881b92",path:"/background/el.html",component:ai,beforeEnter:(n,e,t)=>{Us("Layout","v-39881b92").then(t)}},{name:"v-4f4c3556",path:"/configuration/",component:ai,beforeEnter:(n,e,t)=>{Us("Layout","v-4f4c3556").then(t)}},{path:"/configuration/index.html",redirect:"/configuration/"},{name:"v-31f0e494",path:"/background/",component:ai,beforeEnter:(n,e,t)=>{Us("Layout","v-31f0e494").then(t)}},{path:"/background/index.html",redirect:"/background/"},{name:"v-3d61421e",path:"/configuration/entity-handler.html",component:ai,beforeEnter:(n,e,t)=>{Us("Layout","v-3d61421e").then(t)}},{name:"v-01387e12",path:"/configuration/connection-supplier.html",component:ai,beforeEnter:(n,e,t)=>{Us("Layout","v-01387e12").then(t)}},{name:"v-111c46f7",path:"/configuration/sql-agent-factory.html",component:ai,beforeEnter:(n,e,t)=>{Us("Layout","v-111c46f7").then(t)}},{name:"v-8d9b3ed2",path:"/configuration/dialect.html",component:ai,beforeEnter:(n,e,t)=>{Us("Layout","v-8d9b3ed2").then(t)}},{name:"v-128c3003",path:"/configuration/sql-filter-manager.html",component:ai,beforeEnter:(n,e,t)=>{Us("Layout","v-128c3003").then(t)}},{name:"v-735be0bb",path:"/basics/transaction.html",component:ai,beforeEnter:(n,e,t)=>{Us("Layout","v-735be0bb").then(t)}},{name:"v-3a989818",path:"/developer_guide/",component:ai,beforeEnter:(n,e,t)=>{Us("Layout","v-3a989818").then(t)}},{path:"/developer_guide/index.html",redirect:"/developer_guide/"},{name:"v-4b0ef5f7",path:"/basics/entity-api.html",component:ai,beforeEnter:(n,e,t)=>{Us("Layout","v-4b0ef5f7").then(t)}},{name:"v-e4ed7814",path:"/getting_started/",component:ai,beforeEnter:(n,e,t)=>{Us("Layout","v-e4ed7814").then(t)}},{path:"/getting_started/index.html",redirect:"/getting_started/"},{name:"v-018ba5b7",path:"/configuration/sql-context-factory.html",component:ai,beforeEnter:(n,e,t)=>{Us("Layout","v-018ba5b7").then(t)}},{name:"v-baff27d2",path:"/configuration/sql-manager.html",component:ai,beforeEnter:(n,e,t)=>{Us("Layout","v-baff27d2").then(t)}},{name:"v-a45e2f96",path:"/getting_started/sql-repl.html",component:ai,beforeEnter:(n,e,t)=>{Us("Layout","v-a45e2f96").then(t)}},{name:"v-40edc294",path:"/developer_tools/",component:ai,beforeEnter:(n,e,t)=>{Us("Layout","v-40edc294").then(t)}},{path:"/developer_tools/index.html",redirect:"/developer_tools/"},{name:"v-9a459e98",path:"/why_uroborosql/",component:ai,beforeEnter:(n,e,t)=>{Us("Layout","v-9a459e98").then(t)}},{path:"/why_uroborosql/index.html",redirect:"/why_uroborosql/"},{name:"v-55b77452",path:"/getting_started/sql-file-access.html",component:ai,beforeEnter:(n,e,t)=>{Us("Layout","v-55b77452").then(t)}},{name:"v-0dbd5a97",path:"/getting_started/entity-access.html",component:ai,beforeEnter:(n,e,t)=>{Us("Layout","v-0dbd5a97").then(t)}},{name:"v-bbc2ee00",path:"/license/",component:ai,beforeEnter:(n,e,t)=>{Us("Layout","v-bbc2ee00").then(t)}},{path:"/license/index.html",redirect:"/license/"},{path:"*",component:ai}],si={title:"uroboroSQL",description:"uroboroSQLはJava製のシンプルなSQL実行ライブラリです",base:"/uroborosql-doc/",headTags:[["link",{rel:"icon",href:"/uroborosql-doc/favicon.ico"}],["meta",{name:"og:type",content:"website"}],["meta",{name:"og:description",content:"uroboroSQLDeveloper-oriented and SQL centric database access library."}],["meta",{name:"og:image",content:"https://future-architect.github.io/uroborosql-doc/images/logo.png"}]],pages:[{title:"Home",frontmatter:{home:!0,heroImage:"/images/logo.png",actionText:"Why uroboroSQL",actionLink:"/why_uroborosql/",features:[{title:"2Way-SQL with Coverage",details:"ORマッパー、クエリビルダならJavaコードでカバレッジが取れるのに、2Way-SQLで分岐を使った場合にはカバレッジが取れず本番環境で意図しないSQLが・・・。uroboroSQLではテスト実行時にカバレッジ取得用のログを出力・解析することにより、カバレッジレポートを出力することが可能です。"},{title:"REPL搭載",details:"SQLファイルを修正するたびにコンパイルしてテスト実行するのに時間がかかる・・・。他のORマッパーやSQLフレームワークでイライラしていた経験はありませんか?uroboroSQLではREPLを搭載。SQLを修正してすぐにIDE等のコンソールからコマンドでコンパイルなしで実行、即デバッグができます。"},{title:"区分値サポート",details:"2Way-SQLのライブラリを使用していると、それぞれのSQLで区分値や定数などをいちいちパラメータに指定するのがわずらわしいと思ったことはありませんか?エンタープライズで使われてOSS化したuroboroSQLでは、SQLファイルの中で定数クラスや列挙体を指定することにより、呼び出し時の実装をシンプルにします。"}],footer:"MIT Licensed | ©2018-2019 Future Corporation. All rights reserved.",meta:[{name:"og:title",content:"uroboroSQL"},{name:"og:url",content:"/uroborosql-doc/"}]},regularPath:"/",relativePath:"README.md",key:"v-c9b28f38",path:"/",lastUpdated:"2019-9-23 23:53:45",headersStr:null,content:"",normalizedContent:"",charsets:{}},{title:"高度な操作",frontmatter:{meta:[{name:"og:title",content:"高度な操作"},{name:"og:url",content:"/uroborosql-doc/advanced/"}]},regularPath:"/advanced/",relativePath:"advanced/README.md",key:"v-c4371658",path:"/advanced/",headers:[{level:2,title:"SQLファイルの解決ルール",slug:"sqlファイルの解決ルール",normalizedTitle:"sqlファイルの解決ルール",charIndex:10},{level:3,title:"複数フォルダの指定",slug:"複数フォルダの指定",normalizedTitle:"複数フォルダの指定",charIndex:26},{level:3,title:"jarファイルの指定",slug:"jarファイルの指定",normalizedTitle:"jarファイルの指定",charIndex:1080},{level:3,title:"Dialectによるファイルパスの切り替え",slug:"dialectによるファイルパスの切り替え",normalizedTitle:"dialectによるファイルパスの切り替え",charIndex:1263},{level:2,title:"PostgreSQLのトランザクション内SQLエラー対応",slug:"postgresqlのトランザクション内sqlエラー対応",normalizedTitle:"postgresqlのトランザクション内sqlエラー対応",charIndex:1391},{level:2,title:"SQLカバレッジ ( uroborosql.sql.coverage )",slug:"sqlカバレッジ-uroborosql-sql-coverage",normalizedTitle:"sqlカバレッジ ( uroborosql.sql.coverage )",charIndex:2491},{level:3,title:"サマリーページ",slug:"サマリーページ",normalizedTitle:"サマリーページ",charIndex:3465},{level:3,title:"詳細ページ",slug:"詳細ページ",normalizedTitle:"詳細ページ",charIndex:3477},{level:2,title:"ログ出力",slug:"ログ出力",normalizedTitle:"ログ出力",charIndex:3495},{level:2,title:"システムプロパティ",slug:"システムプロパティ",normalizedTitle:"システムプロパティ",charIndex:6041}],lastUpdated:"2020-3-8 21:44:34",headersStr:"SQLファイルの解決ルール 複数フォルダの指定 jarファイルの指定 Dialectによるファイルパスの切り替え PostgreSQLのトランザクション内SQLエラー対応 SQLカバレッジ ( uroborosql.sql.coverage ) サマリーページ 詳細ページ ログ出力 システムプロパティ",content:'# 高度な操作\n# SQLファイルの解決ルール\n# 複数フォルダの指定\nsqlフォルダはクラスパスから参照することが出来れば複数指定することが出来ます。\n\n * src/test/resources, src/main/resources の順にクラスパスに指定されている場合\n\nsrc\n ├─main\n │ └─resources\n │ └─sql\n │ ├─department\n │ │ ├─insert_department.sql\n │ │ └─select_department.sql\n │ └─employee\n │ ├─insert_employee.sql\n │ └─select_employee.sql\n └─test\n └─resources\n └─sql\n ├─department\n │ ├─update_department.sql\n │ └─delete_department.sql\n └─employee\n ├─update_employee.sql\n └─select_employee.sql\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\nWARNING\n\nSQLファイルのパスが重複している場合、クラスパス上で先にあるフォルダのSQLファイルが使用されます。\n\n上記のフォルダ構成の場合、src/main/resources/sql/employee/select_employee.sql と src/test/resources/sql/employee/select_employee.sql がともに employee/select_employee として解決されますが、クラスパスとしてsrc/test/resourcesが先に指定されているため、src/test/resources/sql/employee/select_employee.sqlが使用されます。\n\n# jarファイルの指定\nSQLファイルはjarの中にリソースとして含めることもできます。\nその場合、リソースのルート直下のsqlフォルダをルートフォルダとした相対パスでSQLファイルを指定することができます。 SQLファイルのルートフォルダ(初期値:sql)は変更することができます。\n変更方法の詳細は SQLファイルルートフォルダの設定 を参照してください。\n\n# Dialectによるファイルパスの切り替え\nNioSqlManagerImplをSqlManagerとして指定した場合、Dialectによるファイルパスの切り替えが出来るようになります。 詳しくはDB種類毎のファイルパス切り替えを参照してください。\n\n# PostgreSQLのトランザクション内SQLエラー対応\nPostgreSQLでは、1つのトランザクション内でSQLエラーが発生した場合、後続するSQL文はすべて無条件でエラーとなります。 この状態はトランザクションに対してcommitもしくはrollbackを実行するまで続きます。\n\nWARNING\n\nエラーが発生している状態でcommitを実行しても実際にはrollbackされます\n\nこれはPostgreSQL固有の動作であり、通常は問題ない動作なのですが、テーブルロックエラーなどリトライ処理を行うケースで問題になります。 (SQLのリトライについてはSQL実行のリトライを参照)\nuroboroSQLではリトライ指定のあるSQL実行、かつ、PostgreSQL(より正確にはDialect#isRollbackToSavepointBeforeRetry()がtrueの場合)の場合にsavepointを使った部分ロールバックを行うことで この問題に対応しています。\n具体的にはリトライ指定のあるSQL実行、かつ、PostgreSQLの場合はSQL実行の直前にリトライ用のsavepointを設定し、SQL実行が成功すればsavepointの解放、SQL実行が失敗した場合はリトライ用のsavepointまでロールバックを行います。\n\nWARNING\n\nリトライ指定のないSQL実行の場合はsavepointの設定は行われません。\n\nリトライ指定のないSQLで上記と同様の動作を行う場合は以下のように実装してください。\n\nagent.required(() -> { // トランザクション開始\n agent.savepointScope(() -> {\n // savepointScopeの開始\n agent.update("example/insert_product")\n .param("product_id", 1)\n .count();\n });\n agent.savepointScope(() -> {\n // 後続処理\n int count = agent.update("department/insert_department")\n .param("dept_no", 1)\n .param("dept_name", "Sales")\n .count();\n ・・・\n });\n});\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n# SQLカバレッジ ( uroborosql.sql.coverage )\nこれまでアプリケーション上の条件分岐はカバレッジツールを利用して網羅率を確認することができました。\nしかし、SQL文の条件分岐は実際にその分岐が通っているかどうかを確認する手段がなく、リリース後に初めて通った条件で不具合を発生させることがありました。\nこの問題を解決するためにuroboroSQLでは、SQL文の条件分岐を集計してカバレッジレポートを行う機能を提供します。\n\nSQLカバレッジはuroboroSQLを利用するアプリケーションの起動時オプションに\n\n-Duroborosql.sql.coverage=true\n\n\n1\nを追加することで有効になります。\nSQLカバレッジを有効にするとアプリケーションが実行している間に実行されるSQLについて、カバレッジ情報が収集されます。\nカバレッジ情報の収集結果は標準ではtarget/coverage/sql-cover.xmlに出力されます。\nこのファイルの場所や名前を変更したい場合は、起動時オプションに\n\n-Duroborosql.sql.coverage.file=[出力ファイルパス]\n\n\n1\nを指定してください。\n\n出力されたsql-cover.xmlをJenkinsのCobertura pluginなどのXMLレポートとして読み込むとSQLファイルのカバレッジレポートが参照できるようになります。\n\n\n\nまたより、uroboroSQLのみでHTMLレポートを出力することができるようになりました。\n起動時オプションに\n\n-Duroborosql.sql.coverage=jp.co.future.uroborosql.coverage.reports.html.HtmlReportCoverageHandler\n\n\n1\nを指定することで本機能を利用することができます。\n\nカバレッジ情報はデフォルトではtarget/coverage/sqlフォルダ配下に出力されます。\n出力先フォルダを変更した場合は、起動時オプションに\n\n-Duroborosql.sql.coverage.dir=[出力フォルダパス]\n\n\n1\nを指定してください。\n\n出力されたレポートのサンプルは下記を参照してください。\n\n# サマリーページ\n\n\n# 詳細ページ\n\n\n出力サンプル\n\n# ログ出力\nuroboroSQLではログ出力ライブラリとしてSLF4Jを使用しています。SLF4Jの詳細は公式のドキュメントを参照して下さい。\nuroboroSQLで出力されるログ内容は以下表の通りです。\n\nクラス名 TRACE DEBUG INFO WARN ERROR FATAL \nAbstractAgent 変換前SQL 実行時SQL - - - - \nDebugSqlFilter - パラメーター/ - - - - \n 対象データ数/ \n 実行結果 \nIfNode - 評価式/ - - - - \n 判定結果/ \n パラメーター \nParameter - パラメーターの設定 - サブパラメーター値にNULLを設定 - - \nSecretColumnSqlFilter - バッチ処理追加件数/ - - - - \n ストアドプロシージャ出力パラメーター \nSqlAgent ステートメントのクローズ 処理実行アナウンス/ - - エラーメッセージ - \n リトライ実行アナウンス/ \n SQL実行時間 \nSqlContext - バッチ処理追加件数/ - - - - \n ストアドプロシージャ出力パラメーター \nSqlContextFactory - 定数パラメーター - 定数名の重複 エラーメッセージ - \nSqlLoader SQL定義ファイルの読み込み完了 SQL定義ファイルの読み込み開始/読み込み中 - - デフォルトファイルパスの設定/ - \n デフォルト拡張子/ \n 空のSQLキャッシュの返却 \n\n# システムプロパティ\nuroboroSQLではシステムプロパティを指定することで動作を変更することができます。\n\nプロパティ名 説明 初期値 \nuroborosql.sql.coverage SQLカバレッジを出力するかどうかのフラグ。trueの場合はSQLカバレッジを出力します。 なし \n 文字列としてjp.co.future.uroborosql.coverage.CoverageHandlerインタフェースの \n 実装クラスが設定された場合はそのクラスを利用してカバレッジの収集を行います。 \nuroborosql.sql.coverage.file 指定されたPATH(ファイル)に SQLカバレッジのCobertura形式のxmlレポートを出力します。 ./target/coverage/sql-cover.xml \nuroborosql.sql.coverage.dir 指定されたPATH(フォルダ)にSQLカバレッジのHTMLレポートを出力します。 ./target/coverage/sql \nuroborosql.entity.cache.size Entityクラス情報のキャッシュサイズを指定します。 30 \n キャッシュサイズを超えるEntityクラスの読み込みがあった場合は古い情報から破棄されます。',normalizedContent:'# 高度な操作\n# sqlファイルの解決ルール\n# 複数フォルダの指定\nsqlフォルダはクラスパスから参照することが出来れば複数指定することが出来ます。\n\n * src/test/resources, src/main/resources の順にクラスパスに指定されている場合\n\nsrc\n ├─main\n │ └─resources\n │ └─sql\n │ ├─department\n │ │ ├─insert_department.sql\n │ │ └─select_department.sql\n │ └─employee\n │ ├─insert_employee.sql\n │ └─select_employee.sql\n └─test\n └─resources\n └─sql\n ├─department\n │ ├─update_department.sql\n │ └─delete_department.sql\n └─employee\n ├─update_employee.sql\n └─select_employee.sql\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\nwarning\n\nsqlファイルのパスが重複している場合、クラスパス上で先にあるフォルダのsqlファイルが使用されます。\n\n上記のフォルダ構成の場合、src/main/resources/sql/employee/select_employee.sql と src/test/resources/sql/employee/select_employee.sql がともに employee/select_employee として解決されますが、クラスパスとしてsrc/test/resourcesが先に指定されているため、src/test/resources/sql/employee/select_employee.sqlが使用されます。\n\n# jarファイルの指定\nsqlファイルはjarの中にリソースとして含めることもできます。\nその場合、リソースのルート直下のsqlフォルダをルートフォルダとした相対パスでsqlファイルを指定することができます。 sqlファイルのルートフォルダ(初期値:sql)は変更することができます。\n変更方法の詳細は sqlファイルルートフォルダの設定 を参照してください。\n\n# dialectによるファイルパスの切り替え\nniosqlmanagerimplをsqlmanagerとして指定した場合、dialectによるファイルパスの切り替えが出来るようになります。 詳しくはdb種類毎のファイルパス切り替えを参照してください。\n\n# postgresqlのトランザクション内sqlエラー対応\npostgresqlでは、1つのトランザクション内でsqlエラーが発生した場合、後続するsql文はすべて無条件でエラーとなります。 この状態はトランザクションに対してcommitもしくはrollbackを実行するまで続きます。\n\nwarning\n\nエラーが発生している状態でcommitを実行しても実際にはrollbackされます\n\nこれはpostgresql固有の動作であり、通常は問題ない動作なのですが、テーブルロックエラーなどリトライ処理を行うケースで問題になります。 (sqlのリトライについてはsql実行のリトライを参照)\nuroborosqlではリトライ指定のあるsql実行、かつ、postgresql(より正確にはdialect#isrollbacktosavepointbeforeretry()がtrueの場合)の場合にsavepointを使った部分ロールバックを行うことで この問題に対応しています。\n具体的にはリトライ指定のあるsql実行、かつ、postgresqlの場合はsql実行の直前にリトライ用のsavepointを設定し、sql実行が成功すればsavepointの解放、sql実行が失敗した場合はリトライ用のsavepointまでロールバックを行います。\n\nwarning\n\nリトライ指定のないsql実行の場合はsavepointの設定は行われません。\n\nリトライ指定のないsqlで上記と同様の動作を行う場合は以下のように実装してください。\n\nagent.required(() -> { // トランザクション開始\n agent.savepointscope(() -> {\n // savepointscopeの開始\n agent.update("example/insert_product")\n .param("product_id", 1)\n .count();\n });\n agent.savepointscope(() -> {\n // 後続処理\n int count = agent.update("department/insert_department")\n .param("dept_no", 1)\n .param("dept_name", "sales")\n .count();\n ・・・\n });\n});\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n# sqlカバレッジ ( uroborosql.sql.coverage )\nこれまでアプリケーション上の条件分岐はカバレッジツールを利用して網羅率を確認することができました。\nしかし、sql文の条件分岐は実際にその分岐が通っているかどうかを確認する手段がなく、リリース後に初めて通った条件で不具合を発生させることがありました。\nこの問題を解決するためにuroborosqlでは、sql文の条件分岐を集計してカバレッジレポートを行う機能を提供します。\n\nsqlカバレッジはuroborosqlを利用するアプリケーションの起動時オプションに\n\n-duroborosql.sql.coverage=true\n\n\n1\nを追加することで有効になります。\nsqlカバレッジを有効にするとアプリケーションが実行している間に実行されるsqlについて、カバレッジ情報が収集されます。\nカバレッジ情報の収集結果は標準ではtarget/coverage/sql-cover.xmlに出力されます。\nこのファイルの場所や名前を変更したい場合は、起動時オプションに\n\n-duroborosql.sql.coverage.file=[出力ファイルパス]\n\n\n1\nを指定してください。\n\n出力されたsql-cover.xmlをjenkinsのcobertura pluginなどのxmlレポートとして読み込むとsqlファイルのカバレッジレポートが参照できるようになります。\n\n\n\nまたより、uroborosqlのみでhtmlレポートを出力することができるようになりました。\n起動時オプションに\n\n-duroborosql.sql.coverage=jp.co.future.uroborosql.coverage.reports.html.htmlreportcoveragehandler\n\n\n1\nを指定することで本機能を利用することができます。\n\nカバレッジ情報はデフォルトではtarget/coverage/sqlフォルダ配下に出力されます。\n出力先フォルダを変更した場合は、起動時オプションに\n\n-duroborosql.sql.coverage.dir=[出力フォルダパス]\n\n\n1\nを指定してください。\n\n出力されたレポートのサンプルは下記を参照してください。\n\n# サマリーページ\n\n\n# 詳細ページ\n\n\n出力サンプル\n\n# ログ出力\nuroborosqlではログ出力ライブラリとしてslf4jを使用しています。slf4jの詳細は公式のドキュメントを参照して下さい。\nuroborosqlで出力されるログ内容は以下表の通りです。\n\nクラス名 trace debug info warn error fatal \nabstractagent 変換前sql 実行時sql - - - - \ndebugsqlfilter - パラメーター/ - - - - \n 対象データ数/ \n 実行結果 \nifnode - 評価式/ - - - - \n 判定結果/ \n パラメーター \nparameter - パラメーターの設定 - サブパラメーター値にnullを設定 - - \nsecretcolumnsqlfilter - バッチ処理追加件数/ - - - - \n ストアドプロシージャ出力パラメーター \nsqlagent ステートメントのクローズ 処理実行アナウンス/ - - エラーメッセージ - \n リトライ実行アナウンス/ \n sql実行時間 \nsqlcontext - バッチ処理追加件数/ - - - - \n ストアドプロシージャ出力パラメーター \nsqlcontextfactory - 定数パラメーター - 定数名の重複 エラーメッセージ - \nsqlloader sql定義ファイルの読み込み完了 sql定義ファイルの読み込み開始/読み込み中 - - デフォルトファイルパスの設定/ - \n デフォルト拡張子/ \n 空のsqlキャッシュの返却 \n\n# システムプロパティ\nuroborosqlではシステムプロパティを指定することで動作を変更することができます。\n\nプロパティ名 説明 初期値 \nuroborosql.sql.coverage sqlカバレッジを出力するかどうかのフラグ。trueの場合はsqlカバレッジを出力します。 なし \n 文字列としてjp.co.future.uroborosql.coverage.coveragehandlerインタフェースの \n 実装クラスが設定された場合はそのクラスを利用してカバレッジの収集を行います。 \nuroborosql.sql.coverage.file 指定されたpath(ファイル)に sqlカバレッジのcobertura形式のxmlレポートを出力します。 ./target/coverage/sql-cover.xml \nuroborosql.sql.coverage.dir 指定されたpath(フォルダ)にsqlカバレッジのhtmlレポートを出力します。 ./target/coverage/sql \nuroborosql.entity.cache.size entityクラス情報のキャッシュサイズを指定します。 30 \n キャッシュサイズを超えるentityクラスの読み込みがあった場合は古い情報から破棄されます。',charsets:{cjk:!0}},{title:"uroboroSQLについて",frontmatter:{meta:[{name:"og:title",content:"uroboroSQLについて"},{name:"og:url",content:"/uroborosql-doc/about/"}]},regularPath:"/about/",relativePath:"about/README.md",key:"v-f6333630",path:"/about/",headers:[{level:2,title:"GitHub",slug:"github",normalizedTitle:"github",charIndex:19},{level:2,title:"リリースノート",slug:"リリースノート",normalizedTitle:"リリースノート",charIndex:76}],lastUpdated:"2020-11-19 23:55:38",headersStr:"GitHub リリースノート",content:"# uroboroSQLについて\n# GitHub\nhttps://github.com/future-architect/uroborosql\n\n# リリースノート\nバージョン リリース日 概要 \nv0.20.2 2020/10/29 バグフィックス \nv0.20.1 2020/09/17 バグフィックス \nv0.20.0 2020/08/25 バグフィックス \nv0.19.0 2020/05/17 日付・時刻を文字列型のカラムで保持する場合のマッパーを追加 / 複数DB接続を考慮したAPIの改善 / InsertsTypeのデフォルトをBATCHへ変更 \nv0.18.2 2020/03/29 悲観的ロック例外時に、SQLExceptionの代わりに専用のPessimisticLockExceptionをスローするように変更 \nv0.17.1 2020/03/16 バグフィックス (v0.18.1 の修正を v0.17.0へバックポート) \nv0.18.1 2020/03/15 バグフィックス \nv0.18.0 2020/03/08 SqlAgent#savepointScopeメソッド追加 / SqlEntityQuery#selectメソッド, hintメソッド追加 / 式言語としてSpring Expression Language(SpEL)を利用可能に / バグフィックス \nv0.17.0 2019/12/22 SqlAgent#truncateメソッドを追加 \nv0.16.0 2019/12/13 @VersionアノテーションでOptimisticLockSupplierを指定可能に / バグフィックス \nv0.15.2 2019/12/13 バグフィックス \nv0.15.1 2019/10/16 バグフィックス \nv0.15.0 2019/10/11 SqlEntityUpdateによる条件指定の複数更新サポート / SqlAgent#updates, SqlAgent#updatesAndReturnの追加による一括更新追加 / バグフィックス \nv0.14.0 2019/09/17 SqlEntityQueryで悲観ロックのサポート / SqlQuery#one,findOneの追加 / バグフィックス \nv0.13.0 2019/04/26 REPLで使用しているjLineのバージョンを v2 から v3に変更。また依存関係をオプションに変更 / バグフィックス \nv0.12.1 2019/04/12 バグフィックス \nv0.12.0 2019/04/09 自動採番カラムを持つエンティティの挿入に対応 / エンティティによる検索で集約関数を提供 / バグフィックス \nv0.11.1 2019/03/12 バグフィックス \nv0.11.0 2019/03/11 エンティティによる検索で抽出条件の指定を可能に \nv0.10.1 2019/02/07 SqlFluentにsqlIdとparam(String, Supplier)を追加 / バグフィックス \nv0.10.0 2019/01/16 SqlAgent#insertsによる一括INSERT / バグフィックス \nv0.9.0 2019/01/07 NioSqlManagerのファイル監視を設定可能に / バグフィックス \nv0.8.2 2018/05/26 バグフィックス \nv0.8.1 2018/04/26 バグフィックス \nv0.8.0 2018/04/16 DialectによるDB製品対応 / CLOB/BLOB対応 / NioSqlMager追加 / etc. \nv0.7.0 2018/03/10 バグフィックス \nv0.6.1 2018/02/05 バグフィックス \nv0.6.0 2018/01/31 自動パラメータバインド関数 API追加 / バグフィックス \nv0.5.0 2017/12/13 Stream batch API追加 / SQL内の不要なカンマの除去 \nv0.4.0 2017/11/17 UroboroSQL ビルダーAPI追加 / CaseFormat初期値設定の追加 / etc. \nv0.3.3 2017/10/31 バグフィックス \nv0.3.2 2017/10/10 バグフィックス \nv0.3.1 2017/10/02 バグフィックス \nv0.3.0 2017/09/08 リファクタリング API \nv0.2.0 2017/05/26 カバレッジレポート拡張 / SQL-REPL機能拡張 / ORMapper API 追加 \nv0.1.0 2017/03/09 初版リリース \n\nSee more info. Github releases",normalizedContent:"# uroborosqlについて\n# github\nhttps://github.com/future-architect/uroborosql\n\n# リリースノート\nバージョン リリース日 概要 \nv0.20.2 2020/10/29 バグフィックス \nv0.20.1 2020/09/17 バグフィックス \nv0.20.0 2020/08/25 バグフィックス \nv0.19.0 2020/05/17 日付・時刻を文字列型のカラムで保持する場合のマッパーを追加 / 複数db接続を考慮したapiの改善 / insertstypeのデフォルトをbatchへ変更 \nv0.18.2 2020/03/29 悲観的ロック例外時に、sqlexceptionの代わりに専用のpessimisticlockexceptionをスローするように変更 \nv0.17.1 2020/03/16 バグフィックス (v0.18.1 の修正を v0.17.0へバックポート) \nv0.18.1 2020/03/15 バグフィックス \nv0.18.0 2020/03/08 sqlagent#savepointscopeメソッド追加 / sqlentityquery#selectメソッド, hintメソッド追加 / 式言語としてspring expression language(spel)を利用可能に / バグフィックス \nv0.17.0 2019/12/22 sqlagent#truncateメソッドを追加 \nv0.16.0 2019/12/13 @versionアノテーションでoptimisticlocksupplierを指定可能に / バグフィックス \nv0.15.2 2019/12/13 バグフィックス \nv0.15.1 2019/10/16 バグフィックス \nv0.15.0 2019/10/11 sqlentityupdateによる条件指定の複数更新サポート / sqlagent#updates, sqlagent#updatesandreturnの追加による一括更新追加 / バグフィックス \nv0.14.0 2019/09/17 sqlentityqueryで悲観ロックのサポート / sqlquery#one,findoneの追加 / バグフィックス \nv0.13.0 2019/04/26 replで使用しているjlineのバージョンを v2 から v3に変更。また依存関係をオプションに変更 / バグフィックス \nv0.12.1 2019/04/12 バグフィックス \nv0.12.0 2019/04/09 自動採番カラムを持つエンティティの挿入に対応 / エンティティによる検索で集約関数を提供 / バグフィックス \nv0.11.1 2019/03/12 バグフィックス \nv0.11.0 2019/03/11 エンティティによる検索で抽出条件の指定を可能に \nv0.10.1 2019/02/07 sqlfluentにsqlidとparam(string, supplier)を追加 / バグフィックス \nv0.10.0 2019/01/16 sqlagent#insertsによる一括insert / バグフィックス \nv0.9.0 2019/01/07 niosqlmanagerのファイル監視を設定可能に / バグフィックス \nv0.8.2 2018/05/26 バグフィックス \nv0.8.1 2018/04/26 バグフィックス \nv0.8.0 2018/04/16 dialectによるdb製品対応 / clob/blob対応 / niosqlmager追加 / etc. \nv0.7.0 2018/03/10 バグフィックス \nv0.6.1 2018/02/05 バグフィックス \nv0.6.0 2018/01/31 自動パラメータバインド関数 api追加 / バグフィックス \nv0.5.0 2017/12/13 stream batch api追加 / sql内の不要なカンマの除去 \nv0.4.0 2017/11/17 uroborosql ビルダーapi追加 / caseformat初期値設定の追加 / etc. \nv0.3.3 2017/10/31 バグフィックス \nv0.3.2 2017/10/10 バグフィックス \nv0.3.1 2017/10/02 バグフィックス \nv0.3.0 2017/09/08 リファクタリング api \nv0.2.0 2017/05/26 カバレッジレポート拡張 / sql-repl機能拡張 / ormapper api 追加 \nv0.1.0 2017/03/09 初版リリース \n\nsee more info. github releases",charsets:{cjk:!0}},{title:"事前準備",frontmatter:{meta:[{name:"og:title",content:"事前準備"},{name:"og:url",content:"/uroborosql-doc/basics/"}]},regularPath:"/basics/",relativePath:"basics/README.md",key:"v-fd852198",path:"/basics/",headers:[{level:2,title:"DB接続",slug:"db接続",normalizedTitle:"db接続",charIndex:41},{level:2,title:"SqlAgentインスタンスの取得",slug:"sqlagentインスタンスの取得",normalizedTitle:"sqlagentインスタンスの取得",charIndex:854},{level:2,title:"SQLファイルの配置",slug:"sqlファイルの配置",normalizedTitle:"sqlファイルの配置",charIndex:1200},{level:3,title:"SQL名",slug:"sql名",normalizedTitle:"sql名",charIndex:1795},{level:3,title:"共通API",slug:"共通api",normalizedTitle:"共通api",charIndex:2289}],lastUpdated:"2019-9-23 23:39:17",headersStr:"DB接続 SqlAgentインスタンスの取得 SQLファイルの配置 SQL名 共通API",content:'# 事前準備\nuroboroSQLを利用した基本的なDB操作を説明します。\n\n# DB接続\nまず最初にSQLを実行するDBへの接続を行います。\nDBに接続するためにはSqlConfigインタフェースのインスタンスを生成する必要があります。\n\nSqlConfigインスタンスはUroboroSQLクラスのビルダーメソッドを使用して生成します。\n\n// JDBC接続を行うSqlConfigの生成\n// SqlConfig config = UroboroSQL.builder(url, user, password).build();\nSqlConfig config = UroboroSQL.builder("jdbc:h2:mem:uroborosql", "sa", "").build();\n\n// DataSourceを使用したDB接続を行うSqlConfigの生成\n// SqlConfig config = UroboroSQL.builder(datasource).build();\nContext context = new InitialContext();\nDataSource dataSource = context.lookup("java:comp/env/jdbc/datasource");\nSqlConfig config = UroboroSQL.builder(dataSource).build();\n\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\nUroboroSQLクラスを使ってSqlConfigインスタンスを生成する際、uroboroSQLの挙動を変更する各種の設定も合わせて行うことができます。\n設定の詳細については設定を参照してください。\n\nWARNING\n\nSqlConfigインスタンスはアプリケーション内で接続先毎に1つ保持するようにしてください。 SQL実行の都度生成すると、不要なインスタンスの生成やSQLロード処理が実行されます。\n\n# SqlAgentインスタンスの取得\n次にすべての操作の基点となるSqlAgentインタフェースのインスタンスを取得します。\n\ntry (SqlAgent agent = config.agent()) {\n // この中でSQLの操作を行う\n}\n\n\n1\n2\n3\nSQLの操作はすべてこのSqlAgentインスタンスを使って行うことになります。\n\nTIP\n\nSqlAgentインタフェースはjava.lang.AutoClosableインタフェースを実装しており、try-with-resourcesで記述することで終了時に自動的にclose処理が呼び出され、中で保持しているConnectionやPreparedStatementなどのリソースオブジェクトも正しくクローズされます。\n\n# SQLファイルの配置\nuroboroSQLではSQL文の書かれたファイルのパスを指定してSQLを実行することができます。\nその際、SQLファイルはクラスパスから参照できる場所に配置されている必要があります。\n\nsrc\n └─main\n └─resources\n └─sql\n ├─department\n │ ├─insert_department.sql\n │ └─select_department.sql\n └─employee\n ├─insert_employee.sql\n └─select_employee.sql\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n上のようなフォルダ構成の場合で、src/main/resources/をクラスパスに指定すれば、 その下のsqlフォルダをルートフォルダとした相対パスでSQLファイルを指定することができます。\n\nTIP\n\nSQLファイルのルートフォルダ(初期値:sql)は変更することができます。\n変更方法の詳細は SQLファイルルートフォルダの設定 を参照してください。\n\n# SQL名\nSQLファイルの指定する際のファイルパスをSQL名といいます。\n上記フォルダ構成の場合、それぞれのSQLファイルは以下のようなSQL名となります。\n\nSQLファイルパス(SQLルートフォルダから) SQL名 \ndepartment/insert_department.sql department/insert_department \ndepartment/select_department.sql department/select_department \nemployee/insert_employee.sql employee/insert_employee \nemployee/select_employee.sql employee/select_employee \n\nSQLファイルの配置は設定によりカスタマイズが可能です。SQLファイル配置のカスタマイズについては SQLファイルの解決ルール を参照してください。\n\n# 共通API\n検索(SqlQuery)、更新(SqlUpdate)、バッチ更新(SqlBatch)、ストアドプロシージャ実行(Procedure)を行うクラスは、バインドパラメータや置換文字列の設定を行うためのAPI(SqlFluent)を実装しています。\n\nバインドパラメータや置換文字列の設定はこのAPIを利用して設定を行ってください。\n流れるAPI(Fluent API)を採用しているため、値の設定は連続して行うことができるようになっています。\n\nパラメータ設定例\n\nMap department = agent.query("department/select_department")\n .param("dept_no", 1)\n .param("dept_name", "sales")\n .first();\n\n\n1\n2\n3\n4\n主なメソッド 説明 \n SqlFluent#param(String key, V value) バインドパラメータや置換文字列として使用するキーと値のセットを設定する \n SqlFluent#param(String key, Supplier supplier) supplierの評価結果をキーの値としてパラメータに設定する \n SqlFluent#paramList(String key, V... value) IN句のバインドパラメータに使用するキーと値のセットを設定する。 \n から非推奨。かわりにparam()にArrays.asList()もしくはList.of()を使ってList型に詰めて設定してください \nSqlFluent#paramMap(Map paramMap) 引数のMapのKey/Valueのセットをパラメータに設定する \n SqlFluent#paramBean(V bean) 引数として渡されたbeanのフィールド名と値のセットをパラメータに設定する \n\n他にもパラメータの型に応じたパラメータ設定メソッドが提供されています。',normalizedContent:'# 事前準備\nuroborosqlを利用した基本的なdb操作を説明します。\n\n# db接続\nまず最初にsqlを実行するdbへの接続を行います。\ndbに接続するためにはsqlconfigインタフェースのインスタンスを生成する必要があります。\n\nsqlconfigインスタンスはuroborosqlクラスのビルダーメソッドを使用して生成します。\n\n// jdbc接続を行うsqlconfigの生成\n// sqlconfig config = uroborosql.builder(url, user, password).build();\nsqlconfig config = uroborosql.builder("jdbc:h2:mem:uroborosql", "sa", "").build();\n\n// datasourceを使用したdb接続を行うsqlconfigの生成\n// sqlconfig config = uroborosql.builder(datasource).build();\ncontext context = new initialcontext();\ndatasource datasource = context.lookup("java:comp/env/jdbc/datasource");\nsqlconfig config = uroborosql.builder(datasource).build();\n\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\nuroborosqlクラスを使ってsqlconfigインスタンスを生成する際、uroborosqlの挙動を変更する各種の設定も合わせて行うことができます。\n設定の詳細については設定を参照してください。\n\nwarning\n\nsqlconfigインスタンスはアプリケーション内で接続先毎に1つ保持するようにしてください。 sql実行の都度生成すると、不要なインスタンスの生成やsqlロード処理が実行されます。\n\n# sqlagentインスタンスの取得\n次にすべての操作の基点となるsqlagentインタフェースのインスタンスを取得します。\n\ntry (sqlagent agent = config.agent()) {\n // この中でsqlの操作を行う\n}\n\n\n1\n2\n3\nsqlの操作はすべてこのsqlagentインスタンスを使って行うことになります。\n\ntip\n\nsqlagentインタフェースはjava.lang.autoclosableインタフェースを実装しており、try-with-resourcesで記述することで終了時に自動的にclose処理が呼び出され、中で保持しているconnectionやpreparedstatementなどのリソースオブジェクトも正しくクローズされます。\n\n# sqlファイルの配置\nuroborosqlではsql文の書かれたファイルのパスを指定してsqlを実行することができます。\nその際、sqlファイルはクラスパスから参照できる場所に配置されている必要があります。\n\nsrc\n └─main\n └─resources\n └─sql\n ├─department\n │ ├─insert_department.sql\n │ └─select_department.sql\n └─employee\n ├─insert_employee.sql\n └─select_employee.sql\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n上のようなフォルダ構成の場合で、src/main/resources/をクラスパスに指定すれば、 その下のsqlフォルダをルートフォルダとした相対パスでsqlファイルを指定することができます。\n\ntip\n\nsqlファイルのルートフォルダ(初期値:sql)は変更することができます。\n変更方法の詳細は sqlファイルルートフォルダの設定 を参照してください。\n\n# sql名\nsqlファイルの指定する際のファイルパスをsql名といいます。\n上記フォルダ構成の場合、それぞれのsqlファイルは以下のようなsql名となります。\n\nsqlファイルパス(sqlルートフォルダから) sql名 \ndepartment/insert_department.sql department/insert_department \ndepartment/select_department.sql department/select_department \nemployee/insert_employee.sql employee/insert_employee \nemployee/select_employee.sql employee/select_employee \n\nsqlファイルの配置は設定によりカスタマイズが可能です。sqlファイル配置のカスタマイズについては sqlファイルの解決ルール を参照してください。\n\n# 共通api\n検索(sqlquery)、更新(sqlupdate)、バッチ更新(sqlbatch)、ストアドプロシージャ実行(procedure)を行うクラスは、バインドパラメータや置換文字列の設定を行うためのapi(sqlfluent)を実装しています。\n\nバインドパラメータや置換文字列の設定はこのapiを利用して設定を行ってください。\n流れるapi(fluent api)を採用しているため、値の設定は連続して行うことができるようになっています。\n\nパラメータ設定例\n\nmap department = agent.query("department/select_department")\n .param("dept_no", 1)\n .param("dept_name", "sales")\n .first();\n\n\n1\n2\n3\n4\n主なメソッド 説明 \n sqlfluent#param(string key, v value) バインドパラメータや置換文字列として使用するキーと値のセットを設定する \n sqlfluent#param(string key, supplier supplier) supplierの評価結果をキーの値としてパラメータに設定する \n sqlfluent#paramlist(string key, v... value) in句のバインドパラメータに使用するキーと値のセットを設定する。 \n から非推奨。かわりにparam()にarrays.aslist()もしくはlist.of()を使ってlist型に詰めて設定してください \nsqlfluent#parammap(map parammap) 引数のmapのkey/valueのセットをパラメータに設定する \n sqlfluent#parambean(v bean) 引数として渡されたbeanのフィールド名と値のセットをパラメータに設定する \n\n他にもパラメータの型に応じたパラメータ設定メソッドが提供されています。',charsets:{cjk:!0}},{title:"SQLファイルインタフェース",frontmatter:{meta:[{name:"og:title",content:"SQLファイルインタフェース"},{name:"og:url",content:"/uroborosql-doc/basics/sql-file-api.html"}]},regularPath:"/basics/sql-file-api.html",relativePath:"basics/sql-file-api.md",key:"v-666209f7",path:"/basics/sql-file-api.html",headers:[{level:2,title:"SQLによる検索(SqlAgent#query /#queryWith)",slug:"sqlによる検索-sqlagent-query-querywith",normalizedTitle:"sqlによる検索(sqlagent#query /#querywith)",charIndex:19},{level:3,title:"検索結果の取得",slug:"検索結果の取得",normalizedTitle:"検索結果の取得",charIndex:465},{level:3,title:"リスト取得(SqlQuery#collect)",slug:"リスト取得-sqlquery-collect",normalizedTitle:"リスト取得(sqlquery#collect)",charIndex:904},{level:3,title:"先頭取得(SqlQuery#first)",slug:"先頭取得-sqlquery-first",normalizedTitle:"先頭取得(sqlquery#first)",charIndex:3005},{level:3,title:"先頭取得(SqlQuery#findFirst)",slug:"先頭取得-sqlquery-findfirst",normalizedTitle:"先頭取得(sqlquery#findfirst)",charIndex:4359},{level:3,title:"先頭1件取得(SqlQuery#one)",slug:"先頭1件取得-sqlquery-one",normalizedTitle:"先頭1件取得(sqlquery#one)",charIndex:5541},{level:3,title:"先頭1件取得(SqlQuery#findOne)",slug:"先頭1件取得-sqlquery-findone",normalizedTitle:"先頭1件取得(sqlquery#findone)",charIndex:7079},{level:3,title:"Stream取得(SqlQuery#stream)",slug:"stream取得-sqlquery-stream",normalizedTitle:"stream取得(sqlquery#stream)",charIndex:8526},{level:3,title:"ResultSet取得(SqlQuery#resultSet)",slug:"resultset取得-sqlquery-resultset",normalizedTitle:"resultset取得(sqlquery#resultset)",charIndex:11533},{level:2,title:"SQLによる更新(SqlAgent#update /#updateWith)",slug:"sqlによる更新-sqlagent-update-updatewith",normalizedTitle:"sqlによる更新(sqlagent#update /#updatewith)",charIndex:12292},{level:3,title:"更新の実行(SqlUpdate#count)",slug:"更新の実行-sqlupdate-count",normalizedTitle:"更新の実行(sqlupdate#count)",charIndex:13171},{level:2,title:"SQLによるバッチ更新(SqlBatch#batch /#batchWith)",slug:"sqlによるバッチ更新-sqlbatch-batch-batchwith",normalizedTitle:"sqlによるバッチ更新(sqlbatch#batch /#batchwith)",charIndex:13725},{level:3,title:"バッチ更新の実行(SqlBatch#count)",slug:"バッチ更新の実行-sqlbatch-count",normalizedTitle:"バッチ更新の実行(sqlbatch#count)",charIndex:14620},{level:3,title:"バッチSQL実行動作のカスタマイズ",slug:"バッチsql実行動作のカスタマイズ",normalizedTitle:"バッチsql実行動作のカスタマイズ",charIndex:16256},{level:2,title:"ストアドプロシージャの実行(SqlAgent#proc /#procWith)",slug:"ストアドプロシージャの実行-sqlagent-proc-procwith",normalizedTitle:"ストアドプロシージャの実行(sqlagent#proc /#procwith)",charIndex:17484},{level:3,title:"Procedureインタフェース",slug:"procedureインタフェース",normalizedTitle:"procedureインタフェース",charIndex:17772}],lastUpdated:"2020-3-8 21:44:34",headersStr:"SQLによる検索(SqlAgent#query /#queryWith) 検索結果の取得 リスト取得(SqlQuery#collect) 先頭取得(SqlQuery#first) 先頭取得(SqlQuery#findFirst) 先頭1件取得(SqlQuery#one) 先頭1件取得(SqlQuery#findOne) Stream取得(SqlQuery#stream) ResultSet取得(SqlQuery#resultSet) SQLによる更新(SqlAgent#update /#updateWith) 更新の実行(SqlUpdate#count) SQLによるバッチ更新(SqlBatch#batch /#batchWith) バッチ更新の実行(SqlBatch#count) バッチSQL実行動作のカスタマイズ ストアドプロシージャの実行(SqlAgent#proc /#procWith) Procedureインタフェース",content:'# SQLファイルインタフェース\n# SQLによる検索(SqlAgent#query /#queryWith)\nSQLを検索する方法は2つあります。\n\n利用メソッド 説明 \nSqlAgent#query("[SQL名]") SQL名で説明したSQL名を指定 \nSqlAgent#queryWith("[SQL文字列]") SQL文字列を直接指定 \n\n上記2つのメソッドは検索を行うためのSqlQueryインタフェースのインスタンスを返却します。\n\n// SQL名を指定\nSqlQuery query1 = agent.query("employee/select_employee");\n\n// SQL文字列を指定\nSqlQuery query2 = agent.queryWith("select first_name, last_name where employee");\n\n\n1\n2\n3\n4\n5\n# 検索結果の取得\nSqlAgentから取得したSQLQueryを使用していろいろな形式で検索結果を取得することが出来ます。\n下記のSQLを例に説明します。\n\n-- department/select_department.sql\nselect /* _SQL_ID_ */\n dept.dept_no as dept_no\n, dept.dept_name as dept_name\nfrom\n department dept\nwhere\n 1 = 1\n/*IF SF.isNotEmpty(dept_no)*/\nand dept.dept_no = /*dept_no*/1\n/*END*/\n/*IF SF.isNotEmpty(dept_name)*/\nand dept.dept_name = /*dept_name*/\'sample\'\n/*END*/\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n# リスト取得(SqlQuery#collect)\nメソッド名 戻り値の型 \nSqlQuery#collect() List> \nSqlQuery#collect(CaseFormat) List> \nSqlQuery#collect(Class) List> \n\n検索結果をMapやエンティティクラスのListとして取得します。\nMapにはキー:カラムラベル名、値:カラムの値の形で1行分のデータが格納されます。\n\nWARNING\n\nSqlQuery#collect()では検索結果をすべてメモリ上に格納します。大量データの検索を行う場合は後述のSqlQuery#strem()の利用を検討してください。\n\n引数なし\n\ntry (SqlAgent agent = config.agent()) {\n List> departments =\n agent.query("department/select_department").collect();\n}\n// 結果(departments)\n[\n {"DEPT_NO"=1, "DEPT_NAME"="sales"},\n {"DEPT_NO"=2, "DEPT_NAME"="export"},\n {"DEPT_NO"=3, "DEPT_NAME"="accounting"},\n {"DEPT_NO"=4, "DEPT_NAME"="personnel"}\n]\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n引数にjp.co.future.uroborosql.utils.CaseFormatを指定することで、Mapのキー名に対する書式を変更することができます。\n\nCaseFormat.CAMEL_CASE指定\n\ntry (SqlAgent agent = config.agent()) {\n List> departments =\n agent.query("department/select_department").collect(CaseFormat.CAMEL_CASE);\n}\n// 結果(departments) のキーが"deptNo", "deptName"となる\n[\n {"deptNo"=1, "deptName"="sales"},\n {"deptNo"=2, "deptName"="export"},\n {"deptNo"=3, "deptName"="accounting"},\n {"deptNo"=4, "deptName"="personnel"}\n]\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\nCaseFormatの指定がない場合はデフォルトのCaseFormat(初期設定ではUPPER_SNAKE_CASE)で加工した値になります。\nデフォルトのCaseFormatはSqlConfig生成時に変更することができます。 デフォルトCaseFormatの設定の詳細は CaseFormatの初期値設定 を参照してください\n\n引数にエンティティクラスを指定すると、検索結果をMapの代わりにエンティティクラスのインスタンスのListで取得することができます。\n\nエンティティクラス\n\n/**\n * Entity that can be mapped to department table\n */\npublic class Department {\n private long deptNo;\n private String deptName;\n\n public long getDeptNo() { return this.deptNo; }\n public void setDeptNo(long deptNo) { this.deptNo = deptNo; }\n public String getDeptName() { return this.deptName; }\n public void setDeptName(String deptName) { this.deptName = deptName; }\n}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\ntry (SqlAgent agent = config.agent()) {\n List departments =\n agent.query("department/select_department").collect(Department.class);\n}\n\n\n1\n2\n3\n4\n# 先頭取得(SqlQuery#first)\nメソッド名 戻り値の型 \nSqlQuery#first() Map \nSqlQuery#first(CaseFormat) Map \nSqlQuery#first(Class) T \n\n検索結果の1件目を取得します。\n結果を取得できない(検索結果が0件)場合、jp.co.future.uroborosql.exception.DataNotFoundExceptionをスローします。\n\nTIP\n\nメモリ上には最大1件分のデータしか格納しないため、検索結果が大量になる場合でもメモリ使用量を気にせず呼び出すことができます。\n\n引数なし\n\ntry (SqlAgent agent = config.agent()) {\n Map department =\n agent.query("department/select_department").first();\n} catch (DataNotFoundException ex) {\n ex.printStackTrace();\n}\n\n// 結果(department)\n {"DEPT_NO"=1, "DEPT_NAME"="sales"}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n引数にjp.co.future.uroborosql.utils.CaseFormatを指定することで、Mapのキー名に対する書式を変更することができます。\n\nCaseFormat.CAMEL_CASE指定\n\ntry (SqlAgent agent = config.agent()) {\n Map department =\n agent.query("department/select_department").first(CaseFormat.CAMEL_CASE);\n} catch (DataNotFoundException ex) {\n ex.printStackTrace();\n}\n// 結果(department)\n {"deptNo"=1, "deptName"="sales"}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n引数にエンティティクラスを指定すると、検索結果をエンティティクラスのインスタンスの形で取得することができます。\n\nエンティティクラス\n\ntry (SqlAgent agent = config.agent()) {\n Department department =\n agent.query("department/select_department").first(Department.class);\n} catch (DataNotFoundException ex) {\n ex.printStackTrace();\n}\n\n\n1\n2\n3\n4\n5\n6\n# 先頭取得(SqlQuery#findFirst)\nメソッド名 戻り値の型 \nSqlQuery#findFirst() Optional> \nSqlQuery#findFirst(CaseFormat) Optional> \nSqlQuery#findFirst(Class) Optional \n\n検索結果の1件目をOptionalの形式で取得します。\nメモリ上には最大1件分のデータしか格納しないため、検索結果が大量になる場合でもメモリ使用量を気にせず呼び出すことができます。\n\n引数なし\n\ntry (SqlAgent agent = config.agent()) {\n Optional> department =\n agent.query("department/select_department").findFirst();\n}\n// 結果(department)\n {"DEPT_NO"=1, "DEPT_NAME"="sales"}\n\n\n1\n2\n3\n4\n5\n6\n引数にjp.co.future.uroborosql.utils.CaseFormatを指定することで、Mapのキー名に対する書式を変更することができます。\n\nCaseFormat.CAMEL_CASE指定\n\ntry (SqlAgent agent = config.agent()) {\n Optional> department =\n agent.query("department/select_department").findFirst(CaseFormat.CAMEL_CASE);\n}\n// 結果(department)\n {"deptNo"=1, "deptName"="sales"}\n\n\n1\n2\n3\n4\n5\n6\n引数にエンティティクラスを指定すると、検索結果をエンティティクラスのインスタンスの形で取得することができます。\n\nエンティティクラス\n\ntry (SqlAgent agent = config.agent()) {\n Department department =\n agent.query("department/select_department").findFirst(Department.class).orElse(null);\n}\n\n\n1\n2\n3\n4\n# 先頭1件取得(SqlQuery#one)\nメソッド名 戻り値の型 \nSqlQuery#one() Map \nSqlQuery#one(CaseFormat) Map \nSqlQuery#one(Class) T \n\n検索結果の1件目を取得します。find()と違い、実行するSQLで複数件の検索結果を返す場合は例外をスローします。\n結果を取得できない(検索結果が0件)場合、jp.co.future.uroborosql.exception.DataNotFoundExceptionをスローします。\n検索結果が2件以上存在する場合、jp.co.future.uroborosql.exception.DataNotUniqueExceptionをスローします。\n\nTIP\n\nメモリ上には最大1件分のデータしか格納しないため、検索結果が大量になる場合でもメモリ使用量を気にせず呼び出すことができます。\n\n引数なし\n\ntry (SqlAgent agent = config.agent()) {\n Map department =\n agent.query("department/select_department").one();\n} catch (DataNotFoundException | DataNotUniqueException ex) {\n ex.printStackTrace();\n}\n\n// 結果(department)\n {"DEPT_NO"=1, "DEPT_NAME"="sales"}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n引数にjp.co.future.uroborosql.utils.CaseFormatを指定することで、Mapのキー名に対する書式を変更することができます。\n\nCaseFormat.CAMEL_CASE指定\n\ntry (SqlAgent agent = config.agent()) {\n Map department =\n agent.query("department/select_department").one(CaseFormat.CAMEL_CASE);\n} catch (DataNotFoundException | DataNotUniqueException ex) {\n ex.printStackTrace();\n}\n// 結果(department)\n {"deptNo"=1, "deptName"="sales"}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n引数にエンティティクラスを指定すると、検索結果をエンティティクラスのインスタンスの形で取得することができます。\n\nエンティティクラス\n\ntry (SqlAgent agent = config.agent()) {\n Department department =\n agent.query("department/select_department").one(Department.class);\n} catch (DataNotFoundException | DataNotUniqueException ex) {\n ex.printStackTrace();\n}\n\n\n1\n2\n3\n4\n5\n6\n# 先頭1件取得(SqlQuery#findOne)\nメソッド名 戻り値の型 \nSqlQuery#findOne() Optional> \nSqlQuery#findOne(CaseFormat) Optional> \nSqlQuery#findOne(Class) Optional \n\n検索結果の1件目をOptionalの形式で取得します。\n検索結果が2件以上存在する場合、jp.co.future.uroborosql.exception.DataNotUniqueExceptionをスローします。\nメモリ上には最大1件分のデータしか格納しないため、検索結果が大量になる場合でもメモリ使用量を気にせず呼び出すことができます。\n\n引数なし\n\ntry (SqlAgent agent = config.agent()) {\n Optional> department =\n agent.query("department/select_department").findOne();\n} catch (DataNotUniqueException ex) {\n ex.printStackTrace();\n}\n// 結果(department)\n {"DEPT_NO"=1, "DEPT_NAME"="sales"}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n引数にjp.co.future.uroborosql.utils.CaseFormatを指定することで、Mapのキー名に対する書式を変更することができます。\n\nCaseFormat.CAMEL_CASE指定\n\ntry (SqlAgent agent = config.agent()) {\n Optional> department =\n agent.query("department/select_department").findOne(CaseFormat.CAMEL_CASE);\n} catch (DataNotUniqueException ex) {\n ex.printStackTrace();\n}\n// 結果(department)\n {"deptNo"=1, "deptName"="sales"}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n引数にエンティティクラスを指定すると、検索結果をエンティティクラスのインスタンスの形で取得することができます。\n\nエンティティクラス\n\ntry (SqlAgent agent = config.agent()) {\n Department department =\n agent.query("department/select_department").findOne(Department.class).orElse(null);\n} catch (DataNotUniqueException ex) {\n ex.printStackTrace();\n}\n\n\n1\n2\n3\n4\n5\n6\n# Stream取得(SqlQuery#stream)\nメソッド名 戻り値の型 \nSqlQuery#stream() Stream> \nSqlQuery#stream(CaseFormat) Stream> \nSqlQuery#stream(Class) Stream \nSqlQuery#stream(ResultSetConverter) Stream \n\n検索結果をjava.util.stream.Streamの形式で取得します。\nStreamによる順次読み込みと終端操作までの遅延処理により、メモリ効率の良い操作が可能になります。\n\n引数なし\n\ntry (SqlAgent agent = config.agent()) {\n agent.query("department/select_department").stream()\n .forEach(System.out::println);\n}\n// 結果\n{"DEPT_NO"=1, "DEPT_NAME"="sales"}\n{"DEPT_NO"=2, "DEPT_NAME"="export"}\n{"DEPT_NO"=3, "DEPT_NAME"="accounting"}\n{"DEPT_NO"=4, "DEPT_NAME"="personnel"}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n引数にjp.co.future.uroborosql.utils.CaseFormatを指定することで、Mapのキー名に対する書式を変更することができます。\n\nCaseFormat.PASCAL_CASE指定\n\ntry (SqlAgent agent = config.agent()) {\n agent.query("department/select_department").stream(CaseFormat.PASCAL_CASE)\n .forEach(System.out::println);\n}\n// 結果\n{"DeptNo"=1, "DeptName"="sales"}\n{"DeptNo"=2, "DeptName"="export"}\n{"DeptNo"=3, "DeptName"="accounting"}\n{"DeptNo"=4, "DeptName"="personnel"}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n引数にエンティティクラスを指定すると、検索結果をエンティティクラスのインスタンスの形で取得することができます。\n\nエンティティクラス\n\ntry (SqlAgent agent = config.agent()) {\n agent.query("department/select_department").stream(Department.class)\n .forEach(System.out::println);\n}\n\n\n1\n2\n3\n4\njp.co.future.uroborosql.converter.ResultSetConverterインタフェースを実装したクラスを引数に渡すことで、検索結果により複雑な加工を行うことができます。\nResultSetConverterはFunctionInterfaceとして提供されているので、lambda式による記述も可能です。\n\nResultSetConverter指定(lambda式)\n\ntry (SqlAgent agent = config.agent()) {\n // ResultSetConverterはlambda式で指定可能\n agent.query("department/select_department").stream(rs -> {\n Map row = new HashMap<>();\n row.put("deptNo", rs.getObject("DEPT_NO"));\n row.put("deptName", rs.getObject("DEPT_NAME"));\n return row;\n }).forEach(System.out::println);\n}\n// 結果\n{"deptNo"=1, "deptName"="sales"}\n{"deptNo"=2, "deptName"="export"}\n{"deptNo"=3, "deptName"="accounting"}\n{"deptNo"=4, "deptName"="personnel"}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n注意\n\n戻り値として取得されるStreamインスタンスは内部にResultSetリソースを保持しています。このResultSetはデータを最後まで読み込むかStream#close()が呼ばれたタイミングでリソースのクローズを行います。(Stream生成時、Stream#onClose()にResultSetリソースのcloseHandlerを登録します)\nそのため、取得したStreamで全データを扱う終端処理(collectなど)を行うか、try-with-resourcesの利用やStream#close()の明示的な呼び出しによるStreamのクローズを行わないとResultSetリソースがクローズされずカーソルのリークが発生します。\n\n注意\n\n取得したStreamのクローズより先にSqlAgentインスタンスがクローズ、または破棄された場合、Streamの内部に保持しているResultSetリソースもクローズされてしまい不正な動作となります。StreamインスタンスとそのStreamを生成したSqlAgentインスタンスの生存期間を合わせる、もしくはSqlAgentインスタンスの生存期間を長くしてください。\n\nStreamのクローズ\n\ntry (SqlAgent agent = config.agent()) {\n try (Stream> stream = agent.query("department/select_department").stream()) {\n // Stream#findFirst() はStream内のResultSetリソースをクローズしないので、try-with-resourcesでStreamをクローズする\n stream.findFirst().ifPresent(System.out::println);\n }\n}\n\n\n1\n2\n3\n4\n5\n6\n# ResultSet取得(SqlQuery#resultSet)\nメソッド名 戻り値の型 \nSqlQuery#resultSet() ResulitSet \n\n検索結果をjava.sql.ResultSetの形式で取得します。\n\n注意\n\nResultSetリソースのクローズは各自で行う必要があります。\n\n注意\n\nResultSetリソースのクローズより先にSqlAgentインスタンスがクローズ、または破棄された場合、ResultSetリソースもクローズされてしまい不正な動作となります。ResultSetリソースとそのResultSetを生成したSqlAgentインスタンスの生存期間を合わせる、もしくはSqlAgentインスタンスの生存期間を長くしてください。\n\nこのAPIは他のフレームワークとの連携など、ResultSetリソースの取得が必要なケースを想定して提供しています。\n\nWARNING\n\nResultSetリソースの取得が必要でなければ、ResultSetリソースのクローズが管理されている他のAPIの利用を検討してください。\n\ntry (SqlAgent agent = config.agent()) {\n try (ResultSet rs = agent.query("department/select_department").resultSet()) {\n // try-with-resourcesでResultSetをクローズする\n while (rs.next()) {\n // ResultSetからの値取得\n ・・・\n }\n }\n}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n# SQLによる更新(SqlAgent#update /#updateWith)\nDB更新処理(登録/変更/削除)やDDLの実行も検索処理と同様SQL名を指定する場合とSQL文字列を指定する2つのAPIが提供されています。\n\n利用メソッド 説明 \nSqlAgent#update("[SQL名]") SQL名で説明したSQL名を指定 \nSqlAgent#updateWith("[SQL文字列]") SQL文字列を直接指定 \n\n上記2つのメソッドは更新を行うためのSqlUpdateインタフェースのインスタンスを返却します。\n\n// 1件挿入(SQL名指定)\nint count = agent.update("department/insert_department")\n .param("dept_no", 1)\n .param("dept_name", "Sales")\n .count();\n\n// 更新(SQL文字列指定)\nint count = agent.updateWith("update employee set first_name = /*first_name*/ where emp_no = /*emp_no*/")\n .param("emp_no", 1)\n .param("first_name", "Bob")\n .count();\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\ndepartment/insert_department.sql\n\ninsert /* _SQL_ID_ */\ninto\n department\n(\n dept_name\n, lock_version\n) values (\n /*dept_name*/\'sample\'\n, 0\n)\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\nSqlUpdateインタフェースの主なAPIは以下になります。\n\n# 更新の実行(SqlUpdate#count)\nメソッド名 戻り値の型 \nSqlUpdate#count() int \n\n更新処理を行い、登録、更新、削除を行った行数を返します。\n\ntry (SqlAgent agent = config.agent()) {\n // insert\n agent.update("department/insert_department")\n .param("dept_no", 1)\n .param("dept_name", "sales")\n .count();\n // update\n agent.update("department/update_department")\n .param("dept_no", 1)\n .param("dept_name", "HR")\n .count();\n // delete\n agent.update("department/delete_department")\n .param("dept_no", 1)\n .count();\n}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n# SQLによるバッチ更新(SqlBatch#batch /#batchWith)\n大量のデータを一括で更新する場合、通常の更新ではSQLが都度実行されるため処理速度が遅く問題になる場合があります。\nこういったケースに対応するため、uroboroSQLではバッチ更新用のAPIを提供しています。\n\nバッチ更新処理も他と同様SQL名を指定する場合とSQL文字列を直接記述する2つのAPIが提供されています。\n\n利用メソッド 説明 \nSqlAgent#batch("[SQL名]") SQL名で説明したSQL名を指定 \nSqlAgent#batchWith("[SQL文字列]") SQL文字列を直接指定 \n\n上記2つのメソッドはバッチ更新を行うためのSqlBatchインタフェースのインスタンスを返却します。\n\nSqlBatchインタフェースでは、SqlFluentインタフェースによるバインドパラメータの設定とは別にjava.util.stream.Streamを用いたバッチパラメータの設定を行うAPIが提供されています。\n\nメソッド 説明 \nSqlBatch#paramStream(Stream>) バインドパラメータや置換文字列として使用するキーと値のセットをjava.util.stream.Streamで設定する。 \nSqlBatch#paramStream(Stream) バインドパラメータや置換文字列として使用するエンティティクラスインスタンスをjava.util.stream.Streamで設定する。 \n\n# バッチ更新の実行(SqlBatch#count)\nメソッド名 戻り値の型 \nSqlBatch#count() int \n\nバッチ更新処理を行い、登録、更新、削除を行った行数を返します。\n\nバッチ更新\n\n// バッチ処理の実行\nint count = agent.batch("department/insert_department")\n // 指定したファイルからMapのStreamを生成し、バッチ処理のパラメータとして指定する\n .paramStream(getDataByFile(Paths.get("data/department.tsv")))\n .count();\n\n・・・\n\nprivate Stream> getDataByFile(final Path filePath) {\n try {\n final List lines = Files.readAllLines(filePath);\n final String[] header = lines.get(0).split("\\\\t");\n return lines.stream()\n .skip(1)\n .map(s -> s.split("\\\\t"))\n .map(data -> IntStream.range(0, header.length)\n .> collect(HashMap::new, (row, i) -> row.put(header[i], data[i]),\n Map::putAll));\n } catch (IOException e) {\n e.printStackTrace();\n throw new UncheckedIOException(e);\n }\n}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\ndata/department.tsv の内容\n\ndept_no dept_name\n1 sales\n2 export\n3 accounting\n4 personnel\n\n\n1\n2\n3\n4\n5\nparamStream()メソッドにSqlQuery#stream()の結果を指定することで疑似的にSELECT-INSERT / SELECT-UPDATE / SELECT-DELETEを行うことができます。\nStream APIを利用することで検索結果の件数が多い場合でも、少ないメモリ使用量でバッチ処理を行うことができます。\n\nSELECT-UPDATE\n\nint updateCount = agent.batch("department/update_department")\n .paramStream(agent.query("department/select_department")\n .stream(CaseFormat.LOWER_SNAKE_CASE).map(e -> {\n Map ans = new HashMap<>(e);\n ans.replaceAll((k, v) -> v != null ? v.toString() + "_after" : "after"); // 取得した検索結果の各行の値に "_after" を付与する\n return ans;\n }))\n .count();\n\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n# バッチSQL実行動作のカスタマイズ\nSqlBatchインタフェースにはバッチSQL実行時の動作を変更するためのAPIが提供されています。\n\nメソッド 説明 デフォルト値 \nby(BiPredicate>) バッチSQLの実行条件を指定します。BiPredicateの結果がtrueの場合にバッチSQLを実行します。 1000件毎 \nbatchWhen(BiConsumer) バッチSQLの実行タイミングで行う操作を指定します。 何もしない \nerrorWhen(TriConsumer) バッチSQLの実行時に例外が発生した時の動作を指定します。 UroborosqlRuntimeExceptionをスローする \n\nこれらのAPIを利用することでより柔軟なSQL実行が可能になります。\n\nバッチSQL実行時動作のカスタマイズ例\n\nList> inputData = new ArrayList<>();\n// 中略 入力データ作成\n\ntry (SqlAgent agent = config.agent()) {\n agent.batch("department/insert_department")\n .paramStream(inputData.stream())\n .by((ctx, row) -> ctx.batchCount() == 10) // 10件毎にSQL実行\n .batchWhen((agent, ctx) -> agent.commit()) // SQL実行が成功したらコミットする\n .errorWhen((agent, ctx, ex) -> {\n log.error("error occured. ex:{}", ex.getMessage());\n }) // 例外が発生したらログ出力する\n .count();\n}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n# ストアドプロシージャの実行(SqlAgent#proc /#procWith)\nuroboroSQLでは、SQLの検索/更新のほかDBが提供するストアドプロシージャの呼び出し用APIも提供しています。\n\n利用メソッド 説明 \nSqlAgent#proc("[SQL名]") SQL名で説明したSQL名を指定 \nSqlAgent#procWith("[SQL文字列]") SQL文字列を直接指定 \n\n上記2つのメソッドはストアドプロシージャの呼出を行うためのProcedureインタフェースのインスタンスを返却します。\n\n# Procedureインタフェース\nメソッド名 戻り値の型 \nProcedure#call() Map \n\nProcedureインタフェースでは、ストアドプロシージャからの戻り値を取得するためのAPIが提供されています。\n\nメソッド 説明 \nProcedureFluent#outParam(String, int) ストアドプロシージャからの戻り値として受け取るパラメータを指定します \n 実行したストアドプロシージャ内で指定したキーに設定された値が、戻り値のMapに格納されて取得できます。第2引数で受け取る値の型をint型で指定します \nProcedureFluent#outParam(String, SQLType) ストアドプロシージャからの戻り値として受け取るパラメータを指定します \n 実行したストアドプロシージャ内で指定したキーに設定された値が、戻り値のMapに格納されて取得できます。第2引数で受け取る値の型をSQLType型で指定します \nProcedureFluent#inOutParam(String, int) ストアドプロシージャに渡し、かつ、戻り値として受け取るパラメータを指定します \n 実行したストアドプロシージャ内で指定したキーに設定された値が、戻り値のMapに格納されて取得できます。第2引数で受け取る値の型をint型で指定します \nProcedureFluent#inOutParam(String, SQLType) ストアドプロシージャに渡し、かつ、戻り値として受け取るパラメータを指定します \n 実行したストアドプロシージャ内で指定したキーに設定された値が、戻り値のMapに格納されて取得できます。第2引数で受け取る値の型をSQLType型で指定します \nProcedureFluent#inOutParamIfAbsent(String, int) ストアドプロシージャに渡し、かつ、戻り値として受け取るパラメータを指定します \n 指定したパラメータ名のパラメータが事前に登録されていない場合に値を追加します \n 実行したストアドプロシージャ内で指定したキーに設定された値が、戻り値のMapに格納されて取得できます。第2引数で受け取る値の型をint型で指定します \nProcedureFluent#inOutParamIfAbsent(String, SQLType) ストアドプロシージャに渡し、かつ、戻り値として受け取るパラメータを指定します \n 指定したパラメータ名のパラメータが事前に登録されていない場合に値を追加します \n 実行したストアドプロシージャ内で指定したキーに設定された値が、戻り値のMapに格納されて取得できます。第2引数で受け取る値の型をSQLType型で指定します \n\n// Procedureインタフェースのインスタンスを取得\nMap result = agent.procWith("{call product_id_exist_check(/*product_id*/, /*check_out*/)}")\n .param("product_id", 0)\n .outParam("check_out", java.sql.JDBCType.NUMERIC)\n .call();\n// outParamメソッドで指定したパラメータの値(戻り値)を取得\nBigDecimal checkOut = (BigDecimal)result.get("check_out");\n\n\n1\n2\n3\n4\n5\n6\n7',normalizedContent:'# sqlファイルインタフェース\n# sqlによる検索(sqlagent#query /#querywith)\nsqlを検索する方法は2つあります。\n\n利用メソッド 説明 \nsqlagent#query("[sql名]") sql名で説明したsql名を指定 \nsqlagent#querywith("[sql文字列]") sql文字列を直接指定 \n\n上記2つのメソッドは検索を行うためのsqlqueryインタフェースのインスタンスを返却します。\n\n// sql名を指定\nsqlquery query1 = agent.query("employee/select_employee");\n\n// sql文字列を指定\nsqlquery query2 = agent.querywith("select first_name, last_name where employee");\n\n\n1\n2\n3\n4\n5\n# 検索結果の取得\nsqlagentから取得したsqlqueryを使用していろいろな形式で検索結果を取得することが出来ます。\n下記のsqlを例に説明します。\n\n-- department/select_department.sql\nselect /* _sql_id_ */\n dept.dept_no as dept_no\n, dept.dept_name as dept_name\nfrom\n department dept\nwhere\n 1 = 1\n/*if sf.isnotempty(dept_no)*/\nand dept.dept_no = /*dept_no*/1\n/*end*/\n/*if sf.isnotempty(dept_name)*/\nand dept.dept_name = /*dept_name*/\'sample\'\n/*end*/\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n# リスト取得(sqlquery#collect)\nメソッド名 戻り値の型 \nsqlquery#collect() list> \nsqlquery#collect(caseformat) list> \nsqlquery#collect(class) list> \n\n検索結果をmapやエンティティクラスのlistとして取得します。\nmapにはキー:カラムラベル名、値:カラムの値の形で1行分のデータが格納されます。\n\nwarning\n\nsqlquery#collect()では検索結果をすべてメモリ上に格納します。大量データの検索を行う場合は後述のsqlquery#strem()の利用を検討してください。\n\n引数なし\n\ntry (sqlagent agent = config.agent()) {\n list> departments =\n agent.query("department/select_department").collect();\n}\n// 結果(departments)\n[\n {"dept_no"=1, "dept_name"="sales"},\n {"dept_no"=2, "dept_name"="export"},\n {"dept_no"=3, "dept_name"="accounting"},\n {"dept_no"=4, "dept_name"="personnel"}\n]\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n引数にjp.co.future.uroborosql.utils.caseformatを指定することで、mapのキー名に対する書式を変更することができます。\n\ncaseformat.camel_case指定\n\ntry (sqlagent agent = config.agent()) {\n list> departments =\n agent.query("department/select_department").collect(caseformat.camel_case);\n}\n// 結果(departments) のキーが"deptno", "deptname"となる\n[\n {"deptno"=1, "deptname"="sales"},\n {"deptno"=2, "deptname"="export"},\n {"deptno"=3, "deptname"="accounting"},\n {"deptno"=4, "deptname"="personnel"}\n]\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\ncaseformatの指定がない場合はデフォルトのcaseformat(初期設定ではupper_snake_case)で加工した値になります。\nデフォルトのcaseformatはsqlconfig生成時に変更することができます。 デフォルトcaseformatの設定の詳細は caseformatの初期値設定 を参照してください\n\n引数にエンティティクラスを指定すると、検索結果をmapの代わりにエンティティクラスのインスタンスのlistで取得することができます。\n\nエンティティクラス\n\n/**\n * entity that can be mapped to department table\n */\npublic class department {\n private long deptno;\n private string deptname;\n\n public long getdeptno() { return this.deptno; }\n public void setdeptno(long deptno) { this.deptno = deptno; }\n public string getdeptname() { return this.deptname; }\n public void setdeptname(string deptname) { this.deptname = deptname; }\n}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\ntry (sqlagent agent = config.agent()) {\n list departments =\n agent.query("department/select_department").collect(department.class);\n}\n\n\n1\n2\n3\n4\n# 先頭取得(sqlquery#first)\nメソッド名 戻り値の型 \nsqlquery#first() map \nsqlquery#first(caseformat) map \nsqlquery#first(class) t \n\n検索結果の1件目を取得します。\n結果を取得できない(検索結果が0件)場合、jp.co.future.uroborosql.exception.datanotfoundexceptionをスローします。\n\ntip\n\nメモリ上には最大1件分のデータしか格納しないため、検索結果が大量になる場合でもメモリ使用量を気にせず呼び出すことができます。\n\n引数なし\n\ntry (sqlagent agent = config.agent()) {\n map department =\n agent.query("department/select_department").first();\n} catch (datanotfoundexception ex) {\n ex.printstacktrace();\n}\n\n// 結果(department)\n {"dept_no"=1, "dept_name"="sales"}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n引数にjp.co.future.uroborosql.utils.caseformatを指定することで、mapのキー名に対する書式を変更することができます。\n\ncaseformat.camel_case指定\n\ntry (sqlagent agent = config.agent()) {\n map department =\n agent.query("department/select_department").first(caseformat.camel_case);\n} catch (datanotfoundexception ex) {\n ex.printstacktrace();\n}\n// 結果(department)\n {"deptno"=1, "deptname"="sales"}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n引数にエンティティクラスを指定すると、検索結果をエンティティクラスのインスタンスの形で取得することができます。\n\nエンティティクラス\n\ntry (sqlagent agent = config.agent()) {\n department department =\n agent.query("department/select_department").first(department.class);\n} catch (datanotfoundexception ex) {\n ex.printstacktrace();\n}\n\n\n1\n2\n3\n4\n5\n6\n# 先頭取得(sqlquery#findfirst)\nメソッド名 戻り値の型 \nsqlquery#findfirst() optional> \nsqlquery#findfirst(caseformat) optional> \nsqlquery#findfirst(class) optional \n\n検索結果の1件目をoptionalの形式で取得します。\nメモリ上には最大1件分のデータしか格納しないため、検索結果が大量になる場合でもメモリ使用量を気にせず呼び出すことができます。\n\n引数なし\n\ntry (sqlagent agent = config.agent()) {\n optional> department =\n agent.query("department/select_department").findfirst();\n}\n// 結果(department)\n {"dept_no"=1, "dept_name"="sales"}\n\n\n1\n2\n3\n4\n5\n6\n引数にjp.co.future.uroborosql.utils.caseformatを指定することで、mapのキー名に対する書式を変更することができます。\n\ncaseformat.camel_case指定\n\ntry (sqlagent agent = config.agent()) {\n optional> department =\n agent.query("department/select_department").findfirst(caseformat.camel_case);\n}\n// 結果(department)\n {"deptno"=1, "deptname"="sales"}\n\n\n1\n2\n3\n4\n5\n6\n引数にエンティティクラスを指定すると、検索結果をエンティティクラスのインスタンスの形で取得することができます。\n\nエンティティクラス\n\ntry (sqlagent agent = config.agent()) {\n department department =\n agent.query("department/select_department").findfirst(department.class).orelse(null);\n}\n\n\n1\n2\n3\n4\n# 先頭1件取得(sqlquery#one)\nメソッド名 戻り値の型 \nsqlquery#one() map \nsqlquery#one(caseformat) map \nsqlquery#one(class) t \n\n検索結果の1件目を取得します。find()と違い、実行するsqlで複数件の検索結果を返す場合は例外をスローします。\n結果を取得できない(検索結果が0件)場合、jp.co.future.uroborosql.exception.datanotfoundexceptionをスローします。\n検索結果が2件以上存在する場合、jp.co.future.uroborosql.exception.datanotuniqueexceptionをスローします。\n\ntip\n\nメモリ上には最大1件分のデータしか格納しないため、検索結果が大量になる場合でもメモリ使用量を気にせず呼び出すことができます。\n\n引数なし\n\ntry (sqlagent agent = config.agent()) {\n map department =\n agent.query("department/select_department").one();\n} catch (datanotfoundexception | datanotuniqueexception ex) {\n ex.printstacktrace();\n}\n\n// 結果(department)\n {"dept_no"=1, "dept_name"="sales"}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n引数にjp.co.future.uroborosql.utils.caseformatを指定することで、mapのキー名に対する書式を変更することができます。\n\ncaseformat.camel_case指定\n\ntry (sqlagent agent = config.agent()) {\n map department =\n agent.query("department/select_department").one(caseformat.camel_case);\n} catch (datanotfoundexception | datanotuniqueexception ex) {\n ex.printstacktrace();\n}\n// 結果(department)\n {"deptno"=1, "deptname"="sales"}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n引数にエンティティクラスを指定すると、検索結果をエンティティクラスのインスタンスの形で取得することができます。\n\nエンティティクラス\n\ntry (sqlagent agent = config.agent()) {\n department department =\n agent.query("department/select_department").one(department.class);\n} catch (datanotfoundexception | datanotuniqueexception ex) {\n ex.printstacktrace();\n}\n\n\n1\n2\n3\n4\n5\n6\n# 先頭1件取得(sqlquery#findone)\nメソッド名 戻り値の型 \nsqlquery#findone() optional> \nsqlquery#findone(caseformat) optional> \nsqlquery#findone(class) optional \n\n検索結果の1件目をoptionalの形式で取得します。\n検索結果が2件以上存在する場合、jp.co.future.uroborosql.exception.datanotuniqueexceptionをスローします。\nメモリ上には最大1件分のデータしか格納しないため、検索結果が大量になる場合でもメモリ使用量を気にせず呼び出すことができます。\n\n引数なし\n\ntry (sqlagent agent = config.agent()) {\n optional> department =\n agent.query("department/select_department").findone();\n} catch (datanotuniqueexception ex) {\n ex.printstacktrace();\n}\n// 結果(department)\n {"dept_no"=1, "dept_name"="sales"}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n引数にjp.co.future.uroborosql.utils.caseformatを指定することで、mapのキー名に対する書式を変更することができます。\n\ncaseformat.camel_case指定\n\ntry (sqlagent agent = config.agent()) {\n optional> department =\n agent.query("department/select_department").findone(caseformat.camel_case);\n} catch (datanotuniqueexception ex) {\n ex.printstacktrace();\n}\n// 結果(department)\n {"deptno"=1, "deptname"="sales"}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n引数にエンティティクラスを指定すると、検索結果をエンティティクラスのインスタンスの形で取得することができます。\n\nエンティティクラス\n\ntry (sqlagent agent = config.agent()) {\n department department =\n agent.query("department/select_department").findone(department.class).orelse(null);\n} catch (datanotuniqueexception ex) {\n ex.printstacktrace();\n}\n\n\n1\n2\n3\n4\n5\n6\n# stream取得(sqlquery#stream)\nメソッド名 戻り値の型 \nsqlquery#stream() stream> \nsqlquery#stream(caseformat) stream> \nsqlquery#stream(class) stream \nsqlquery#stream(resultsetconverter) stream \n\n検索結果をjava.util.stream.streamの形式で取得します。\nstreamによる順次読み込みと終端操作までの遅延処理により、メモリ効率の良い操作が可能になります。\n\n引数なし\n\ntry (sqlagent agent = config.agent()) {\n agent.query("department/select_department").stream()\n .foreach(system.out::println);\n}\n// 結果\n{"dept_no"=1, "dept_name"="sales"}\n{"dept_no"=2, "dept_name"="export"}\n{"dept_no"=3, "dept_name"="accounting"}\n{"dept_no"=4, "dept_name"="personnel"}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n引数にjp.co.future.uroborosql.utils.caseformatを指定することで、mapのキー名に対する書式を変更することができます。\n\ncaseformat.pascal_case指定\n\ntry (sqlagent agent = config.agent()) {\n agent.query("department/select_department").stream(caseformat.pascal_case)\n .foreach(system.out::println);\n}\n// 結果\n{"deptno"=1, "deptname"="sales"}\n{"deptno"=2, "deptname"="export"}\n{"deptno"=3, "deptname"="accounting"}\n{"deptno"=4, "deptname"="personnel"}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n引数にエンティティクラスを指定すると、検索結果をエンティティクラスのインスタンスの形で取得することができます。\n\nエンティティクラス\n\ntry (sqlagent agent = config.agent()) {\n agent.query("department/select_department").stream(department.class)\n .foreach(system.out::println);\n}\n\n\n1\n2\n3\n4\njp.co.future.uroborosql.converter.resultsetconverterインタフェースを実装したクラスを引数に渡すことで、検索結果により複雑な加工を行うことができます。\nresultsetconverterはfunctioninterfaceとして提供されているので、lambda式による記述も可能です。\n\nresultsetconverter指定(lambda式)\n\ntry (sqlagent agent = config.agent()) {\n // resultsetconverterはlambda式で指定可能\n agent.query("department/select_department").stream(rs -> {\n map row = new hashmap<>();\n row.put("deptno", rs.getobject("dept_no"));\n row.put("deptname", rs.getobject("dept_name"));\n return row;\n }).foreach(system.out::println);\n}\n// 結果\n{"deptno"=1, "deptname"="sales"}\n{"deptno"=2, "deptname"="export"}\n{"deptno"=3, "deptname"="accounting"}\n{"deptno"=4, "deptname"="personnel"}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n注意\n\n戻り値として取得されるstreamインスタンスは内部にresultsetリソースを保持しています。このresultsetはデータを最後まで読み込むかstream#close()が呼ばれたタイミングでリソースのクローズを行います。(stream生成時、stream#onclose()にresultsetリソースのclosehandlerを登録します)\nそのため、取得したstreamで全データを扱う終端処理(collectなど)を行うか、try-with-resourcesの利用やstream#close()の明示的な呼び出しによるstreamのクローズを行わないとresultsetリソースがクローズされずカーソルのリークが発生します。\n\n注意\n\n取得したstreamのクローズより先にsqlagentインスタンスがクローズ、または破棄された場合、streamの内部に保持しているresultsetリソースもクローズされてしまい不正な動作となります。streamインスタンスとそのstreamを生成したsqlagentインスタンスの生存期間を合わせる、もしくはsqlagentインスタンスの生存期間を長くしてください。\n\nstreamのクローズ\n\ntry (sqlagent agent = config.agent()) {\n try (stream> stream = agent.query("department/select_department").stream()) {\n // stream#findfirst() はstream内のresultsetリソースをクローズしないので、try-with-resourcesでstreamをクローズする\n stream.findfirst().ifpresent(system.out::println);\n }\n}\n\n\n1\n2\n3\n4\n5\n6\n# resultset取得(sqlquery#resultset)\nメソッド名 戻り値の型 \nsqlquery#resultset() resulitset \n\n検索結果をjava.sql.resultsetの形式で取得します。\n\n注意\n\nresultsetリソースのクローズは各自で行う必要があります。\n\n注意\n\nresultsetリソースのクローズより先にsqlagentインスタンスがクローズ、または破棄された場合、resultsetリソースもクローズされてしまい不正な動作となります。resultsetリソースとそのresultsetを生成したsqlagentインスタンスの生存期間を合わせる、もしくはsqlagentインスタンスの生存期間を長くしてください。\n\nこのapiは他のフレームワークとの連携など、resultsetリソースの取得が必要なケースを想定して提供しています。\n\nwarning\n\nresultsetリソースの取得が必要でなければ、resultsetリソースのクローズが管理されている他のapiの利用を検討してください。\n\ntry (sqlagent agent = config.agent()) {\n try (resultset rs = agent.query("department/select_department").resultset()) {\n // try-with-resourcesでresultsetをクローズする\n while (rs.next()) {\n // resultsetからの値取得\n ・・・\n }\n }\n}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n# sqlによる更新(sqlagent#update /#updatewith)\ndb更新処理(登録/変更/削除)やddlの実行も検索処理と同様sql名を指定する場合とsql文字列を指定する2つのapiが提供されています。\n\n利用メソッド 説明 \nsqlagent#update("[sql名]") sql名で説明したsql名を指定 \nsqlagent#updatewith("[sql文字列]") sql文字列を直接指定 \n\n上記2つのメソッドは更新を行うためのsqlupdateインタフェースのインスタンスを返却します。\n\n// 1件挿入(sql名指定)\nint count = agent.update("department/insert_department")\n .param("dept_no", 1)\n .param("dept_name", "sales")\n .count();\n\n// 更新(sql文字列指定)\nint count = agent.updatewith("update employee set first_name = /*first_name*/ where emp_no = /*emp_no*/")\n .param("emp_no", 1)\n .param("first_name", "bob")\n .count();\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\ndepartment/insert_department.sql\n\ninsert /* _sql_id_ */\ninto\n department\n(\n dept_name\n, lock_version\n) values (\n /*dept_name*/\'sample\'\n, 0\n)\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\nsqlupdateインタフェースの主なapiは以下になります。\n\n# 更新の実行(sqlupdate#count)\nメソッド名 戻り値の型 \nsqlupdate#count() int \n\n更新処理を行い、登録、更新、削除を行った行数を返します。\n\ntry (sqlagent agent = config.agent()) {\n // insert\n agent.update("department/insert_department")\n .param("dept_no", 1)\n .param("dept_name", "sales")\n .count();\n // update\n agent.update("department/update_department")\n .param("dept_no", 1)\n .param("dept_name", "hr")\n .count();\n // delete\n agent.update("department/delete_department")\n .param("dept_no", 1)\n .count();\n}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n# sqlによるバッチ更新(sqlbatch#batch /#batchwith)\n大量のデータを一括で更新する場合、通常の更新ではsqlが都度実行されるため処理速度が遅く問題になる場合があります。\nこういったケースに対応するため、uroborosqlではバッチ更新用のapiを提供しています。\n\nバッチ更新処理も他と同様sql名を指定する場合とsql文字列を直接記述する2つのapiが提供されています。\n\n利用メソッド 説明 \nsqlagent#batch("[sql名]") sql名で説明したsql名を指定 \nsqlagent#batchwith("[sql文字列]") sql文字列を直接指定 \n\n上記2つのメソッドはバッチ更新を行うためのsqlbatchインタフェースのインスタンスを返却します。\n\nsqlbatchインタフェースでは、sqlfluentインタフェースによるバインドパラメータの設定とは別にjava.util.stream.streamを用いたバッチパラメータの設定を行うapiが提供されています。\n\nメソッド 説明 \nsqlbatch#paramstream(stream>) バインドパラメータや置換文字列として使用するキーと値のセットをjava.util.stream.streamで設定する。 \nsqlbatch#paramstream(stream) バインドパラメータや置換文字列として使用するエンティティクラスインスタンスをjava.util.stream.streamで設定する。 \n\n# バッチ更新の実行(sqlbatch#count)\nメソッド名 戻り値の型 \nsqlbatch#count() int \n\nバッチ更新処理を行い、登録、更新、削除を行った行数を返します。\n\nバッチ更新\n\n// バッチ処理の実行\nint count = agent.batch("department/insert_department")\n // 指定したファイルからmapのstreamを生成し、バッチ処理のパラメータとして指定する\n .paramstream(getdatabyfile(paths.get("data/department.tsv")))\n .count();\n\n・・・\n\nprivate stream> getdatabyfile(final path filepath) {\n try {\n final list lines = files.readalllines(filepath);\n final string[] header = lines.get(0).split("\\\\t");\n return lines.stream()\n .skip(1)\n .map(s -> s.split("\\\\t"))\n .map(data -> intstream.range(0, header.length)\n .> collect(hashmap::new, (row, i) -> row.put(header[i], data[i]),\n map::putall));\n } catch (ioexception e) {\n e.printstacktrace();\n throw new uncheckedioexception(e);\n }\n}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\ndata/department.tsv の内容\n\ndept_no dept_name\n1 sales\n2 export\n3 accounting\n4 personnel\n\n\n1\n2\n3\n4\n5\nparamstream()メソッドにsqlquery#stream()の結果を指定することで疑似的にselect-insert / select-update / select-deleteを行うことができます。\nstream apiを利用することで検索結果の件数が多い場合でも、少ないメモリ使用量でバッチ処理を行うことができます。\n\nselect-update\n\nint updatecount = agent.batch("department/update_department")\n .paramstream(agent.query("department/select_department")\n .stream(caseformat.lower_snake_case).map(e -> {\n map ans = new hashmap<>(e);\n ans.replaceall((k, v) -> v != null ? v.tostring() + "_after" : "after"); // 取得した検索結果の各行の値に "_after" を付与する\n return ans;\n }))\n .count();\n\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n# バッチsql実行動作のカスタマイズ\nsqlbatchインタフェースにはバッチsql実行時の動作を変更するためのapiが提供されています。\n\nメソッド 説明 デフォルト値 \nby(bipredicate>) バッチsqlの実行条件を指定します。bipredicateの結果がtrueの場合にバッチsqlを実行します。 1000件毎 \nbatchwhen(biconsumer) バッチsqlの実行タイミングで行う操作を指定します。 何もしない \nerrorwhen(triconsumer) バッチsqlの実行時に例外が発生した時の動作を指定します。 uroborosqlruntimeexceptionをスローする \n\nこれらのapiを利用することでより柔軟なsql実行が可能になります。\n\nバッチsql実行時動作のカスタマイズ例\n\nlist> inputdata = new arraylist<>();\n// 中略 入力データ作成\n\ntry (sqlagent agent = config.agent()) {\n agent.batch("department/insert_department")\n .paramstream(inputdata.stream())\n .by((ctx, row) -> ctx.batchcount() == 10) // 10件毎にsql実行\n .batchwhen((agent, ctx) -> agent.commit()) // sql実行が成功したらコミットする\n .errorwhen((agent, ctx, ex) -> {\n log.error("error occured. ex:{}", ex.getmessage());\n }) // 例外が発生したらログ出力する\n .count();\n}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n# ストアドプロシージャの実行(sqlagent#proc /#procwith)\nuroborosqlでは、sqlの検索/更新のほかdbが提供するストアドプロシージャの呼び出し用apiも提供しています。\n\n利用メソッド 説明 \nsqlagent#proc("[sql名]") sql名で説明したsql名を指定 \nsqlagent#procwith("[sql文字列]") sql文字列を直接指定 \n\n上記2つのメソッドはストアドプロシージャの呼出を行うためのprocedureインタフェースのインスタンスを返却します。\n\n# procedureインタフェース\nメソッド名 戻り値の型 \nprocedure#call() map \n\nprocedureインタフェースでは、ストアドプロシージャからの戻り値を取得するためのapiが提供されています。\n\nメソッド 説明 \nprocedurefluent#outparam(string, int) ストアドプロシージャからの戻り値として受け取るパラメータを指定します \n 実行したストアドプロシージャ内で指定したキーに設定された値が、戻り値のmapに格納されて取得できます。第2引数で受け取る値の型をint型で指定します \nprocedurefluent#outparam(string, sqltype) ストアドプロシージャからの戻り値として受け取るパラメータを指定します \n 実行したストアドプロシージャ内で指定したキーに設定された値が、戻り値のmapに格納されて取得できます。第2引数で受け取る値の型をsqltype型で指定します \nprocedurefluent#inoutparam(string, int) ストアドプロシージャに渡し、かつ、戻り値として受け取るパラメータを指定します \n 実行したストアドプロシージャ内で指定したキーに設定された値が、戻り値のmapに格納されて取得できます。第2引数で受け取る値の型をint型で指定します \nprocedurefluent#inoutparam(string, sqltype) ストアドプロシージャに渡し、かつ、戻り値として受け取るパラメータを指定します \n 実行したストアドプロシージャ内で指定したキーに設定された値が、戻り値のmapに格納されて取得できます。第2引数で受け取る値の型をsqltype型で指定します \nprocedurefluent#inoutparamifabsent(string, int) ストアドプロシージャに渡し、かつ、戻り値として受け取るパラメータを指定します \n 指定したパラメータ名のパラメータが事前に登録されていない場合に値を追加します \n 実行したストアドプロシージャ内で指定したキーに設定された値が、戻り値のmapに格納されて取得できます。第2引数で受け取る値の型をint型で指定します \nprocedurefluent#inoutparamifabsent(string, sqltype) ストアドプロシージャに渡し、かつ、戻り値として受け取るパラメータを指定します \n 指定したパラメータ名のパラメータが事前に登録されていない場合に値を追加します \n 実行したストアドプロシージャ内で指定したキーに設定された値が、戻り値のmapに格納されて取得できます。第2引数で受け取る値の型をsqltype型で指定します \n\n// procedureインタフェースのインスタンスを取得\nmap result = agent.procwith("{call product_id_exist_check(/*product_id*/, /*check_out*/)}")\n .param("product_id", 0)\n .outparam("check_out", java.sql.jdbctype.numeric)\n .call();\n// outparamメソッドで指定したパラメータの値(戻り値)を取得\nbigdecimal checkout = (bigdecimal)result.get("check_out");\n\n\n1\n2\n3\n4\n5\n6\n7',charsets:{cjk:!0}},{title:"式言語",frontmatter:{meta:[{name:"og:title",content:"式言語"},{name:"og:url",content:"/uroborosql-doc/background/el.html"}]},regularPath:"/background/el.html",relativePath:"background/el.md",key:"v-39881b92",path:"/background/el.html",headers:[{level:2,title:"OGNL",slug:"ognl",normalizedTitle:"ognl",charIndex:66},{level:3,title:"リテラル(OGNL)",slug:"リテラル-ognl",normalizedTitle:"リテラル(ognl)",charIndex:299},{level:3,title:"演算子(OGNL)",slug:"演算子-ognl",normalizedTitle:"演算子(ognl)",charIndex:511},{level:3,title:"算術演算子(OGNL)",slug:"算術演算子-ognl",normalizedTitle:"算術演算子(ognl)",charIndex:539},{level:3,title:"比較演算子(OGNL)",slug:"比較演算子-ognl",normalizedTitle:"比較演算子(ognl)",charIndex:638},{level:3,title:"論理演算子(OGNL)",slug:"論理演算子-ognl",normalizedTitle:"論理演算子(ognl)",charIndex:1017},{level:3,title:"連結演算子(OGNL)",slug:"連結演算子-ognl",normalizedTitle:"連結演算子(ognl)",charIndex:1110},{level:3,title:"メソッド・フィールドの呼び出し(OGNL)",slug:"メソッド・フィールドの呼び出し-ognl",normalizedTitle:"メソッド・フィールドの呼び出し(ognl)",charIndex:1144},{level:2,title:"Spring Expression Language(SpEL)",slug:"spring-expression-language-spel",normalizedTitle:"spring expression language(spel)",charIndex:74},{level:3,title:"リテラル(SpEL)",slug:"リテラル-spel",normalizedTitle:"リテラル(spel)",charIndex:1376},{level:3,title:"演算子(SpEL)",slug:"演算子-spel",normalizedTitle:"演算子(spel)",charIndex:1485},{level:3,title:"算術演算子(SpEL)",slug:"算術演算子-spel",normalizedTitle:"算術演算子(spel)",charIndex:1513},{level:3,title:"比較演算子(SpEL)",slug:"比較演算子-spel",normalizedTitle:"比較演算子(spel)",charIndex:1634},{level:3,title:"論理演算子(SpEL)",slug:"論理演算子-spel",normalizedTitle:"論理演算子(spel)",charIndex:2010},{level:3,title:"連結演算子(SpEL)",slug:"連結演算子-spel",normalizedTitle:"連結演算子(spel)",charIndex:2083},{level:3,title:"その他の演算子(SpEL)",slug:"その他の演算子-spel",normalizedTitle:"その他の演算子(spel)",charIndex:2117},{level:3,title:"メソッド・フィールドの呼び出し(SpEL)",slug:"メソッド・フィールドの呼び出し-spel",normalizedTitle:"メソッド・フィールドの呼び出し(spel)",charIndex:2285},{level:2,title:"StringFunction(SF)",slug:"stringfunction-sf",normalizedTitle:"stringfunction(sf)",charIndex:2444}],lastUpdated:"2020-3-8 21:44:34",headersStr:"OGNL リテラル(OGNL) 演算子(OGNL) 算術演算子(OGNL) 比較演算子(OGNL) 論理演算子(OGNL) 連結演算子(OGNL) メソッド・フィールドの呼び出し(OGNL) Spring Expression Language(SpEL) リテラル(SpEL) 演算子(SpEL) 算術演算子(SpEL) 比較演算子(SpEL) 論理演算子(SpEL) 連結演算子(SpEL) その他の演算子(SpEL) メソッド・フィールドの呼び出し(SpEL) StringFunction(SF)",content:"# 式言語\nuroboroSQLでは、条件分岐に式言語を利用することができます。\n利用可能な式言語は以下の2つになります。\n\n * OGNL\n * Spring Expression Language(SpEL) \n\n利用する式言語の切替は依存関係ライブラリの指定により行ってください。\n依存関係ライブラリの指定については環境設定を参照してください。\n\n条件分岐の評価式として使用する場合、評価結果が真偽値(true/false)になるように記述してください。\n\n# OGNL\n以下に式言語としてOGNLを利用する場合の基本文法を提示します。\nOGNL文法の詳細はこちらを参照してください。\n\n# リテラル(OGNL)\n以下のリテラルが使用できます。\n\n * “a”(java.lang.String)\n * 'a'(char)\n * 1(int)\n * 1L(long)\n * 0.1F(float)\n * 0.1D(double)\n * 0.1B(java.math.BigDecimal)\n * 1H(java.math.BigInteger)\n * true, false(Boolean)\n * null\n\n# 演算子(OGNL)\n以下の演算子が使用できます。\n\n# 算術演算子(OGNL)\n * e1 + e2 (足し算)\n * e1 - e2 (引き算)\n * e1 * e2 (掛け算)\n * e1 / e2 (割り算)\n * e1 % e2 (余り)\n\n# 比較演算子(OGNL)\n * e1 eq e2, e1 == e2 (等しい) * e1・e2のいずれかがnullの場合、両方ともnullの時のみe1とe2は等しい\n * e1・e2が同じオブジェクトの場合、またはequals()メソッドにより等しいと判断される場合、e1とe2は等しい\n * e1・e2が数値の場合、倍精度浮動小数点数が等しい時のみe1とe2は等しい\n * その以外の場合、e1とe2は等しくない\n \n \n * e1 neq e2, e1 != e2 (等しくない)\n * e1 lt e2, e1 < e2 (小なり)\n * e1 lte e2, e1 <= e2 (小なりイコール)\n * e1 gt e2, e1 > e2 (大なり)\n * e1 gte e2, e1 >= e2 (大なりイコール)\n\n# 論理演算子(OGNL)\n * e1 or e2, e1 || e2 (論理和)\n * e1 and e2, e1 && e2 (論理積)\n * not e, ! e (論理否定)\n\n# 連結演算子(OGNL)\n * e1 + e2 (文字列連結)\n\n# メソッド・フィールドの呼び出し(OGNL)\n以下のようにメソッド・フィールドの呼び出しができます。\n\n * e.method(args) (メソッドの呼び出し)\n * e.property (フィールドの呼び出し)\n\n# Spring Expression Language(SpEL)\n以下に式言語としてSpring Expression Language(SpEL)を利用する場合の基本文法を提示します。\nSpEL文法の詳細はこちらを参照してください。\n\n# リテラル(SpEL)\n以下のリテラルが使用できます。\n\n * 文字列はシングルクォートで囲む。シングルクォート自体を使用する場合はシングルクォートを2つ重ねる('')\n * 数字や真偽値、nullはそのまま記述\n\n# 演算子(SpEL)\n以下の演算子が使用できます。\n\n# 算術演算子(SpEL)\n * e1 + e2 (足し算)\n * e1 - e2 (引き算)\n * e1 * e2 (掛け算)\n * e1 / e2, e1 div e2 (割り算)\n * e1 % e2, e1 mod e2 (余り)\n\n# 比較演算子(SpEL)\n * e1 eq e2, e1 == e2 (等しい) * e1・e2のいずれかがnullの場合、両方ともnullの時のみe1とe2は等しい\n * e1・e2が同じオブジェクトの場合、またはequals()メソッドにより等しいと判断される場合、e1とe2は等しい\n * e1・e2が数値の場合、倍精度浮動小数点数が等しい時のみe1とe2は等しい\n * その以外の場合、e1とe2は等しくない\n \n \n * e1 ne e2, e1 != e2 (等しくない)\n * e1 lt e2, e1 < e2 (小なり)\n * e1 le e2, e1 <= e2 (小なりイコール)\n * e1 gt e2, e1 > e2 (大なり)\n * e1 ge e2, e1 >= e2 (大なりイコール)\n\n# 論理演算子(SpEL)\n * e1 or e2 (論理和)\n * e1 and e2 (論理積)\n * not e, ! e (論理否定)\n\n# 連結演算子(SpEL)\n * e1 + e2 (文字列連結)\n\n# その他の演算子(SpEL)\n * instanceof (型判定) * ex) 'xyz' instanceof T(int) // false T() はタイプ(型)を表す\n \n \n * matches (正規表現) * ex) '5.00' matches '^[0-9]{2}$' // false\n \n \n\n# メソッド・フィールドの呼び出し(SpEL)\n以下のようにメソッド・フィールドの呼び出しができます。\n\n * e.method(args) (メソッドの呼び出し)\n * e.property (フィールドの呼び出し)\n * T(type).staticMethod(args) (staticメソッドの呼び出し)\n\n# StringFunction(SF)\nuroboroSQLでは評価式を利用する際、標準でStringFunction(SF)を使用することができます。 評価式と合わせてStringFunctionクラスのメソッドを呼び出すことができます。\n\n * 評価式で使用する場合\n\n/*IF SF.isNotEmpty(emp_no)*/\n -- emp_noが null または \"\" でない場合に処理される\n/*END*/\n\n\n1\n2\n3\n * バインドパラメータと合わせて使用する場合\n\nemp_name like /*SF.contains(emp_name)*/'' escape '$'\n-- emp_name=Bobの場合、 emp_name like %Bob% escape '$' となる\n\n\n1\n2\n * StringFunctionが提供するメソッドの一覧\n\nメソッド名 戻り値 説明 \nSF.isEmpty(String str) booean 対象文字列が空文字であること判定する \nSF.isNotEmpty(String str) boolean 対象文字列が空文字でないことを判定する \nSF.isBlank(String str) boolean 対象文字列が空文字、もしくは空白であること判定する \nSF.isNotBlank(String str) boolean 対象文字列が空文字、もしくは空白でないこと判定する \nSF.trim(String str) String 文字列の前後の空白を除去する。nullを渡した場合は結果もnullとなる \nSF.trimToEmpty(String str) String 文字列の前後の空白を除去する。nullを渡した場合は空文字となる \nSF.left(String str, int len) String 文字列の先頭から指定した文字数の文字列を取得する \nSF.right(String str, int len) String 文字列の最後から指定した文字数の文字列を取得する \nSF.mid(String str, int pos, int len) String 文字列の指定した位置から指定した文字数の文字列を取得する \nSF.rightPad(String str, int size) String 文字列の末尾に空白を埋めて指定された長さにする \nSF.rightPad(String str, int size, char padChar) String 文字列の末尾に指定した埋め込み文字を埋めて指定された長さにする \nSF.leftPad(String str, int size) String 文字列の先頭に空白を埋めて指定された長さにする \nSF.leftPad(String str, int size, char padChar) String 文字列の先頭に指定した埋め込み文字を埋めて指定された長さにする \nSF.split(String str) String[] 文字列を空白で区切って配列に格納する。nullが入力された場合はnullを返す \nSF.split(String str, char separatorChar) String[] 文字列を指定した区切り文字で区切って配列に格納する。nullが入力された場合はnullを返す \nSF.split(String str, String separatorChars, int max) String[] 文字列を指定した区切り文字で区切って配列に格納する。nullが入力された場合はnullを返す \nSF.capitalize(String str) String 文字列の先頭文字を大文字にする \nSF.uncapitalize(String str) String 文字列の先頭を小文字にする \nSF.startsWith(CharSequence text) String 指定されたテキストで始まるLIKE句用の検索文字列を生成する。引数のテキストはエスケープ処理される \nSF.contains(CharSequence text) String 指定されたテキストを含むLIKE句用の検索文字列を生成する。引数のテキストはエスケープ処理される \nSF.endsWith(CharSequence text) String 指定されたテキストで終わるLIKE句用の検索文字列を生成する。数のテキストはエスケープ処理される",normalizedContent:"# 式言語\nuroborosqlでは、条件分岐に式言語を利用することができます。\n利用可能な式言語は以下の2つになります。\n\n * ognl\n * spring expression language(spel) \n\n利用する式言語の切替は依存関係ライブラリの指定により行ってください。\n依存関係ライブラリの指定については環境設定を参照してください。\n\n条件分岐の評価式として使用する場合、評価結果が真偽値(true/false)になるように記述してください。\n\n# ognl\n以下に式言語としてognlを利用する場合の基本文法を提示します。\nognl文法の詳細はこちらを参照してください。\n\n# リテラル(ognl)\n以下のリテラルが使用できます。\n\n * “a”(java.lang.string)\n * 'a'(char)\n * 1(int)\n * 1l(long)\n * 0.1f(float)\n * 0.1d(double)\n * 0.1b(java.math.bigdecimal)\n * 1h(java.math.biginteger)\n * true, false(boolean)\n * null\n\n# 演算子(ognl)\n以下の演算子が使用できます。\n\n# 算術演算子(ognl)\n * e1 + e2 (足し算)\n * e1 - e2 (引き算)\n * e1 * e2 (掛け算)\n * e1 / e2 (割り算)\n * e1 % e2 (余り)\n\n# 比較演算子(ognl)\n * e1 eq e2, e1 == e2 (等しい) * e1・e2のいずれかがnullの場合、両方ともnullの時のみe1とe2は等しい\n * e1・e2が同じオブジェクトの場合、またはequals()メソッドにより等しいと判断される場合、e1とe2は等しい\n * e1・e2が数値の場合、倍精度浮動小数点数が等しい時のみe1とe2は等しい\n * その以外の場合、e1とe2は等しくない\n \n \n * e1 neq e2, e1 != e2 (等しくない)\n * e1 lt e2, e1 < e2 (小なり)\n * e1 lte e2, e1 <= e2 (小なりイコール)\n * e1 gt e2, e1 > e2 (大なり)\n * e1 gte e2, e1 >= e2 (大なりイコール)\n\n# 論理演算子(ognl)\n * e1 or e2, e1 || e2 (論理和)\n * e1 and e2, e1 && e2 (論理積)\n * not e, ! e (論理否定)\n\n# 連結演算子(ognl)\n * e1 + e2 (文字列連結)\n\n# メソッド・フィールドの呼び出し(ognl)\n以下のようにメソッド・フィールドの呼び出しができます。\n\n * e.method(args) (メソッドの呼び出し)\n * e.property (フィールドの呼び出し)\n\n# spring expression language(spel)\n以下に式言語としてspring expression language(spel)を利用する場合の基本文法を提示します。\nspel文法の詳細はこちらを参照してください。\n\n# リテラル(spel)\n以下のリテラルが使用できます。\n\n * 文字列はシングルクォートで囲む。シングルクォート自体を使用する場合はシングルクォートを2つ重ねる('')\n * 数字や真偽値、nullはそのまま記述\n\n# 演算子(spel)\n以下の演算子が使用できます。\n\n# 算術演算子(spel)\n * e1 + e2 (足し算)\n * e1 - e2 (引き算)\n * e1 * e2 (掛け算)\n * e1 / e2, e1 div e2 (割り算)\n * e1 % e2, e1 mod e2 (余り)\n\n# 比較演算子(spel)\n * e1 eq e2, e1 == e2 (等しい) * e1・e2のいずれかがnullの場合、両方ともnullの時のみe1とe2は等しい\n * e1・e2が同じオブジェクトの場合、またはequals()メソッドにより等しいと判断される場合、e1とe2は等しい\n * e1・e2が数値の場合、倍精度浮動小数点数が等しい時のみe1とe2は等しい\n * その以外の場合、e1とe2は等しくない\n \n \n * e1 ne e2, e1 != e2 (等しくない)\n * e1 lt e2, e1 < e2 (小なり)\n * e1 le e2, e1 <= e2 (小なりイコール)\n * e1 gt e2, e1 > e2 (大なり)\n * e1 ge e2, e1 >= e2 (大なりイコール)\n\n# 論理演算子(spel)\n * e1 or e2 (論理和)\n * e1 and e2 (論理積)\n * not e, ! e (論理否定)\n\n# 連結演算子(spel)\n * e1 + e2 (文字列連結)\n\n# その他の演算子(spel)\n * instanceof (型判定) * ex) 'xyz' instanceof t(int) // false t() はタイプ(型)を表す\n \n \n * matches (正規表現) * ex) '5.00' matches '^[0-9]{2}$' // false\n \n \n\n# メソッド・フィールドの呼び出し(spel)\n以下のようにメソッド・フィールドの呼び出しができます。\n\n * e.method(args) (メソッドの呼び出し)\n * e.property (フィールドの呼び出し)\n * t(type).staticmethod(args) (staticメソッドの呼び出し)\n\n# stringfunction(sf)\nuroborosqlでは評価式を利用する際、標準でstringfunction(sf)を使用することができます。 評価式と合わせてstringfunctionクラスのメソッドを呼び出すことができます。\n\n * 評価式で使用する場合\n\n/*if sf.isnotempty(emp_no)*/\n -- emp_noが null または \"\" でない場合に処理される\n/*end*/\n\n\n1\n2\n3\n * バインドパラメータと合わせて使用する場合\n\nemp_name like /*sf.contains(emp_name)*/'' escape '$'\n-- emp_name=bobの場合、 emp_name like %bob% escape '$' となる\n\n\n1\n2\n * stringfunctionが提供するメソッドの一覧\n\nメソッド名 戻り値 説明 \nsf.isempty(string str) booean 対象文字列が空文字であること判定する \nsf.isnotempty(string str) boolean 対象文字列が空文字でないことを判定する \nsf.isblank(string str) boolean 対象文字列が空文字、もしくは空白であること判定する \nsf.isnotblank(string str) boolean 対象文字列が空文字、もしくは空白でないこと判定する \nsf.trim(string str) string 文字列の前後の空白を除去する。nullを渡した場合は結果もnullとなる \nsf.trimtoempty(string str) string 文字列の前後の空白を除去する。nullを渡した場合は空文字となる \nsf.left(string str, int len) string 文字列の先頭から指定した文字数の文字列を取得する \nsf.right(string str, int len) string 文字列の最後から指定した文字数の文字列を取得する \nsf.mid(string str, int pos, int len) string 文字列の指定した位置から指定した文字数の文字列を取得する \nsf.rightpad(string str, int size) string 文字列の末尾に空白を埋めて指定された長さにする \nsf.rightpad(string str, int size, char padchar) string 文字列の末尾に指定した埋め込み文字を埋めて指定された長さにする \nsf.leftpad(string str, int size) string 文字列の先頭に空白を埋めて指定された長さにする \nsf.leftpad(string str, int size, char padchar) string 文字列の先頭に指定した埋め込み文字を埋めて指定された長さにする \nsf.split(string str) string[] 文字列を空白で区切って配列に格納する。nullが入力された場合はnullを返す \nsf.split(string str, char separatorchar) string[] 文字列を指定した区切り文字で区切って配列に格納する。nullが入力された場合はnullを返す \nsf.split(string str, string separatorchars, int max) string[] 文字列を指定した区切り文字で区切って配列に格納する。nullが入力された場合はnullを返す \nsf.capitalize(string str) string 文字列の先頭文字を大文字にする \nsf.uncapitalize(string str) string 文字列の先頭を小文字にする \nsf.startswith(charsequence text) string 指定されたテキストで始まるlike句用の検索文字列を生成する。引数のテキストはエスケープ処理される \nsf.contains(charsequence text) string 指定されたテキストを含むlike句用の検索文字列を生成する。引数のテキストはエスケープ処理される \nsf.endswith(charsequence text) string 指定されたテキストで終わるlike句用の検索文字列を生成する。数のテキストはエスケープ処理される",charsets:{cjk:!0}},{title:"SqlConfigの生成",frontmatter:{meta:[{name:"og:title",content:"SqlConfigの生成"},{name:"og:url",content:"/uroborosql-doc/configuration/"}]},regularPath:"/configuration/",relativePath:"configuration/README.md",key:"v-4f4c3556",path:"/configuration/",lastUpdated:"2020-3-8 21:44:34",headersStr:null,content:'# SqlConfigの生成\nuroboroSQLではSqlConfigを生成するタイミングで各種の設定を行うことによりライブラリの動作や実行されるSQLを変更することができます。\n\nシンプルな設定\n\n// create SqlConfig H2DBのメモリDBに接続する\nSqlConfig config = UroboroSQL\n .builder("jdbc:h2:mem:test;DB_CLOSE_DELAY=-1", "sa", "")\n .build();\n\n\n1\n2\n3\n4\nUroboroSQLビルダー取得API(UroboroSQL.UroboroSQLBuilder)\n\nメソッド名 説明 \nbuilder() DB接続設定を行っていないビルダーを取得 \nbuilder(Connection conn) 引数で指定したコネクションでDB接続するビルダーを取得 \nbuilder(DataSource dataSource) 引数で指定したデータソースを使ってDB接続するビルダーを取得 \nbuilder(String url, String user, String password) 引数で指定したDB接続情報を元にDB接続するビルダーを取得 \nbuilder(String url, String user, String password, String schema) 引数で指定したDB接続情報を元にDB接続するビルダーを取得 \n\n上記APIで取得したUroboroSQL.UroboroSQLBuilderに対して下記の設定クラスを設定することで、設定変更ができます。\n\n設定するクラス 説明 \nConnectionSupplier JDBCコネクション提供クラス \nSqlContextFactory SQLコンテキスト生成クラス \nSqlAgentFactory SQL実行クラス(SqlAgent)生成クラス \nSqlManager SQLファイル管理クラス \nSqlFilterManager SQLフィルター管理クラス \nEntityHandler エンティティ処理クラス \nDialect Database方言を表すクラス \nClock タイムゾーンを使用して現在の時点、日付および時間へのアクセスを提供するクロック',normalizedContent:'# sqlconfigの生成\nuroborosqlではsqlconfigを生成するタイミングで各種の設定を行うことによりライブラリの動作や実行されるsqlを変更することができます。\n\nシンプルな設定\n\n// create sqlconfig h2dbのメモリdbに接続する\nsqlconfig config = uroborosql\n .builder("jdbc:h2:mem:test;db_close_delay=-1", "sa", "")\n .build();\n\n\n1\n2\n3\n4\nuroborosqlビルダー取得api(uroborosql.uroborosqlbuilder)\n\nメソッド名 説明 \nbuilder() db接続設定を行っていないビルダーを取得 \nbuilder(connection conn) 引数で指定したコネクションでdb接続するビルダーを取得 \nbuilder(datasource datasource) 引数で指定したデータソースを使ってdb接続するビルダーを取得 \nbuilder(string url, string user, string password) 引数で指定したdb接続情報を元にdb接続するビルダーを取得 \nbuilder(string url, string user, string password, string schema) 引数で指定したdb接続情報を元にdb接続するビルダーを取得 \n\n上記apiで取得したuroborosql.uroborosqlbuilderに対して下記の設定クラスを設定することで、設定変更ができます。\n\n設定するクラス 説明 \nconnectionsupplier jdbcコネクション提供クラス \nsqlcontextfactory sqlコンテキスト生成クラス \nsqlagentfactory sql実行クラス(sqlagent)生成クラス \nsqlmanager sqlファイル管理クラス \nsqlfiltermanager sqlフィルター管理クラス \nentityhandler エンティティ処理クラス \ndialect database方言を表すクラス \nclock タイムゾーンを使用して現在の時点、日付および時間へのアクセスを提供するクロック',charsets:{cjk:!0}},{title:"2WaySQL",frontmatter:{meta:[{name:"og:title",content:"2WaySQL"},{name:"og:url",content:"/uroborosql-doc/background/"}]},regularPath:"/background/",relativePath:"background/README.md",key:"v-31f0e494",path:"/background/",headers:[{level:2,title:"2WaySQLとは",slug:"_2waysqlとは",normalizedTitle:"2waysqlとは",charIndex:73},{level:2,title:"バインドパラメータ (/* */)",slug:"バインドパラメータ",normalizedTitle:"バインドパラメータ (/* */)",charIndex:205},{level:3,title:"IN句の利用方法",slug:"in句の利用方法",normalizedTitle:"in句の利用方法",charIndex:613},{level:3,title:"LIKE句の利用方法",slug:"like句の利用方法",normalizedTitle:"like句の利用方法",charIndex:1038},{level:2,title:"バインド出来るパラメータの型",slug:"バインド出来るパラメータの型",normalizedTitle:"バインド出来るパラメータの型",charIndex:2108},{level:2,title:"置換文字列 (/*$ */ , /*# */)",slug:"置換文字列",normalizedTitle:"置換文字列 (/*$ / , /# */)",charIndex:null},{level:2,title:"条件分岐 ( /*IF*/, /*ELIF*/, /*ELSE*/, /*END*/ )",slug:"条件分岐-if-elif-else-end",normalizedTitle:"条件分岐 ( /if/, /elif/, /else/, /end/ )",charIndex:null},{level:3,title:"記述方法",slug:"記述方法",normalizedTitle:"記述方法",charIndex:3636},{level:2,title:"範囲の有効化 ( /*BEGIN*/, /*END*/ )",slug:"範囲の有効化-begin-end",normalizedTitle:"範囲の有効化 ( /begin/, /end/ )",charIndex:null},{level:2,title:"不要なカンマの除去",slug:"不要なカンマの除去",normalizedTitle:"不要なカンマの除去",charIndex:6277}],lastUpdated:"2020-3-8 21:44:34",headersStr:"2WaySQLとは バインドパラメータ (/* */) IN句の利用方法 LIKE句の利用方法 バインド出来るパラメータの型 置換文字列 (/*$ */ , /*# */) 条件分岐 ( /*IF*/, /*ELIF*/, /*ELSE*/, /*END*/ ) 記述方法 範囲の有効化 ( /*BEGIN*/, /*END*/ ) 不要なカンマの除去",content:"# 2WaySQL\nuroboroSQLの基本操作について説明する前にuroboroSQLを利用する上で必要になる項目について説明します。\n\n# 2WaySQLとは\n2WaySQLは普通のSQL文をファイルに保存したものです。そのままSQLクライアントツールで実行することもできますし、uroboroSQLで読み込んで実行することも出来ます。\n(2つの実行方法があることから2WaySQLと呼ばれます)\n\n# バインドパラメータ (/* */)\nSQLにバインドするパラメータを /*parameter name*/の形式で指定することができます。\n\nselect\n *\nfrom\n department\nwhere\n dept_no = /*dept_no*/10\nAND dept_name = /*dept_name*/'Sales'\n\n\n1\n2\n3\n4\n5\n6\n7\n上の例では、/*dept_no*/, /*dept_name*/ がバインドパラメータで、uroboroSQLから実行される際はこの部分が?に置き換わり、後ろの10や'Sales'が削除されます。\n\nselect\n *\nfrom\n department\nwhere\n dept_no = ?/*dept_no*/\nand dept_name = ?/*dept_name*/\n\n\n1\n2\n3\n4\n5\n6\n7\n# IN句の利用方法\nList型の値をIN句のバインドパラメータとして指定することもできます。\n\nWARNING\n\nIN句にバインドパラメータを指定する場合、バインドパラメータの後ろに()を記述する必要があります。\n\nselect\n *\nfrom\n employee emp\nwhere\n/*IF gender_list != null*/\nand emp.gender in /*gender_list*/('M')\n/*END*/\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n上の例にgender_listとして{\"M\", \"F\"}を指定すると以下のように変換されます。\n\nselect\n *\nfrom\n employee emp\nwhere\n/*IF gender_list != null*/\nand emp.gender in (?, ?)/*gender_list*/\n/*END*/\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n# LIKE句の利用方法\nLIKE句に対してバインドパラメータを使用する場合は、以下のようにStringFunctionを使って記述してください。\n\nselect\n *\nfrom\n employee emp\nwhere\n/*IF first_name != null*/\nand emp.first_name like /*SF.contains(first_name)*/'' escape /*#ESC_CHAR*/'$'\n/*END*/\n/*IF last_name != null*/\nand emp.last_name like /*SF.startsWith(last_name)*/'' escape /*#ESC_CHAR*/'$'\n/*END*/\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n上の例で、バインドパラメータ first_nameにa, last_nameにDを指定した場合は以下のようになります。\n\nselect\n *\nfrom\n employee emp\nwhere\n emp.first_name like '%a%' escape '$'\nand emp.last_name like 'D%' escape '$'\n/*END*/\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n上の例で、ワイルドカードを含む例としてバインドパラメータ first_nameにa%, last_nameにD_を指定した場合は以下のようになります。\n\nselect\n *\nfrom\n employee emp\nwhere\n emp.first_name like '%a$%%' escape '$' -- %がエスケープされる\nand emp.last_name like 'D$_%' escape '$' -- _がエスケープされる\n/*END*/\n\n\n1\n2\n3\n4\n5\n6\n7\n8\nTIP\n\nワイルドカード(%や_)を含む文字列がバインドパラメータに指定された場合でも、StringFunctionを利用することで文字列のエスケープ処理が適切に行われます。\n\nWARNING\n\nエスケープキャラクタ(上記の例では$)はDB毎の設定(Dialect)によって変わります。\n現在の設定では、Oracleの場合は\\, その他のDBでは$となります。\n\\や$のかわりに/*#ESC_CHAR*/と記載することでDB毎の設定を気にせずにエスケープ文字を指定することができます。\n\n# バインド出来るパラメータの型\nバインドパラメータに指定できるJava型は以下になります。\n\n * プリミティブ型とそのラッパー型(ただし char と java.lang.Character は除く)\n * java.math.BigDecimal\n * java.math.BigInteger\n * java.lang.String\n * byte[]\n * java.sql.Date\n * java.sql.Time\n * java.sql.Timestamp\n * java.sql.Array\n * java.sql.Ref\n * java.sql.Blob\n * java.sql.Clob\n * java.sql.SQLXML\n * java.sql.Struct\n * 列挙型(enum)\n * java.util.Date\n * java.util.Optional\n * java.util.OptionalInt\n * java.util.OptionalLong\n * java.util.OptionalDouble\n * java.time.LocalDateTime\n * java.time.OffsetDateTime\n * java.time.ZonedDateTime\n * java.time.LocalDate\n * java.time.LocalTime\n * java.time.OffsetTime\n * java.time.Year\n * java.time.YearMonth\n * java.time.MonthDay\n * java.time.Month\n * java.time.DayOfWeek\n\n# 置換文字列 (/*$ */ , /*# */)\n置換文字列を使うとSQLを動的に変更することができます。\n\n置換文字列は /*$parameter name*/ もしくは /*#parameter name*/と記述します。\n/*#parameter name*/ と記述した場合は、置換文字列の前後を'(シングルクォート)で囲みます。\n\nselect\n *\nfrom /*$table_name*/\nwhere\n gender = /*#gender*/\n\n\n1\n2\n3\n4\n5\n上の例では、table_nameやgenderに設定した値でSQLが置換されます。\n\n * table_nameにemployee, genderにMを設定した場合\n\nselect\n *\nfrom employee\nwhere\n gender = 'M'\n\n\n1\n2\n3\n4\n5\nという風に置換されたSQLが実行されることになります。\n\n注意\n\n置換文字列はSQLインジェクションなど脆弱性の原因となる可能性があります。十分に注意を払ったうえで利用してください\n\nTIP\n\n置換文字列はSQLインジェクションを防ぐため、変換の際にシングルクォート'を''にエスケープします\n\nWARNING\n\n置換文字列はバインドパラメータとしてではなく実行されるSQLを構築する時点で置換される点に注意してください。\nデータベースによってはSQL文が動的に変わることで解析結果のキャッシュが適用されず、\n解析処理が都度実行されることでCPUに負荷をかける可能性があります。\n\n# 条件分岐 ( /*IF*/, /*ELIF*/, /*ELSE*/, /*END*/ )\n/*IF*/, /*ELIF*/, /*ELSE*/, /*END*/ を使用してSQLを動的に変更することができます。\n\n# 記述方法\n/*IF [評価式]*/\n-- IFの評価式が真の場合に適用されるSQL\n/*ELIF [評価式]*/\n-- ELIFの評価式が真の場合に適用されるSQL\n/*ELSE*/\n-- IF,ELIFの評価式が偽の場合に適用されるSQL\n/*END*/\n\n\n1\n2\n3\n4\n5\n6\n7\n/*IF*/, /*ELIF*/の評価式として式言語を利用します。 ( 式言語の説明はこちら )\nまた、標準でSF関数(String Function)を使うことができます。\n\nselect\n *\nfrom\n employee emp\nwhere\n/*IF SF.isNotEmpty(birth_date_from) and SF.isNotEmpty(birth_date_to)*/\nand emp.birth_date between /*birth_date_from*/'1990-01-01' and /*birth_date_to*/'1999-12-31'\n/*ELIF SF.isNotEmpty(birth_date_from)*/\nand emp.birth_date >= /*birth_date_from*/'1990-01-01'\n/*ELIF SF.isNotEmpty(birth_date_to)*/\nand emp.birth_date < /*birth_date_to*/'1999-12-31'\n/*ELSE*/\n/*END*/\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n上の例ではIFの評価式としてSF.isNotEmpty()を使用してバインドパラメータがnullまたは\"\"でないことを評価しています。\n\nバインドパラメータとしてbirth_date_fromに2000-01-01, birth_date_toに2010-12-31を指定した場合、生成されるSQLは以下のようになります。\n\nselect\n *\nfrom\n employee emp\nwhere\n emp.birth_date between ?/*birth_date_from*/ and ?/*birth_date_to*/\n\n\n1\n2\n3\n4\n5\n6\n最後にバインドパラメータが評価され、実行されるSQLが以下になります。\n\nselect\n *\nfrom\n employee emp\nwhere\n emp.birth_date between '2000-01-01'/*birth_date_from*/ and '2010-12-31'/*birth_date_to*/\n\n\n1\n2\n3\n4\n5\n6\nここでemp.birth_dateの前にあったandが消えていることに注目してください。\n\nTIP\n\nuroboroSQLでは動的SQLを生成する際、WHERE句の後ろにandやorが来る場合はそれを削除してSQL文として正しい状態にします\n\nただし、上の加工前SQLのようにSQL文として不正な状態になってしまうのでSQLクライアントツールからは実行できないという欠点もあります。\nこのようにSQL文として不正になることを防ぐために、WHERE句のあとに他に影響を与えない評価を入れる方法があります。\n\nselect\n *\nfrom\n employee emp\nwhere\n 1 = 1 // <-- 必ずtrueとなる評価を入れる\n/*IF SF.isNotEmpty(birth_date_from) and SF.isNotEmpty(birth_date_to)*/\nand emp.birth_date between /*birth_date_from*/'1990-01-01' and /*birth_date_to*/'1999-12-31'\n/*ELIF SF.isNotEmpty(birth_date_from)*/\nand emp.birth_date >= /*birth_date_from*/'1990-01-01'\n/*ELIF SF.isNotEmpty(birth_date_to)*/\nand emp.birth_date < /*birth_date_to*/'1999-12-31'\n/*ELSE*/\n/*END*/\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n# 範囲の有効化 ( /*BEGIN*/, /*END*/ )\n/*BEGIN*/, /*END*/ で囲まれた範囲は、その中の/*IF*/, /*ELIF*/のうち、どれか1つでも真(true)になった場合に出力されます。\n範囲内の全ての評価式が偽(false)の場合、/*BEGIN*/, /*END*/ で囲まれた範囲は出力されません。\n\nselect\n *\nfrom\n employee emp\n/*BEGIN*/\nwhere\n/*IF SF.isNotEmpty(first_name)*/\nand emp.first_name = /*first_name*/'Bob'\n/*END*/\n/*IF SF.isNotEmpty(last_name)*/\nand emp.last_name = /*last_name*/'Smith'\n/*END*/\n/*END*/\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n上の例で、バインドパラメータ first_nameにWillson, last_nameにnullを指定した場合は以下のようになります。\n\nselect\n *\nfrom\n employee emp\nwhere\n emp.first_name = ?/*first_name*/\n\n\n1\n2\n3\n4\n5\n6\nバインドパラメータ first_name, last_nameともにnullを指定した場合は以下のようになります。\n\nselect\n *\nfrom\n employee emp\n\n\n1\n2\n3\n4\n/*BEGIN*/,/*END*/で囲まれたwhereが出力されていないことがわかります。\n\n# 不要なカンマの除去\nIF分岐を使って動的なSQLを構築する場合、カンマの有無が問題になる場合があります。\n以下のSQLを例として説明します。\n\nselect\n/*IF detail*/\n, first_name\n, last_name\n, birth_date\n, gender\n/*END*/\n, emp_no\nfrom\n employee emp\norder by\n/*IF detail*/\n, birth_date\n/*END*/\n, emp_no\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\nここでバインドパラメータdetailにtrueを指定した場合、生成されるSQLは以下になります。\n\nselect\n, first_name\n, last_name\n, birth_date\n, gender\n, emp_no\nfrom\n employee emp\norder by\n, birth_date\n, emp_no\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\nこのSQLではselectの直後やorder byの直後にカンマが出現しておりSQL文として不正であるため、SQLの実行に失敗します。\nこれを避けるためuroboroSQLでは、生成後のSQLに含まれる不要なカンマを除去するようになっています。\n\n実際に生成されるSQLは以下になります。\n\nselect\n first_name -- 先頭のカンマが除去される\n, last_name\n, birth_date\n, gender\n, emp_no\nfrom\n employee emp\norder by\n birth_date -- 先頭のカンマが除去される\n, emp_no\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\nカンマが除去されるのは、以下の予約語の直後にカンマが出現した場合です(大文字小文字の区別無し)。\n\n * SELECT\n * ORDER BY\n * GROUP BY\n * (\n * SET",normalizedContent:"# 2waysql\nuroborosqlの基本操作について説明する前にuroborosqlを利用する上で必要になる項目について説明します。\n\n# 2waysqlとは\n2waysqlは普通のsql文をファイルに保存したものです。そのままsqlクライアントツールで実行することもできますし、uroborosqlで読み込んで実行することも出来ます。\n(2つの実行方法があることから2waysqlと呼ばれます)\n\n# バインドパラメータ (/* */)\nsqlにバインドするパラメータを /*parameter name*/の形式で指定することができます。\n\nselect\n *\nfrom\n department\nwhere\n dept_no = /*dept_no*/10\nand dept_name = /*dept_name*/'sales'\n\n\n1\n2\n3\n4\n5\n6\n7\n上の例では、/*dept_no*/, /*dept_name*/ がバインドパラメータで、uroborosqlから実行される際はこの部分が?に置き換わり、後ろの10や'sales'が削除されます。\n\nselect\n *\nfrom\n department\nwhere\n dept_no = ?/*dept_no*/\nand dept_name = ?/*dept_name*/\n\n\n1\n2\n3\n4\n5\n6\n7\n# in句の利用方法\nlist型の値をin句のバインドパラメータとして指定することもできます。\n\nwarning\n\nin句にバインドパラメータを指定する場合、バインドパラメータの後ろに()を記述する必要があります。\n\nselect\n *\nfrom\n employee emp\nwhere\n/*if gender_list != null*/\nand emp.gender in /*gender_list*/('m')\n/*end*/\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n上の例にgender_listとして{\"m\", \"f\"}を指定すると以下のように変換されます。\n\nselect\n *\nfrom\n employee emp\nwhere\n/*if gender_list != null*/\nand emp.gender in (?, ?)/*gender_list*/\n/*end*/\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n# like句の利用方法\nlike句に対してバインドパラメータを使用する場合は、以下のようにstringfunctionを使って記述してください。\n\nselect\n *\nfrom\n employee emp\nwhere\n/*if first_name != null*/\nand emp.first_name like /*sf.contains(first_name)*/'' escape /*#esc_char*/'$'\n/*end*/\n/*if last_name != null*/\nand emp.last_name like /*sf.startswith(last_name)*/'' escape /*#esc_char*/'$'\n/*end*/\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n上の例で、バインドパラメータ first_nameにa, last_nameにdを指定した場合は以下のようになります。\n\nselect\n *\nfrom\n employee emp\nwhere\n emp.first_name like '%a%' escape '$'\nand emp.last_name like 'd%' escape '$'\n/*end*/\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n上の例で、ワイルドカードを含む例としてバインドパラメータ first_nameにa%, last_nameにd_を指定した場合は以下のようになります。\n\nselect\n *\nfrom\n employee emp\nwhere\n emp.first_name like '%a$%%' escape '$' -- %がエスケープされる\nand emp.last_name like 'd$_%' escape '$' -- _がエスケープされる\n/*end*/\n\n\n1\n2\n3\n4\n5\n6\n7\n8\ntip\n\nワイルドカード(%や_)を含む文字列がバインドパラメータに指定された場合でも、stringfunctionを利用することで文字列のエスケープ処理が適切に行われます。\n\nwarning\n\nエスケープキャラクタ(上記の例では$)はdb毎の設定(dialect)によって変わります。\n現在の設定では、oracleの場合は\\, その他のdbでは$となります。\n\\や$のかわりに/*#esc_char*/と記載することでdb毎の設定を気にせずにエスケープ文字を指定することができます。\n\n# バインド出来るパラメータの型\nバインドパラメータに指定できるjava型は以下になります。\n\n * プリミティブ型とそのラッパー型(ただし char と java.lang.character は除く)\n * java.math.bigdecimal\n * java.math.biginteger\n * java.lang.string\n * byte[]\n * java.sql.date\n * java.sql.time\n * java.sql.timestamp\n * java.sql.array\n * java.sql.ref\n * java.sql.blob\n * java.sql.clob\n * java.sql.sqlxml\n * java.sql.struct\n * 列挙型(enum)\n * java.util.date\n * java.util.optional\n * java.util.optionalint\n * java.util.optionallong\n * java.util.optionaldouble\n * java.time.localdatetime\n * java.time.offsetdatetime\n * java.time.zoneddatetime\n * java.time.localdate\n * java.time.localtime\n * java.time.offsettime\n * java.time.year\n * java.time.yearmonth\n * java.time.monthday\n * java.time.month\n * java.time.dayofweek\n\n# 置換文字列 (/*$ */ , /*# */)\n置換文字列を使うとsqlを動的に変更することができます。\n\n置換文字列は /*$parameter name*/ もしくは /*#parameter name*/と記述します。\n/*#parameter name*/ と記述した場合は、置換文字列の前後を'(シングルクォート)で囲みます。\n\nselect\n *\nfrom /*$table_name*/\nwhere\n gender = /*#gender*/\n\n\n1\n2\n3\n4\n5\n上の例では、table_nameやgenderに設定した値でsqlが置換されます。\n\n * table_nameにemployee, genderにmを設定した場合\n\nselect\n *\nfrom employee\nwhere\n gender = 'm'\n\n\n1\n2\n3\n4\n5\nという風に置換されたsqlが実行されることになります。\n\n注意\n\n置換文字列はsqlインジェクションなど脆弱性の原因となる可能性があります。十分に注意を払ったうえで利用してください\n\ntip\n\n置換文字列はsqlインジェクションを防ぐため、変換の際にシングルクォート'を''にエスケープします\n\nwarning\n\n置換文字列はバインドパラメータとしてではなく実行されるsqlを構築する時点で置換される点に注意してください。\nデータベースによってはsql文が動的に変わることで解析結果のキャッシュが適用されず、\n解析処理が都度実行されることでcpuに負荷をかける可能性があります。\n\n# 条件分岐 ( /*if*/, /*elif*/, /*else*/, /*end*/ )\n/*if*/, /*elif*/, /*else*/, /*end*/ を使用してsqlを動的に変更することができます。\n\n# 記述方法\n/*if [評価式]*/\n-- ifの評価式が真の場合に適用されるsql\n/*elif [評価式]*/\n-- elifの評価式が真の場合に適用されるsql\n/*else*/\n-- if,elifの評価式が偽の場合に適用されるsql\n/*end*/\n\n\n1\n2\n3\n4\n5\n6\n7\n/*if*/, /*elif*/の評価式として式言語を利用します。 ( 式言語の説明はこちら )\nまた、標準でsf関数(string function)を使うことができます。\n\nselect\n *\nfrom\n employee emp\nwhere\n/*if sf.isnotempty(birth_date_from) and sf.isnotempty(birth_date_to)*/\nand emp.birth_date between /*birth_date_from*/'1990-01-01' and /*birth_date_to*/'1999-12-31'\n/*elif sf.isnotempty(birth_date_from)*/\nand emp.birth_date >= /*birth_date_from*/'1990-01-01'\n/*elif sf.isnotempty(birth_date_to)*/\nand emp.birth_date < /*birth_date_to*/'1999-12-31'\n/*else*/\n/*end*/\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n上の例ではifの評価式としてsf.isnotempty()を使用してバインドパラメータがnullまたは\"\"でないことを評価しています。\n\nバインドパラメータとしてbirth_date_fromに2000-01-01, birth_date_toに2010-12-31を指定した場合、生成されるsqlは以下のようになります。\n\nselect\n *\nfrom\n employee emp\nwhere\n emp.birth_date between ?/*birth_date_from*/ and ?/*birth_date_to*/\n\n\n1\n2\n3\n4\n5\n6\n最後にバインドパラメータが評価され、実行されるsqlが以下になります。\n\nselect\n *\nfrom\n employee emp\nwhere\n emp.birth_date between '2000-01-01'/*birth_date_from*/ and '2010-12-31'/*birth_date_to*/\n\n\n1\n2\n3\n4\n5\n6\nここでemp.birth_dateの前にあったandが消えていることに注目してください。\n\ntip\n\nuroborosqlでは動的sqlを生成する際、where句の後ろにandやorが来る場合はそれを削除してsql文として正しい状態にします\n\nただし、上の加工前sqlのようにsql文として不正な状態になってしまうのでsqlクライアントツールからは実行できないという欠点もあります。\nこのようにsql文として不正になることを防ぐために、where句のあとに他に影響を与えない評価を入れる方法があります。\n\nselect\n *\nfrom\n employee emp\nwhere\n 1 = 1 // <-- 必ずtrueとなる評価を入れる\n/*if sf.isnotempty(birth_date_from) and sf.isnotempty(birth_date_to)*/\nand emp.birth_date between /*birth_date_from*/'1990-01-01' and /*birth_date_to*/'1999-12-31'\n/*elif sf.isnotempty(birth_date_from)*/\nand emp.birth_date >= /*birth_date_from*/'1990-01-01'\n/*elif sf.isnotempty(birth_date_to)*/\nand emp.birth_date < /*birth_date_to*/'1999-12-31'\n/*else*/\n/*end*/\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n# 範囲の有効化 ( /*begin*/, /*end*/ )\n/*begin*/, /*end*/ で囲まれた範囲は、その中の/*if*/, /*elif*/のうち、どれか1つでも真(true)になった場合に出力されます。\n範囲内の全ての評価式が偽(false)の場合、/*begin*/, /*end*/ で囲まれた範囲は出力されません。\n\nselect\n *\nfrom\n employee emp\n/*begin*/\nwhere\n/*if sf.isnotempty(first_name)*/\nand emp.first_name = /*first_name*/'bob'\n/*end*/\n/*if sf.isnotempty(last_name)*/\nand emp.last_name = /*last_name*/'smith'\n/*end*/\n/*end*/\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n上の例で、バインドパラメータ first_nameにwillson, last_nameにnullを指定した場合は以下のようになります。\n\nselect\n *\nfrom\n employee emp\nwhere\n emp.first_name = ?/*first_name*/\n\n\n1\n2\n3\n4\n5\n6\nバインドパラメータ first_name, last_nameともにnullを指定した場合は以下のようになります。\n\nselect\n *\nfrom\n employee emp\n\n\n1\n2\n3\n4\n/*begin*/,/*end*/で囲まれたwhereが出力されていないことがわかります。\n\n# 不要なカンマの除去\nif分岐を使って動的なsqlを構築する場合、カンマの有無が問題になる場合があります。\n以下のsqlを例として説明します。\n\nselect\n/*if detail*/\n, first_name\n, last_name\n, birth_date\n, gender\n/*end*/\n, emp_no\nfrom\n employee emp\norder by\n/*if detail*/\n, birth_date\n/*end*/\n, emp_no\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\nここでバインドパラメータdetailにtrueを指定した場合、生成されるsqlは以下になります。\n\nselect\n, first_name\n, last_name\n, birth_date\n, gender\n, emp_no\nfrom\n employee emp\norder by\n, birth_date\n, emp_no\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\nこのsqlではselectの直後やorder byの直後にカンマが出現しておりsql文として不正であるため、sqlの実行に失敗します。\nこれを避けるためuroborosqlでは、生成後のsqlに含まれる不要なカンマを除去するようになっています。\n\n実際に生成されるsqlは以下になります。\n\nselect\n first_name -- 先頭のカンマが除去される\n, last_name\n, birth_date\n, gender\n, emp_no\nfrom\n employee emp\norder by\n birth_date -- 先頭のカンマが除去される\n, emp_no\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\nカンマが除去されるのは、以下の予約語の直後にカンマが出現した場合です(大文字小文字の区別無し)。\n\n * select\n * order by\n * group by\n * (\n * set",charsets:{cjk:!0}},{title:"EntityHandler",frontmatter:{meta:[{name:"og:title",content:"EntityHandler"},{name:"og:url",content:"/uroborosql-doc/configuration/entity-handler.html"}]},regularPath:"/configuration/entity-handler.html",relativePath:"configuration/entity-handler.md",key:"v-3d61421e",path:"/configuration/entity-handler.html",lastUpdated:"2019-9-4 23:08:33",headersStr:null,content:"# EntityHandler\nEntityHandlerはDAOインタフェースを利用したDB操作を行う際に実行するSQLの生成を制御するためのクラスです。\nアプリケーションの要件によってEntityHandlerインタフェースやDefaultEntityHandlerクラスを継承した独自のEntityHandlerを指定することが出来ます。\n\nTIP\n\nEntityHandlerはDAOインタフェース利用時のみに有効な手段ですが、SQLファイルインタフェースにおいても自動でバインドする場合は、自動パラメータバインド関数の設定を参照してください。\n\nEntityHandler拡張例\n\npublic class CustomEntityHandler extends DefaultEntityHandler\n implements EntityHandler {\n\n @Override\n public void setInsertParams(final SqlContext context, final Object entity) {\n setEntityModelInsertParams((EntityModel) entity); // entityがEntityModel型を継承している場合\n super.setInsertParams(context, entity);\n }\n\n @Override\n public void setUpdateParams(final SqlContext context, final Object entity) {\n setEntityModelUpdateParams((EntityModel) entity); // entityがEntityModel型を継承している場合\n super.setUpdateParams(context, entity);\n }\n\n @Override\n public void setBulkInsertParams(final SqlContext context, final Object entity, final int entityIndex) {\n setEntityModelInsertParams((EntityModel) entity); // entityがEntityModel型を継承している場合\n super.setBulkInsertParams(context, entity, entityIndex);\n }\n\n private void setEntityModelInsertParams(final EntityModel model) {\n ZonedDateTime now = ZonedDateTime.now();\n model.setCreatedAt(now);\n model.setUpdatedAt(now);\n }\n\n private void setEntityModelUpdateParams(final EntityModel model) {\n model.setUpdatedAt(ZonedDateTime.now());\n }\n}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n// create SqlConfig\nSqlConfig config = UroboroSQL\n .builder(...)\n // EntityHandlerの設定\n .setEntityHandler(new CustomEntityHandler()).build();\n\n\n1\n2\n3\n4\n5",normalizedContent:"# entityhandler\nentityhandlerはdaoインタフェースを利用したdb操作を行う際に実行するsqlの生成を制御するためのクラスです。\nアプリケーションの要件によってentityhandlerインタフェースやdefaultentityhandlerクラスを継承した独自のentityhandlerを指定することが出来ます。\n\ntip\n\nentityhandlerはdaoインタフェース利用時のみに有効な手段ですが、sqlファイルインタフェースにおいても自動でバインドする場合は、自動パラメータバインド関数の設定を参照してください。\n\nentityhandler拡張例\n\npublic class customentityhandler extends defaultentityhandler\n implements entityhandler {\n\n @override\n public void setinsertparams(final sqlcontext context, final object entity) {\n setentitymodelinsertparams((entitymodel) entity); // entityがentitymodel型を継承している場合\n super.setinsertparams(context, entity);\n }\n\n @override\n public void setupdateparams(final sqlcontext context, final object entity) {\n setentitymodelupdateparams((entitymodel) entity); // entityがentitymodel型を継承している場合\n super.setupdateparams(context, entity);\n }\n\n @override\n public void setbulkinsertparams(final sqlcontext context, final object entity, final int entityindex) {\n setentitymodelinsertparams((entitymodel) entity); // entityがentitymodel型を継承している場合\n super.setbulkinsertparams(context, entity, entityindex);\n }\n\n private void setentitymodelinsertparams(final entitymodel model) {\n zoneddatetime now = zoneddatetime.now();\n model.setcreatedat(now);\n model.setupdatedat(now);\n }\n\n private void setentitymodelupdateparams(final entitymodel model) {\n model.setupdatedat(zoneddatetime.now());\n }\n}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n// create sqlconfig\nsqlconfig config = uroborosql\n .builder(...)\n // entityhandlerの設定\n .setentityhandler(new customentityhandler()).build();\n\n\n1\n2\n3\n4\n5",charsets:{cjk:!0}},{title:"ConnectionSupplier",frontmatter:{meta:[{name:"og:title",content:"ConnectionSupplier"},{name:"og:url",content:"/uroborosql-doc/configuration/connection-supplier.html"}]},regularPath:"/configuration/connection-supplier.html",relativePath:"configuration/connection-supplier.md",key:"v-01387e12",path:"/configuration/connection-supplier.html",headers:[{level:2,title:"ConnectionContext",slug:"connectioncontext",normalizedTitle:"connectioncontext",charIndex:454},{level:3,title:"実装例",slug:"実装例",normalizedTitle:"実装例",charIndex:1411}],lastUpdated:"2020-11-19 23:55:38",headersStr:"ConnectionContext 実装例",content:'# ConnectionSupplier\nDB接続を行う際のコネクションを提供するクラスです。 標準で以下のクラスが提供されているので用途に応じて使い分けてください。\n\nクラス名 説明 \nDefaultConnectionSupplierImpl コンストラクタで受け取ったコネクションを返すだけのコネクション供給クラス \nJdbcConnectionSupplierImpl JDBCドライバーマネージャを使用したコネクション提供クラス \nDataSourceConnectionSupplierImpl データソースを使用したコネクション提供クラス \n\nまた、ConnectionSupplierインタフェースを実装した独自のJDBCコネクション提供クラスを利用することもできます。\n\n# ConnectionContext \n動的にSqlAgentの接続先を切り替える場合は、SqlConfig#agent(ConnectionContext)メソッドを使用します。\n\nConnectionContextは、ConnectionContextBuilderの下記メソッドを利用して、インスタンスを生成します。\n\n戻り値 メソッド名 説明 \nDataSourceConnectionContext dataSource() DataSourceConnectionContext を生成する. \nDataSourceConnectionContext dataSource(String dataSourceName) DataSourceConnectionContext を生成する. \nJdbcConnectionContext jdbc(String url) JdbcConnectionContext を生成する. \nJdbcConnectionContext jdbc(String url, String user, String password) JdbcConnectionContext を生成する. \nJdbcConnectionContext jdbc(String url, String user, String password, String schema) JdbcConnectionContext を生成する. \n\n# 実装例\nSqlConfig config = UroboroSQL\n .builder()\n .setConnectionSupplier(new JdbcConnectionSupplier("jdbc:h2:mem:mainConnection", "sa", "sa"))\n .build();\n\ntry (SqlAgent agent = config.agent()) {\n // using jdbc:h2:mem:mainConnection\n agent.required(() -> {\n ....\n });\n}\n\n//-------------------------------------------------------\n\ntry (SqlAgent agent = config.agent(ConnectionContextBuilder\n\t\t\t\t.jdbc("jdbc:h2:mem:subConnection", "sa", "sa"))) {\n // usingjdbc:h2:mem:subConnection\n agent.required(() -> {\n ....\n });\n}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21',normalizedContent:'# connectionsupplier\ndb接続を行う際のコネクションを提供するクラスです。 標準で以下のクラスが提供されているので用途に応じて使い分けてください。\n\nクラス名 説明 \ndefaultconnectionsupplierimpl コンストラクタで受け取ったコネクションを返すだけのコネクション供給クラス \njdbcconnectionsupplierimpl jdbcドライバーマネージャを使用したコネクション提供クラス \ndatasourceconnectionsupplierimpl データソースを使用したコネクション提供クラス \n\nまた、connectionsupplierインタフェースを実装した独自のjdbcコネクション提供クラスを利用することもできます。\n\n# connectioncontext \n動的にsqlagentの接続先を切り替える場合は、sqlconfig#agent(connectioncontext)メソッドを使用します。\n\nconnectioncontextは、connectioncontextbuilderの下記メソッドを利用して、インスタンスを生成します。\n\n戻り値 メソッド名 説明 \ndatasourceconnectioncontext datasource() datasourceconnectioncontext を生成する. \ndatasourceconnectioncontext datasource(string datasourcename) datasourceconnectioncontext を生成する. \njdbcconnectioncontext jdbc(string url) jdbcconnectioncontext を生成する. \njdbcconnectioncontext jdbc(string url, string user, string password) jdbcconnectioncontext を生成する. \njdbcconnectioncontext jdbc(string url, string user, string password, string schema) jdbcconnectioncontext を生成する. \n\n# 実装例\nsqlconfig config = uroborosql\n .builder()\n .setconnectionsupplier(new jdbcconnectionsupplier("jdbc:h2:mem:mainconnection", "sa", "sa"))\n .build();\n\ntry (sqlagent agent = config.agent()) {\n // using jdbc:h2:mem:mainconnection\n agent.required(() -> {\n ....\n });\n}\n\n//-------------------------------------------------------\n\ntry (sqlagent agent = config.agent(connectioncontextbuilder\n\t\t\t\t.jdbc("jdbc:h2:mem:subconnection", "sa", "sa"))) {\n // usingjdbc:h2:mem:subconnection\n agent.required(() -> {\n ....\n });\n}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21',charsets:{cjk:!0}},{title:"SqlAgentFactory",frontmatter:{meta:[{name:"og:title",content:"SqlAgentFactory"},{name:"og:url",content:"/uroborosql-doc/configuration/sql-agent-factory.html"}]},regularPath:"/configuration/sql-agent-factory.html",relativePath:"configuration/sql-agent-factory.md",key:"v-111c46f7",path:"/configuration/sql-agent-factory.html",headers:[{level:2,title:"フェッチサイズと検索タイムアウト設定 ( SqlAgentFactory#setFetchSize /#setQueryTimeout )",slug:"フェッチサイズと検索タイムアウト設定-sqlagentfactory-setfetchsize-setquerytimeout",normalizedTitle:"フェッチサイズと検索タイムアウト設定 ( sqlagentfactory#setfetchsize /#setquerytimeout )",charIndex:null},{level:2,title:"例外発生時のログ出力を行うかどうかを設定 ( SqlAgentFactory#setOutputExceptionLog )",slug:"例外発生時のログ出力を行うかどうかを設定-sqlagentfactory-setoutputexceptionlog",normalizedTitle:"例外発生時のログ出力を行うかどうかを設定 ( sqlagentfactory#setoutputexceptionlog )",charIndex:1908},{level:2,title:"SQL_IDの置換文字列設定 ( SqlAgentFactory#setSqlIdKeyName )",slug:"sql-idの置換文字列設定-sqlagentfactory-setsqlidkeyname",normalizedTitle:"sql_idの置換文字列設定 ( sqlagentfactory#setsqlidkeyname )",charIndex:2251},{level:2,title:"CaseFormatの初期値設定 ( SqlAgentFactory#setDefaultMapKeyCaseFormat )",slug:"caseformatの初期値設定-sqlagentfactory-setdefaultmapkeycaseformat",normalizedTitle:"caseformatの初期値設定 ( sqlagentfactory#setdefaultmapkeycaseformat )",charIndex:3526},{level:2,title:"複数件挿入時の挿入方法の初期値設定 ( SqlAgentFactory#setDefaultInsertsType )",slug:"複数件挿入時の挿入方法の初期値設定-sqlagentfactory-setdefaultinsertstype",normalizedTitle:"複数件挿入時の挿入方法の初期値設定 ( sqlagentfactory#setdefaultinsertstype )",charIndex:4891},{level:2,title:"SQL実行のリトライ ( SqlAgentFactory#setSqlRetryCodeList /#setDefaultMaxRetryCount /#setDefaultSqlRetryWaitTime )",slug:"sql実行のリトライ-sqlagentfactory-setsqlretrycodelist-setdefaultmaxretrycount-setdefaultsqlretrywaittime",normalizedTitle:"sql実行のリトライ ( sqlagentfactory#setsqlretrycodelist /#setdefaultmaxretrycount /#setdefaultsqlretrywaittime )",charIndex:5250},{level:2,title:"DB更新処理をトランザクション内のみに強制 ( SqlAgentFactory#setForceUpdateWithinTransaction )",slug:"db更新処理をトランザクション内のみに強制-sqlagentfactory-setforceupdatewithintransaction",normalizedTitle:"db更新処理をトランザクション内のみに強制 ( sqlagentfactory#setforceupdatewithintransaction )",charIndex:7778},{level:2,title:"明示的な行ロック時の待機時間(s)のデフォルト値設定 ( SqlAgentFactory#setDefaultForUpdateWaitSeconds )",slug:"明示的な行ロック時の待機時間-s-のデフォルト値設定-sqlagentfactory-setdefaultforupdatewaitseconds",normalizedTitle:"明示的な行ロック時の待機時間(s)のデフォルト値設定 ( sqlagentfactory#setdefaultforupdatewaitseconds )",charIndex:8953}],lastUpdated:"2020-3-8 21:44:34",headersStr:"フェッチサイズと検索タイムアウト設定 ( SqlAgentFactory#setFetchSize /#setQueryTimeout ) 例外発生時のログ出力を行うかどうかを設定 ( SqlAgentFactory#setOutputExceptionLog ) SQL_IDの置換文字列設定 ( SqlAgentFactory#setSqlIdKeyName ) CaseFormatの初期値設定 ( SqlAgentFactory#setDefaultMapKeyCaseFormat ) 複数件挿入時の挿入方法の初期値設定 ( SqlAgentFactory#setDefaultInsertsType ) SQL実行のリトライ ( SqlAgentFactory#setSqlRetryCodeList /#setDefaultMaxRetryCount /#setDefaultSqlRetryWaitTime ) DB更新処理をトランザクション内のみに強制 ( SqlAgentFactory#setForceUpdateWithinTransaction ) 明示的な行ロック時の待機時間(s)のデフォルト値設定 ( SqlAgentFactory#setDefaultForUpdateWaitSeconds )",content:'# SqlAgentFactory\nSQL実行を行うクラスであるSqlAgentを生成するファクトリクラスです。SQL実行時の挙動を変更するための初期値の設定が行えます。\n\n設定例\n\nSqlConfig config = UroboroSQL.builder(...)\n // SqlAgentFactoryの設定\n .setSqlAgentFactory(new SqlAgentFactoryImpl()\n // JDBCフェッチサイズ\n .setFetchSize(1000)\n // Statementオブジェクトの検索タイムアウト時間(s)\n .setQueryTimeout(10)\n // 例外発生時のログ出力を行うかどうか\n .setOutputExceptionLog(true)\n // SQL_IDの置換文字列\n .setSqlIdKeyName("_SQL_ID_")\n // 検索結果を格納するMapのキー変換に使用するCaseFormatの初期値\n .setDefaultMapKeyCaseFormat(CaseFormat.UPPER_SNAKE_CASE)\n // 複数件挿入時の挿入方法の初期値\n .setDefaultInsertsType(InsertsType.BULK)\n // アプリケーション全体のリトライ設定\n // SQLエラーコードが54,30006のいずれか(Oracleのリソース・ビジー)の場合\n .setSqlRetryCodeList(Arrays.asList("54", "30006"))\n // 最大リトライ回数\n .setDefaultMaxRetryCount(3)\n // リトライ間隔\n .setDefaultSqlRetryWaitTime(10)\n // トランザクション内での更新を強制するかどうか\n .setForceUpdateWithinTransaction(true)\n // 明示的な行ロック時の待機時間(s)デフォルト値\n .setDefaultForUpdateWaitSeconds(10)\n )\n ).build();\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n# フェッチサイズと検索タイムアウト設定 ( SqlAgentFactory#setFetchSize /#setQueryTimeout )\nSqlAgentで検索処理を行う際、データベースから一度に取得する行数(fetchSize)や 検索タイムアウト時間(秒)(queryTimeout)の初期値を指定することが出来ます。 指定しない場合fetchSize, queryTimeoutともに-1が設定されます。\n\nSqlConfig config = UroboroSQL.builder(...)\n // SqlAgentFactoryの設定\n .setSqlAgentFactory(new SqlAgentFactoryImpl()\n // JDBCフェッチサイズ\n .setFetchSize(1000)\n // Statementオブジェクトの検索タイムアウト時間(s)\n .setQueryTimeout(10)\n ).build();\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n補足\n\nfetchSizeは、Statement.setFetchSizeに渡される値で、パフォーマンスに影響します。\nJDBCクライアント(uroborosqlを使用しているJavaアプリケーション)ではDBサーバ側で実行されたSELECTの結果セットをfetchサイズで指定された行数ずつ分割して取得します。 そのため結果行数に対してfetchSizeが小さいと、JDBCクライアント <-> DBサーバ間の通信回数が増大してパフォーマンスに悪影響を及ぼします。\n(例:select結果が10,000件、fetchSizeが100の場合、JDBCクライアント⇔DBサーバ間の通信は10,000÷100 = 100回行われる)\n\n注意\n\nfetchSizeはcollect/foreachメソッドで返却される結果セットの行数を制限する設定ではありません。\n\n# 例外発生時のログ出力を行うかどうかを設定 ( SqlAgentFactory#setOutputExceptionLog )\nSQL実行時にSQL例外が発生した場合に、発生した例外と実行したSQLの詳細情報を出力するかどうかを指定できます。 指定しない場合falseになります。\n\nSqlConfig config = UroboroSQL.builder(...)\n // SqlAgentFactoryの設定\n .setSqlAgentFactory(new SqlAgentFactoryImpl()\n // 例外発生時のログ出力を行うかどうか\n .setOutputExceptionLog(true)\n ).build();\n\n\n1\n2\n3\n4\n5\n6\n# SQL_IDの置換文字列設定 ( SqlAgentFactory#setSqlIdKeyName )\nSQL文に特定の置換文字列をSQLコメントとして記述することで、SQL実行時に実行したSQLの元となるSQLファイルを特定するための 情報(SQL_ID)を埋め込むことが出来ます。SQL_IDを埋め込むことでSQLログやDBのSQL履歴で実行されたSQLの元となるファイルを 特定しやすくなります。\n必要に応じてこの置換文字列は変更することが出来ます。 指定しない場合_SQL_ID_になります。\n\n設定例\n\nSqlConfig config = UroboroSQL.builder(...)\n // SqlAgentFactoryの設定\n .setSqlAgentFactory(new SqlAgentFactoryImpl()\n // SQL_IDの置換文字列\n .setSqlIdKeyName("_SQL_ID_")\n ).build();\n\n\n1\n2\n3\n4\n5\n6\ndepartment/select_department.sql\n\nselect /* _SQL_ID_ */ -- _SQL_ID_ がSQLファイルを特定するための情報の埋め込み先となる\n dept.dept_no as dept_no\n, dept.dept_name as dept_name\n, dept.lock_version as lock_version\nfrom\n department dept\n/*BEGIN*/\nwhere\n/*IF SF.isNotEmpty(deptNo)*/\nand dept.dept_no = /*deptNo*/1\n/*END*/\n/*IF SF.isNotEmpty(deptName)*/\nand dept.dept_name = /*deptName*/\'sample\'\n/*END*/\n/*END*/\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\nSQL実行処理\n\nagent.query("department/select_department")\n .param("deptNo", 1)\n .collect();\n\n\n1\n2\n3\n実行されるSQL\n\nselect /* department/select_department */ -- _SQL_ID_ にSQL名(department/select_department)が設定される\n dept.dept_no as dept_no\n, dept.dept_name as dept_name\n, dept.lock_version as lock_version\nfrom\n department dept\nwhere\n dept.dept_no = 1/*deptNo*/\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n# CaseFormatの初期値設定 ( SqlAgentFactory#setDefaultMapKeyCaseFormat )\nSQLによる検索で、以下のメソッドを使用してList>やMapを取得する際、 取得したMapのキー名に対する書式の初期値を指定することが出来ます。 指定しない場合CaseFormat.UPPER_SNAKE_CASEになります。\n\n対象メソッド 戻り値の型 \nSqlQuery#collect() List> \nSqlQuery#findFirst() Optional> \nSqlQuery#first() Map \nSqlQuery#stream() Stream> \n\n指定しない場合(初期設定:CaseFormat.UPPER_SNAKE_CASE)\n\nagent.query("department/select_department").collect();\n\n// 結果(departments) キーがUPPER_SNAKE_CASEとなっている\n[\n {"DEPT_NO"=1, "DEPT_NAME"="sales"},\n {"DEPT_NO"=2, "DEPT_NAME"="export"},\n {"DEPT_NO"=3, "DEPT_NAME"="accounting"},\n {"DEPT_NO"=4, "DEPT_NAME"="personnel"}\n]\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\nCaseFormat.CAMEL_CASEを初期値として設定\n\nSqlConfig config = UroboroSQL.builder(...)\n // SqlAgentFactoryの設定\n .setSqlAgentFactory(new SqlAgentFactoryImpl()\n // 検索結果を格納するMapのキー変換に使用するCaseFormatの初期値\n .setDefaultMapKeyCaseFormat(CaseFormat.CAMEL_CASE)\n ).build();\n\n\n1\n2\n3\n4\n5\n6\nagent.query("department/select_department").collect();\n\n// 結果(departments) キーがCAMEL_CASEとなっている\n[\n {"deptNo"=1, "deptName"="sales"},\n {"deptNo"=2, "deptName"="export"},\n {"deptNo"=3, "deptName"="accounting"},\n {"deptNo"=4, "deptName"="personnel"}\n]\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n# 複数件挿入時の挿入方法の初期値設定 ( SqlAgentFactory#setDefaultInsertsType )\nSqlAgent#inserts()メソッドで使用するInsertsTypeの初期値を設定することが出来ます。 指定しない場合InsertsType.BULKになります。\n\nSqlConfig config = UroboroSQL.builder(...)\n // SqlAgentFactoryの設定\n .setSqlAgentFactory(new SqlAgentFactoryImpl()\n // 複数件挿入時の挿入方法の初期値\n .setDefaultInsertsType(InsertsType.BULK)\n ).build();\n\n\n1\n2\n3\n4\n5\n6\n# SQL実行のリトライ ( SqlAgentFactory#setSqlRetryCodeList /#setDefaultMaxRetryCount /#setDefaultSqlRetryWaitTime )\nSQLを実行した際、タイミングによって発生する例外(テーブルロックエラーなど)の場合はリトライを行い、 できるだけ正常に処理を終了させたい場合があります。\n通常、このようなケースでは以下のような実装を行います。\n\nString MAX_RETRY_COUNT = 3; // MAX_RETRY_COUNT はアプリケーションで定義された最大リトライ回数の定数とする\nSqlConfig config = UroboroSQL.builder(...).build();\n\nint retryCount = 0;\nfor(;;) {\n try (SqlAgent agent = config.agent()) {\n // INSERT文の実行\n // insert into product (product_id) values (/*product_id*/0);\n agent.update("example/insert_product").param("product_id", 1).count();\n break;\n } catch (UroborosqlSQLException ex) {\n // SQLExceptionが発生した際に行う処理を実装\n int errorCode = ex.getErrorCode();\n if (errorCode == 30006 || errorCode == 54) {// リソース・ビジー(Oracleの場合)\n // リトライ対象エラーコードの場合はリトライカウントをカウントアップしてリトライする\n retryCount++;\n if (retryCount == MAX_RETRY_COUNT) {\n // 最大リトライ回数に達した場合は例外をスローする\n throw ex;\n } else {\n try {\n // 10ms 待機\n Thread.sleep(10);\n } catch (InterruptedException iex) {\n // do nothing\n }\n }\n } else {\n // リトライ対象エラーコード以外はすぐに例外をスローする\n throw ex;\n }\n }\n}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\nしかし、上記のようなリトライ処理を個々の実装で行うと、 実装漏れや実装ミス、実装方法の差異(for()の代わりにwhile()を使用するなど)により不具合が発生しやすくなります。\nuroboroSQLでは、アプリケーション全体のリトライ設定と、全体設定より優先される個別処理でのリトライ用APIの 2種類のAPIを提供することで、より簡潔で確実なリトライ処理が行えるよう工夫されています。\nアプリケーション全体のリトライ設定はSqlAgentFactory生成時に行います。\n\nSqlConfig config = UroboroSQL.builder(...)\n // SqlAgentFactoryの設定\n .setSqlAgentFactory(new SqlAgentFactoryImpl()\n // アプリケーション全体のリトライ設定\n // SQLエラーコードが54,30006のいずれか(Oracleのリソース・ビジー)の場合\n .setSqlRetryCodeList(Arrays.asList("54", "30006"))\n // 最大リトライ回数(3回)リトライ\n .setDefaultMaxRetryCount(3)\n // リトライ間隔10ms待機\n .setDefaultSqlRetryWaitTime(10)\n ).build();\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\nリトライAPIを用いた実装は次のようになります。\n\n// アプリケーション全体のリトライ設定に従ってリトライを行う。(個別のリトライ指定なし)\ntry (SqlAgent agent = config.agent()) {\n // INSERT文の実行\n // insert into product (product_id) values (/*product_id*/0);\n agent.update("example/insert_product")\n .param("product_id", 1)\n .count();\n}\n\n// 個別にリトライ設定を上書きする(retry()を利用)\ntry (SqlAgent agent = config.agent()) {\n // INSERT文の実行\n // insert into product (product_id) values (/*product_id*/0);\n // リトライ対象エラーコードの場合、5回のリトライを20ms間隔で行う\n agent.update("example/insert_product")\n .param("product_id", 1)\n .retry(5, 20)\n .count();\n}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n# DB更新処理をトランザクション内のみに強制 ( SqlAgentFactory#setForceUpdateWithinTransaction ) \n複数のDB更新処理をまとめて行う際、途中で例外が発生するとDBデータが不整合な状態になる場合があります。このようなデータ不整合を防ぐためにはトランザクションを利用します。\nしかし、通常の設定ではトランザクションを開始しない状態でもDB更新処理を行うことが可能になっているため不具合に気付きにくいという問題があります。\nuroboroSQLではトランザクションを開始していない状態でDB更新処理が行なわれた場合に例外をスローするオプションを提供しています。このオプションを使用することでDBデータの整合性を維持しやすくなります。\n\nSqlConfig config = UroboroSQL.builder(...)\n // SqlAgentFactoryの設定\n .setSqlAgentFactory(new SqlAgentFactoryImpl()\n // トランザクション内での更新を強制するかどうか\n .setForceUpdateWithinTransaction(true)\n )\n ).build();\n\n\n1\n2\n3\n4\n5\n6\n7\nSqlAgentFactory#setForceUpdateWithinTransaction()にtrueを指定することでトランザクションを開始していない状態でDB更新処理が行なわれた場合にUroborosqlTransactionExceptionがスローされます。\n\nagent.required(() -> { // トランザクション開始\n // トランザクション内でのDB更新なのでOK\n agent.updateWith("insert into employee (emp_no) values (/*emp_no*/1001)")\n .param("emp_no", 1)\n .count();\n });\n}); // トランザクション終了\n\n// トランザクション外でのDB更新なので UroborosqlTransactionException がスローされる\nagent.updateWith("insert into department (dept_no, dept_name) values (/*dept_no*/1111, /*dept_name*/\'Sales\')")\n .param("dept_no", 2)\n .param("dept_name", "export")\n .count();\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n# 明示的な行ロック時の待機時間(s)のデフォルト値設定 ( SqlAgentFactory#setDefaultForUpdateWaitSeconds ) \nSqlEntityQuery#forUpdateWait()による明示的な行ロックをおこなう際の待機時間を指定することができます。\n\nSqlConfig config = UroboroSQL.builder(...)\n // SqlAgentFactoryの設定\n .setSqlAgentFactory(new SqlAgentFactoryImpl()\n // 明示的な行ロック時の待機時間(s)デフォルト値\n .setDefaultForUpdateWaitSeconds(10)\n )\n ).build();\n\n\n1\n2\n3\n4\n5\n6\n7\n待機時間の初期値を設定することでSqlEntityQuery#forUpdateWait()を発行する際に適用され、 待機時間を都度指定する必要がなくなります。\nSqlEntityQuery#forUpdateWait(int)を使って個別に待機時間を指定した場合は個別設定が優先されます。',normalizedContent:'# sqlagentfactory\nsql実行を行うクラスであるsqlagentを生成するファクトリクラスです。sql実行時の挙動を変更するための初期値の設定が行えます。\n\n設定例\n\nsqlconfig config = uroborosql.builder(...)\n // sqlagentfactoryの設定\n .setsqlagentfactory(new sqlagentfactoryimpl()\n // jdbcフェッチサイズ\n .setfetchsize(1000)\n // statementオブジェクトの検索タイムアウト時間(s)\n .setquerytimeout(10)\n // 例外発生時のログ出力を行うかどうか\n .setoutputexceptionlog(true)\n // sql_idの置換文字列\n .setsqlidkeyname("_sql_id_")\n // 検索結果を格納するmapのキー変換に使用するcaseformatの初期値\n .setdefaultmapkeycaseformat(caseformat.upper_snake_case)\n // 複数件挿入時の挿入方法の初期値\n .setdefaultinsertstype(insertstype.bulk)\n // アプリケーション全体のリトライ設定\n // sqlエラーコードが54,30006のいずれか(oracleのリソース・ビジー)の場合\n .setsqlretrycodelist(arrays.aslist("54", "30006"))\n // 最大リトライ回数\n .setdefaultmaxretrycount(3)\n // リトライ間隔\n .setdefaultsqlretrywaittime(10)\n // トランザクション内での更新を強制するかどうか\n .setforceupdatewithintransaction(true)\n // 明示的な行ロック時の待機時間(s)デフォルト値\n .setdefaultforupdatewaitseconds(10)\n )\n ).build();\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n# フェッチサイズと検索タイムアウト設定 ( sqlagentfactory#setfetchsize /#setquerytimeout )\nsqlagentで検索処理を行う際、データベースから一度に取得する行数(fetchsize)や 検索タイムアウト時間(秒)(querytimeout)の初期値を指定することが出来ます。 指定しない場合fetchsize, querytimeoutともに-1が設定されます。\n\nsqlconfig config = uroborosql.builder(...)\n // sqlagentfactoryの設定\n .setsqlagentfactory(new sqlagentfactoryimpl()\n // jdbcフェッチサイズ\n .setfetchsize(1000)\n // statementオブジェクトの検索タイムアウト時間(s)\n .setquerytimeout(10)\n ).build();\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n補足\n\nfetchsizeは、statement.setfetchsizeに渡される値で、パフォーマンスに影響します。\njdbcクライアント(uroborosqlを使用しているjavaアプリケーション)ではdbサーバ側で実行されたselectの結果セットをfetchサイズで指定された行数ずつ分割して取得します。 そのため結果行数に対してfetchsizeが小さいと、jdbcクライアント <-> dbサーバ間の通信回数が増大してパフォーマンスに悪影響を及ぼします。\n(例:select結果が10,000件、fetchsizeが100の場合、jdbcクライアント⇔dbサーバ間の通信は10,000÷100 = 100回行われる)\n\n注意\n\nfetchsizeはcollect/foreachメソッドで返却される結果セットの行数を制限する設定ではありません。\n\n# 例外発生時のログ出力を行うかどうかを設定 ( sqlagentfactory#setoutputexceptionlog )\nsql実行時にsql例外が発生した場合に、発生した例外と実行したsqlの詳細情報を出力するかどうかを指定できます。 指定しない場合falseになります。\n\nsqlconfig config = uroborosql.builder(...)\n // sqlagentfactoryの設定\n .setsqlagentfactory(new sqlagentfactoryimpl()\n // 例外発生時のログ出力を行うかどうか\n .setoutputexceptionlog(true)\n ).build();\n\n\n1\n2\n3\n4\n5\n6\n# sql_idの置換文字列設定 ( sqlagentfactory#setsqlidkeyname )\nsql文に特定の置換文字列をsqlコメントとして記述することで、sql実行時に実行したsqlの元となるsqlファイルを特定するための 情報(sql_id)を埋め込むことが出来ます。sql_idを埋め込むことでsqlログやdbのsql履歴で実行されたsqlの元となるファイルを 特定しやすくなります。\n必要に応じてこの置換文字列は変更することが出来ます。 指定しない場合_sql_id_になります。\n\n設定例\n\nsqlconfig config = uroborosql.builder(...)\n // sqlagentfactoryの設定\n .setsqlagentfactory(new sqlagentfactoryimpl()\n // sql_idの置換文字列\n .setsqlidkeyname("_sql_id_")\n ).build();\n\n\n1\n2\n3\n4\n5\n6\ndepartment/select_department.sql\n\nselect /* _sql_id_ */ -- _sql_id_ がsqlファイルを特定するための情報の埋め込み先となる\n dept.dept_no as dept_no\n, dept.dept_name as dept_name\n, dept.lock_version as lock_version\nfrom\n department dept\n/*begin*/\nwhere\n/*if sf.isnotempty(deptno)*/\nand dept.dept_no = /*deptno*/1\n/*end*/\n/*if sf.isnotempty(deptname)*/\nand dept.dept_name = /*deptname*/\'sample\'\n/*end*/\n/*end*/\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\nsql実行処理\n\nagent.query("department/select_department")\n .param("deptno", 1)\n .collect();\n\n\n1\n2\n3\n実行されるsql\n\nselect /* department/select_department */ -- _sql_id_ にsql名(department/select_department)が設定される\n dept.dept_no as dept_no\n, dept.dept_name as dept_name\n, dept.lock_version as lock_version\nfrom\n department dept\nwhere\n dept.dept_no = 1/*deptno*/\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n# caseformatの初期値設定 ( sqlagentfactory#setdefaultmapkeycaseformat )\nsqlによる検索で、以下のメソッドを使用してlist>やmapを取得する際、 取得したmapのキー名に対する書式の初期値を指定することが出来ます。 指定しない場合caseformat.upper_snake_caseになります。\n\n対象メソッド 戻り値の型 \nsqlquery#collect() list> \nsqlquery#findfirst() optional> \nsqlquery#first() map \nsqlquery#stream() stream> \n\n指定しない場合(初期設定:caseformat.upper_snake_case)\n\nagent.query("department/select_department").collect();\n\n// 結果(departments) キーがupper_snake_caseとなっている\n[\n {"dept_no"=1, "dept_name"="sales"},\n {"dept_no"=2, "dept_name"="export"},\n {"dept_no"=3, "dept_name"="accounting"},\n {"dept_no"=4, "dept_name"="personnel"}\n]\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\ncaseformat.camel_caseを初期値として設定\n\nsqlconfig config = uroborosql.builder(...)\n // sqlagentfactoryの設定\n .setsqlagentfactory(new sqlagentfactoryimpl()\n // 検索結果を格納するmapのキー変換に使用するcaseformatの初期値\n .setdefaultmapkeycaseformat(caseformat.camel_case)\n ).build();\n\n\n1\n2\n3\n4\n5\n6\nagent.query("department/select_department").collect();\n\n// 結果(departments) キーがcamel_caseとなっている\n[\n {"deptno"=1, "deptname"="sales"},\n {"deptno"=2, "deptname"="export"},\n {"deptno"=3, "deptname"="accounting"},\n {"deptno"=4, "deptname"="personnel"}\n]\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n# 複数件挿入時の挿入方法の初期値設定 ( sqlagentfactory#setdefaultinsertstype )\nsqlagent#inserts()メソッドで使用するinsertstypeの初期値を設定することが出来ます。 指定しない場合insertstype.bulkになります。\n\nsqlconfig config = uroborosql.builder(...)\n // sqlagentfactoryの設定\n .setsqlagentfactory(new sqlagentfactoryimpl()\n // 複数件挿入時の挿入方法の初期値\n .setdefaultinsertstype(insertstype.bulk)\n ).build();\n\n\n1\n2\n3\n4\n5\n6\n# sql実行のリトライ ( sqlagentfactory#setsqlretrycodelist /#setdefaultmaxretrycount /#setdefaultsqlretrywaittime )\nsqlを実行した際、タイミングによって発生する例外(テーブルロックエラーなど)の場合はリトライを行い、 できるだけ正常に処理を終了させたい場合があります。\n通常、このようなケースでは以下のような実装を行います。\n\nstring max_retry_count = 3; // max_retry_count はアプリケーションで定義された最大リトライ回数の定数とする\nsqlconfig config = uroborosql.builder(...).build();\n\nint retrycount = 0;\nfor(;;) {\n try (sqlagent agent = config.agent()) {\n // insert文の実行\n // insert into product (product_id) values (/*product_id*/0);\n agent.update("example/insert_product").param("product_id", 1).count();\n break;\n } catch (uroborosqlsqlexception ex) {\n // sqlexceptionが発生した際に行う処理を実装\n int errorcode = ex.geterrorcode();\n if (errorcode == 30006 || errorcode == 54) {// リソース・ビジー(oracleの場合)\n // リトライ対象エラーコードの場合はリトライカウントをカウントアップしてリトライする\n retrycount++;\n if (retrycount == max_retry_count) {\n // 最大リトライ回数に達した場合は例外をスローする\n throw ex;\n } else {\n try {\n // 10ms 待機\n thread.sleep(10);\n } catch (interruptedexception iex) {\n // do nothing\n }\n }\n } else {\n // リトライ対象エラーコード以外はすぐに例外をスローする\n throw ex;\n }\n }\n}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\nしかし、上記のようなリトライ処理を個々の実装で行うと、 実装漏れや実装ミス、実装方法の差異(for()の代わりにwhile()を使用するなど)により不具合が発生しやすくなります。\nuroborosqlでは、アプリケーション全体のリトライ設定と、全体設定より優先される個別処理でのリトライ用apiの 2種類のapiを提供することで、より簡潔で確実なリトライ処理が行えるよう工夫されています。\nアプリケーション全体のリトライ設定はsqlagentfactory生成時に行います。\n\nsqlconfig config = uroborosql.builder(...)\n // sqlagentfactoryの設定\n .setsqlagentfactory(new sqlagentfactoryimpl()\n // アプリケーション全体のリトライ設定\n // sqlエラーコードが54,30006のいずれか(oracleのリソース・ビジー)の場合\n .setsqlretrycodelist(arrays.aslist("54", "30006"))\n // 最大リトライ回数(3回)リトライ\n .setdefaultmaxretrycount(3)\n // リトライ間隔10ms待機\n .setdefaultsqlretrywaittime(10)\n ).build();\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\nリトライapiを用いた実装は次のようになります。\n\n// アプリケーション全体のリトライ設定に従ってリトライを行う。(個別のリトライ指定なし)\ntry (sqlagent agent = config.agent()) {\n // insert文の実行\n // insert into product (product_id) values (/*product_id*/0);\n agent.update("example/insert_product")\n .param("product_id", 1)\n .count();\n}\n\n// 個別にリトライ設定を上書きする(retry()を利用)\ntry (sqlagent agent = config.agent()) {\n // insert文の実行\n // insert into product (product_id) values (/*product_id*/0);\n // リトライ対象エラーコードの場合、5回のリトライを20ms間隔で行う\n agent.update("example/insert_product")\n .param("product_id", 1)\n .retry(5, 20)\n .count();\n}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n# db更新処理をトランザクション内のみに強制 ( sqlagentfactory#setforceupdatewithintransaction ) \n複数のdb更新処理をまとめて行う際、途中で例外が発生するとdbデータが不整合な状態になる場合があります。このようなデータ不整合を防ぐためにはトランザクションを利用します。\nしかし、通常の設定ではトランザクションを開始しない状態でもdb更新処理を行うことが可能になっているため不具合に気付きにくいという問題があります。\nuroborosqlではトランザクションを開始していない状態でdb更新処理が行なわれた場合に例外をスローするオプションを提供しています。このオプションを使用することでdbデータの整合性を維持しやすくなります。\n\nsqlconfig config = uroborosql.builder(...)\n // sqlagentfactoryの設定\n .setsqlagentfactory(new sqlagentfactoryimpl()\n // トランザクション内での更新を強制するかどうか\n .setforceupdatewithintransaction(true)\n )\n ).build();\n\n\n1\n2\n3\n4\n5\n6\n7\nsqlagentfactory#setforceupdatewithintransaction()にtrueを指定することでトランザクションを開始していない状態でdb更新処理が行なわれた場合にuroborosqltransactionexceptionがスローされます。\n\nagent.required(() -> { // トランザクション開始\n // トランザクション内でのdb更新なのでok\n agent.updatewith("insert into employee (emp_no) values (/*emp_no*/1001)")\n .param("emp_no", 1)\n .count();\n });\n}); // トランザクション終了\n\n// トランザクション外でのdb更新なので uroborosqltransactionexception がスローされる\nagent.updatewith("insert into department (dept_no, dept_name) values (/*dept_no*/1111, /*dept_name*/\'sales\')")\n .param("dept_no", 2)\n .param("dept_name", "export")\n .count();\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n# 明示的な行ロック時の待機時間(s)のデフォルト値設定 ( sqlagentfactory#setdefaultforupdatewaitseconds ) \nsqlentityquery#forupdatewait()による明示的な行ロックをおこなう際の待機時間を指定することができます。\n\nsqlconfig config = uroborosql.builder(...)\n // sqlagentfactoryの設定\n .setsqlagentfactory(new sqlagentfactoryimpl()\n // 明示的な行ロック時の待機時間(s)デフォルト値\n .setdefaultforupdatewaitseconds(10)\n )\n ).build();\n\n\n1\n2\n3\n4\n5\n6\n7\n待機時間の初期値を設定することでsqlentityquery#forupdatewait()を発行する際に適用され、 待機時間を都度指定する必要がなくなります。\nsqlentityquery#forupdatewait(int)を使って個別に待機時間を指定した場合は個別設定が優先されます。',charsets:{cjk:!0}},{title:"Dialect",frontmatter:{meta:[{name:"og:title",content:"Dialect"},{name:"og:url",content:"/uroborosql-doc/configuration/dialect.html"}]},regularPath:"/configuration/dialect.html",relativePath:"configuration/dialect.md",key:"v-8d9b3ed2",path:"/configuration/dialect.html",headers:[{level:2,title:"カスタムDialectの登録",slug:"カスタムdialectの登録",normalizedTitle:"カスタムdialectの登録",charIndex:703}],lastUpdated:"2020-11-19 23:55:38",headersStr:"カスタムDialectの登録",content:'# Dialect\n複数のDBを対象とするアプリケーションを作成する場合、DB毎のSQL文法の差異を吸収するため アプリケーションで対象DBを判定し実行するSQLファイルを切り替える、といった対応が必要になります。uroboroSQLでは、こういったDB毎のSQL文法の差異に対応するため、Dialectという仕組みを提供しています。\nDialectは接続したDBから取得できる情報を元に自動で判別される為、通常は変更する必要はありません。\n\n現在、標準で以下のDBに対するDialectが提供されています。\n\nDB名 Dialect \nH2 DB H2Dialect \nMicrosoft SQL Server MsSqlDialect \nMySQL MySqlDialect \nOracle10g以下 Oracle10Dialect \nOracle11g Oracle11Dialect \nOracle12c以上 Oracle12Dialect \nPostgresql PostgresqlDialect \nその他 DefaultDialect \n\nWARNING\n\n該当するDBが見つからない場合はDefaultDialectが適用されます\n\n# カスタムDialectの登録\n標準でサポートしている上記のDB以外に接続し、DefaultDialectと違う動作をさせたい場合は、対象のDBに対するDialectクラスを作成してuroboroSQLに登録する必要があります。\n\nDialectの登録には、Javaの java.util.ServiceLoaderを利用します。\n\n最初に対象のDB(ここではSQLiteとする)に対するDialectクラスを作成します。\n\npackage foo.bar.dialect;\n\npublic class SqliteDialect extends AbstractDialect {\n /**\n * コンストラクタ\n */\n public SqliteDialect() {\n super();\n }\n\n @Override\n public String getDatabaseName() {\n return "SQLite"; // 対象DBの製品名を特定するための文字列を返す\n }\n\n // supportsXXXメソッド、isXXXメソッド、getXXXメソッドを必要に応じて実装\n}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\nDialectインタフェースで提供すべきメソッドは以下になります。\n\nメソッド名 戻り値 説明 \nsupportsBulkInsert() boolean BULK INSERTをサポートするかどうか \nsupportsLimitClause() boolean LIMIT句をサポートするかどうか \nsupportsOptimizerHints() boolean オプティマイザーヒントをサポートするかどうか \nsupportsNullValuesOrdering() boolean SELECT句のORDER BYでNULL値の順序を指定できるか(NULLS FIRST/LAST) \nsupportsIdentity() boolean データベースのIDカラムを使用したID自動採番をサポートしているか \nsupportsSequence() boolean データベースのシーケンスを使用したID自動採番をサポートしているか \nsupportsForUpdate() boolean 明示的な行ロックをサポートしているか \nsupportsForUpdateNoWait() boolean 明示的な行ロック(待機なし)をサポートしているか \nsupportsForUpdateWait() boolean 明示的な行ロック(待機あり)をサポートしているか \nisRemoveTerminator() boolean 実行するSQLに記述されている終端文字(;)を削除するかどうか \nisRollbackToSavepointBeforeRetry() boolean リトライする前に設定したSavepointまでロールバックするかどうか \ngetSequenceNextValSql(String sequenceName) String シーケンスを取得するためのSQL文を取得する \ngetLimitClause(long limit, long offset) String LIMIT句(とOFFSET句)を取得する \nescapeLikePattern(CharSequence pattern) String LIKE演算子のパターン文字列をエスケープする \ngetJavaType(JDBCType jdbcType, String jdbcTypeName) JavaType 引数で渡ってきたJavaTypeを変換したJavaTypeを取得する。(DB固有のJava型変換を行う場合に実装) \ngetJavaType(int jdbcType, String jdbcTypeName) JavaType 引数で渡ってきたJavaTypeを変換したJavaTypeを取得する。(DB固有のJava型変換を行う場合に実装) \ngetDatabaseName() String データベースを判別するための文字列を取得する \ngetDatabaseType() String データベースの種別を表す名前を取得する \ngetEscapeChar() char LIKE句で指定するエスケープキャラクタを取得する \naddForUpdateClause(StringBuilder sql, ForUpdateType forUpdateType, int waitSeconds) StringBuilder FOR UPDATE句の文字列をSQLに追加する \naddOptimizerHints(StringBuilder sql, List hints) StringBuilder 引数で渡したSQLにオプティマイザーヒントを付与する \ngetModLiteral(final String dividend, final String divisor) StringBuilder 乗除を行うためのSQL文字列を取得する \ngetPessimisticLockingErrorCodes() Set 悲観ロックのErrorCode もしくは SqlStateを取得する \n\nDialectインタフェースのデフォルト実装やAbstractDialectクラスを参考に、上記のメソッドのうち変更が必要なメソッドの実装を行ってください。\n\n次にuroboroSQLを利用するアプリケーションのクラスパス上に以下のファイル名のファイルを作成します。\n\nMETA-INF\n └─services\n └─jp.co.future.uroborosql.dialect.Dialect\n\n\n1\n2\n3\n最後に作成したjp.co.future.uroborosql.dialect.Dialectファイルの中に作成したDialectのクラス名(FQDN名)を記述します。\n\nfoo.bar.dialect.SqliteDialect\n\n\n1\nアプリケーションでjp.co.future.uroborosql.dialect.DialectがServiceLoader経由で読み込まれれば登録したSqliteDialectが利用可能になります。',normalizedContent:'# dialect\n複数のdbを対象とするアプリケーションを作成する場合、db毎のsql文法の差異を吸収するため アプリケーションで対象dbを判定し実行するsqlファイルを切り替える、といった対応が必要になります。uroborosqlでは、こういったdb毎のsql文法の差異に対応するため、dialectという仕組みを提供しています。\ndialectは接続したdbから取得できる情報を元に自動で判別される為、通常は変更する必要はありません。\n\n現在、標準で以下のdbに対するdialectが提供されています。\n\ndb名 dialect \nh2 db h2dialect \nmicrosoft sql server mssqldialect \nmysql mysqldialect \noracle10g以下 oracle10dialect \noracle11g oracle11dialect \noracle12c以上 oracle12dialect \npostgresql postgresqldialect \nその他 defaultdialect \n\nwarning\n\n該当するdbが見つからない場合はdefaultdialectが適用されます\n\n# カスタムdialectの登録\n標準でサポートしている上記のdb以外に接続し、defaultdialectと違う動作をさせたい場合は、対象のdbに対するdialectクラスを作成してuroborosqlに登録する必要があります。\n\ndialectの登録には、javaの java.util.serviceloaderを利用します。\n\n最初に対象のdb(ここではsqliteとする)に対するdialectクラスを作成します。\n\npackage foo.bar.dialect;\n\npublic class sqlitedialect extends abstractdialect {\n /**\n * コンストラクタ\n */\n public sqlitedialect() {\n super();\n }\n\n @override\n public string getdatabasename() {\n return "sqlite"; // 対象dbの製品名を特定するための文字列を返す\n }\n\n // supportsxxxメソッド、isxxxメソッド、getxxxメソッドを必要に応じて実装\n}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\ndialectインタフェースで提供すべきメソッドは以下になります。\n\nメソッド名 戻り値 説明 \nsupportsbulkinsert() boolean bulk insertをサポートするかどうか \nsupportslimitclause() boolean limit句をサポートするかどうか \nsupportsoptimizerhints() boolean オプティマイザーヒントをサポートするかどうか \nsupportsnullvaluesordering() boolean select句のorder byでnull値の順序を指定できるか(nulls first/last) \nsupportsidentity() boolean データベースのidカラムを使用したid自動採番をサポートしているか \nsupportssequence() boolean データベースのシーケンスを使用したid自動採番をサポートしているか \nsupportsforupdate() boolean 明示的な行ロックをサポートしているか \nsupportsforupdatenowait() boolean 明示的な行ロック(待機なし)をサポートしているか \nsupportsforupdatewait() boolean 明示的な行ロック(待機あり)をサポートしているか \nisremoveterminator() boolean 実行するsqlに記述されている終端文字(;)を削除するかどうか \nisrollbacktosavepointbeforeretry() boolean リトライする前に設定したsavepointまでロールバックするかどうか \ngetsequencenextvalsql(string sequencename) string シーケンスを取得するためのsql文を取得する \ngetlimitclause(long limit, long offset) string limit句(とoffset句)を取得する \nescapelikepattern(charsequence pattern) string like演算子のパターン文字列をエスケープする \ngetjavatype(jdbctype jdbctype, string jdbctypename) javatype 引数で渡ってきたjavatypeを変換したjavatypeを取得する。(db固有のjava型変換を行う場合に実装) \ngetjavatype(int jdbctype, string jdbctypename) javatype 引数で渡ってきたjavatypeを変換したjavatypeを取得する。(db固有のjava型変換を行う場合に実装) \ngetdatabasename() string データベースを判別するための文字列を取得する \ngetdatabasetype() string データベースの種別を表す名前を取得する \ngetescapechar() char like句で指定するエスケープキャラクタを取得する \naddforupdateclause(stringbuilder sql, forupdatetype forupdatetype, int waitseconds) stringbuilder for update句の文字列をsqlに追加する \naddoptimizerhints(stringbuilder sql, list hints) stringbuilder 引数で渡したsqlにオプティマイザーヒントを付与する \ngetmodliteral(final string dividend, final string divisor) stringbuilder 乗除を行うためのsql文字列を取得する \ngetpessimisticlockingerrorcodes() set 悲観ロックのerrorcode もしくは sqlstateを取得する \n\ndialectインタフェースのデフォルト実装やabstractdialectクラスを参考に、上記のメソッドのうち変更が必要なメソッドの実装を行ってください。\n\n次にuroborosqlを利用するアプリケーションのクラスパス上に以下のファイル名のファイルを作成します。\n\nmeta-inf\n └─services\n └─jp.co.future.uroborosql.dialect.dialect\n\n\n1\n2\n3\n最後に作成したjp.co.future.uroborosql.dialect.dialectファイルの中に作成したdialectのクラス名(fqdn名)を記述します。\n\nfoo.bar.dialect.sqlitedialect\n\n\n1\nアプリケーションでjp.co.future.uroborosql.dialect.dialectがserviceloader経由で読み込まれれば登録したsqlitedialectが利用可能になります。',charsets:{cjk:!0}},{title:"SqlFilterManager",frontmatter:{meta:[{name:"og:title",content:"SqlFilterManager"},{name:"og:url",content:"/uroborosql-doc/configuration/sql-filter-manager.html"}]},regularPath:"/configuration/sql-filter-manager.html",relativePath:"configuration/sql-filter-manager.md",key:"v-128c3003",path:"/configuration/sql-filter-manager.html",headers:[{level:2,title:"SQLフィルター",slug:"sqlフィルター",normalizedTitle:"sqlフィルター",charIndex:21}],lastUpdated:"2019-9-4 23:08:33",headersStr:"SQLフィルター",content:'# SqlFilterManager\n# SQLフィルター\nuroboroSQLではSQLの実行を行う一連の処理の流れの中にいくつかの拡張ポイントを設けており、この拡張ポイントに処理を追加することで、共通的なSQL文の加工や検索結果の記録といった様々な拡張を行うことができるように設計されています。\n\nSQL処理の拡張はSqlFilterインタフェースを実装したクラスを作成し登録することで行います。\nSqlFilterインタフェースには以下のメソッドが定義されています。\n\nSqlFilterメソッド名 説明 \ninitialize SqlFilterの初期化を行う \ndoTransformSql 変換前のSQLに対して加工を行う \ndoParameter バインドパラメータの加工を行う \ndoOutParameter ストアドプロシージャのOutParameterの加工を行う \ndoPreparedStatement PreparedStatementの加工を行う \ndoCallableStatement CallableStatementの加工を行う \ndoQuery 検索処理結果の加工を行う \ndoUpdate 更新処理結果の加工を行う \ndoBatch バッチ処理結果の加工を行う \ndoProcedure Procedure呼出処理結果の加工を行う \n\nuroboroSQLには標準でいくつかのSqlFilterの実装が含まれています。\n\nクラス名 説明 \njp.co.future.uroborosql.filter.DebugSqlFilter SqlFilterの動作を理解するためのサンプル。各拡張ポイントで呼び出されるメソッドでログを出力します。 \njp.co.future.uroborosql.filter.DumpResultSqlFilter 検索結果を表形式でログ出力するSQLフィルター。SqlREPLで使用しています。 \njp.co.future.uroborosql.filter.WrapContextSqlFilter SQL文の前後に文字列を追加するSQLフィルター。ページングや検索件数の上限設定に使用します。 \njp.co.future.uroborosql.filter.SecretColumnSqlFilter 指定した特定のカラムのみ暗号化を行うSQLフィルター。パスワードや機密情報を暗号化してDBに格納するために使用します。 \njp.co.future.uroborosql.filter.AuditLogSqlFilter 監査記録を取得するためのSQLフィルター。 \n\nSQLフィルターを利用するためには、SqlConfig生成時にSqlFilterManagerの設定を追加して利用するSQLフィルターの登録を行ってください。\nSQLフィルターは複数登録することができます。複数登録した場合は登録した順にSQLフィルターが処理されます。\n\n// create SqlConfig\nSqlConfig config = UroboroSQL\n .builder(...)\n // SqlFilterManagerの設定\n .setSqlFilterManager(new SqlFilterManagerImpl()\n // DumpResultSqlFilterの登録\n .addSqlFilter(new DumpResultSqlFilter())\n // WrapContextSqlFilterの登録\n .addSqlFilter(new WrapContextSqlFilter("",\n "LIMIT /*$maxRowCount*/10 OFFSET /*$startRowIndex*/0",\n ".*FOR\\\\sUPDATE.*"))\n ).build();\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n独自にSqlFilterを作成する場合は、jp.co.future.uroborosql.filter.AbstractSqlFilterを継承し、必要に応じてメソッドをオーバーライドしてください。\n\npublic class CustomSqlFilter extends AbstractSqlFilter {\n\n // 途中略\n\n @Override\n public ResultSet doQuery(SqlContext sqlContext, PreparedStatement preparedStatement, ResultSet resultSet) {\n // フィルター処理の実装\n }\n}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9',normalizedContent:'# sqlfiltermanager\n# sqlフィルター\nuroborosqlではsqlの実行を行う一連の処理の流れの中にいくつかの拡張ポイントを設けており、この拡張ポイントに処理を追加することで、共通的なsql文の加工や検索結果の記録といった様々な拡張を行うことができるように設計されています。\n\nsql処理の拡張はsqlfilterインタフェースを実装したクラスを作成し登録することで行います。\nsqlfilterインタフェースには以下のメソッドが定義されています。\n\nsqlfilterメソッド名 説明 \ninitialize sqlfilterの初期化を行う \ndotransformsql 変換前のsqlに対して加工を行う \ndoparameter バインドパラメータの加工を行う \ndooutparameter ストアドプロシージャのoutparameterの加工を行う \ndopreparedstatement preparedstatementの加工を行う \ndocallablestatement callablestatementの加工を行う \ndoquery 検索処理結果の加工を行う \ndoupdate 更新処理結果の加工を行う \ndobatch バッチ処理結果の加工を行う \ndoprocedure procedure呼出処理結果の加工を行う \n\nuroborosqlには標準でいくつかのsqlfilterの実装が含まれています。\n\nクラス名 説明 \njp.co.future.uroborosql.filter.debugsqlfilter sqlfilterの動作を理解するためのサンプル。各拡張ポイントで呼び出されるメソッドでログを出力します。 \njp.co.future.uroborosql.filter.dumpresultsqlfilter 検索結果を表形式でログ出力するsqlフィルター。sqlreplで使用しています。 \njp.co.future.uroborosql.filter.wrapcontextsqlfilter sql文の前後に文字列を追加するsqlフィルター。ページングや検索件数の上限設定に使用します。 \njp.co.future.uroborosql.filter.secretcolumnsqlfilter 指定した特定のカラムのみ暗号化を行うsqlフィルター。パスワードや機密情報を暗号化してdbに格納するために使用します。 \njp.co.future.uroborosql.filter.auditlogsqlfilter 監査記録を取得するためのsqlフィルター。 \n\nsqlフィルターを利用するためには、sqlconfig生成時にsqlfiltermanagerの設定を追加して利用するsqlフィルターの登録を行ってください。\nsqlフィルターは複数登録することができます。複数登録した場合は登録した順にsqlフィルターが処理されます。\n\n// create sqlconfig\nsqlconfig config = uroborosql\n .builder(...)\n // sqlfiltermanagerの設定\n .setsqlfiltermanager(new sqlfiltermanagerimpl()\n // dumpresultsqlfilterの登録\n .addsqlfilter(new dumpresultsqlfilter())\n // wrapcontextsqlfilterの登録\n .addsqlfilter(new wrapcontextsqlfilter("",\n "limit /*$maxrowcount*/10 offset /*$startrowindex*/0",\n ".*for\\\\supdate.*"))\n ).build();\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n独自にsqlfilterを作成する場合は、jp.co.future.uroborosql.filter.abstractsqlfilterを継承し、必要に応じてメソッドをオーバーライドしてください。\n\npublic class customsqlfilter extends abstractsqlfilter {\n\n // 途中略\n\n @override\n public resultset doquery(sqlcontext sqlcontext, preparedstatement preparedstatement, resultset resultset) {\n // フィルター処理の実装\n }\n}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9',charsets:{cjk:!0}},{title:"トランザクション",frontmatter:{meta:[{name:"og:title",content:"トランザクション"},{name:"og:url",content:"/uroborosql-doc/basics/transaction.html"}]},regularPath:"/basics/transaction.html",relativePath:"basics/transaction.md",key:"v-735be0bb",path:"/basics/transaction.html",headers:[{level:2,title:"トランザクションの開始と終了 ( SqlAgent#required /#requiredNew /#notSupported )",slug:"トランザクションの開始と終了-sqlagent-required-requirednew-notsupported",normalizedTitle:"トランザクションの開始と終了 ( sqlagent#required /#requirednew /#notsupported )",charIndex:109},{level:2,title:"コミットとロールバック ( SqlAgent#commit /#setRollbackOnly )",slug:"コミットとロールバック-sqlagent-commit-setrollbackonly",normalizedTitle:"コミットとロールバック ( sqlagent#commit /#setrollbackonly )",charIndex:1367},{level:2,title:"セーブポイント ( SqlAgent#setSavepoint /#rollback /#releaseSavepoint)",slug:"セーブポイント-sqlagent-setsavepoint-rollback-releasesavepoint",normalizedTitle:"セーブポイント ( sqlagent#setsavepoint /#rollback /#releasesavepoint)",charIndex:2401},{level:3,title:"セーブポイントスコープ(SqlAgent#savepointScope)",slug:"セーブポイントスコープ-sqlagent-savepointscope",normalizedTitle:"セーブポイントスコープ(sqlagent#savepointscope)",charIndex:3061},{level:2,title:"エラーハンドリング ( UroborosqlSQLException )",slug:"エラーハンドリング-uroborosqlsqlexception",normalizedTitle:"エラーハンドリング ( uroborosqlsqlexception )",charIndex:3874}],lastUpdated:"2020-3-8 21:44:34",headersStr:"トランザクションの開始と終了 ( SqlAgent#required /#requiredNew /#notSupported ) コミットとロールバック ( SqlAgent#commit /#setRollbackOnly ) セーブポイント ( SqlAgent#setSavepoint /#rollback /#releaseSavepoint) セーブポイントスコープ(SqlAgent#savepointScope) エラーハンドリング ( UroborosqlSQLException )",content:'# トランザクション\nuroboroSQLではローカルトランザクションを提供します。\nトランザクションを利用することで、エラー発生時でも一部のデータだけ登録を成功させるといった細かな制御ができるようになります。\n\n# トランザクションの開始と終了 ( SqlAgent#required /#requiredNew /#notSupported )\nuroboroSQLで提供するトランザクションのレベルは以下の3つです\n\nトランザクションタイプ トランザクション有り トランザクションなし \nrequired トランザクション内で処理を実行 新たなトランザクションを開始して処理を実行 \nrequiresNew 既存のトランザクションを停止し、新たなトランザクションを開始して処理を実行。 新たなトランザクションを開始して処理を実行 \n トランザクションが終了すると停止していたトランザクションを再開させる \nnotSupported 既存のトランザクションを停止し、トランザクション外で処理を実行。 トランザクション外で処理を実行 \n 処理が終了すると停止していたトランザクションを再開させる \n\nSqlAgentインタフェースにトランザクションタイプに応じたメソッドが提供されており、そのメソッドを呼び出すことでトランザクションの開始と終了を制御します。\n\nagent.required(() -> {\n // トランザクション開始\n agent.updateWith("insert into employee (emp_no) values (/*emp_no*/1001)")\n .param("emp_no", 1)\n .count();\n\n agent.requiresNew(() -> {\n // 新しい トランザクション開始\n agent.updateWith("insert into department (dept_no, dept_name) values (/*dept_no*/1111, /*dept_name*/\'Sales\')")\n .param("dept_no", 2)\n .param("dept_name", "export")\n .count();\n // 新しい トランザクション終了 commit\n });\n // トランザクション終了 commit\n});\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\nTIP\n\n設定によりDB更新処理の実行をトランザクション内で行うことを強制することができます。詳しくはDB更新処理をトランザクション内のみに強制を参照してください。\n\n# コミットとロールバック ( SqlAgent#commit /#setRollbackOnly )\nトランザクションのlambda式が正常に終了すればトランザクションはコミットされます。\nトランザクションのlambda式が例外をスローした場合はトランザクションをロールバックします。\n明示的にコミットを行う場合はSqlAgent#commit()を呼び出します。\n例外をスローせずに明示的にロールバックを行う場合はSqlAgent#setRollbackOnly()を呼び出します。\n\nagent.required(() -> {\n // トランザクション開始\n agent.updateWith("insert into employee (emp_no) values (/*emp_no*/1001)")\n .param("emp_no", 1)\n .count();\n\n // 新しい トランザクション開始\n agent.requiresNew(() -> {\n agent.updateWith("insert into department (dept_no, dept_name) values (/*dept_no*/1, /*dept_name*/\'\')")\n .param("dept_no", 2)\n .param("dept_name", "Production")\n .count();\n // 明示的なcommit\n agent.commit();\n\n agent.updateWith("insert into department (dept_no, dept_name) values (/*dept_no*/1, /*dept_name*/\'\')")\n .param("dept_no", 3)\n .param("dept_name", "export")\n .count();\n // 明示的なrollback\n agent.setRollbackOnly();\n // 新しい トランザクション終了\n });\n // トランザクション終了 commit\n});\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n# セーブポイント ( SqlAgent#setSavepoint /#rollback /#releaseSavepoint)\nトランザクション内にセーブポイントを設けることで、トランザクション内の特定の操作のみ取り消すといった細かな制御ができます。\n\nagent.required(() -> {\n // トランザクション開始\n agent.update("employee/insert_employee")\n .param("emp_no", 1001)\n .count();\n\n // セーブポイント(名前:sp)の設定\n agent.setSavepoint("sp");\n agent.update("employee/insert_employee")\n .param("emp_no", 1002)\n .count();\n\n assertThat(agent.query("employee/select_employee").collect().size(), 2);\n\n // 最後のinsertを取消(セーブポイント(名前:sp)までロールバック)\n agent.rollback("sp");\n\n assertThat(agent.query("employee/select_employee").collect().size(), 1);\n});\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n# セーブポイントスコープ(SqlAgent#savepointScope) \nSqlAgent#savepointScope() を使用して、より確実にsavepointの制御を行うことができます。\n\n// SqlAgent#savepoint()を使ったsavepointの実装\nagent.required(() -> {\n // トランザクション開始\n agent.update("employee/insert_employee")\n .param("emp_no", 1001)\n .count();\n\n // セーブポイントスコープの開始\n agent.savepointScope(() -> {\n agent.update("employee/insert_employee")\n .param("emp_no", 1002)\n .count();\n\n assertThat(agent.query("employee/select_employee").collect().size(), 2);\n // savepointScope内の処理を取り消す場合は例外をスローする\n throw new UroborosqlRuntimeException();\n })\n assertThat(agent.query("employee/select_employee").collect().size(), 1);\n});\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\nTIP\n\nPostgreSQLについては、自動的にセーブポイントを利用したトランザクションの部分ロールバックに対応しています。 詳細は、PostgreSQLのトランザクション内SQLエラー対応を参照してください。\n\n# エラーハンドリング ( UroborosqlSQLException )\nuroboroSQLからSQLを実行した際にSQLExceptionがスローされると、 そのSQLExceptionを内部に保持するUroborosqlSQLExceptionが呼び出し元に返却されます。\nUroborosqlSQLExceptionはjava.lang.RuntimeExceptionを継承しているため明示的なキャッチは不要です。\n\n呼出元のアプリケーションで明示的にエラーハンドリングを行う場合は、try-catchでUroborosqlSQLExceptionをキャッチすることで、 例外発生時の挙動を制御することができます。\n\nエラーハンドリングの例\n\nSqlConfig config = UroboroSQL.builder(...).build();\n\ntry (SqlAgent agent = config.agent()) {\n // INSERT文の実行\n // insert into product (product_id) values (/*product_id*/0);\n agent.update("example/insert_product")\n .param("product_id", 1)\n .count();\n} catch (UroborosqlSQLException ex) {\n // SQLExceptionが発生した際に行う処理を実装\n throw new Exception("exception occured. ex=" + ex.getCause().getMessage(), ex);\n}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12',normalizedContent:'# トランザクション\nuroborosqlではローカルトランザクションを提供します。\nトランザクションを利用することで、エラー発生時でも一部のデータだけ登録を成功させるといった細かな制御ができるようになります。\n\n# トランザクションの開始と終了 ( sqlagent#required /#requirednew /#notsupported )\nuroborosqlで提供するトランザクションのレベルは以下の3つです\n\nトランザクションタイプ トランザクション有り トランザクションなし \nrequired トランザクション内で処理を実行 新たなトランザクションを開始して処理を実行 \nrequiresnew 既存のトランザクションを停止し、新たなトランザクションを開始して処理を実行。 新たなトランザクションを開始して処理を実行 \n トランザクションが終了すると停止していたトランザクションを再開させる \nnotsupported 既存のトランザクションを停止し、トランザクション外で処理を実行。 トランザクション外で処理を実行 \n 処理が終了すると停止していたトランザクションを再開させる \n\nsqlagentインタフェースにトランザクションタイプに応じたメソッドが提供されており、そのメソッドを呼び出すことでトランザクションの開始と終了を制御します。\n\nagent.required(() -> {\n // トランザクション開始\n agent.updatewith("insert into employee (emp_no) values (/*emp_no*/1001)")\n .param("emp_no", 1)\n .count();\n\n agent.requiresnew(() -> {\n // 新しい トランザクション開始\n agent.updatewith("insert into department (dept_no, dept_name) values (/*dept_no*/1111, /*dept_name*/\'sales\')")\n .param("dept_no", 2)\n .param("dept_name", "export")\n .count();\n // 新しい トランザクション終了 commit\n });\n // トランザクション終了 commit\n});\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\ntip\n\n設定によりdb更新処理の実行をトランザクション内で行うことを強制することができます。詳しくはdb更新処理をトランザクション内のみに強制を参照してください。\n\n# コミットとロールバック ( sqlagent#commit /#setrollbackonly )\nトランザクションのlambda式が正常に終了すればトランザクションはコミットされます。\nトランザクションのlambda式が例外をスローした場合はトランザクションをロールバックします。\n明示的にコミットを行う場合はsqlagent#commit()を呼び出します。\n例外をスローせずに明示的にロールバックを行う場合はsqlagent#setrollbackonly()を呼び出します。\n\nagent.required(() -> {\n // トランザクション開始\n agent.updatewith("insert into employee (emp_no) values (/*emp_no*/1001)")\n .param("emp_no", 1)\n .count();\n\n // 新しい トランザクション開始\n agent.requiresnew(() -> {\n agent.updatewith("insert into department (dept_no, dept_name) values (/*dept_no*/1, /*dept_name*/\'\')")\n .param("dept_no", 2)\n .param("dept_name", "production")\n .count();\n // 明示的なcommit\n agent.commit();\n\n agent.updatewith("insert into department (dept_no, dept_name) values (/*dept_no*/1, /*dept_name*/\'\')")\n .param("dept_no", 3)\n .param("dept_name", "export")\n .count();\n // 明示的なrollback\n agent.setrollbackonly();\n // 新しい トランザクション終了\n });\n // トランザクション終了 commit\n});\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n# セーブポイント ( sqlagent#setsavepoint /#rollback /#releasesavepoint)\nトランザクション内にセーブポイントを設けることで、トランザクション内の特定の操作のみ取り消すといった細かな制御ができます。\n\nagent.required(() -> {\n // トランザクション開始\n agent.update("employee/insert_employee")\n .param("emp_no", 1001)\n .count();\n\n // セーブポイント(名前:sp)の設定\n agent.setsavepoint("sp");\n agent.update("employee/insert_employee")\n .param("emp_no", 1002)\n .count();\n\n assertthat(agent.query("employee/select_employee").collect().size(), 2);\n\n // 最後のinsertを取消(セーブポイント(名前:sp)までロールバック)\n agent.rollback("sp");\n\n assertthat(agent.query("employee/select_employee").collect().size(), 1);\n});\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n# セーブポイントスコープ(sqlagent#savepointscope) \nsqlagent#savepointscope() を使用して、より確実にsavepointの制御を行うことができます。\n\n// sqlagent#savepoint()を使ったsavepointの実装\nagent.required(() -> {\n // トランザクション開始\n agent.update("employee/insert_employee")\n .param("emp_no", 1001)\n .count();\n\n // セーブポイントスコープの開始\n agent.savepointscope(() -> {\n agent.update("employee/insert_employee")\n .param("emp_no", 1002)\n .count();\n\n assertthat(agent.query("employee/select_employee").collect().size(), 2);\n // savepointscope内の処理を取り消す場合は例外をスローする\n throw new uroborosqlruntimeexception();\n })\n assertthat(agent.query("employee/select_employee").collect().size(), 1);\n});\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\ntip\n\npostgresqlについては、自動的にセーブポイントを利用したトランザクションの部分ロールバックに対応しています。 詳細は、postgresqlのトランザクション内sqlエラー対応を参照してください。\n\n# エラーハンドリング ( uroborosqlsqlexception )\nuroborosqlからsqlを実行した際にsqlexceptionがスローされると、 そのsqlexceptionを内部に保持するuroborosqlsqlexceptionが呼び出し元に返却されます。\nuroborosqlsqlexceptionはjava.lang.runtimeexceptionを継承しているため明示的なキャッチは不要です。\n\n呼出元のアプリケーションで明示的にエラーハンドリングを行う場合は、try-catchでuroborosqlsqlexceptionをキャッチすることで、 例外発生時の挙動を制御することができます。\n\nエラーハンドリングの例\n\nsqlconfig config = uroborosql.builder(...).build();\n\ntry (sqlagent agent = config.agent()) {\n // insert文の実行\n // insert into product (product_id) values (/*product_id*/0);\n agent.update("example/insert_product")\n .param("product_id", 1)\n .count();\n} catch (uroborosqlsqlexception ex) {\n // sqlexceptionが発生した際に行う処理を実装\n throw new exception("exception occured. ex=" + ex.getcause().getmessage(), ex);\n}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12',charsets:{cjk:!0}},{title:"開発者ガイド",frontmatter:{meta:[{name:"og:title",content:"開発者ガイド"},{name:"og:url",content:"/uroborosql-doc/developer_guide/"}]},regularPath:"/developer_guide/",relativePath:"developer_guide/README.md",key:"v-3a989818",path:"/developer_guide/",headers:[{level:2,title:"ソースコードの取得",slug:"ソースコードの取得",normalizedTitle:"ソースコードの取得",charIndex:37},{level:2,title:"ソースのビルド",slug:"ソースのビルド",normalizedTitle:"ソースのビルド",charIndex:135},{level:2,title:"テスト",slug:"テスト",normalizedTitle:"テスト",charIndex:187},{level:2,title:"Mavenローカルリポジトリへのインストール",slug:"mavenローカルリポジトリへのインストール",normalizedTitle:"mavenローカルリポジトリへのインストール",charIndex:438},{level:2,title:"IDE",slug:"ide",normalizedTitle:"ide",charIndex:479},{level:3,title:"Eclipse",slug:"eclipse",normalizedTitle:"eclipse",charIndex:485},{level:3,title:"Intellij",slug:"intellij",normalizedTitle:"intellij",charIndex:632},{level:2,title:"Continuous Integration",slug:"continuous-integration",normalizedTitle:"continuous integration",charIndex:764},{level:2,title:"Issue Management",slug:"issue-management",normalizedTitle:"issue management",charIndex:1007}],lastUpdated:"2019-9-4 23:08:33",headersStr:"ソースコードの取得 ソースのビルド テスト Mavenローカルリポジトリへのインストール IDE Eclipse Intellij Continuous Integration Issue Management",content:"# 開発者ガイド\nuroboroSQLを開発する人向けのガイドです\n\n# ソースコードの取得\nGitHubからソースをクローンする。\n\ngit clone https://github.com/future-architect/uroborosql.git\n\n\n1\n# ソースのビルド\nビルドにはApache Mavenを利用します。\n\nmvn compile\n\n\n1\n# テスト\nテストはJUnitで行います。\n\nmvn test\n\n\n1\nカバレッジはJacocoで確認することができます。\n\nmvn test jacoco:report\n\n\n1\ntarget/site/jacoco フォルダにjacocoカバレッジレポートが出力されます。\n\n開発を行う際は、Jadocコメントが正しく記載されているようにしてください。\njavadocプラグインでjavadocを生成し、エラーが出力されないことを確認してください。\n\nmvn javadoc:javadoc\n\n\n1\n# Mavenローカルリポジトリへのインストール\nmvn install\n\n\n1\n# IDE\n# Eclipse\nクローンしたフォルダをEclipseの既存Mavenプロジェクトとしてインポートしてください。\nMavenのinitializeフェーズでEclipseプロジェクトの文字コードをUTF-8にする設定が入っているので、インポートが完了すれば開発が始められる状態になります。\n\n# Intellij\nImport Project でクローンしたフォルダを指定してください。\nImport project from external model でMavenを選択してください。\nプロジェクトが読み込まれると開発が始められる状態になります。\n\n# Continuous Integration\nContinuous Integration(CI)はTravis CIで行っています。\n\nCIの状況確認は以下で行います。\n\n * https://travis-ci.org/future-architect/uroborosql\n\nまた、CIと合わせてカバレッジレポートをCoverallsで公開しています。\n\n * https://coveralls.io/github/future-architect/uroborosql\n\n# Issue Management\nIssueとPullRequestはGithubの機能を利用しています。\nコメントは英語で記載をお願いします。(Google翻訳がお勧めです)\n\n * https://github.com/future-architect/uroborosql/issues\n * https://github.com/future-architect/uroborosql/pulls",normalizedContent:"# 開発者ガイド\nuroborosqlを開発する人向けのガイドです\n\n# ソースコードの取得\ngithubからソースをクローンする。\n\ngit clone https://github.com/future-architect/uroborosql.git\n\n\n1\n# ソースのビルド\nビルドにはapache mavenを利用します。\n\nmvn compile\n\n\n1\n# テスト\nテストはjunitで行います。\n\nmvn test\n\n\n1\nカバレッジはjacocoで確認することができます。\n\nmvn test jacoco:report\n\n\n1\ntarget/site/jacoco フォルダにjacocoカバレッジレポートが出力されます。\n\n開発を行う際は、jadocコメントが正しく記載されているようにしてください。\njavadocプラグインでjavadocを生成し、エラーが出力されないことを確認してください。\n\nmvn javadoc:javadoc\n\n\n1\n# mavenローカルリポジトリへのインストール\nmvn install\n\n\n1\n# ide\n# eclipse\nクローンしたフォルダをeclipseの既存mavenプロジェクトとしてインポートしてください。\nmavenのinitializeフェーズでeclipseプロジェクトの文字コードをutf-8にする設定が入っているので、インポートが完了すれば開発が始められる状態になります。\n\n# intellij\nimport project でクローンしたフォルダを指定してください。\nimport project from external model でmavenを選択してください。\nプロジェクトが読み込まれると開発が始められる状態になります。\n\n# continuous integration\ncontinuous integration(ci)はtravis ciで行っています。\n\nciの状況確認は以下で行います。\n\n * https://travis-ci.org/future-architect/uroborosql\n\nまた、ciと合わせてカバレッジレポートをcoverallsで公開しています。\n\n * https://coveralls.io/github/future-architect/uroborosql\n\n# issue management\nissueとpullrequestはgithubの機能を利用しています。\nコメントは英語で記載をお願いします。(google翻訳がお勧めです)\n\n * https://github.com/future-architect/uroborosql/issues\n * https://github.com/future-architect/uroborosql/pulls",charsets:{cjk:!0}},{title:"DAOインタフェース",frontmatter:{meta:[{name:"og:title",content:"DAOインタフェース"},{name:"og:url",content:"/uroborosql-doc/basics/entity-api.html"}]},regularPath:"/basics/entity-api.html",relativePath:"basics/entity-api.md",key:"v-4b0ef5f7",path:"/basics/entity-api.html",headers:[{level:2,title:"エンティティクラスの検索",slug:"エンティティクラスの検索",normalizedTitle:"エンティティクラスの検索",charIndex:986},{level:3,title:"キーを指定した1件取得(SqlAgent#find)",slug:"キーを指定した1件取得-sqlagent-find",normalizedTitle:"キーを指定した1件取得(sqlagent#find)",charIndex:1001},{level:3,title:"条件指定検索(SqlAgent#query)",slug:"条件指定検索-sqlagent-query",normalizedTitle:"条件指定検索(sqlagent#query)",charIndex:1289},{level:3,title:"抽出条件の指定(SqlEntityQuery#equal /#notEqual /#greaterThan /#lessThan /#greaterEqual /#lessEqual /#in /#notIn /#like /#startsWith /#endsWith /#contains /#notLike /#notStartsWith /#notEndsWith /#notContains /#between /#isNull /#isNotNull /#where)",slug:"抽出条件の指定-sqlentityquery-equal-notequal-greaterthan-lessthan-greaterequal-lessequal-in-notin-like-startswith-endswith-contains-notlike-notstartswith-notendswith-notcontains-between-isnull-isnotnull-where",normalizedTitle:"抽出条件の指定(sqlentityquery#equal /#notequal /#greaterthan /#lessthan /#greaterequal /#lessequal /#in /#notin /#like /#startswith /#endswith /#contains /#notlike /#notstartswith /#notendswith /#notcontains /#between /#isnull /#isnotnull /#where)",charIndex:1520},{level:3,title:"ソート順(SqlEntityQuery#asc /#desc)や取得データの件数(#limit)、開始位置(#offset)、悲観ロック(#forUpdate /#forUpdateNoWait /#forUpdateWait)の指定",slug:"ソート順-sqlentityquery-asc-desc-や取得データの件数-limit-、開始位置-offset-、悲観ロック-forupdate-forupdatenowait-forupdatewait-の指定",normalizedTitle:"ソート順(sqlentityquery#asc /#desc)や取得データの件数(#limit)、開始位置(#offset)、悲観ロック(#forupdate /#forupdatenowait /#forupdatewait)の指定",charIndex:6260},{level:3,title:"オプティマイザーヒントの指定(SqlEntityQuery#hint)",slug:"オプティマイザーヒントの指定-sqlentityquery-hint",normalizedTitle:"オプティマイザーヒントの指定(sqlentityquery#hint)",charIndex:8258},{level:3,title:"検索結果の取得(SqlEntityQury#collect /#first /#one /#select /#stream)",slug:"検索結果の取得-sqlentityqury-collect-first-one-select-stream",normalizedTitle:"検索結果の取得(sqlentityqury#collect /#first /#one /#select /#stream)",charIndex:8636},{level:3,title:"集約関数(SqlEntityQuery#count /#sum /#sum /#min /#max /#exists /#notExists)",slug:"集約関数-sqlentityquery-count-sum-sum-min-max-exists-notexists",normalizedTitle:"集約関数(sqlentityquery#count /#sum /#sum /#min /#max /#exists /#notexists)",charIndex:9722},{level:2,title:"エンティティの挿入",slug:"エンティティの挿入",normalizedTitle:"エンティティの挿入",charIndex:10925},{level:3,title:"1件の挿入(SqlAgent#insert/#insertAndReturn)",slug:"_1件の挿入-sqlagent-insert-insertandreturn",normalizedTitle:"1件の挿入(sqlagent#insert/#insertandreturn)",charIndex:10937},{level:3,title:"複数件の挿入(SqlAgent#inserts /#insertsAndReturn)",slug:"複数件の挿入-sqlagent-inserts-insertsandreturn",normalizedTitle:"複数件の挿入(sqlagent#inserts /#insertsandreturn)",charIndex:11752},{level:3,title:"挿入方法(InsertsType)の指定",slug:"挿入方法-insertstype-の指定",normalizedTitle:"挿入方法(insertstype)の指定",charIndex:14747},{level:3,title:"挿入条件(InsertsCondition)の指定",slug:"挿入条件-insertscondition-の指定",normalizedTitle:"挿入条件(insertscondition)の指定",charIndex:15418},{level:2,title:"エンティティの更新",slug:"エンティティの更新",normalizedTitle:"エンティティの更新",charIndex:15823},{level:3,title:"1件の更新(SqlAgent#update /#updateAndReturn)",slug:"_1件の更新-sqlagent-update-updateandreturn",normalizedTitle:"1件の更新(sqlagent#update /#updateandreturn)",charIndex:15835},{level:3,title:"条件指定による複数件の更新(SqlAgent#update)",slug:"条件指定による複数件の更新-sqlagent-update",normalizedTitle:"条件指定による複数件の更新(sqlagent#update)",charIndex:16615},{level:3,title:"複数件の更新(SqlAgent#updates /#updatesAndReturn)",slug:"複数件の更新-sqlagent-updates-updatesandreturn",normalizedTitle:"複数件の更新(sqlagent#updates /#updatesandreturn)",charIndex:17023},{level:3,title:"更新条件(UpdatesCondition)の指定",slug:"更新条件-updatescondition-の指定",normalizedTitle:"更新条件(updatescondition)の指定",charIndex:18528},{level:2,title:"エンティティの削除",slug:"エンティティの削除",normalizedTitle:"エンティティの削除",charIndex:18974},{level:3,title:"1件の削除(SqlAgent#delete /#deleteAndReturn)",slug:"_1件の削除-sqlagent-delete-deleteandreturn",normalizedTitle:"1件の削除(sqlagent#delete /#deleteandreturn)",charIndex:18986},{level:3,title:"PKを指定した複数件の削除(SqlAgent#delete)",slug:"pkを指定した複数件の削除-sqlagent-delete",normalizedTitle:"pkを指定した複数件の削除(sqlagent#delete)",charIndex:19386},{level:3,title:"条件指定による複数件の削除(SqlAgent#delete)",slug:"条件指定による複数件の削除-sqlagent-delete",normalizedTitle:"条件指定による複数件の削除(sqlagent#delete)",charIndex:19613},{level:3,title:"全ての行を削除(SqlAgent#truncate)",slug:"全ての行を削除-sqlagent-truncate",normalizedTitle:"全ての行を削除(sqlagent#truncate)",charIndex:19939},{level:2,title:"Entityアノテーション",slug:"entityアノテーション",normalizedTitle:"entityアノテーション",charIndex:20495},{level:3,title:"@Table",slug:"table",normalizedTitle:"@table",charIndex:20585},{level:3,title:"@Column",slug:"column",normalizedTitle:"@column",charIndex:21158},{level:3,title:"@Domain",slug:"domain",normalizedTitle:"@domain",charIndex:21605},{level:3,title:"@Transient",slug:"transient",normalizedTitle:"@transient",charIndex:22773},{level:3,title:"@Version",slug:"version",normalizedTitle:"@version",charIndex:16053},{level:3,title:"@Id /@GeneratedValue /@SequenceGenerator",slug:"id-generatedvalue-sequencegenerator",normalizedTitle:"@id /@generatedvalue /@sequencegenerator",charIndex:25121}],lastUpdated:"2020-3-8 21:44:34",headersStr:"エンティティクラスの検索 キーを指定した1件取得(SqlAgent#find) 条件指定検索(SqlAgent#query) 抽出条件の指定(SqlEntityQuery#equal /#notEqual /#greaterThan /#lessThan /#greaterEqual /#lessEqual /#in /#notIn /#like /#startsWith /#endsWith /#contains /#notLike /#notStartsWith /#notEndsWith /#notContains /#between /#isNull /#isNotNull /#where) ソート順(SqlEntityQuery#asc /#desc)や取得データの件数(#limit)、開始位置(#offset)、悲観ロック(#forUpdate /#forUpdateNoWait /#forUpdateWait)の指定 オプティマイザーヒントの指定(SqlEntityQuery#hint) 検索結果の取得(SqlEntityQury#collect /#first /#one /#select /#stream) 集約関数(SqlEntityQuery#count /#sum /#sum /#min /#max /#exists /#notExists) エンティティの挿入 1件の挿入(SqlAgent#insert/#insertAndReturn) 複数件の挿入(SqlAgent#inserts /#insertsAndReturn) 挿入方法(InsertsType)の指定 挿入条件(InsertsCondition)の指定 エンティティの更新 1件の更新(SqlAgent#update /#updateAndReturn) 条件指定による複数件の更新(SqlAgent#update) 複数件の更新(SqlAgent#updates /#updatesAndReturn) 更新条件(UpdatesCondition)の指定 エンティティの削除 1件の削除(SqlAgent#delete /#deleteAndReturn) PKを指定した複数件の削除(SqlAgent#delete) 条件指定による複数件の削除(SqlAgent#delete) 全ての行を削除(SqlAgent#truncate) Entityアノテーション @Table @Column @Domain @Transient @Version @Id /@GeneratedValue /@SequenceGenerator",content:'# DAOインタフェース\nuroboroSQLはDAO(Data Access Object)を用いた単一テーブルへのCRUDに対応しています。\n\n下記のテーブルとそれに対応するエンティティクラスを例として説明します。\n\n-- MySQLの場合\ncreate table employee (\n emp_no number(6) not null auto_increment\n , first_name varchar(20) not null\n , last_name varchar(20) not null\n , birth_date date not null\n , gender char(1) not null\n , lock_version number(10) not null\n , constraint employee_PKC primary key (emp_no)\n)\n\n-- Postgresqlの場合\ncreate table employee (\n emp_no serial not null\n , first_name varchar(20) not null\n , last_name varchar(20) not null\n , birth_date date not null\n , gender char(1) not null\n , lock_version number(10) not null\n , constraint employee_PKC primary key (emp_no)\n) ;\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\npublic class Employee {\n private long empNo;\n private String firstName;\n private String lastName;\n private LocalDate birthDate;\n private Gender gender;\n private long lockVersion = 0;\n\n // 中略 getter/setter\n}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n# エンティティクラスの検索\n# キーを指定した1件取得(SqlAgent#find)\nメソッド名 戻り値の型 \nSqlAgent#find(Class, Object...) Optional \n\n主キーを指定してエンティティを取得します。PKカラムの数と引数に指定するキーの数は合わせる必要があります。\n\n// emp_no = 1 のレコードをエンティティとして取得\nOptional employee = agent.find(Employee.class, 1);\n\n\n1\n2\n# 条件指定検索(SqlAgent#query) \nメソッド名 戻り値の型 \nSqlAgent#query(Class) SqlEntityQuery \n\nエンティティクラスを利用した検索を行うためのオブジェクト(SqlEntityQuery)を取得します。\nSqlEntityQueryに対して抽出条件の指定を行い、抽出条件に該当するエンティティを取得します。\n\n\n\n\n# 抽出条件の指定(SqlEntityQuery#equal /#notEqual /#greaterThan /#lessThan /#greaterEqual /#lessEqual /#in /#notIn /#like /#startsWith /#endsWith /#contains /#notLike /#notStartsWith /#notEndsWith /#notContains /#between /#isNull /#isNotNull /#where)\n抽出条件指定メソッド記述例 生成されるwhere句の条件式 補足説明 \nequal("col", "value") col = \'value\' \nnotEqual("col", "value") col != \'value\' \ngreaterThan("col", 1) col > 1 \nlessThan("col", 1) col < 1 \ngreaterEqual("col", 1) col >= 1 \nlessEqual("col", 1) col <= 1 \nin("col", "val1", "val2") col in (\'val1\', \'val2\') \nin("col", List.of("val1", "val2")) col in (\'val1\', \'val2\') \nnotIn("col", "val1", "val2") col not in (\'val1\', \'val2\') \nnotIn("col", List.of("val1", "val2")) col not in (\'val1\', \'val2\') \nlike("col", "%val%") like \'%val%\' valはエスケープされない \nstartsWith("col", "val") like \'val%\' valはエスケープされる \nendsWith("col", "val") like \'%val\' valはエスケープされる \ncontains("col", "val") like \'%val%\' valはエスケープされる \nnotLike("col", "%val%") not like \'%val%\' valはエスケープされない \nnotStartsWith("col", "val") not like \'val%\' valはエスケープされる \nnotEndsWith("col", "val") not like \'%val\' valはエスケープされる \nnotContains("col", "val") not like \'%val%\' valはエスケープされる \nbetween("col", 1, 2) col between 1 and 2 \nisNull("col") col is null \nisNotNull("col") col is not null \nwhere("col = 1 or col = 2") (col = 1 or col = 2) もし複数回where()が呼び出された場合は条件を AND で結合する \nwhere("col = /*col1*/", "col1", 1) (col = 1/*col1*/) パラメータの指定(1件)付き \nwhere("col = /*col1*/ or col = /*col2*/", Map.of("col1", 1, "col2", 2)) (col = 1/*col1*/ or col = 2/*col2*/) パラメータの指定(複数件)付き \n\n// emp_no = 1 のレコードをListで取得\nagent.query(Employee.class).equal("emp_no", 1).collect();\n\n// emp_no = 10 又は 20 のレコードをListで取得\nagent.query(Employee.class).in("emp_no", 10, 20).collect();\n\n// first_name like \'%Bob%\' のレコードをListで取得\nagent.query(Employee.class).contains("first_name", "Bob").collect();\n\n// where句を直接記述(first_name = \'Bob\' and last_name = \'Smith\')した結果をListで取得\nagent.query(Employee.class).where("first_name =\'\'/*firstName*/", "firstName", "Bob").where("last_name = \'\'/*lastName*/", "lastName", "Smith").collect();\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n注意\n\nSqlEntityQueryに対して抽出条件を指定する場合paramメソッドは使用しないでください。SqlEntityQuery#param()には@Deprecatedが付与されており、将来削除される予定です。\n\n# ソート順(SqlEntityQuery#asc /#desc)や取得データの件数(#limit)、開始位置(#offset)、悲観ロック(#forUpdate /#forUpdateNoWait /#forUpdateWait)の指定 \nSqlEntityQueryでは抽出条件に加えて検索結果のソート順や取得件数の制限、開始位置の指定、明示的なロック指定が行えます。\n\n条件指定メソッド記述例 生成されるSQL 補足説明 \nasc("col1", "col2") order by col1 asc, col2 asc NULLSが有効な場合はNULLS LASTが出力される \nasc("col1", Nulls.FIRST) order by col1 asc NULLS FIRST 複数回asc()が呼び出された場合は呼び出し順に並べる \ndesc("col1", "col2") order by col1 desc, col2 desc NULLSが有効な場合はNULLS LASTが出力される \ndesc("col1", Nulls.FIRST) order by col1 desc NULLS FIRST 複数回asc()が呼び出された場合は呼び出し順に並べる \nlimit(10) LIMIT 10 接続しているDBでlimit句が使用できない場合はUroborosqlRuntimeExceptionがスローされる \noffset(10) OFFSET 10 接続しているDBでoffset句が使用できない場合はUroborosqlRuntimeExceptionがスローされる \nforUpdate() FOR UPDATE 接続しているDBでFOR UPDATE句が使用できない場合はUroborosqlRuntimeExceptionがスローされる \nforUpdateNoWait() FOR UPDATE NOWAIT 接続しているDBでFOR UPDATE NOWAIT句が使用できない場合はUroborosqlRuntimeExceptionがスローされる \nforUpdateWait() FOR UPDATE WAIT 10 接続しているDBでFOR UPDATE WAIT句が使用できない場合はUroborosqlRuntimeExceptionがスローされる \nforUpdateWait(30) FOR UPDATE WAIT 30 接続しているDBでFOR UPDATE WAIT句が使用できない場合はUroborosqlRuntimeExceptionがスローされる \n\n// birth_dateの降順、first_nameの昇順でソートした結果を Listで取得\nagent.query(Employee.class).desc("birth_date").asc("first_name").collect();\n\n// emp_no の昇順でソートした結果の3行目から5件取得\nagent.query(Employee.class).asc("emp_no").offset(3).limit(5).collect();\n\n// 明示的な行ロックを行う\nagent.query(Employee.class).forUpdate().collect();\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n# オプティマイザーヒントの指定(SqlEntityQuery#hint) \nSqlEntityQuery#hint()を使用することで、SQLに対してオプティマイザーヒントを指定することができます。\n\nSqlAgent agent = ...\nagent.query(User.class).hint("ORDERED").lessThan("age", 30).collect();\n\n\n1\n2\n出力されるSQL(Oracleの場合)\n\nselect /*+ ORDERED */ id, name, age, ... from user where age < 30\n\n\n1\n注意\n\nオプティマイザーヒントの指定は、利用するDBがオプティマイザーヒントをサポートしている場合に有効になります。\nまた、指定可能なヒント句は利用するDBに依存します。\n\n# 検索結果の取得(SqlEntityQury#collect /#first /#one /#select /#stream)\nSqlEntityQueryから抽出条件に該当するエンティティを取得します。\n\nメソッド 説明 \ncollect() 検索結果をエンティティのリストとして取得する \nfirst() 検索結果の先頭行を取得する \none() 検索結果の先頭行を取得する。検索結果が2件以上の場合DataNonUniqueExceptionをスローする \nStream select(String col, Class type) 検索結果の指定したカラムの値をjava.util.stream.Streamとして取得する。 \nstream() 検索結果をjava.util.stream.Streamとして取得する \n\n// Listで取得\nList employees = agent.query(Employee.class).collect();\n\n// 検索結果の先頭行を取得\nOptional employee = agent.query(Employee.class).first();\n\n// 検索結果(カラム値)の取得\nString employeeName = agent.query(Employee.class)\n .equal("employeeId", 1)\n .select("employeeName", String.class).findFirst().get();\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n# 集約関数(SqlEntityQuery#count /#sum /#sum /#min /#max /#exists /#notExists) \nSqlEntityQueryではエンティティを取得する他に結果の集計を行うこともできます。\n\nメソッド 説明 \ncount() 検索結果の件数を取得する \ncount(String col) 検索結果のうち、引数で指定したカラムがNULLでない行の件数を取得する \nsum(String col) 検索結果のうち、引数で指定したカラムの合計値を取得する \nmin(String col) 検索結果のうち、引数で指定したカラムの最小値を取得する \nmax(String col) 検索結果のうち、引数で指定したカラムの最大値を取得する \nexists(Runnable runnable) 検索結果が1件以上ある場合に引数で渡した関数を実行する \nnotExists(Runnable runnable) 検索結果が0件の場合に引数で渡した関数を実行する \n\n// 検索結果の件数を取得\nlong count = agent.query(Employee.class).count();\n\n// 検索結果が1件以上の場合にログを出力する\nagent.query(Employee.class).greaterThan("emp_no", 10).exists(() -> {\n log.info("Employee(emp_no > 10) exists.");\n});\n\n\n1\n2\n3\n4\n5\n6\n7\nTIP\n\n集約関数を使用すると、検索結果からEntityオブジェクトを生成しないためメモリ効率が良くなります。 以下2つの処理結果は同じですが、メモリの使い方が違います。\n\n// collect()を使用すると、検索結果がエンティティに変換されるためメモリを使用する\nlong count = agent.query(Employee.class).collect().size();\n\n// count()を使用すると件数のみ取得できる(エンティティは生成されない)\nlong count = agent.query(Employee.class).count();\n\n\n1\n2\n3\n4\n5\n# エンティティの挿入\n# 1件の挿入(SqlAgent#insert/#insertAndReturn)\nメソッド名 戻り値の型 \n SqlAgent#insert(E) int \n SqlAgent#insertAndReturn(E) E \n\nエンティティクラスのインスタンスを使って1レコードの挿入を行います。\n\n * @Idアノテーションの指定があるフィールド\n * 対するカラムが自動採番となっているフィールド\n\nの型がprimitive型の場合、もしくはフィールドの値がnullの場合、カラムの値は挿入時に自動採番されます。\nまた、挿入により採番された値がエンティティの該当フィールドにも設定されます。\nフィールドに値を指定した場合は自動採番カラムであっても指定した値が挿入されます。\n\nAndReturnが付くメソッドでは、挿入したエンティティオブジェクトを戻り値として取得できるため、 エンティティの挿入に続けて処理を行う場合に便利です。\n\nEmployee employee = new Employee();\nemployee.setFirstName("Susan");\nemployee.setLastName("Davis");\nemployee.setBirthDate(LocalDate.of(1969, 2, 10));\nemployee.setGender(Gender.FEMALE); // MALE("M"), FEMALE("F"), OTHER("O")\n\n// 1件の挿入\nagent.insert(employee);\nSystem.out.println(employee.getEmpNo()); // 自動採番された値が出力される\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n# 複数件の挿入(SqlAgent#inserts /#insertsAndReturn) \nメソッド名 戻り値の型 \nSqlAgent#inserts(Stream) int \nSqlAgent#inserts(Stream, InsertsType) int \nSqlAgent#inserts(Stream, InsertsCondition) int \nSqlAgent#inserts(Stream, InsertsCondition, InsertsType) int \nSqlAgent#insertsAndReturn(Stream) Stream \nSqlAgent#insertsAndReturn(Stream, InsertsType) Stream \nSqlAgent#insertsAndReturn(Stream, InsertsCondition) Stream \nSqlAgent#insertsAndReturn(Stream, InsertsCondition, InsertsType) Stream \nSqlAgent#inserts(Class, Stream) int \nSqlAgent#inserts(Class, Stream, InsertsType) int \nSqlAgent#inserts(Class, Stream, InsertsCondition) int \nSqlAgent#inserts(Class, Stream, InsertsCondition, InsertsType) int \nSqlAgent#insertsAndReturn(Class, Stream) Stream \nSqlAgent#insertsAndReturn(Class, Stream, InsertsType) Stream \nSqlAgent#insertsAndReturn(Class, Stream, InsertsCondition) Stream \nSqlAgent#insertsAndReturn(Class, Stream, InsertsCondition, InsertsType) Stream \n\njava.util.stream.Stream経由で渡される複数のエンティティインスタンスを挿入します。\n\n * @Idアノテーションの指定があるフィールド\n * 対するカラムが自動採番となっているフィールド\n\nの型がprimitive型の場合、もしくはフィールドの値がnullの場合、カラムの値は挿入時に自動採番されます。\nまた、挿入により採番された値がエンティティの該当フィールドにも設定されます。\nフィールドに値を指定した場合は自動採番カラムであっても指定した値が挿入されます。\n\n注意\n\n複数件の挿入で生成されるSQLでは、行毎のフィールドの値の有無を変更することができません。\n最初に挿入するエンティティで@Idの指定があるフィールドや自動採番カラムに対するフィールドに値を設定する場合は、 2件目以降のエンティティにも必ず値を設定するようにしてください。\nまた、最初に挿入するエンティティで@Idの指定があるフィールドや自動採番カラムに対するフィールドの値にnullを設定する場合は、 2件目以降のエンティティで値を設定していても無視されて自動採番されます。\n\nAndReturnが付くメソッドでは、挿入したエンティティオブジェクトのjava.util.stream.Streamを戻り値として取得できるため、 エンティティの挿入に続けて処理を行う場合に便利です。\n\n注意\n\nAndReturnの戻り値となるStreamを生成する際、挿入したエンティティを全件メモリ上に保持します。 大量データの挿入を行うとOOMEが発生する場合があるので、insertsAndReturnを使用する場合は挿入する データの件数に気をつけてください。件数が多い場合は一度insertsで挿入した後に、再度検索するといった方法を検討してください。\n\n// 1件の挿入\nDepartment dept = new Department();\ndept.setDeptName("sales");\nagent.insert(dept);\n\n// 複数件の挿入(EmployeeとDeptEmpの挿入)\nagent.inserts(agent.insertsAndReturn(agent.query(Employee.class).stream())\n .map(e -> {\n DepEmp deptEmp = new DeptEmp();\n deptEmp.setEmpNo(e.getEmpNo());\n deptEmp.setDepNo(dept.getDepNo());\n return deptEmp;\n })\n);\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n# 挿入方法(InsertsType)の指定\nInsertsTypeを指定することで実行される挿入用のSQLを変更することが出来ます。\n\nInsertsType 説明 \nBULK insert into ... values ( ... ), ( ... )という風にvaluesに複数行の値を出力し一度に複数レコードを挿入する。 \n DBがこの記法をサポートしている場合に指定可能。DBが未サポートの場合、指定してもBATCHとして実行される。 \nBATCH java.sql.PreparedStatement#executeBatch()を使用したバッチSQL実行 \n\nStream employees = agent.query(Employee.class)\n .stream()\n .map(e -> e.setEmpNo(e.getEmpNo() + 1000));\n \n// 複数件の挿入(バッチ実行)\nagent.inserts(employees, InsertsType.BATCH);\n}\n\n\n1\n2\n3\n4\n5\n6\n7\nTIP\n\nInsertsTypeは、初期値設定が可能です。\n\n# 挿入条件(InsertsCondition)の指定\n挿入用SQLの実行条件を指定します。\nInsertsCondition#test(SqlContext ctx, int count, E entity)の戻り値がtrueの場合に挿入用SQLを実行します。\nInsertsConditionはFunctionalInterfaceのためlambda式が利用できます。\n\nStream employees = agent.query(Employee.class)\n .stream()\n .map(e -> e.setEmpNo(e.getEmpNo() + 1000));\n \n// 複数件の挿入(10件毎に挿入)\nagent.inserts(employees, (ctx, count, entity) -> count == 10);\n\n\n1\n2\n3\n4\n5\n6\n# エンティティの更新\n# 1件の更新(SqlAgent#update /#updateAndReturn)\nメソッド名 戻り値の型 \n SqlAgent#update(E) int \n SqlAgent#updateAndReturn(E) E \n\nエンティティクラスのインスタンスを使って1レコードの更新を行います。\n\nレコード更新時、@Versionアノテーションの指定があるフィールドに対するカラムはカウントアップされます。\nまた、更新された値がエンティティの該当フィールドにも設定されます。\n\n補足\n\nエンティティクラスのインスタンスを使った1レコードの更新では、@Idを指定したフィールドに対するカラムや自動採番カラムは更新できません。\n@Idを指定したフィールドに対するカラムや自動採番カラムを更新する場合は、後述する条件指定による複数件の更新を使用してください。\n\nAndReturnが付くメソッドでは、更新したエンティティオブジェクトを戻り値として取得できるため、 エンティティの更新に続けて処理を行う場合に便利です。\n\nagent.find(Employee.class, 1).ifPresent(employee -> {\n employee.setLastName("Wilson");\n System.out.println(employee.getLockVersion()); // 1\n\n // エンティティの更新\n agent.update(employee);\n System.out.println(employee.getLockVersion()); // 2\n});\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n# 条件指定による複数件の更新(SqlAgent#update) \nメソッド名 戻り値の型 \nSqlAgent#update(Class) SqlEntityUpdate \n\n更新対象のレコードを抽出する条件を指定して更新を行います。\n抽出条件の指定方法は 抽出条件の指定 を参照してください。\nまた、set()メソッドで更新対象のフィールドと値を指定することができます。\n\n// first_name に \'Bob\' を含むエンティティの性別を更新\nagent.update(Employee.class)\n .contains("firstName", "Bob")\n .set("gender", Gender.MALE)\n .count();\n\n\n1\n2\n3\n4\n5\n# 複数件の更新(SqlAgent#updates /#updatesAndReturn) \nメソッド名 戻り値の型 \nSqlAgent#updates(Stream) int \nSqlAgent#updates(Stream, UpdatesCondition) int \nSqlAgent#updatesAndReturn(Stream) Stream \nSqlAgent#updatesAndReturn(Stream, UpdatesCondition) Stream \nSqlAgent#updates(Class, Stream) int \nSqlAgent#updates(Class, Stream, UpdatesCondition) int \nSqlAgent#updatesAndReturn(Class, Stream) Stream \nSqlAgent#updatesAndReturn(Class, Stream, UpdatesCondition) Stream \n\njava.util.stream.Stream経由で渡される複数のエンティティインスタンスを使って更新します。\n\nTIP\n\ninsertsと違い必ずバッチSQL実行になります。\n\nレコード更新時、@Versionアノテーションの指定があるフィールドに対するカラムはカウントアップされます。\nまた、更新された値がエンティティの該当フィールドにも設定されます。\n\nAndReturnが付くメソッドでは、更新したエンティティオブジェクトのjava.util.stream.Streamを戻り値として取得できるため、 エンティティの更新に続けて処理を行う場合に便利です。\n\nWARNING\n\nAndReturnの戻り値となるStreamを生成する際、更新したエンティティを全件メモリ上に保持します。 大量データの更新を行うとOOMEが発生する場合があるので、updatesAndReturnを使用する場合は更新する データの件数に気をつけてください。件数が多い場合は一度updatesで更新した後に、再度検索するといった方法を検討してください。\n\n// 複数件の更新\nagent.updates(agent.query(Employee.class)\n .stream()\n .map(e -> {\n e.setFirstName(e.getFirstName() + "_new");\n return e;\n })\n);\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n# 更新条件(UpdatesCondition)の指定\n更新用SQLの実行条件を指定します。\nUpdatesCondition#test(SqlContext ctx, int count, E entity)の戻り値がtrueの場合に更新用SQLを実行します。\nUpdatesConditionはFunctionalInterfaceのためlambda式が利用できます。\n\nStream employees = agent.query(Employee.class)\n .stream()\n .map(e -> {\n e.setFirstName(e.getFirstName() + "_new");\n return e;\n });\n \n// 複数件の更新(10件毎に挿入)\nagent.updates(employees, (ctx, count, entity) -> count == 10);\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n# エンティティの削除\n# 1件の削除(SqlAgent#delete /#deleteAndReturn)\nメソッド名 戻り値の型 \n SqlAgent#delete(E) int \n SqlAgent#deleteAndReturn(E) E \n\nエンティティクラスのインスタンスを使って1レコードの削除を行います。\n\nAndReturnが付くメソッドでは、削除したエンティティオブジェクトを戻り値として取得できるため、 エンティティの削除に続けて処理を行う場合に便利です。\n\nagent.find(Employee.class, 1).ifPresent(employee -> {\n // エンティティの削除\n agent.delete(employee);\n});\n\n\n1\n2\n3\n4\n# PKを指定した複数件の削除(SqlAgent#delete) \nメソッド名 戻り値の型 \nSqlAgent#delete(Class, Object...) int \n\n// PK(emp_no) = 1 or 2 のエンティティの削除\nagent.delete(Employee.class, 1, 2);\n\n\n1\n2\n# 条件指定による複数件の削除(SqlAgent#delete) \nメソッド名 戻り値の型 \nSqlAgent#delete(Class) SqlEntityDelete \n\n削除対象のレコードを抽出する条件を指定して削除を行います。\n抽出条件の指定方法は 抽出条件の指定 を参照してください。\n\n// first_name = \'Bob\' に該当するエンティティの削除\nagent.delete(Employee.class).contains("firstName", "Bob").count();\n\n\n1\n2\n# 全ての行を削除(SqlAgent#truncate) \nメソッド名 戻り値の型 \nSqlAgent#truncate(Class) SqlAgent \n\nエンティティクラスとマッピングされているテーブルの全てのレコードをTRUNCATE文により削除します。 一般的に大量レコードの削除は、TRUNCATE文による削除のほうが性能上有利ですが、DBMSによってはロールバックできませんので、注意してください。\n\nTIP\n\nPostgreSQLは、TRUNCATE文のロールバック可能です。\n\nSqlAgent#truncateは、SqlAgentを戻り値として返すため、SqlAgent#truncateに続けて、SqlAgent#insertsをつなげることにより、 テーブルの洗い替えを実装することが可能です。\n\n// 全てのレコードを削除\nagent.truncate(Employee.class);\n\n// テーブルの洗い替え\nagent.truncate(Employee.class)\n .inserts(employees.stream());\n\n\n1\n2\n3\n4\n5\n6\n# Entityアノテーション\nDAOインタフェースで利用するエンティティクラスではテーブルとのマッピングやカラムの属性を指定するためにアノテーションを利用することができます。\n\n# @Table\nエンティティクラスに紐づけるテーブル名を指定します。\nテーブル名と名前が一致しないエンティティクラスにマッピングしたい場合に利用します。\n\n属性名 型 必須 説明 初期値 \nname String - マッピングするテーブル名。指定しない場合はクラス名をスネークケースにしたテーブルとマッピングする なし \nschema String - マッピングするテーブルの所属するスキーマ名 なし \n\nimport jp.co.future.uroborosql.mapping.annotations.Table;\n\n// name指定なし (departmentテーブルにマッピング)\n@Table\npublic class Department {\n // 以下略\n}\n\n// name指定あり\n@Table(name = "employee")\npublic class CustomEmployee {\n // 以下略\n}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n# @Column\nフィールドに紐づけるカラム名を指定します。\nカラム名と名前が一致しないフィールドにマッピングしたい場合に利用します。\n\n属性名 型 必須 説明 初期値 \nname String 〇 マッピングするカラム名 なし \n\nimport jp.co.future.uroborosql.mapping.annotations.Table;\nimport jp.co.future.uroborosql.mapping.annotations.Column;\n\n@Table(name = "employee")\npublic class Employee {\n @Column(name = "emp_no")\n private long employeeNo;\n\n private String firstName;\n\n // 以下略\n}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n# @Domain\n独自に作成した型(ドメインクラス)のフィールドにカラムをマッピングする場合に指定します。\n\n属性名 型 必須 説明 初期値 \nvalueType Class 〇 ドメインクラスを生成するのに必要な値の型 なし \nfactoryMethod String - ドメインクラスを生成・取得するメソッド名。指定しない場合はコンストラクタが呼び出される。 "" \ntoJdbcMethod String - JDBCが受け付けられる値に変換するメソッド名 "getValue" \nnullable boolean - null可かどうかの指定 false \n\n例\n\nimport jp.co.future.uroborosql.mapping.annotations.Table;\nimport jp.co.future.uroborosql.mapping.annotations.Domain;\n\n@Domain(valueType = String.class, factoryMethod = "of", toJdbcMethod = "getName", nullable = true)\npublic static class NameDomain {\n private String name;\n\n private NameDomain(String name) {\n this.name = name;\n }\n\n public static NameDomain of(String name) {\n return new NameDomain(name);\n }\n\n public String getName() {\n return name;\n }\n}\n\n@Table\npublic class Employee {\n private long empNo;\n private NameDomain firstName;\n\n // 以下略\n}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n# @Transient\nフィールドとカラムのマッピング対象から除外します。\n\nTIP\n\n例えば、エンタープライズシステムの設計でしばしば利用される最終登録日時や最終更新日時など、 INSERT/UPDATEの対象から除外したいケースで利用します。\n\n属性名 型 必須 説明 初期値 \ninsert boolean - agent#insert()実行時にフィールドを無視するかどうか。trueの場合は無視する。 true \nupdate boolean - agent#update()実行時にフィールドを無視するかどうか。trueの場合は無視する。 true \n\n例\n\nimport jp.co.future.uroborosql.mapping.annotations.Table;\nimport jp.co.future.uroborosql.mapping.annotations.Transient;\n\n@Table\npublic class Employee {\n\n // 途中略\n\n @Transient\n private String memo; // 常に無視\n\n @Transient(insert = false, update = true)\n private LocalDate creationDate; // insert時は対象、update時は無視\n\n @Transient(insert = true, update = false)\n private LocalDate updateDate; // insert時は無視、update時は対象\n\n // 以下略\n}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n# @Version\nこのアノテーションが付与されたフィールドは楽観ロック用のバージョン情報を保持するフィールドになります。\nデフォルト(LockVersionOptimisticLockSupplier)ではUPDATE時にはSET句で+1され、WHERE句の検索条件に追加されてSQLを実行し更新件数が0の場合にはOptimisticLockExceptionをスローします。\n\nWARNING\n\n@Versionを付与するフィールドにマッピングされるDBカラムの型は数値型でなければなりません。\n\n属性名 型 必須 説明 初期値 \nsupplier OptimisticLockSupplier - バージョン情報カラム LockVersionOptimisticLockSupplier \n\n# サプライヤの種類\nサプライヤ型 概要 説明 \nLockVersionOptimisticLockSupplier ロックバージョン UPDATEのSET句で+1がセットされます。 \nCyclicLockVersionOptimisticLockSupplier 循環式ロックバージョン UPDATEのSET句でバージョン情報カラム名 % 数値カラムの最大値 + 1がセットされます。 \nTimestampOptimisticLockSupplier タイムスタンプ UPDATEのSET句でタイムスタンプ(System.currentTimeMillis())がセットされます。 \nFieldIncrementOptimisticLockSupplier フィールド値インクリメント UPDATEのSET句で2WaySQLのバインド変数を利用して、バージョン情報カラム名+1がセットされます。 \n\n例\n\nimport jp.co.future.uroborosql.mapping.annotations.Table;\nimport jp.co.future.uroborosql.mapping.annotations.Version;\nimport jp.co.future.uroborosql.mapping.TimestampOptimisticLockSupplier;\n\n@Table\npublic class Employee {\n private long empNo;\n private String firstName;\n private String lastName;\n\n  // 途中略\n\n @Version(supplier = TimestampOptimisticLockSupplier.class)\n private long lockVersion = 0;\n\n // 以下略\n}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n# @Id /@GeneratedValue /@SequenceGenerator \nこれらのアノテーションが付与されたフィールドは自動採番フィールドになります。\n@Idと@GeneratedValueは必ずセットでフィールドに付与する必要があります。\n@GeneratedValueのstrategy属性がGenerationType.SEQUENCEの場合に@SequenceGeneratorを付与してシーケンスの生成方法を指定する必要があります。\n\nアノテーション 説明 \n@Id エンティティの主キーを識別するアノテーション \n@GeneratedValue 主キーの値の生成戦略を指定するアノテーション \n@SequenceGenerator SEQUENCEによるID生成を設定するアノテーション \n\nアノテーション 属性名 型 必須 説明 初期値 \n@Id なし - - - - \n@GeneratedValue strategy GenerationType - 主キー生成戦略の型。GenerationType.IDENTITY, GenerationType.SEQUENCEのいずれかを指定 GenerationType.IDENTITY \n@SequenceGenerator sequence String 〇 シーケンス名 なし \n@SequenceGenerator catalog String - シーケンスが所属するカタログ名 "" \n@SequenceGenerator schema String - シーケンスが所属するスキーマ名 "" \n\nimport jp.co.future.uroborosql.mapping.annotations.Table;\nimport jp.co.future.uroborosql.mapping.annotations.Id;\nimport jp.co.future.uroborosql.mapping.annotations.GeneratedValue;\nimport jp.co.future.uroborosql.mapping.annotations.SequenceGenerator;\n\n@Table\npublic class Employee {\n @Id\n @GeneratedValue(strategy = GenerationType.SEQUENCE)\n @SequenceGenerator(sequence = \'employee_emp_id_seq\')\n private long empNo;\n\n private String firstName;\n\n // 以下略\n}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16',normalizedContent:'# daoインタフェース\nuroborosqlはdao(data access object)を用いた単一テーブルへのcrudに対応しています。\n\n下記のテーブルとそれに対応するエンティティクラスを例として説明します。\n\n-- mysqlの場合\ncreate table employee (\n emp_no number(6) not null auto_increment\n , first_name varchar(20) not null\n , last_name varchar(20) not null\n , birth_date date not null\n , gender char(1) not null\n , lock_version number(10) not null\n , constraint employee_pkc primary key (emp_no)\n)\n\n-- postgresqlの場合\ncreate table employee (\n emp_no serial not null\n , first_name varchar(20) not null\n , last_name varchar(20) not null\n , birth_date date not null\n , gender char(1) not null\n , lock_version number(10) not null\n , constraint employee_pkc primary key (emp_no)\n) ;\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\npublic class employee {\n private long empno;\n private string firstname;\n private string lastname;\n private localdate birthdate;\n private gender gender;\n private long lockversion = 0;\n\n // 中略 getter/setter\n}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n# エンティティクラスの検索\n# キーを指定した1件取得(sqlagent#find)\nメソッド名 戻り値の型 \nsqlagent#find(class, object...) optional \n\n主キーを指定してエンティティを取得します。pkカラムの数と引数に指定するキーの数は合わせる必要があります。\n\n// emp_no = 1 のレコードをエンティティとして取得\noptional employee = agent.find(employee.class, 1);\n\n\n1\n2\n# 条件指定検索(sqlagent#query) \nメソッド名 戻り値の型 \nsqlagent#query(class) sqlentityquery \n\nエンティティクラスを利用した検索を行うためのオブジェクト(sqlentityquery)を取得します。\nsqlentityqueryに対して抽出条件の指定を行い、抽出条件に該当するエンティティを取得します。\n\n\n\n\n# 抽出条件の指定(sqlentityquery#equal /#notequal /#greaterthan /#lessthan /#greaterequal /#lessequal /#in /#notin /#like /#startswith /#endswith /#contains /#notlike /#notstartswith /#notendswith /#notcontains /#between /#isnull /#isnotnull /#where)\n抽出条件指定メソッド記述例 生成されるwhere句の条件式 補足説明 \nequal("col", "value") col = \'value\' \nnotequal("col", "value") col != \'value\' \ngreaterthan("col", 1) col > 1 \nlessthan("col", 1) col < 1 \ngreaterequal("col", 1) col >= 1 \nlessequal("col", 1) col <= 1 \nin("col", "val1", "val2") col in (\'val1\', \'val2\') \nin("col", list.of("val1", "val2")) col in (\'val1\', \'val2\') \nnotin("col", "val1", "val2") col not in (\'val1\', \'val2\') \nnotin("col", list.of("val1", "val2")) col not in (\'val1\', \'val2\') \nlike("col", "%val%") like \'%val%\' valはエスケープされない \nstartswith("col", "val") like \'val%\' valはエスケープされる \nendswith("col", "val") like \'%val\' valはエスケープされる \ncontains("col", "val") like \'%val%\' valはエスケープされる \nnotlike("col", "%val%") not like \'%val%\' valはエスケープされない \nnotstartswith("col", "val") not like \'val%\' valはエスケープされる \nnotendswith("col", "val") not like \'%val\' valはエスケープされる \nnotcontains("col", "val") not like \'%val%\' valはエスケープされる \nbetween("col", 1, 2) col between 1 and 2 \nisnull("col") col is null \nisnotnull("col") col is not null \nwhere("col = 1 or col = 2") (col = 1 or col = 2) もし複数回where()が呼び出された場合は条件を and で結合する \nwhere("col = /*col1*/", "col1", 1) (col = 1/*col1*/) パラメータの指定(1件)付き \nwhere("col = /*col1*/ or col = /*col2*/", map.of("col1", 1, "col2", 2)) (col = 1/*col1*/ or col = 2/*col2*/) パラメータの指定(複数件)付き \n\n// emp_no = 1 のレコードをlistで取得\nagent.query(employee.class).equal("emp_no", 1).collect();\n\n// emp_no = 10 又は 20 のレコードをlistで取得\nagent.query(employee.class).in("emp_no", 10, 20).collect();\n\n// first_name like \'%bob%\' のレコードをlistで取得\nagent.query(employee.class).contains("first_name", "bob").collect();\n\n// where句を直接記述(first_name = \'bob\' and last_name = \'smith\')した結果をlistで取得\nagent.query(employee.class).where("first_name =\'\'/*firstname*/", "firstname", "bob").where("last_name = \'\'/*lastname*/", "lastname", "smith").collect();\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n注意\n\nsqlentityqueryに対して抽出条件を指定する場合paramメソッドは使用しないでください。sqlentityquery#param()には@deprecatedが付与されており、将来削除される予定です。\n\n# ソート順(sqlentityquery#asc /#desc)や取得データの件数(#limit)、開始位置(#offset)、悲観ロック(#forupdate /#forupdatenowait /#forupdatewait)の指定 \nsqlentityqueryでは抽出条件に加えて検索結果のソート順や取得件数の制限、開始位置の指定、明示的なロック指定が行えます。\n\n条件指定メソッド記述例 生成されるsql 補足説明 \nasc("col1", "col2") order by col1 asc, col2 asc nullsが有効な場合はnulls lastが出力される \nasc("col1", nulls.first) order by col1 asc nulls first 複数回asc()が呼び出された場合は呼び出し順に並べる \ndesc("col1", "col2") order by col1 desc, col2 desc nullsが有効な場合はnulls lastが出力される \ndesc("col1", nulls.first) order by col1 desc nulls first 複数回asc()が呼び出された場合は呼び出し順に並べる \nlimit(10) limit 10 接続しているdbでlimit句が使用できない場合はuroborosqlruntimeexceptionがスローされる \noffset(10) offset 10 接続しているdbでoffset句が使用できない場合はuroborosqlruntimeexceptionがスローされる \nforupdate() for update 接続しているdbでfor update句が使用できない場合はuroborosqlruntimeexceptionがスローされる \nforupdatenowait() for update nowait 接続しているdbでfor update nowait句が使用できない場合はuroborosqlruntimeexceptionがスローされる \nforupdatewait() for update wait 10 接続しているdbでfor update wait句が使用できない場合はuroborosqlruntimeexceptionがスローされる \nforupdatewait(30) for update wait 30 接続しているdbでfor update wait句が使用できない場合はuroborosqlruntimeexceptionがスローされる \n\n// birth_dateの降順、first_nameの昇順でソートした結果を listで取得\nagent.query(employee.class).desc("birth_date").asc("first_name").collect();\n\n// emp_no の昇順でソートした結果の3行目から5件取得\nagent.query(employee.class).asc("emp_no").offset(3).limit(5).collect();\n\n// 明示的な行ロックを行う\nagent.query(employee.class).forupdate().collect();\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n# オプティマイザーヒントの指定(sqlentityquery#hint) \nsqlentityquery#hint()を使用することで、sqlに対してオプティマイザーヒントを指定することができます。\n\nsqlagent agent = ...\nagent.query(user.class).hint("ordered").lessthan("age", 30).collect();\n\n\n1\n2\n出力されるsql(oracleの場合)\n\nselect /*+ ordered */ id, name, age, ... from user where age < 30\n\n\n1\n注意\n\nオプティマイザーヒントの指定は、利用するdbがオプティマイザーヒントをサポートしている場合に有効になります。\nまた、指定可能なヒント句は利用するdbに依存します。\n\n# 検索結果の取得(sqlentityqury#collect /#first /#one /#select /#stream)\nsqlentityqueryから抽出条件に該当するエンティティを取得します。\n\nメソッド 説明 \ncollect() 検索結果をエンティティのリストとして取得する \nfirst() 検索結果の先頭行を取得する \none() 検索結果の先頭行を取得する。検索結果が2件以上の場合datanonuniqueexceptionをスローする \nstream select(string col, class type) 検索結果の指定したカラムの値をjava.util.stream.streamとして取得する。 \nstream() 検索結果をjava.util.stream.streamとして取得する \n\n// listで取得\nlist employees = agent.query(employee.class).collect();\n\n// 検索結果の先頭行を取得\noptional employee = agent.query(employee.class).first();\n\n// 検索結果(カラム値)の取得\nstring employeename = agent.query(employee.class)\n .equal("employeeid", 1)\n .select("employeename", string.class).findfirst().get();\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n# 集約関数(sqlentityquery#count /#sum /#sum /#min /#max /#exists /#notexists) \nsqlentityqueryではエンティティを取得する他に結果の集計を行うこともできます。\n\nメソッド 説明 \ncount() 検索結果の件数を取得する \ncount(string col) 検索結果のうち、引数で指定したカラムがnullでない行の件数を取得する \nsum(string col) 検索結果のうち、引数で指定したカラムの合計値を取得する \nmin(string col) 検索結果のうち、引数で指定したカラムの最小値を取得する \nmax(string col) 検索結果のうち、引数で指定したカラムの最大値を取得する \nexists(runnable runnable) 検索結果が1件以上ある場合に引数で渡した関数を実行する \nnotexists(runnable runnable) 検索結果が0件の場合に引数で渡した関数を実行する \n\n// 検索結果の件数を取得\nlong count = agent.query(employee.class).count();\n\n// 検索結果が1件以上の場合にログを出力する\nagent.query(employee.class).greaterthan("emp_no", 10).exists(() -> {\n log.info("employee(emp_no > 10) exists.");\n});\n\n\n1\n2\n3\n4\n5\n6\n7\ntip\n\n集約関数を使用すると、検索結果からentityオブジェクトを生成しないためメモリ効率が良くなります。 以下2つの処理結果は同じですが、メモリの使い方が違います。\n\n// collect()を使用すると、検索結果がエンティティに変換されるためメモリを使用する\nlong count = agent.query(employee.class).collect().size();\n\n// count()を使用すると件数のみ取得できる(エンティティは生成されない)\nlong count = agent.query(employee.class).count();\n\n\n1\n2\n3\n4\n5\n# エンティティの挿入\n# 1件の挿入(sqlagent#insert/#insertandreturn)\nメソッド名 戻り値の型 \n sqlagent#insert(e) int \n sqlagent#insertandreturn(e) e \n\nエンティティクラスのインスタンスを使って1レコードの挿入を行います。\n\n * @idアノテーションの指定があるフィールド\n * 対するカラムが自動採番となっているフィールド\n\nの型がprimitive型の場合、もしくはフィールドの値がnullの場合、カラムの値は挿入時に自動採番されます。\nまた、挿入により採番された値がエンティティの該当フィールドにも設定されます。\nフィールドに値を指定した場合は自動採番カラムであっても指定した値が挿入されます。\n\nandreturnが付くメソッドでは、挿入したエンティティオブジェクトを戻り値として取得できるため、 エンティティの挿入に続けて処理を行う場合に便利です。\n\nemployee employee = new employee();\nemployee.setfirstname("susan");\nemployee.setlastname("davis");\nemployee.setbirthdate(localdate.of(1969, 2, 10));\nemployee.setgender(gender.female); // male("m"), female("f"), other("o")\n\n// 1件の挿入\nagent.insert(employee);\nsystem.out.println(employee.getempno()); // 自動採番された値が出力される\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n# 複数件の挿入(sqlagent#inserts /#insertsandreturn) \nメソッド名 戻り値の型 \nsqlagent#inserts(stream) int \nsqlagent#inserts(stream, insertstype) int \nsqlagent#inserts(stream, insertscondition) int \nsqlagent#inserts(stream, insertscondition, insertstype) int \nsqlagent#insertsandreturn(stream) stream \nsqlagent#insertsandreturn(stream, insertstype) stream \nsqlagent#insertsandreturn(stream, insertscondition) stream \nsqlagent#insertsandreturn(stream, insertscondition, insertstype) stream \nsqlagent#inserts(class, stream) int \nsqlagent#inserts(class, stream, insertstype) int \nsqlagent#inserts(class, stream, insertscondition) int \nsqlagent#inserts(class, stream, insertscondition, insertstype) int \nsqlagent#insertsandreturn(class, stream) stream \nsqlagent#insertsandreturn(class, stream, insertstype) stream \nsqlagent#insertsandreturn(class, stream, insertscondition) stream \nsqlagent#insertsandreturn(class, stream, insertscondition, insertstype) stream \n\njava.util.stream.stream経由で渡される複数のエンティティインスタンスを挿入します。\n\n * @idアノテーションの指定があるフィールド\n * 対するカラムが自動採番となっているフィールド\n\nの型がprimitive型の場合、もしくはフィールドの値がnullの場合、カラムの値は挿入時に自動採番されます。\nまた、挿入により採番された値がエンティティの該当フィールドにも設定されます。\nフィールドに値を指定した場合は自動採番カラムであっても指定した値が挿入されます。\n\n注意\n\n複数件の挿入で生成されるsqlでは、行毎のフィールドの値の有無を変更することができません。\n最初に挿入するエンティティで@idの指定があるフィールドや自動採番カラムに対するフィールドに値を設定する場合は、 2件目以降のエンティティにも必ず値を設定するようにしてください。\nまた、最初に挿入するエンティティで@idの指定があるフィールドや自動採番カラムに対するフィールドの値にnullを設定する場合は、 2件目以降のエンティティで値を設定していても無視されて自動採番されます。\n\nandreturnが付くメソッドでは、挿入したエンティティオブジェクトのjava.util.stream.streamを戻り値として取得できるため、 エンティティの挿入に続けて処理を行う場合に便利です。\n\n注意\n\nandreturnの戻り値となるstreamを生成する際、挿入したエンティティを全件メモリ上に保持します。 大量データの挿入を行うとoomeが発生する場合があるので、insertsandreturnを使用する場合は挿入する データの件数に気をつけてください。件数が多い場合は一度insertsで挿入した後に、再度検索するといった方法を検討してください。\n\n// 1件の挿入\ndepartment dept = new department();\ndept.setdeptname("sales");\nagent.insert(dept);\n\n// 複数件の挿入(employeeとdeptempの挿入)\nagent.inserts(agent.insertsandreturn(agent.query(employee.class).stream())\n .map(e -> {\n depemp deptemp = new deptemp();\n deptemp.setempno(e.getempno());\n deptemp.setdepno(dept.getdepno());\n return deptemp;\n })\n);\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n# 挿入方法(insertstype)の指定\ninsertstypeを指定することで実行される挿入用のsqlを変更することが出来ます。\n\ninsertstype 説明 \nbulk insert into ... values ( ... ), ( ... )という風にvaluesに複数行の値を出力し一度に複数レコードを挿入する。 \n dbがこの記法をサポートしている場合に指定可能。dbが未サポートの場合、指定してもbatchとして実行される。 \nbatch java.sql.preparedstatement#executebatch()を使用したバッチsql実行 \n\nstream employees = agent.query(employee.class)\n .stream()\n .map(e -> e.setempno(e.getempno() + 1000));\n \n// 複数件の挿入(バッチ実行)\nagent.inserts(employees, insertstype.batch);\n}\n\n\n1\n2\n3\n4\n5\n6\n7\ntip\n\ninsertstypeは、初期値設定が可能です。\n\n# 挿入条件(insertscondition)の指定\n挿入用sqlの実行条件を指定します。\ninsertscondition#test(sqlcontext ctx, int count, e entity)の戻り値がtrueの場合に挿入用sqlを実行します。\ninsertsconditionはfunctionalinterfaceのためlambda式が利用できます。\n\nstream employees = agent.query(employee.class)\n .stream()\n .map(e -> e.setempno(e.getempno() + 1000));\n \n// 複数件の挿入(10件毎に挿入)\nagent.inserts(employees, (ctx, count, entity) -> count == 10);\n\n\n1\n2\n3\n4\n5\n6\n# エンティティの更新\n# 1件の更新(sqlagent#update /#updateandreturn)\nメソッド名 戻り値の型 \n sqlagent#update(e) int \n sqlagent#updateandreturn(e) e \n\nエンティティクラスのインスタンスを使って1レコードの更新を行います。\n\nレコード更新時、@versionアノテーションの指定があるフィールドに対するカラムはカウントアップされます。\nまた、更新された値がエンティティの該当フィールドにも設定されます。\n\n補足\n\nエンティティクラスのインスタンスを使った1レコードの更新では、@idを指定したフィールドに対するカラムや自動採番カラムは更新できません。\n@idを指定したフィールドに対するカラムや自動採番カラムを更新する場合は、後述する条件指定による複数件の更新を使用してください。\n\nandreturnが付くメソッドでは、更新したエンティティオブジェクトを戻り値として取得できるため、 エンティティの更新に続けて処理を行う場合に便利です。\n\nagent.find(employee.class, 1).ifpresent(employee -> {\n employee.setlastname("wilson");\n system.out.println(employee.getlockversion()); // 1\n\n // エンティティの更新\n agent.update(employee);\n system.out.println(employee.getlockversion()); // 2\n});\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n# 条件指定による複数件の更新(sqlagent#update) \nメソッド名 戻り値の型 \nsqlagent#update(class) sqlentityupdate \n\n更新対象のレコードを抽出する条件を指定して更新を行います。\n抽出条件の指定方法は 抽出条件の指定 を参照してください。\nまた、set()メソッドで更新対象のフィールドと値を指定することができます。\n\n// first_name に \'bob\' を含むエンティティの性別を更新\nagent.update(employee.class)\n .contains("firstname", "bob")\n .set("gender", gender.male)\n .count();\n\n\n1\n2\n3\n4\n5\n# 複数件の更新(sqlagent#updates /#updatesandreturn) \nメソッド名 戻り値の型 \nsqlagent#updates(stream) int \nsqlagent#updates(stream, updatescondition) int \nsqlagent#updatesandreturn(stream) stream \nsqlagent#updatesandreturn(stream, updatescondition) stream \nsqlagent#updates(class, stream) int \nsqlagent#updates(class, stream, updatescondition) int \nsqlagent#updatesandreturn(class, stream) stream \nsqlagent#updatesandreturn(class, stream, updatescondition) stream \n\njava.util.stream.stream経由で渡される複数のエンティティインスタンスを使って更新します。\n\ntip\n\ninsertsと違い必ずバッチsql実行になります。\n\nレコード更新時、@versionアノテーションの指定があるフィールドに対するカラムはカウントアップされます。\nまた、更新された値がエンティティの該当フィールドにも設定されます。\n\nandreturnが付くメソッドでは、更新したエンティティオブジェクトのjava.util.stream.streamを戻り値として取得できるため、 エンティティの更新に続けて処理を行う場合に便利です。\n\nwarning\n\nandreturnの戻り値となるstreamを生成する際、更新したエンティティを全件メモリ上に保持します。 大量データの更新を行うとoomeが発生する場合があるので、updatesandreturnを使用する場合は更新する データの件数に気をつけてください。件数が多い場合は一度updatesで更新した後に、再度検索するといった方法を検討してください。\n\n// 複数件の更新\nagent.updates(agent.query(employee.class)\n .stream()\n .map(e -> {\n e.setfirstname(e.getfirstname() + "_new");\n return e;\n })\n);\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n# 更新条件(updatescondition)の指定\n更新用sqlの実行条件を指定します。\nupdatescondition#test(sqlcontext ctx, int count, e entity)の戻り値がtrueの場合に更新用sqlを実行します。\nupdatesconditionはfunctionalinterfaceのためlambda式が利用できます。\n\nstream employees = agent.query(employee.class)\n .stream()\n .map(e -> {\n e.setfirstname(e.getfirstname() + "_new");\n return e;\n });\n \n// 複数件の更新(10件毎に挿入)\nagent.updates(employees, (ctx, count, entity) -> count == 10);\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n# エンティティの削除\n# 1件の削除(sqlagent#delete /#deleteandreturn)\nメソッド名 戻り値の型 \n sqlagent#delete(e) int \n sqlagent#deleteandreturn(e) e \n\nエンティティクラスのインスタンスを使って1レコードの削除を行います。\n\nandreturnが付くメソッドでは、削除したエンティティオブジェクトを戻り値として取得できるため、 エンティティの削除に続けて処理を行う場合に便利です。\n\nagent.find(employee.class, 1).ifpresent(employee -> {\n // エンティティの削除\n agent.delete(employee);\n});\n\n\n1\n2\n3\n4\n# pkを指定した複数件の削除(sqlagent#delete) \nメソッド名 戻り値の型 \nsqlagent#delete(class, object...) int \n\n// pk(emp_no) = 1 or 2 のエンティティの削除\nagent.delete(employee.class, 1, 2);\n\n\n1\n2\n# 条件指定による複数件の削除(sqlagent#delete) \nメソッド名 戻り値の型 \nsqlagent#delete(class) sqlentitydelete \n\n削除対象のレコードを抽出する条件を指定して削除を行います。\n抽出条件の指定方法は 抽出条件の指定 を参照してください。\n\n// first_name = \'bob\' に該当するエンティティの削除\nagent.delete(employee.class).contains("firstname", "bob").count();\n\n\n1\n2\n# 全ての行を削除(sqlagent#truncate) \nメソッド名 戻り値の型 \nsqlagent#truncate(class) sqlagent \n\nエンティティクラスとマッピングされているテーブルの全てのレコードをtruncate文により削除します。 一般的に大量レコードの削除は、truncate文による削除のほうが性能上有利ですが、dbmsによってはロールバックできませんので、注意してください。\n\ntip\n\npostgresqlは、truncate文のロールバック可能です。\n\nsqlagent#truncateは、sqlagentを戻り値として返すため、sqlagent#truncateに続けて、sqlagent#insertsをつなげることにより、 テーブルの洗い替えを実装することが可能です。\n\n// 全てのレコードを削除\nagent.truncate(employee.class);\n\n// テーブルの洗い替え\nagent.truncate(employee.class)\n .inserts(employees.stream());\n\n\n1\n2\n3\n4\n5\n6\n# entityアノテーション\ndaoインタフェースで利用するエンティティクラスではテーブルとのマッピングやカラムの属性を指定するためにアノテーションを利用することができます。\n\n# @table\nエンティティクラスに紐づけるテーブル名を指定します。\nテーブル名と名前が一致しないエンティティクラスにマッピングしたい場合に利用します。\n\n属性名 型 必須 説明 初期値 \nname string - マッピングするテーブル名。指定しない場合はクラス名をスネークケースにしたテーブルとマッピングする なし \nschema string - マッピングするテーブルの所属するスキーマ名 なし \n\nimport jp.co.future.uroborosql.mapping.annotations.table;\n\n// name指定なし (departmentテーブルにマッピング)\n@table\npublic class department {\n // 以下略\n}\n\n// name指定あり\n@table(name = "employee")\npublic class customemployee {\n // 以下略\n}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n# @column\nフィールドに紐づけるカラム名を指定します。\nカラム名と名前が一致しないフィールドにマッピングしたい場合に利用します。\n\n属性名 型 必須 説明 初期値 \nname string 〇 マッピングするカラム名 なし \n\nimport jp.co.future.uroborosql.mapping.annotations.table;\nimport jp.co.future.uroborosql.mapping.annotations.column;\n\n@table(name = "employee")\npublic class employee {\n @column(name = "emp_no")\n private long employeeno;\n\n private string firstname;\n\n // 以下略\n}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n# @domain\n独自に作成した型(ドメインクラス)のフィールドにカラムをマッピングする場合に指定します。\n\n属性名 型 必須 説明 初期値 \nvaluetype class 〇 ドメインクラスを生成するのに必要な値の型 なし \nfactorymethod string - ドメインクラスを生成・取得するメソッド名。指定しない場合はコンストラクタが呼び出される。 "" \ntojdbcmethod string - jdbcが受け付けられる値に変換するメソッド名 "getvalue" \nnullable boolean - null可かどうかの指定 false \n\n例\n\nimport jp.co.future.uroborosql.mapping.annotations.table;\nimport jp.co.future.uroborosql.mapping.annotations.domain;\n\n@domain(valuetype = string.class, factorymethod = "of", tojdbcmethod = "getname", nullable = true)\npublic static class namedomain {\n private string name;\n\n private namedomain(string name) {\n this.name = name;\n }\n\n public static namedomain of(string name) {\n return new namedomain(name);\n }\n\n public string getname() {\n return name;\n }\n}\n\n@table\npublic class employee {\n private long empno;\n private namedomain firstname;\n\n // 以下略\n}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n# @transient\nフィールドとカラムのマッピング対象から除外します。\n\ntip\n\n例えば、エンタープライズシステムの設計でしばしば利用される最終登録日時や最終更新日時など、 insert/updateの対象から除外したいケースで利用します。\n\n属性名 型 必須 説明 初期値 \ninsert boolean - agent#insert()実行時にフィールドを無視するかどうか。trueの場合は無視する。 true \nupdate boolean - agent#update()実行時にフィールドを無視するかどうか。trueの場合は無視する。 true \n\n例\n\nimport jp.co.future.uroborosql.mapping.annotations.table;\nimport jp.co.future.uroborosql.mapping.annotations.transient;\n\n@table\npublic class employee {\n\n // 途中略\n\n @transient\n private string memo; // 常に無視\n\n @transient(insert = false, update = true)\n private localdate creationdate; // insert時は対象、update時は無視\n\n @transient(insert = true, update = false)\n private localdate updatedate; // insert時は無視、update時は対象\n\n // 以下略\n}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n# @version\nこのアノテーションが付与されたフィールドは楽観ロック用のバージョン情報を保持するフィールドになります。\nデフォルト(lockversionoptimisticlocksupplier)ではupdate時にはset句で+1され、where句の検索条件に追加されてsqlを実行し更新件数が0の場合にはoptimisticlockexceptionをスローします。\n\nwarning\n\n@versionを付与するフィールドにマッピングされるdbカラムの型は数値型でなければなりません。\n\n属性名 型 必須 説明 初期値 \nsupplier optimisticlocksupplier - バージョン情報カラム lockversionoptimisticlocksupplier \n\n# サプライヤの種類\nサプライヤ型 概要 説明 \nlockversionoptimisticlocksupplier ロックバージョン updateのset句で+1がセットされます。 \ncycliclockversionoptimisticlocksupplier 循環式ロックバージョン updateのset句でバージョン情報カラム名 % 数値カラムの最大値 + 1がセットされます。 \ntimestampoptimisticlocksupplier タイムスタンプ updateのset句でタイムスタンプ(system.currenttimemillis())がセットされます。 \nfieldincrementoptimisticlocksupplier フィールド値インクリメント updateのset句で2waysqlのバインド変数を利用して、バージョン情報カラム名+1がセットされます。 \n\n例\n\nimport jp.co.future.uroborosql.mapping.annotations.table;\nimport jp.co.future.uroborosql.mapping.annotations.version;\nimport jp.co.future.uroborosql.mapping.timestampoptimisticlocksupplier;\n\n@table\npublic class employee {\n private long empno;\n private string firstname;\n private string lastname;\n\n  // 途中略\n\n @version(supplier = timestampoptimisticlocksupplier.class)\n private long lockversion = 0;\n\n // 以下略\n}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n# @id /@generatedvalue /@sequencegenerator \nこれらのアノテーションが付与されたフィールドは自動採番フィールドになります。\n@idと@generatedvalueは必ずセットでフィールドに付与する必要があります。\n@generatedvalueのstrategy属性がgenerationtype.sequenceの場合に@sequencegeneratorを付与してシーケンスの生成方法を指定する必要があります。\n\nアノテーション 説明 \n@id エンティティの主キーを識別するアノテーション \n@generatedvalue 主キーの値の生成戦略を指定するアノテーション \n@sequencegenerator sequenceによるid生成を設定するアノテーション \n\nアノテーション 属性名 型 必須 説明 初期値 \n@id なし - - - - \n@generatedvalue strategy generationtype - 主キー生成戦略の型。generationtype.identity, generationtype.sequenceのいずれかを指定 generationtype.identity \n@sequencegenerator sequence string 〇 シーケンス名 なし \n@sequencegenerator catalog string - シーケンスが所属するカタログ名 "" \n@sequencegenerator schema string - シーケンスが所属するスキーマ名 "" \n\nimport jp.co.future.uroborosql.mapping.annotations.table;\nimport jp.co.future.uroborosql.mapping.annotations.id;\nimport jp.co.future.uroborosql.mapping.annotations.generatedvalue;\nimport jp.co.future.uroborosql.mapping.annotations.sequencegenerator;\n\n@table\npublic class employee {\n @id\n @generatedvalue(strategy = generationtype.sequence)\n @sequencegenerator(sequence = \'employee_emp_id_seq\')\n private long empno;\n\n private string firstname;\n\n // 以下略\n}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16',charsets:{cjk:!0}},{title:"環境設定",frontmatter:{meta:[{name:"og:title",content:"環境設定"},{name:"og:url",content:"/uroborosql-doc/getting_started/"}]},regularPath:"/getting_started/",relativePath:"getting_started/README.md",key:"v-e4ed7814",path:"/getting_started/",headers:[{level:2,title:"ビルドツールの設定",slug:"ビルドツールの設定",normalizedTitle:"ビルドツールの設定",charIndex:9},{level:2,title:"事前準備",slug:"事前準備",normalizedTitle:"事前準備",charIndex:1557},{level:2,title:"サンプルプロジェクトの実行",slug:"サンプルプロジェクトの実行",normalizedTitle:"サンプルプロジェクトの実行",charIndex:1730},{level:2,title:"サンプルプロジェクトの構成",slug:"サンプルプロジェクトの構成",normalizedTitle:"サンプルプロジェクトの構成",charIndex:2272}],lastUpdated:"2020-11-19 23:55:38",headersStr:"ビルドツールの設定 事前準備 サンプルプロジェクトの実行 サンプルプロジェクトの構成",content:"# 環境設定\n# ビルドツールの設定\nuroboroSQLをMavenプロジェクトに組み込むには、pom.xmlに以下のライブラリ依存関係を追加して下さい。uroboroSQLはMaven Central Repositoryで公開されています。\n\n\n jp.co.future\n uroborosql\n 0.20.2\n\n\n\n1\n2\n3\n4\n5\nまた、 より式言語ライブラリの選択が可能になりました。\n以下の2つのライブラリのうち、どちらかを選択してライブラリ依存関係に追加して下さい。\n\nOGNLを利用する場合\n\n\n ognl\n ognl\n 3.2.16\n\n\n\n1\n2\n3\n4\n5\nSpring Expression Language(SpEL)を利用する場合\n\n\n org.springframework\n spring-expression\n 5.3.1\n\n\n\n1\n2\n3\n4\n5\nuroboroSQLでREPLを使用する場合は追加で以下のライブラリ依存関係を追加してください。\n\n\n org.jline\n jline\n 3.17.1\n\n\n org.fusesource.jansi\n jansi\n 1.18\n\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\nGradleプロジェクトの場合は、build.gradleのdependencies内に以下のライブラリ依存関係を追加してください。\n\ncompile group: 'jp.co.future', name: 'uroborosql', version: '0.20.2'\n\n// 式言語ライブラリとしてOGNLを使用する場合\ncompile group: 'ognl', name: 'ognl', version: '3.2.16'\n// 式言語ライブラリとしてSpring Expression Language(SpEL)を使用する場合\ncompile group: 'org.springframework', name: 'spring-expression', version: '5.3.1'\n\n// REPLを使用する場合\ncompile group: 'org.jline', name: 'jline', version: '3.17.1'\ncompile group: 'org.fusesource.jansi', name: 'jansi', version: '1.18'\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\nTIP\n\nuroboroSQLを利用するためには、Java8以上の環境が必要です。\n\n# 事前準備\n事前準備として、\n\n * Java8 or 11のいずれかのJDKディストリビューション * AdobtOpenJDK\n * Amazon Corretto\n * Oracle JDK\n \n \n * Apache Maven のv3.3.1(Java7対応版)以上のバージョン\n\nをインストールしてください。\n\n# サンプルプロジェクトの実行\nuroboroSQLのサンプルアプリケーションであるuroborosql-sampleを使ってuroboroSQLを動かしてみましょう。\n\nまず始めにuroborosql-sampleから最新のソースコードを取得します。\n\ngit clone https://github.com/future-architect/uroborosql-sample.git\n\n\n1\n取得できたらcloneしたフォルダに移動します。\n\ncd uroborosql-sample\n\n\n1\nまずはサンプルアプリケーションを実行してみましょう。 サンプルアプリケーションは以下の起動コマンドで実行します。\n\nmvn -PrunMain\n\n\n1\nこれでサンプルアプリケーションが実行されます。\n(初回実行時は必要なライブラリをダウンロードするため時間がかかります)\nアプリケーションの実行ログが出力され、Mavenが正常終了すれば成功です。 色々ログが流れますが、この中で\n\n * DB接続\n * テーブル作成と初期データの挿入\n * SQLによる検索\n * トランザクション\n * SQLによる挿入、更新、削除\n * バッチ更新\n\nといった一連の処理が実行されています。\n\n# サンプルプロジェクトの構成\nではサンプルアプリケーションの構成を見ていきましょう。\n\nuroborosql-sample\n├─REPL\n│ repl.properties\n│ \n└─src\n └─main\n ├─java\n │ └─jp\n │ └─co\n │ └─future\n │ └─uroborosql\n │ └─sample\n │ │ AbstractApiSample.java\n │ │ Main.java\n │ │ EntityApiSample.java\n │ │ SqlFileApiSample.java\n │ │ \n │ ├─entity\n │ │ Department.java\n │ │ Employee.java\n │ │ DeptEmp.java\n │ │ \n │ └─type\n │ Gender.java\n │ \n └─resources\n │ logback.xml\n │ \n ├─data\n │ department.tsv\n │ dept_emp.tsv\n │ employee.tsv\n │ \n └─sql\n ├─ddl\n │ create_tables.sql\n │ \n ├─setup\n │ insert_data.sql\n │ \n ├─department\n │ insert_department.sql\n │ select_department.sql\n │ \n ├─employee\n │ insert_employee.sql\n │ select_employee.sql\n │ update_employee.sql\n │ \n └─relation\n insert_dept_emp.sql\n select_dept_emp.sql\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n主要なファイルの説明です\n\nファイル 説明 \nMain.java uroborosql-sampleのメインプログラムです。ここから各サンプルコードの呼び出しを行っています。 \nSqlFileApiSample.java / EntityApiSample.java 提供されているAPIの種類毎のサンプルコードです。 \nDepartment.java / Employee.java / DeptEmp.java テーブル構造を表すエンティティクラスです。サンプルコードの中で使用します。 \nGender.java 性別を表すEnumクラスです。サンプルコードの中で使用します。 \nsqlフォルダ配下のSQL uroborosqlで実行するSQLファイルです。 \ndataフォルダ配下のTSV テーブルデータ作成用のTSVファイルです。Mainクラスの中でテーブルへの一括データ投入を行う際のデータとして利用します。 \nlogback.xml ログ出力設定ファイルです。",normalizedContent:"# 環境設定\n# ビルドツールの設定\nuroborosqlをmavenプロジェクトに組み込むには、pom.xmlに以下のライブラリ依存関係を追加して下さい。uroborosqlはmaven central repositoryで公開されています。\n\n\n jp.co.future\n uroborosql\n 0.20.2\n\n\n\n1\n2\n3\n4\n5\nまた、 より式言語ライブラリの選択が可能になりました。\n以下の2つのライブラリのうち、どちらかを選択してライブラリ依存関係に追加して下さい。\n\nognlを利用する場合\n\n\n ognl\n ognl\n 3.2.16\n\n\n\n1\n2\n3\n4\n5\nspring expression language(spel)を利用する場合\n\n\n org.springframework\n spring-expression\n 5.3.1\n\n\n\n1\n2\n3\n4\n5\nuroborosqlでreplを使用する場合は追加で以下のライブラリ依存関係を追加してください。\n\n\n org.jline\n jline\n 3.17.1\n\n\n org.fusesource.jansi\n jansi\n 1.18\n\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\ngradleプロジェクトの場合は、build.gradleのdependencies内に以下のライブラリ依存関係を追加してください。\n\ncompile group: 'jp.co.future', name: 'uroborosql', version: '0.20.2'\n\n// 式言語ライブラリとしてognlを使用する場合\ncompile group: 'ognl', name: 'ognl', version: '3.2.16'\n// 式言語ライブラリとしてspring expression language(spel)を使用する場合\ncompile group: 'org.springframework', name: 'spring-expression', version: '5.3.1'\n\n// replを使用する場合\ncompile group: 'org.jline', name: 'jline', version: '3.17.1'\ncompile group: 'org.fusesource.jansi', name: 'jansi', version: '1.18'\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\ntip\n\nuroborosqlを利用するためには、java8以上の環境が必要です。\n\n# 事前準備\n事前準備として、\n\n * java8 or 11のいずれかのjdkディストリビューション * adobtopenjdk\n * amazon corretto\n * oracle jdk\n \n \n * apache maven のv3.3.1(java7対応版)以上のバージョン\n\nをインストールしてください。\n\n# サンプルプロジェクトの実行\nuroborosqlのサンプルアプリケーションであるuroborosql-sampleを使ってuroborosqlを動かしてみましょう。\n\nまず始めにuroborosql-sampleから最新のソースコードを取得します。\n\ngit clone https://github.com/future-architect/uroborosql-sample.git\n\n\n1\n取得できたらcloneしたフォルダに移動します。\n\ncd uroborosql-sample\n\n\n1\nまずはサンプルアプリケーションを実行してみましょう。 サンプルアプリケーションは以下の起動コマンドで実行します。\n\nmvn -prunmain\n\n\n1\nこれでサンプルアプリケーションが実行されます。\n(初回実行時は必要なライブラリをダウンロードするため時間がかかります)\nアプリケーションの実行ログが出力され、mavenが正常終了すれば成功です。 色々ログが流れますが、この中で\n\n * db接続\n * テーブル作成と初期データの挿入\n * sqlによる検索\n * トランザクション\n * sqlによる挿入、更新、削除\n * バッチ更新\n\nといった一連の処理が実行されています。\n\n# サンプルプロジェクトの構成\nではサンプルアプリケーションの構成を見ていきましょう。\n\nuroborosql-sample\n├─repl\n│ repl.properties\n│ \n└─src\n └─main\n ├─java\n │ └─jp\n │ └─co\n │ └─future\n │ └─uroborosql\n │ └─sample\n │ │ abstractapisample.java\n │ │ main.java\n │ │ entityapisample.java\n │ │ sqlfileapisample.java\n │ │ \n │ ├─entity\n │ │ department.java\n │ │ employee.java\n │ │ deptemp.java\n │ │ \n │ └─type\n │ gender.java\n │ \n └─resources\n │ logback.xml\n │ \n ├─data\n │ department.tsv\n │ dept_emp.tsv\n │ employee.tsv\n │ \n └─sql\n ├─ddl\n │ create_tables.sql\n │ \n ├─setup\n │ insert_data.sql\n │ \n ├─department\n │ insert_department.sql\n │ select_department.sql\n │ \n ├─employee\n │ insert_employee.sql\n │ select_employee.sql\n │ update_employee.sql\n │ \n └─relation\n insert_dept_emp.sql\n select_dept_emp.sql\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n主要なファイルの説明です\n\nファイル 説明 \nmain.java uroborosql-sampleのメインプログラムです。ここから各サンプルコードの呼び出しを行っています。 \nsqlfileapisample.java / entityapisample.java 提供されているapiの種類毎のサンプルコードです。 \ndepartment.java / employee.java / deptemp.java テーブル構造を表すエンティティクラスです。サンプルコードの中で使用します。 \ngender.java 性別を表すenumクラスです。サンプルコードの中で使用します。 \nsqlフォルダ配下のsql uroborosqlで実行するsqlファイルです。 \ndataフォルダ配下のtsv テーブルデータ作成用のtsvファイルです。mainクラスの中でテーブルへの一括データ投入を行う際のデータとして利用します。 \nlogback.xml ログ出力設定ファイルです。",charsets:{cjk:!0}},{title:"SqlContextFactory",frontmatter:{meta:[{name:"og:title",content:"SqlContextFactory"},{name:"og:url",content:"/uroborosql-doc/configuration/sql-context-factory.html"}]},regularPath:"/configuration/sql-context-factory.html",relativePath:"configuration/sql-context-factory.md",key:"v-018ba5b7",path:"/configuration/sql-context-factory.html",headers:[{level:2,title:"区分値定数や列挙型の利用 ( SqlContextFactory#setConstantClassNames /#setEnumConstantPackageNames)",slug:"区分値定数や列挙型の利用-sqlcontextfactory-setconstantclassnames-setenumconstantpackagenames",normalizedTitle:"区分値定数や列挙型の利用 ( sqlcontextfactory#setconstantclassnames /#setenumconstantpackagenames)",charIndex:1423},{level:2,title:"自動パラメータバインド関数の設定 ( SqlContextFactory#addQueryAutoParameterBinder /#addUpdateAutoParameterBinder )",slug:"自動パラメータバインド関数の設定-sqlcontextfactory-addqueryautoparameterbinder-addupdateautoparameterbinder",normalizedTitle:"自動パラメータバインド関数の設定 ( sqlcontextfactory#addqueryautoparameterbinder /#addupdateautoparameterbinder )",charIndex:5816},{level:2,title:"バインドパラメータ変換クラスの設定 ( SqlContextFactory#addBindParamMapper )",slug:"バインドパラメータ変換クラスの設定-sqlcontextfactory-addbindparammapper",normalizedTitle:"バインドパラメータ変換クラスの設定 ( sqlcontextfactory#addbindparammapper )",charIndex:6900},{level:2,title:"java.sql.ResultSetの挙動設定",slug:"java-sql-resultsetの挙動設定",normalizedTitle:"java.sql.resultsetの挙動設定",charIndex:8133},{level:3,title:"カーソル型の初期値(DefaultResultSetType)",slug:"カーソル型の初期値-defaultresultsettype",normalizedTitle:"カーソル型の初期値(defaultresultsettype)",charIndex:8797},{level:3,title:"変更可能性の初期値(DefaultResultSetConcurrency)",slug:"変更可能性の初期値-defaultresultsetconcurrency",normalizedTitle:"変更可能性の初期値(defaultresultsetconcurrency)",charIndex:9250}],lastUpdated:"2020-3-8 21:44:34",headersStr:"区分値定数や列挙型の利用 ( SqlContextFactory#setConstantClassNames /#setEnumConstantPackageNames) 自動パラメータバインド関数の設定 ( SqlContextFactory#addQueryAutoParameterBinder /#addUpdateAutoParameterBinder ) バインドパラメータ変換クラスの設定 ( SqlContextFactory#addBindParamMapper ) java.sql.ResultSetの挙動設定 カーソル型の初期値(DefaultResultSetType) 変更可能性の初期値(DefaultResultSetConcurrency)",content:'# SqlContextFactory\nSQL構造を表現するクラスであるSqlContextを生成するファクトリクラスです。生成されるSQLの挙動を変更するための設定が行えます。\n\n設定例\n\n// create SqlConfig\nSqlConfig config = UroboroSQL\n .builder(...)\n // SqlContextFactoryの設定\n .setSqlContextFactory(new SqlContextFactoryImpl()\n // 定数クラス設定の追加\n .setConstantClassNames(Arrays.asList(TypeConstants.class.getName()))\n // 列挙型パッケージ設定の追加\n .setEnumConstantPackageNames(Arrays.asList(Gender.class.getPackage().getName()))\n // 定数パラメータのプレフィックス指定(初期値 : CLS_)\n .setConstParamPrefix("CLS_")\n // query用自動パラメータバインド関数の登録\n .addQueryAutoParameterBinder((ctx) -> ctx.paramIfAbsent("current_flg", true))\n // update/batch/procedure用自動パラメータバインド関数の登録\n .addUpdateAutoParameterBinder((ctx) -> ctx.paramIfAbsent("ins_datetime", LocalDateTime.now()))\n .addUpdateAutoParameterBinder((ctx) -> ctx.paramIfAbsent("upd_datetime", LocalDateTime.now()))\n // パラメータ変換クラスの登録\n .addBindParamMapper(new CustomBindParamMapper())\n // ResultSetTypeの初期値\n // java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE, java.sql.ResultSet.TYPE_SCROLL_SENSITIVE のいづれか\n .setDefaultResultSetType(ResultSet.TYPE_FORWARD_ONLY)\n // ResultSetConcurrencyの初期値\n // java.sql.ResultSet.CONCUR_READ_ONLY, java.sql.ResultSet.CONCUR_UPDATABLE のいづれか\n .setDefaultResultSetConcurrency(ResultSet.CONCUR_READ_ONLY)\n ).build();\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n# 区分値定数や列挙型の利用 ( SqlContextFactory#setConstantClassNames /#setEnumConstantPackageNames)\nこれまでSQLの開発では、区分値や定数値などの固定値がマジックナンバーとしてSQL文内に埋め込まれていました。\nしかしマジックナンバーの記述は可読性が悪く仕様変更時の影響調査が困難なため不具合の温床となっていました。\n\n例\n\nselect\n *\nfrom employee\nwhere emp_typ = \'05\' -- 05:従業員 <-- 従業員の区分が変わったらどうする?\n\n\n1\n2\n3\n4\nuroboroSQLはエンタープライズ分野での開発に利用されてきた経験から、SQL文の中でマジックナンバーの代わりに定数や列挙型を利用するための仕組みを提供しています。\n\n区分値定数/列挙型を利用するためにはSqlContextFactoryに以下の設定を追加します。\n\n// create SqlConfig\nSqlConfig config = UroboroSQL\n .builder(...)\n // SqlContextFactoryの設定\n .setSqlContextFactory(new SqlContextFactoryImpl()\n // 定数クラス設定の追加\n .setConstantClassNames(Arrays.asList(TypeConstants.class.getName()))\n // 列挙型パッケージ設定の追加\n .setEnumConstantPackageNames(Arrays.asList(Gender.class.getPackage().getName()))\n // 定数パラメータのプレフィックス指定(初期値 : CLS_)\n .setConstParamPrefix("CLS_")\n ).build();\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n定数クラス : TypeConstants.javaの実装例\n\n/**\n * 区分値定数クラス\n */\npublic final class TypeConstants {\n private TypeConstants() {}\n\n /** 区分種別:口座種別区分 区分種別番号:0035 */\n public static final String ACCOUNT_TYP = "0035";\n /** 区分種別:口座種別区分 区分値:普通 区分値番号:1 */\n public static final String ACCOUNT_TYP_SAVING = "1";\n /** 区分種別:口座種別区分 区分値:当座 区分値番号:2 */\n public static final String ACCOUNT_TYP_CHECKING = "2";\n /** 区分種別:口座種別区分 区分値:定期 区分値番号:3 */\n public static final String ACCOUNT_TYP_FIXED_DEPOSIT = "3";\n /** 区分種別:実行区分 区分種別番号:0052 */\n public static final String ISSUE_TYP = "0052";\n /** 区分種別:実行区分 区分値:未実行 区分値番号:1 */\n public static final String ISSUE_TYP_UNISSUED = "1";\n /** 区分種別:実行区分 区分値:実行済 区分値番号:2 */\n public static final String ISSUE_TYP_OUTSTANDING = "2";\n}\n\n/**\n * システム定数\n */\npublic final class Consts {\n private Consts() {}\n\n public static final class CommonValue {\n private CommonValue() {}\n\n /** 業務日付(オンライン) */\n public static final String ONLINE_DATE = "1";\n\n /** 業務日付(バッチ) */\n public static final String BATCH_DATE = "2";\n\n /** SQL上でのフラグ表現(TRUE=1) */\n public static final String FLAG_ON = "1";\n /** SQL上でのフラグ表現(FALSE=0) */\n public static final String FLAG_OFF = "0";\n /** 日付ALL0 */\n public static final String ZERO_DATE = "00000000";\n /** 日付最小値 */\n public static final String MIN_DATE = "19000101";\n /** 日付最大値 */\n public static final String MAX_DATE = "99991231";\n }\n}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n列挙型 : Gender.javaの実装例\n\n/**\n * 性別を表す列挙型\n */\npublic enum Gender {\n MALE("M"), FEMALE("F"), OTHER("O");\n\n private final String label;\n\n private Gender(String label) {\n this.label = label;\n }\n\n @Override\n public String toString() {\n return label;\n }\n}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\nこのように区分値定数や列挙型を定数パラメータとして登録しておくことで、SQL文の中で定数名が利用できるようになります。\n\n定数パラメータを利用する場合、以下の命名ルールに従ってパラメータを指定します。\n\nパターン 書式 \n定数 [定数パラメータプレフィックス][定数フィールド名大文字] \n定数(Innerクラスがある場合) [定数パラメータプレフィックス][Innerクラス名大文字スネークケース]_[Innerクラス内定数フィールド名大文字] \n列挙型 [定数パラメータプレフィックス][列挙型名大文字]_[列挙子名大文字] \n\nTIP\n\n※定数パラメータプレフィックスの初期値は CLS_となっています。\nSqlContextFactory#setConstParamPrefix()で変更することが可能です。\n\n実際に使用する際はSQL文の中で置換文字列として以下のように指定します\n\n * /*#[定数パラメータプレフィックス][定数フィールド名大文字]*/\n * /*#[定数パラメータプレフィックス][Innerクラス名大文字スネークケース]_[Innerクラス内定数フィールド名大文字]*/\n * /*#[定数パラメータプレフィックス][列挙型名大文字]_[列挙子名大文字]*/\n\nまたは\n\n * /*$[定数パラメータプレフィックス][定数フィールド名大文字]*/\n * /*$[定数パラメータプレフィックス][Innerクラス名大文字スネークケース]_[Innerクラス内定数フィールド名大文字]*/\n * /*$[定数パラメータプレフィックス][列挙型名大文字]_[列挙子名大文字]*/\n\nという風に使用します。\n\nTIP\n\n定数や列挙型の値は固定値なので生成されるSQLは毎回同じ値になり、SQL文解析処理によるCPU負荷を考慮する必要はありません。\n\n区分の例\n\nselect\n *\nfrom account\nwhere account_typ = /*#CLS_ACCOUNT_TYP_SAVING*/\'1\' -- 1:普通口座\n\n\n1\n2\n3\n4\n定数の例\n\nselect\n emp.emp_no as emp_no\n, emp.first_name as first_name\n, emp.last_name as last_name\n, emp.birth_date as birth_date\n, emp.gender as gender\nfrom\n employee emp\nwhere\n emp.birth_date != /*#CLS_COMMON_VALUE_ZERO_DATE*/\'00000000\' -- 定数パラメータの指定\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n列挙型の例\n\nselect\n emp.emp_no as emp_no\n, emp.first_name as first_name\n, emp.last_name as last_name\n, emp.birth_date as birth_date\n, emp.gender as gender\nfrom\n employee emp\nwhere\n emp.gender = /*#CLS_GENDER_FEMALE*/\'F\' -- 列挙型定数パラメータの指定\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n# 自動パラメータバインド関数の設定 ( SqlContextFactory#addQueryAutoParameterBinder /#addUpdateAutoParameterBinder ) \nアプリケーションで使用する各テーブルに共通項目(登録日時、更新日時など)が定義されている場合、 INSERT文やUPDATE文を実行する際には毎回これらの共通項目に対するパラメータを指定する必要が出てきます。\nこのような共通項目へのパラメータ設定を個別に行うと実装が煩雑になり、 どうしても実装漏れや記述ミスにより正しく値が設定されない、といったことが起こります。\n\nuroboroSQLではこのような共通項目に対して自動的にパラメータをバインドする仕組みを提供しています。\n自動パラメータバインド関数を設定することで、SQLの実行のたびに自動パラメータバインド関数が呼び出され、 関数内で指定したパラメータがSQLにバインドされることになります。\n\n設定例\n\nSqlConfig config = UroboroSQL\n .builder(...)\n // SqlContextFactoryの設定\n .setSqlContextFactory(new SqlContextFactoryImpl()\n // query用自動パラメータバインド関数の登録\n .addQueryAutoParameterBinder((ctx) -> ctx.paramIfAbsent("current_flg", true))\n // update/batch/procedure用自動パラメータバインド関数の登録\n .addUpdateAutoParameterBinder((ctx) -> ctx.paramIfAbsent("ins_datetime", LocalDateTime.now()))\n .addUpdateAutoParameterBinder((ctx) -> ctx.paramIfAbsent("upd_datetime", LocalDateTime.now()))\n ).build();\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n自動パラメータバインド関数はSqlContextを引数に受け取るので、関数内でパラメータの設定を行ってください。\n\nTIP\n\n関数の評価は、SQL生成処理(SQL文内の/*IF*/や/*BEGIN*/、/*parameter_name*/の評価)の直前に行われます。\n\n# バインドパラメータ変換クラスの設定 ( SqlContextFactory#addBindParamMapper ) \nSQLを実行する際、独自に作成したクラスをバインドしたい場合があります。 そういったケースに対応できるようuroboroSQLではバインドパラメータをJDBCが受け入れられる型に変換するためのクラスを 設定することが出来ます。\n\nバインドパラメータ変換クラスの例\n\n// Nameクラスに対するバインドパラメータ変換クラス\npublic class CustomBindParamMapper implements BindParameterMapper {\n @Override\n public Object toJdbc(Name original, Connection connection,\n BindParameterMapperManager parameterMapperManager) {\n return original.toString();\n }\n}\n\n// バインドパラメータに設定するドメインクラス\npublic class Name {\n private final String firstName;\n private final String lastName;\n\n public Name(String firstName, String lastName) {\n this.firstName = firstName;\n this.lastName = lastName;\n }\n\n @Override\n public String toString() {\n return this.firstName + " " + this.lastName;\n }\n}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\nSqlContextFactoryの設定\n\n// create SqlConfig\nSqlConfig config = UroboroSQL\n.builder(...)\n// SqlContextFactoryの設定\n.setSqlContextFactory(new SqlContextFactoryImpl()\n // パラメータ変換クラスの登録\n .addBindParamMapper(new CustomBindParamMapper())\n).build();\n\n\n1\n2\n3\n4\n5\n6\n7\n8\nバインドパラメータ設定例\n\nName name = new Name("Bob", "Smith");\nagent.update("insert_user").param("name", name).count();\n\n\n1\n2\n# java.sql.ResultSetの挙動設定 \n検索SQLの発行で取得するjava.util.ResultSetの挙動を変更することができます。\n\n// create SqlConfig\nSqlConfig config = UroboroSQL\n .builder(...)\n // SqlContextFactoryの設定\n .setSqlContextFactory(new SqlContextFactoryImpl()\n // ResultSetTypeの初期値\n // java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE, java.sql.ResultSet.TYPE_SCROLL_SENSITIVE のいづれか\n .setDefaultResultSetType(ResultSet.TYPE_FORWARD_ONLY)\n // ResultSetConcurrencyの初期値\n // java.sql.ResultSet.CONCUR_READ_ONLY, java.sql.ResultSet.CONCUR_UPDATABLE のいづれか\n .setDefaultResultSetConcurrency(ResultSet.CONCUR_READ_ONLY)\n ).build();\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n# カーソル型の初期値(DefaultResultSetType)\njava.sql.ResultSetのカーソルの型を指定します。\n\n型 説明 初期値 \njava.sql.ResultSet#TYPE_FORWARD_ONLY カーソルは最初から最後まで順方向にしか移動できません。 ◯ \njava.sql.ResultSet#TYPE_SCROLL_INSENSITIVE カーソルは順方向・逆方向いずれにも移動可能です。ただし他による変更を反映しません。 \njava.sql.ResultSet#TYPE_SCROLL_SENSITIVE カーソルは順方向・逆方向いずれにも移動可能です。また他による変更も反映します。 \n\n# 変更可能性の初期値(DefaultResultSetConcurrency)\njava.sql.ResultSetの変更可能性を指定します。\n\n型 説明 初期値 \njava.sql.ResultSet.CONCUR_READ_ONLY カーソルはデータの読み出ししかサポートしません。 ◯ \njava.sql.ResultSet.CONCUR_UPDATABLE カーソルは変更可能です。カーソルを用いたデータの挿入・変更・削除がサポートされます。',normalizedContent:'# sqlcontextfactory\nsql構造を表現するクラスであるsqlcontextを生成するファクトリクラスです。生成されるsqlの挙動を変更するための設定が行えます。\n\n設定例\n\n// create sqlconfig\nsqlconfig config = uroborosql\n .builder(...)\n // sqlcontextfactoryの設定\n .setsqlcontextfactory(new sqlcontextfactoryimpl()\n // 定数クラス設定の追加\n .setconstantclassnames(arrays.aslist(typeconstants.class.getname()))\n // 列挙型パッケージ設定の追加\n .setenumconstantpackagenames(arrays.aslist(gender.class.getpackage().getname()))\n // 定数パラメータのプレフィックス指定(初期値 : cls_)\n .setconstparamprefix("cls_")\n // query用自動パラメータバインド関数の登録\n .addqueryautoparameterbinder((ctx) -> ctx.paramifabsent("current_flg", true))\n // update/batch/procedure用自動パラメータバインド関数の登録\n .addupdateautoparameterbinder((ctx) -> ctx.paramifabsent("ins_datetime", localdatetime.now()))\n .addupdateautoparameterbinder((ctx) -> ctx.paramifabsent("upd_datetime", localdatetime.now()))\n // パラメータ変換クラスの登録\n .addbindparammapper(new custombindparammapper())\n // resultsettypeの初期値\n // java.sql.resultset.type_forward_only, java.sql.resultset.type_scroll_insensitive, java.sql.resultset.type_scroll_sensitive のいづれか\n .setdefaultresultsettype(resultset.type_forward_only)\n // resultsetconcurrencyの初期値\n // java.sql.resultset.concur_read_only, java.sql.resultset.concur_updatable のいづれか\n .setdefaultresultsetconcurrency(resultset.concur_read_only)\n ).build();\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n# 区分値定数や列挙型の利用 ( sqlcontextfactory#setconstantclassnames /#setenumconstantpackagenames)\nこれまでsqlの開発では、区分値や定数値などの固定値がマジックナンバーとしてsql文内に埋め込まれていました。\nしかしマジックナンバーの記述は可読性が悪く仕様変更時の影響調査が困難なため不具合の温床となっていました。\n\n例\n\nselect\n *\nfrom employee\nwhere emp_typ = \'05\' -- 05:従業員 <-- 従業員の区分が変わったらどうする?\n\n\n1\n2\n3\n4\nuroborosqlはエンタープライズ分野での開発に利用されてきた経験から、sql文の中でマジックナンバーの代わりに定数や列挙型を利用するための仕組みを提供しています。\n\n区分値定数/列挙型を利用するためにはsqlcontextfactoryに以下の設定を追加します。\n\n// create sqlconfig\nsqlconfig config = uroborosql\n .builder(...)\n // sqlcontextfactoryの設定\n .setsqlcontextfactory(new sqlcontextfactoryimpl()\n // 定数クラス設定の追加\n .setconstantclassnames(arrays.aslist(typeconstants.class.getname()))\n // 列挙型パッケージ設定の追加\n .setenumconstantpackagenames(arrays.aslist(gender.class.getpackage().getname()))\n // 定数パラメータのプレフィックス指定(初期値 : cls_)\n .setconstparamprefix("cls_")\n ).build();\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n定数クラス : typeconstants.javaの実装例\n\n/**\n * 区分値定数クラス\n */\npublic final class typeconstants {\n private typeconstants() {}\n\n /** 区分種別:口座種別区分 区分種別番号:0035 */\n public static final string account_typ = "0035";\n /** 区分種別:口座種別区分 区分値:普通 区分値番号:1 */\n public static final string account_typ_saving = "1";\n /** 区分種別:口座種別区分 区分値:当座 区分値番号:2 */\n public static final string account_typ_checking = "2";\n /** 区分種別:口座種別区分 区分値:定期 区分値番号:3 */\n public static final string account_typ_fixed_deposit = "3";\n /** 区分種別:実行区分 区分種別番号:0052 */\n public static final string issue_typ = "0052";\n /** 区分種別:実行区分 区分値:未実行 区分値番号:1 */\n public static final string issue_typ_unissued = "1";\n /** 区分種別:実行区分 区分値:実行済 区分値番号:2 */\n public static final string issue_typ_outstanding = "2";\n}\n\n/**\n * システム定数\n */\npublic final class consts {\n private consts() {}\n\n public static final class commonvalue {\n private commonvalue() {}\n\n /** 業務日付(オンライン) */\n public static final string online_date = "1";\n\n /** 業務日付(バッチ) */\n public static final string batch_date = "2";\n\n /** sql上でのフラグ表現(true=1) */\n public static final string flag_on = "1";\n /** sql上でのフラグ表現(false=0) */\n public static final string flag_off = "0";\n /** 日付all0 */\n public static final string zero_date = "00000000";\n /** 日付最小値 */\n public static final string min_date = "19000101";\n /** 日付最大値 */\n public static final string max_date = "99991231";\n }\n}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n列挙型 : gender.javaの実装例\n\n/**\n * 性別を表す列挙型\n */\npublic enum gender {\n male("m"), female("f"), other("o");\n\n private final string label;\n\n private gender(string label) {\n this.label = label;\n }\n\n @override\n public string tostring() {\n return label;\n }\n}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\nこのように区分値定数や列挙型を定数パラメータとして登録しておくことで、sql文の中で定数名が利用できるようになります。\n\n定数パラメータを利用する場合、以下の命名ルールに従ってパラメータを指定します。\n\nパターン 書式 \n定数 [定数パラメータプレフィックス][定数フィールド名大文字] \n定数(innerクラスがある場合) [定数パラメータプレフィックス][innerクラス名大文字スネークケース]_[innerクラス内定数フィールド名大文字] \n列挙型 [定数パラメータプレフィックス][列挙型名大文字]_[列挙子名大文字] \n\ntip\n\n※定数パラメータプレフィックスの初期値は cls_となっています。\nsqlcontextfactory#setconstparamprefix()で変更することが可能です。\n\n実際に使用する際はsql文の中で置換文字列として以下のように指定します\n\n * /*#[定数パラメータプレフィックス][定数フィールド名大文字]*/\n * /*#[定数パラメータプレフィックス][innerクラス名大文字スネークケース]_[innerクラス内定数フィールド名大文字]*/\n * /*#[定数パラメータプレフィックス][列挙型名大文字]_[列挙子名大文字]*/\n\nまたは\n\n * /*$[定数パラメータプレフィックス][定数フィールド名大文字]*/\n * /*$[定数パラメータプレフィックス][innerクラス名大文字スネークケース]_[innerクラス内定数フィールド名大文字]*/\n * /*$[定数パラメータプレフィックス][列挙型名大文字]_[列挙子名大文字]*/\n\nという風に使用します。\n\ntip\n\n定数や列挙型の値は固定値なので生成されるsqlは毎回同じ値になり、sql文解析処理によるcpu負荷を考慮する必要はありません。\n\n区分の例\n\nselect\n *\nfrom account\nwhere account_typ = /*#cls_account_typ_saving*/\'1\' -- 1:普通口座\n\n\n1\n2\n3\n4\n定数の例\n\nselect\n emp.emp_no as emp_no\n, emp.first_name as first_name\n, emp.last_name as last_name\n, emp.birth_date as birth_date\n, emp.gender as gender\nfrom\n employee emp\nwhere\n emp.birth_date != /*#cls_common_value_zero_date*/\'00000000\' -- 定数パラメータの指定\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n列挙型の例\n\nselect\n emp.emp_no as emp_no\n, emp.first_name as first_name\n, emp.last_name as last_name\n, emp.birth_date as birth_date\n, emp.gender as gender\nfrom\n employee emp\nwhere\n emp.gender = /*#cls_gender_female*/\'f\' -- 列挙型定数パラメータの指定\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n# 自動パラメータバインド関数の設定 ( sqlcontextfactory#addqueryautoparameterbinder /#addupdateautoparameterbinder ) \nアプリケーションで使用する各テーブルに共通項目(登録日時、更新日時など)が定義されている場合、 insert文やupdate文を実行する際には毎回これらの共通項目に対するパラメータを指定する必要が出てきます。\nこのような共通項目へのパラメータ設定を個別に行うと実装が煩雑になり、 どうしても実装漏れや記述ミスにより正しく値が設定されない、といったことが起こります。\n\nuroborosqlではこのような共通項目に対して自動的にパラメータをバインドする仕組みを提供しています。\n自動パラメータバインド関数を設定することで、sqlの実行のたびに自動パラメータバインド関数が呼び出され、 関数内で指定したパラメータがsqlにバインドされることになります。\n\n設定例\n\nsqlconfig config = uroborosql\n .builder(...)\n // sqlcontextfactoryの設定\n .setsqlcontextfactory(new sqlcontextfactoryimpl()\n // query用自動パラメータバインド関数の登録\n .addqueryautoparameterbinder((ctx) -> ctx.paramifabsent("current_flg", true))\n // update/batch/procedure用自動パラメータバインド関数の登録\n .addupdateautoparameterbinder((ctx) -> ctx.paramifabsent("ins_datetime", localdatetime.now()))\n .addupdateautoparameterbinder((ctx) -> ctx.paramifabsent("upd_datetime", localdatetime.now()))\n ).build();\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n自動パラメータバインド関数はsqlcontextを引数に受け取るので、関数内でパラメータの設定を行ってください。\n\ntip\n\n関数の評価は、sql生成処理(sql文内の/*if*/や/*begin*/、/*parameter_name*/の評価)の直前に行われます。\n\n# バインドパラメータ変換クラスの設定 ( sqlcontextfactory#addbindparammapper ) \nsqlを実行する際、独自に作成したクラスをバインドしたい場合があります。 そういったケースに対応できるようuroborosqlではバインドパラメータをjdbcが受け入れられる型に変換するためのクラスを 設定することが出来ます。\n\nバインドパラメータ変換クラスの例\n\n// nameクラスに対するバインドパラメータ変換クラス\npublic class custombindparammapper implements bindparametermapper {\n @override\n public object tojdbc(name original, connection connection,\n bindparametermappermanager parametermappermanager) {\n return original.tostring();\n }\n}\n\n// バインドパラメータに設定するドメインクラス\npublic class name {\n private final string firstname;\n private final string lastname;\n\n public name(string firstname, string lastname) {\n this.firstname = firstname;\n this.lastname = lastname;\n }\n\n @override\n public string tostring() {\n return this.firstname + " " + this.lastname;\n }\n}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\nsqlcontextfactoryの設定\n\n// create sqlconfig\nsqlconfig config = uroborosql\n.builder(...)\n// sqlcontextfactoryの設定\n.setsqlcontextfactory(new sqlcontextfactoryimpl()\n // パラメータ変換クラスの登録\n .addbindparammapper(new custombindparammapper())\n).build();\n\n\n1\n2\n3\n4\n5\n6\n7\n8\nバインドパラメータ設定例\n\nname name = new name("bob", "smith");\nagent.update("insert_user").param("name", name).count();\n\n\n1\n2\n# java.sql.resultsetの挙動設定 \n検索sqlの発行で取得するjava.util.resultsetの挙動を変更することができます。\n\n// create sqlconfig\nsqlconfig config = uroborosql\n .builder(...)\n // sqlcontextfactoryの設定\n .setsqlcontextfactory(new sqlcontextfactoryimpl()\n // resultsettypeの初期値\n // java.sql.resultset.type_forward_only, java.sql.resultset.type_scroll_insensitive, java.sql.resultset.type_scroll_sensitive のいづれか\n .setdefaultresultsettype(resultset.type_forward_only)\n // resultsetconcurrencyの初期値\n // java.sql.resultset.concur_read_only, java.sql.resultset.concur_updatable のいづれか\n .setdefaultresultsetconcurrency(resultset.concur_read_only)\n ).build();\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n# カーソル型の初期値(defaultresultsettype)\njava.sql.resultsetのカーソルの型を指定します。\n\n型 説明 初期値 \njava.sql.resultset#type_forward_only カーソルは最初から最後まで順方向にしか移動できません。 ◯ \njava.sql.resultset#type_scroll_insensitive カーソルは順方向・逆方向いずれにも移動可能です。ただし他による変更を反映しません。 \njava.sql.resultset#type_scroll_sensitive カーソルは順方向・逆方向いずれにも移動可能です。また他による変更も反映します。 \n\n# 変更可能性の初期値(defaultresultsetconcurrency)\njava.sql.resultsetの変更可能性を指定します。\n\n型 説明 初期値 \njava.sql.resultset.concur_read_only カーソルはデータの読み出ししかサポートしません。 ◯ \njava.sql.resultset.concur_updatable カーソルは変更可能です。カーソルを用いたデータの挿入・変更・削除がサポートされます。',charsets:{cjk:!0}},{title:"SqlManager",frontmatter:{meta:[{name:"og:title",content:"SqlManager"},{name:"og:url",content:"/uroborosql-doc/configuration/sql-manager.html"}]},regularPath:"/configuration/sql-manager.html",relativePath:"configuration/sql-manager.md",key:"v-baff27d2",path:"/configuration/sql-manager.html",headers:[{level:2,title:"SQLファイルルートフォルダの設定",slug:"sqlファイルルートフォルダの設定",normalizedTitle:"sqlファイルルートフォルダの設定",charIndex:1406},{level:3,title:"Spring bootでの利用",slug:"spring-bootでの利用",normalizedTitle:"spring bootでの利用",charIndex:1925},{level:2,title:"DB種類毎のファイルパス切り替え",slug:"db種類毎のファイルパス切り替え",normalizedTitle:"db種類毎のファイルパス切り替え",charIndex:1082},{level:2,title:"SQLファイルの更新監視",slug:"sqlファイルの更新監視",normalizedTitle:"sqlファイルの更新監視",charIndex:3015}],lastUpdated:"2019-9-4 23:08:33",headersStr:"SQLファイルルートフォルダの設定 Spring bootでの利用 DB種類毎のファイルパス切り替え SQLファイルの更新監視",content:'# SqlManager\nSqlManagerはSQLファイルを管理するクラスです。2つのクラスが提供されています。\n\nクラス 説明 \nSqlManagerImpl java.ioを利用したファイルアクセスを行うSqlManagerクラス。 \nNioSqlManagerImpl java.nioを利用したファイルアクセスを行うSqlManagerクラス \n\nクラスの特徴比較\n\n特徴 SqlManagerImpl NioSqlManagerImpl 補足 \nSQLファイルルートフォルダ設定 〇 〇 \nSQLファイルエンコーディング設定 〇 〇 \n起動時のファイルキャッシュ 〇 △ NioSqlManagerImplはファイルパスのみキャッシュ \n遅延ファイルキャッシュ × 〇 \njarファイル中のSQL参照 〇 〇 \nzipファイル中のSQL参照 × 〇 \nカスタムファイルアクセス対応 × 〇 java.nio.fileパッケージを使用 \nファイル変更検知 × 〇 \nDB種類毎のファイルパス切り替え × 〇 \n\n利用用途に応じてSqlManagerを選択してください。\nSqlManagerクラスの切り替えはビルダーAPIで行うことが出来ます。指定しない場合の初期値はSqlManagerImplになります。\n\nSqlConfig config = UroboroSQL.builder(...)\n // NioSqlManagerの指定\n .setSqlManager(new NioSqlManagerImpl(false)).build();\n\n\n1\n2\n3\n# SQLファイルルートフォルダの設定\nuroboroSQLは初期設定ではクラスパス上にあるsqlフォルダ配下のSQLを読み込みます。\nこのSQLファイルルートフォルダは変更することができます。\n\nSQLファイルルートフォルダの設定 (custom_sqlフォルダを指定)\n\n// SqlManagerImplの場合\nSqlConfig config = UroboroSQL.builder(...)\n // SQLファイルのルートフォルダの設定(custom_sqlフォルダをルートフォルダにする場合)\n .setSqlManager(new SqlManagerImpl("custom_sql")).build();\n\n// NioSqlManagerImplの場合\nSqlConfig config = UroboroSQL.builder(...)\n // SQLファイルのルートフォルダの設定(custom_sqlフォルダをルートフォルダにする場合)\n .setSqlManager(new NioSqlManagerImpl("custom_sql")).build();\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n# Spring bootでの利用 \nSpring boot利用時に実行可能jarにSQLファイルをリソースとして含める場合には、NioSqlManagerImplの場合、パスの指定を変更する必要があります。\n\n例えば、classpath:sqlにSQLファイルを配置している場合は、実行可能jarで起動する際にはアプリケーション設定を利用してBOOT-INF/classes/sqlのように指定してください。\n\n# DB種類毎のファイルパス切り替え \n後述するDialectを利用して、1つのSQL名に対してDB種類毎にファイルパスを切り替えることが出来ます。\n\n以下のようなファイル構成を例として説明します。\n\nsql\n ├─employee\n │ └─select_employee.sql -- Oracle, postgresql以外のDB用SQL\n ├─oracle\n │ └─employee\n │ └─select_employee.sql -- oracle DB用SQL\n └─postgresql\n └─employee\n └─select_employee.sql -- postgresql DB用SQL\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\nSQL名としてemployee/select_employeeを指定した場合、\nOracle DBの場合はsql/oracle/employee/select_employee.sqlが読み込まれます。\n同様にPostgresql DBの場合はsql/postgresql/employee/select_employee.sqlが読み込まれます。\nDBに対するDialect用のフォルダがない場合は通常通りsql/employee/select_employee.sqlが読み込まれます。\n\nDB毎のフォルダ名\n\nDB名 フォルダ名 \nH2 DB h2 \nMicrosoft SQL Server mssql \nMySQL mysql \nOracle oracle \nPostgresql postgresql \nその他 default \n\n# SQLファイルの更新監視 \nNioSqlManagerImplでは、最初にSQLファイルの呼び出しがあったタイミングでSQLファイルをロードし、メモリ内にSQLをキャッシュします。 ファイル監視を有効にしている場合はキャッシュしているファイルに対してjava.nio.file.WatchServiceを利用したファイル監視を行い、 更新があった場合は自動的にリロードする仕組みを提供しています。\n\nWARNING\n\nファイル監視を行うのはファイルシステム上のファイルについてのみでjarファイルやzipファイル内のファイルに対してはファイル監視は行いません。\n\nアプリケーションの開発中など頻繁にSQLファイルを更新する場合に有効です。\nファイル監視の有無はNioSqlManagerImplの設定時に行います。\n\n// NioSqlManagerImplの場合\nSqlConfig config = UroboroSQL.builder(...)\n // SQLファイル監視を有効化(初期値はfalse)\n .setSqlManager(new NioSqlManagerImpl(true)).build();\n\n\n1\n2\n3\n4',normalizedContent:'# sqlmanager\nsqlmanagerはsqlファイルを管理するクラスです。2つのクラスが提供されています。\n\nクラス 説明 \nsqlmanagerimpl java.ioを利用したファイルアクセスを行うsqlmanagerクラス。 \nniosqlmanagerimpl java.nioを利用したファイルアクセスを行うsqlmanagerクラス \n\nクラスの特徴比較\n\n特徴 sqlmanagerimpl niosqlmanagerimpl 補足 \nsqlファイルルートフォルダ設定 〇 〇 \nsqlファイルエンコーディング設定 〇 〇 \n起動時のファイルキャッシュ 〇 △ niosqlmanagerimplはファイルパスのみキャッシュ \n遅延ファイルキャッシュ × 〇 \njarファイル中のsql参照 〇 〇 \nzipファイル中のsql参照 × 〇 \nカスタムファイルアクセス対応 × 〇 java.nio.fileパッケージを使用 \nファイル変更検知 × 〇 \ndb種類毎のファイルパス切り替え × 〇 \n\n利用用途に応じてsqlmanagerを選択してください。\nsqlmanagerクラスの切り替えはビルダーapiで行うことが出来ます。指定しない場合の初期値はsqlmanagerimplになります。\n\nsqlconfig config = uroborosql.builder(...)\n // niosqlmanagerの指定\n .setsqlmanager(new niosqlmanagerimpl(false)).build();\n\n\n1\n2\n3\n# sqlファイルルートフォルダの設定\nuroborosqlは初期設定ではクラスパス上にあるsqlフォルダ配下のsqlを読み込みます。\nこのsqlファイルルートフォルダは変更することができます。\n\nsqlファイルルートフォルダの設定 (custom_sqlフォルダを指定)\n\n// sqlmanagerimplの場合\nsqlconfig config = uroborosql.builder(...)\n // sqlファイルのルートフォルダの設定(custom_sqlフォルダをルートフォルダにする場合)\n .setsqlmanager(new sqlmanagerimpl("custom_sql")).build();\n\n// niosqlmanagerimplの場合\nsqlconfig config = uroborosql.builder(...)\n // sqlファイルのルートフォルダの設定(custom_sqlフォルダをルートフォルダにする場合)\n .setsqlmanager(new niosqlmanagerimpl("custom_sql")).build();\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n# spring bootでの利用 \nspring boot利用時に実行可能jarにsqlファイルをリソースとして含める場合には、niosqlmanagerimplの場合、パスの指定を変更する必要があります。\n\n例えば、classpath:sqlにsqlファイルを配置している場合は、実行可能jarで起動する際にはアプリケーション設定を利用してboot-inf/classes/sqlのように指定してください。\n\n# db種類毎のファイルパス切り替え \n後述するdialectを利用して、1つのsql名に対してdb種類毎にファイルパスを切り替えることが出来ます。\n\n以下のようなファイル構成を例として説明します。\n\nsql\n ├─employee\n │ └─select_employee.sql -- oracle, postgresql以外のdb用sql\n ├─oracle\n │ └─employee\n │ └─select_employee.sql -- oracle db用sql\n └─postgresql\n └─employee\n └─select_employee.sql -- postgresql db用sql\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\nsql名としてemployee/select_employeeを指定した場合、\noracle dbの場合はsql/oracle/employee/select_employee.sqlが読み込まれます。\n同様にpostgresql dbの場合はsql/postgresql/employee/select_employee.sqlが読み込まれます。\ndbに対するdialect用のフォルダがない場合は通常通りsql/employee/select_employee.sqlが読み込まれます。\n\ndb毎のフォルダ名\n\ndb名 フォルダ名 \nh2 db h2 \nmicrosoft sql server mssql \nmysql mysql \noracle oracle \npostgresql postgresql \nその他 default \n\n# sqlファイルの更新監視 \nniosqlmanagerimplでは、最初にsqlファイルの呼び出しがあったタイミングでsqlファイルをロードし、メモリ内にsqlをキャッシュします。 ファイル監視を有効にしている場合はキャッシュしているファイルに対してjava.nio.file.watchserviceを利用したファイル監視を行い、 更新があった場合は自動的にリロードする仕組みを提供しています。\n\nwarning\n\nファイル監視を行うのはファイルシステム上のファイルについてのみでjarファイルやzipファイル内のファイルに対してはファイル監視は行いません。\n\nアプリケーションの開発中など頻繁にsqlファイルを更新する場合に有効です。\nファイル監視の有無はniosqlmanagerimplの設定時に行います。\n\n// niosqlmanagerimplの場合\nsqlconfig config = uroborosql.builder(...)\n // sqlファイル監視を有効化(初期値はfalse)\n .setsqlmanager(new niosqlmanagerimpl(true)).build();\n\n\n1\n2\n3\n4',charsets:{cjk:!0}},{title:"SQL-REPL",frontmatter:{meta:[{name:"og:title",content:"SQL-REPL"},{name:"og:url",content:"/uroborosql-doc/getting_started/sql-repl.html"}]},regularPath:"/getting_started/sql-repl.html",relativePath:"getting_started/sql-repl.md",key:"v-a45e2f96",path:"/getting_started/sql-repl.html",headers:[{level:2,title:"REPLの利用",slug:"replの利用",normalizedTitle:"replの利用",charIndex:164},{level:2,title:"REPLの設定",slug:"replの設定",normalizedTitle:"replの設定",charIndex:16336}],lastUpdated:"2020-3-8 21:44:34",headersStr:"REPLの利用 REPLの設定",content:"# SQL-REPL\nここまではJavaアプリケーションからuroboroSQLを利用する場合の説明でした。uroboroSQLにはもう一つ特徴的な機能として、SQLを対話しながら実行するための REPL(Read-Eval-Print Loop) 機能を提供しています。\n\n今度はこのREPL機能を利用してみましょう。\n\n# REPLの利用\nREPLを起動するためにはjp.co.future.uroborosql.client.SqlREPLクラスを実行する必要があります。 サンプルアプリケーションでSqlREPLクラスを実行するためには以下のコマンドを実行します。\n\nmvn -PREPL\n\n\n1\n実行すると以下のようにタイトル表示とコマンド説明、設定値の情報が表示され、そのあとコマンド入力状態になります。\n\n===========================================================\n _ ____ ___ _\n _ _ _ __ ___ | |__ ___ _ __ ___/ ___| / _ \\| |\n| | | | '__/ _ \\| '_ \\ / _ \\| '__/ _ \\___ \\| | | | |\n| |_| | | | (_) | |_) | (_) | | | (_) |__) | |_| | |___\n \\__,_|_| \\___/|_.__/ \\___/|_| \\___/____/ \\__\\_\\_____|\n\nuroboroSQL SQL REPL ver.0.20.2\n===========================================================\n\nCommands :\n query : execute query from loaded sql file.\n ex1) query [sql file name] : Execute SQL without parameter.\n ex2) query [sql file name] param1=val1 param2=val2 ... : Execute SQL with the specified parameters.\n update : execute update from loaded sql file.\n ex1) update [sql file name] : Execute SQL without parameter.\n ex2) update [sql file name] param1=val1 param2=val2 ... : Execute SQL with the specified parameters.\n view : view sql file.\n ex) view [sql file name] : Show sql file contents.\n list : list loaded sql files.\n ex1) list : Show all loaded sql file(s).\n ex2) list keyword : Show loaded sql file(s) filter by keyword.\n history : list command history.\n ex1) history : Show all command history.\n ex2) history keyword : Show command history filter by keyword.\n driver : list loaded drivers.\n desc : describe table.\n ex) desc [table name] : Show table description.\n generate: generate sql to access the table.\n ex) generate [select/insert/update/delete] [table name] : Show sql to access tables according to keywords.\n parse : parse sql file.\n ex) parse [sql file name] : Parse sql file.\n cls : clear screen.\n exit : exit SQL REPL. `CTRL+C` is an alias.\nProperties file path:REPL\\repl.properties\n[Properties]\ndb.password=\nsql.additionalClassPath=src/test/resources;target/test-classes;${user.home}/.m2/repository/com/h2database/h2/1.4.199/h2-1.4.199.jar\nsql.encoding=UTF-8\ndb.user=sa\nsql.versionColumnName=lock_no\nsql.optimisticLockSupplier=jp.co.future.uroborosql.mapping.FieldIncrementOptimisticLockSupplier\ndb.url=jdbc:h2:mem:repldb;DB_CLOSE_DELAY=-1;\nsqlContextFactory.enumConstantPackageNames=jp.co.future.uroborosql.context.test\nsqlContextFactory.constantClassNames=jp.co.future.uroborosql.context.test.TestConsts\ninitialize.\n\nuroborosql >\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\nREPLを立ち上げた状態では接続したDB(H2DB メモリDB)には何もない状態なので、まずはテーブルを作成します。 サンプルアプリケーションで利用できるSQLファイルを確認しましょう。\n\nuroborosql > list[Enter]\n\n\n1\nと入力してください。\n\nuroborosql > list\nLIST:\nddl/create_tables\ndepartment/insert_department\ndepartment/select_department\nemployee/insert_employee\nemployee/select_employee\nemployee/update_employee\nrelation/insert_dept_emp\nrelation/select_dept_emp\nsetup/insert_data\nuroborosql >\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\nロード済みのSQLファイルのSQL名がわかります。 テーブルを作成するためにddl/create_tablesを実行します。ddl/create_tablesはDDLなので実行するためにはupdateコマンドを使用します。\n\nuroborosql > u[Tab]\n\n\n1\nと入力してください。\n\nuroborosql > update\n\n\n1\nという風にuに一致するコマンドがコード補完されます。\n\nTIP\n\nREPLでは[Tab]を押下することでコマンドやSQL名、バインドパラメータなどが必要に応じでコード補完されます。\n\n続いて\n\nuroborosql > update d[Tab]\n\n\n1\nと入力してください。\n今度はddlに一致するSQL名の候補が表示されます。\n\nuroborosql > update d\nddl/create_tables department/insert_department department/select_department\n\n\n1\n2\nこの状態で[Tab]を入力することで候補を選択することが出来ます。\nddl/create_tablesを選択して[Enter]を入力すると以下のようになります。\n\nuroborosql > update ddl/create_tables\n\n\n1\nもう一度[Enter]を入力するとSQLが実行されます。\n\nuroborosql > update ddl/create_tables\n[DEBUG] Executed SQL[\n-- employee\ndrop table if exists employee cascade;\ncreate table employee (\n emp_no number(6) auto_increment\n , first_name varchar(20) not null\n , last_name varchar(20) not null\n , birth_date date not null\n , gender char(1) not null\n , lock_version number(10) not null default 0\n , constraint employee_PKC primary key (emp_no)\n) ;\n-- dept_emp\ndrop table if exists dept_emp cascade;\ncreate table dept_emp (\n emp_no number(6) not null\n , dept_no number(4) not null\n , constraint dept_emp_PKC primary key (emp_no,dept_no)\n) ;\n-- department\ndrop table if exists department cascade;\ncreate table department (\n dept_no number(4) auto_increment\n , dept_name varchar(100) not null\n , lock_version number(10) not null default 0\n , constraint department_PKC primary key (dept_no)\n) ;\ncomment on table employee is 'employee';\ncomment on column employee.emp_no is 'emp_no';\ncomment on column employee.first_name is 'first_name';\ncomment on column employee.last_name is 'last_name';\ncomment on column employee.birth_date is 'birth_date';\ncomment on column employee.gender is 'gender ''F''emale/''M''ale/''O''ther';\ncomment on column employee.lock_version is 'lock_version';\ncomment on table dept_emp is 'dept_emp';\ncomment on column dept_emp.emp_no is 'emp_no';\ncomment on column dept_emp.dept_no is 'dept_no';\ncomment on table department is 'department';\ncomment on column department.dept_no is 'dept_no';\ncomment on column department.dept_name is 'dept_name';\ncomment on column department.lock_version is 'lock_version'\n]\n[DEBUG] Execute update SQL.\n[DEBUG] SQL execution time [ddl/create_tables] : [00:00:00.030]\nupdate sql[ddl/create_tables] end. row count=0\nuroborosql >\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\nddl/create_tablesが実行され、DBにテーブルが作成されました。\n\nでは次に作成されたテーブルの定義情報を確認します。\nテーブル定義情報の確認にはdescコマンドを使用します。 ここではEMPLOYEEテーブルの定義情報を確認してみましょう。\n\nuroborosql > desc EMPLOYEE[Enter]\n\n\n1\nuroborosql > desc EMPLOYEE\n-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n|TABLE_NAME|COLUMN_NAME |TYPE_NAME|COLUMN_SIZE|DECIMAL_DIGITS|IS_NULLABLE|COLUMN_DEF |REMARKS |\n-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n|EMPLOYEE |EMP_NO |DECIMAL | 6| 0|NO |(NEXT VALUE FOR \"PUBLIC\".\"SYSTEM_SEQUENCE_D06A5524_EC18_4835_A536_1F5A372BFC73\")|emp_no |\n|EMPLOYEE |FIRST_NAME |VARCHAR | 20| 0|NO | |first_name |\n|EMPLOYEE |LAST_NAME |VARCHAR | 20| 0|NO | |last_name |\n|EMPLOYEE |BIRTH_DATE |DATE | 10| 0|NO | |birth_date |\n|EMPLOYEE |GENDER |CHAR | 1| 0|NO | |gender 'F'emale/'M'ale/'O'ther|\n|EMPLOYEE |LOCK_VERSION|DECIMAL | 10| 0|NO | 0|lock_version |\n-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\nuroborosql >\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\nEMPLOYEEテーブルの定義情報が表形式で表示されました。\n\n続いて初期データを投入しましょう。\n\nsetup/insert_dataを実行します。\n\nuroborosql > update setup/insert_data[Enter]\n\n\n1\nuroborosql > update setup/insert_data\n[DEBUG] Executed SQL[\ninsert into department (dept_name) values ('sales');\ninsert into department (dept_name) values ('export');\ninsert into department (dept_name) values ('accounting');\ninsert into department (dept_name) values ('personnel');\ninsert into employee (first_name, last_name, birth_date, gender) values ('Bob', 'Smith', '1970-01-02', 'M');\ninsert into employee (first_name, last_name, birth_date, gender) values ('Susan', 'Davis', '1969-02-10', 'F');\ninsert into employee (first_name, last_name, birth_date, gender) values ('John', 'Wilson', '1982-05-08', 'M');\ninsert into employee (first_name, last_name, birth_date, gender) values ('Sharon', 'Johnson', '1990-01-20', 'F');\ninsert into employee (first_name, last_name, birth_date, gender) values ('Stephen', 'Taylor', '2003-12-31', 'M');\ninsert into dept_emp (emp_no, dept_no) values (1, 1);\ninsert into dept_emp (emp_no, dept_no) values (2, 1);\ninsert into dept_emp (emp_no, dept_no) values (3, 2);\ninsert into dept_emp (emp_no, dept_no) values (4, 3);\ninsert into dept_emp (emp_no, dept_no) values (5, 4)\n]\n[DEBUG] Execute update SQL.\n[DEBUG] SQL execution time [setup/insert_data] : [00:00:00.017]\nupdate sql[setup/insert_data] end. row count=1\nuroborosql >\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\nこれでテーブルに初期データが挿入されました。 では、挿入したデータを検索してみましょう。\n\n検索を行う前に、検索を行うSQLの内容を確認してみましょう。\nSQLの内容を確認するにはviewコマンドを使用します。\n\nuroborosql > view department/select_department[Enter]\n\n\n1\nuroborosql > view department/select_department\nselect /* _SQL_ID_ */\n dept.dept_no as dept_no\n, dept.dept_name as dept_name\n, dept.lock_version as lock_version\nfrom\n department dept\n/*BEGIN*/\nwhere\n/*IF SF.isNotEmpty(deptNo)*/\nand dept.dept_no = /*deptNo*/1\n/*END*/\n/*IF SF.isNotEmpty(deptName)*/\nand dept.dept_name = /*deptName*/'sample'\n/*END*/\n/*END*/\nuroborosql >\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n検索を行う場合はqueryコマンドを使用します。queryの後に実行するSQL名を指定します。\n\nuroborosql > query department/select_department[Enter]\n\n\n1\nuroborosql > query department/select_department\n[DEBUG] Evaluation Expression:[SF.isNotEmpty(deptNo)], Result:[false], Parameter:[deptNo:[null]]\n[DEBUG] Evaluation Expression:[SF.isNotEmpty(deptName)], Result:[false], Parameter:[deptName:[null]]\n[DEBUG] Executed SQL[\nselect /* department/select_department */\n dept.dept_no as dept_no\n, dept.dept_name as dept_name\n, dept.lock_version as lock_version\nfrom\n department dept\n\n]\n[DEBUG] Execute search SQL.\n[INFO ]\n+-------+----------+------------+\n|DEPT_NO|DEPT_NAME |LOCK_VERSION|\n+-------+----------+------------+\n| 1|sales | 0|\n| 2|export | 0|\n| 3|accounting| 0|\n| 4|personnel | 0|\n+-------+----------+------------+\n[DEBUG] SQL execution time [department/select_department] : [00:00:00.078]\nquery sql[department/select_department] end.\nuroborosql >\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\nここではバインドパラメータを指定しなかったため、絞込み条件のないSQLが実行され検索結果として4件のデータが取得できました。\n\nREPLでは上の結果のように、\n\n * 実行するSQL\n * バインドパラメータ\n * SQL文の中の評価式とその評価結果\n * 検索結果\n * 実行時間\n\nが表示されるので、SQLがどういう風に実行され、どういう値が取得できるのかが良く分かるようになっています。\n\n次にバインドパラメータを指定して検索してみましょう。\n\n検索するSQLにどのようなバインドパラメータや条件分岐があるかを確認するにはparseコマンドを使用します。\n\nuroborosql > parse department/select_department[Enter]\n\n\n1\nuroborosql > parse department/select_department\nPARSE:\n\nSQL :\nselect /* _SQL_ID_ */\n dept.dept_no as dept_no\n, dept.dept_name as dept_name\n, dept.lock_version as lock_version\nfrom\n department dept\n/*BEGIN*/\nwhere\n/*IF SF.isNotEmpty(deptNo)*/\nand dept.dept_no = /*deptNo*/1\n/*END*/\n/*IF SF.isNotEmpty(deptName)*/\nand dept.dept_name = /*deptName*/'sample'\n/*END*/\n/*END*/\n\nBRANCHES :\n BEGIN {\n IF ( SF.isNotEmpty(deptNo) ) {\n }\n IF ( SF.isNotEmpty(deptName) ) {\n }\n }\n\nBIND_PARAMS :\n deptName\n deptNo\nuroborosql >\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\nparseコマンドの結果は以下のようになります。\n\n * SQL : 解析対象のSQL\n * BRANCHES : 条件分岐\n * BIND_PARAMS : バインドパラメータ\n\n条件分岐では BEGINのスコープ({}で囲まれた中)に2つのIF分岐が並んでいることがわかります。\nまた、バインドパラメータでは deptNoとdeptNameがあることがわかります。\n\nparseコマンドで確認したバインドパラメータを指定して検索を行います。\n\nuroborosql > query department/select_department deptNo=1[Enter]\n\n\n1\nuroborosql > query department/select_department deptNo=1\n[DEBUG] Evaluation Expression:[SF.isNotEmpty(deptNo)], Result:[true], Parameter:[deptNo:[1]]\n[DEBUG] Evaluation Expression:[SF.isNotEmpty(deptName)], Result:[false], Parameter:[deptName:[null]]\n[DEBUG] Executed SQL[\nselect /* department/select_department */\n dept.dept_no as dept_no\n, dept.dept_name as dept_name\n, dept.lock_version as lock_version\nfrom\n department dept\nwhere\ndept.dept_no = ?/*deptNo*/\n\n]\n[DEBUG] Set the parameter.[INDEX[1], Parameter name[deptNo], Value[1], Class[Integer]]\n[DEBUG] Execute search SQL.\n[INFO ]\n+-------+---------+------------+\n|DEPT_NO|DEPT_NAME|LOCK_VERSION|\n+-------+---------+------------+\n| 1|sales | 0|\n+-------+---------+------------+\n[DEBUG] SQL execution time [department/select_department] : [00:00:00.005]\nquery sql[department/select_department] end.\nuroborosql >\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\ndeptNoに1を指定して検索しています。 この時、SQL文の評価式である/*IF SF.isNotEmpty(deptNo)*/がtrueとなりSQLのwhere句にdept_noの条件が追加されバインドパラメータがバインドされます。\nその結果、検索結果は1件になっています。\n\nこのようにSQL名の後ろにバインドパラメータ名=値という形でバインドパラメータを記述することでバインドパラメータを指定してSQLを実行することができます。\n\nバインドパラメータが複数ある場合はバインドパラメータ名1=値1 バインドパラメータ名2=値2 ... という風に各パラメータの間を空白で区切って指定してください。\n\n * バインドパラメータを複数指定する例\n\nuroborosql > query department/select_department deptNo=1 deptName=sales[Enter]\n\n\n1\nuroborosql > query department/select_department deptNo=1 deptName=sales\n[DEBUG] Evaluation Expression:[SF.isNotEmpty(deptNo)], Result:[true], Parameter:[deptNo:[1]]\n[DEBUG] Evaluation Expression:[SF.isNotEmpty(deptName)], Result:[true], Parameter:[deptName:[{115,97,108,101,115},0,0]]\n[DEBUG] Executed SQL[\nselect /* department/select_department */\n dept.dept_no as dept_no\n, dept.dept_name as dept_name\n, dept.lock_version as lock_version\nfrom\n department dept\nwhere\ndept.dept_no = ?/*deptNo*/\nand dept.dept_name = ?/*deptName*/\n\n]\n[DEBUG] Set the parameter.[INDEX[1], Parameter name[deptNo], Value[1], Class[Integer]]\n[DEBUG] Set the parameter.[INDEX[2], Parameter name[deptName], Value[sales], Class[String]]\n[DEBUG] Execute search SQL.\n[INFO ]\n+-------+---------+------------+\n|DEPT_NO|DEPT_NAME|LOCK_VERSION|\n+-------+---------+------------+\n| 1|sales | 0|\n+-------+---------+------------+\n[DEBUG] SQL execution time [department/select_department] : [00:00:00.006]\nquery sql[department/select_department] end.\nuroborosql >\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\nREPLを終了する場合はコマンドquit,もしくはexitを入力してください。\n\nuroborosql > quit[Enter]\nSQL REPL end.\n\n\n1\n2\n終了メッセージが表示されてREPLが終了します。\n\nREPLには他にも以下のコマンドがあります。\n\nコマンド 説明 \nquery 検索SQLを実行します \nupdate 更新SQL(insert/update/delete)やDDLを実行します \nview SQL名で指定したSQLの内容を表示します \nlist 使用可能なSQL名の一覧を表示します \nhistory 実行したコマンドの履歴を表示します \ndriver 使用可能なJDBCドライバーの一覧を表示します \ndesc 指定したテーブルの定義情報を表示します \ngenerate 指定したテーブルに対するselect/insert/update/deleteを行うSQLを生成します \nparse 指定したSQLで使用されているバインドパラメータやIF分岐条件を抽出して表示します \ncls コンソール画面のクリア \nexit REPLを終了します \nhelp 利用できるコマンドの説明を表示します \n\n# REPLの設定\nさて、ここまでREPLの操作を説明してきましたが、DB接続情報やSQLファイルの場所はどこで指定していたのでしょうか。 実はjp.co.future.uroborosql.client.SqlREPLを実行する際、引数としてプロパティファイルを指定します。このプロパティファイルにDB接続情報やSQLファイルの場所などREPLを実行するのに必要な情報が記載されています。\n\npom.xmlのREPL実行部分\n\n\n org.codehaus.mojo\n exec-maven-plugin\n \n \n repl\n \n java\n \n \n ${basedir}\n jp.co.future.uroborosql.client.SqlREPL\n \n REPL/repl.properties\n \n \n process-test-classes\n \n \n\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n初期設定ではプロパティファイルの場所はREPL/repl.propertiesになっています。\n\n * REPL/repl.properties\n\ndb.url=jdbc:h2:file:./target/db/repldb;\ndb.user=sa\ndb.password=\n\nsql.additionalClassPath=${user.home}/.m2/repository/com/h2database/h2/1.4.192/h2-1.4.192.jar\n\n\n1\n2\n3\n4\n5\nプロパティ名 説明 \ndb.url DB接続URL \ndb.schema DB接続スキーマ \ndb.user DB接続ユーザ \ndb.password DB接続パスワード \nsql.loadPath SQLをロードするパス。初期値はsql \nsql.encoding SQLファイルのエンコーディング。初期値はUTF-8 \nsql.fileExtension ロードするSQLファイルの拡張子。初期値は.sql \nsql.detectChanges SQLファイルの変更検知を行うかどうか。初期値はtrue \nsql.additionalClassPath REPL起動時に起動時クラスパス以外でクラスパスに追加する場所。;で区切ることで複数指定可。SQLファイルのルート(sqlフォルダの親フォルダ)をクラスパスに追加することで、自動的にSQLファイルがロードされます。合わせて接続するDBのJDBCドライバを含むJarを指定することで動的にJDBCドライバを読み込みます。 \nsqlContextFactory.constantClassNames SqlContextFactoryに登録する定数クラスを指定。,で区切ることで複数指定可。 ex) jp.co.future.uroborosql.context.test.TestConsts \nsqlContextFactory.enumConstantPackageNames SqlContextFactoryに登録するEnum定数パッケージ名を指定。,で区切ることで複数指定可。ex) jp.co.future.uroborosql.context.test \n\nこのプロパティファイルを変更することでいろいろなDBに接続することができるようになります。\n\nこれまで見てきたようにREPLを利用することで簡単にSQL実行や動作確認ができるので、SQL開発には欠かせないツールになります。 色々なSQLを記述してREPLで試してみてください。\n\nこれで Getting Started は終了です。\n\nuroboroSQLで使用するSQLの文法や基本的な操作については基本操作を参照してください。",normalizedContent:"# sql-repl\nここまではjavaアプリケーションからuroborosqlを利用する場合の説明でした。uroborosqlにはもう一つ特徴的な機能として、sqlを対話しながら実行するための repl(read-eval-print loop) 機能を提供しています。\n\n今度はこのrepl機能を利用してみましょう。\n\n# replの利用\nreplを起動するためにはjp.co.future.uroborosql.client.sqlreplクラスを実行する必要があります。 サンプルアプリケーションでsqlreplクラスを実行するためには以下のコマンドを実行します。\n\nmvn -prepl\n\n\n1\n実行すると以下のようにタイトル表示とコマンド説明、設定値の情報が表示され、そのあとコマンド入力状態になります。\n\n===========================================================\n _ ____ ___ _\n _ _ _ __ ___ | |__ ___ _ __ ___/ ___| / _ \\| |\n| | | | '__/ _ \\| '_ \\ / _ \\| '__/ _ \\___ \\| | | | |\n| |_| | | | (_) | |_) | (_) | | | (_) |__) | |_| | |___\n \\__,_|_| \\___/|_.__/ \\___/|_| \\___/____/ \\__\\_\\_____|\n\nuroborosql sql repl ver.0.20.2\n===========================================================\n\ncommands :\n query : execute query from loaded sql file.\n ex1) query [sql file name] : execute sql without parameter.\n ex2) query [sql file name] param1=val1 param2=val2 ... : execute sql with the specified parameters.\n update : execute update from loaded sql file.\n ex1) update [sql file name] : execute sql without parameter.\n ex2) update [sql file name] param1=val1 param2=val2 ... : execute sql with the specified parameters.\n view : view sql file.\n ex) view [sql file name] : show sql file contents.\n list : list loaded sql files.\n ex1) list : show all loaded sql file(s).\n ex2) list keyword : show loaded sql file(s) filter by keyword.\n history : list command history.\n ex1) history : show all command history.\n ex2) history keyword : show command history filter by keyword.\n driver : list loaded drivers.\n desc : describe table.\n ex) desc [table name] : show table description.\n generate: generate sql to access the table.\n ex) generate [select/insert/update/delete] [table name] : show sql to access tables according to keywords.\n parse : parse sql file.\n ex) parse [sql file name] : parse sql file.\n cls : clear screen.\n exit : exit sql repl. `ctrl+c` is an alias.\nproperties file path:repl\\repl.properties\n[properties]\ndb.password=\nsql.additionalclasspath=src/test/resources;target/test-classes;${user.home}/.m2/repository/com/h2database/h2/1.4.199/h2-1.4.199.jar\nsql.encoding=utf-8\ndb.user=sa\nsql.versioncolumnname=lock_no\nsql.optimisticlocksupplier=jp.co.future.uroborosql.mapping.fieldincrementoptimisticlocksupplier\ndb.url=jdbc:h2:mem:repldb;db_close_delay=-1;\nsqlcontextfactory.enumconstantpackagenames=jp.co.future.uroborosql.context.test\nsqlcontextfactory.constantclassnames=jp.co.future.uroborosql.context.test.testconsts\ninitialize.\n\nuroborosql >\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\nreplを立ち上げた状態では接続したdb(h2db メモリdb)には何もない状態なので、まずはテーブルを作成します。 サンプルアプリケーションで利用できるsqlファイルを確認しましょう。\n\nuroborosql > list[enter]\n\n\n1\nと入力してください。\n\nuroborosql > list\nlist:\nddl/create_tables\ndepartment/insert_department\ndepartment/select_department\nemployee/insert_employee\nemployee/select_employee\nemployee/update_employee\nrelation/insert_dept_emp\nrelation/select_dept_emp\nsetup/insert_data\nuroborosql >\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\nロード済みのsqlファイルのsql名がわかります。 テーブルを作成するためにddl/create_tablesを実行します。ddl/create_tablesはddlなので実行するためにはupdateコマンドを使用します。\n\nuroborosql > u[tab]\n\n\n1\nと入力してください。\n\nuroborosql > update\n\n\n1\nという風にuに一致するコマンドがコード補完されます。\n\ntip\n\nreplでは[tab]を押下することでコマンドやsql名、バインドパラメータなどが必要に応じでコード補完されます。\n\n続いて\n\nuroborosql > update d[tab]\n\n\n1\nと入力してください。\n今度はddlに一致するsql名の候補が表示されます。\n\nuroborosql > update d\nddl/create_tables department/insert_department department/select_department\n\n\n1\n2\nこの状態で[tab]を入力することで候補を選択することが出来ます。\nddl/create_tablesを選択して[enter]を入力すると以下のようになります。\n\nuroborosql > update ddl/create_tables\n\n\n1\nもう一度[enter]を入力するとsqlが実行されます。\n\nuroborosql > update ddl/create_tables\n[debug] executed sql[\n-- employee\ndrop table if exists employee cascade;\ncreate table employee (\n emp_no number(6) auto_increment\n , first_name varchar(20) not null\n , last_name varchar(20) not null\n , birth_date date not null\n , gender char(1) not null\n , lock_version number(10) not null default 0\n , constraint employee_pkc primary key (emp_no)\n) ;\n-- dept_emp\ndrop table if exists dept_emp cascade;\ncreate table dept_emp (\n emp_no number(6) not null\n , dept_no number(4) not null\n , constraint dept_emp_pkc primary key (emp_no,dept_no)\n) ;\n-- department\ndrop table if exists department cascade;\ncreate table department (\n dept_no number(4) auto_increment\n , dept_name varchar(100) not null\n , lock_version number(10) not null default 0\n , constraint department_pkc primary key (dept_no)\n) ;\ncomment on table employee is 'employee';\ncomment on column employee.emp_no is 'emp_no';\ncomment on column employee.first_name is 'first_name';\ncomment on column employee.last_name is 'last_name';\ncomment on column employee.birth_date is 'birth_date';\ncomment on column employee.gender is 'gender ''f''emale/''m''ale/''o''ther';\ncomment on column employee.lock_version is 'lock_version';\ncomment on table dept_emp is 'dept_emp';\ncomment on column dept_emp.emp_no is 'emp_no';\ncomment on column dept_emp.dept_no is 'dept_no';\ncomment on table department is 'department';\ncomment on column department.dept_no is 'dept_no';\ncomment on column department.dept_name is 'dept_name';\ncomment on column department.lock_version is 'lock_version'\n]\n[debug] execute update sql.\n[debug] sql execution time [ddl/create_tables] : [00:00:00.030]\nupdate sql[ddl/create_tables] end. row count=0\nuroborosql >\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\nddl/create_tablesが実行され、dbにテーブルが作成されました。\n\nでは次に作成されたテーブルの定義情報を確認します。\nテーブル定義情報の確認にはdescコマンドを使用します。 ここではemployeeテーブルの定義情報を確認してみましょう。\n\nuroborosql > desc employee[enter]\n\n\n1\nuroborosql > desc employee\n-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n|table_name|column_name |type_name|column_size|decimal_digits|is_nullable|column_def |remarks |\n-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\n|employee |emp_no |decimal | 6| 0|no |(next value for \"public\".\"system_sequence_d06a5524_ec18_4835_a536_1f5a372bfc73\")|emp_no |\n|employee |first_name |varchar | 20| 0|no | |first_name |\n|employee |last_name |varchar | 20| 0|no | |last_name |\n|employee |birth_date |date | 10| 0|no | |birth_date |\n|employee |gender |char | 1| 0|no | |gender 'f'emale/'m'ale/'o'ther|\n|employee |lock_version|decimal | 10| 0|no | 0|lock_version |\n-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\nuroborosql >\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\nemployeeテーブルの定義情報が表形式で表示されました。\n\n続いて初期データを投入しましょう。\n\nsetup/insert_dataを実行します。\n\nuroborosql > update setup/insert_data[enter]\n\n\n1\nuroborosql > update setup/insert_data\n[debug] executed sql[\ninsert into department (dept_name) values ('sales');\ninsert into department (dept_name) values ('export');\ninsert into department (dept_name) values ('accounting');\ninsert into department (dept_name) values ('personnel');\ninsert into employee (first_name, last_name, birth_date, gender) values ('bob', 'smith', '1970-01-02', 'm');\ninsert into employee (first_name, last_name, birth_date, gender) values ('susan', 'davis', '1969-02-10', 'f');\ninsert into employee (first_name, last_name, birth_date, gender) values ('john', 'wilson', '1982-05-08', 'm');\ninsert into employee (first_name, last_name, birth_date, gender) values ('sharon', 'johnson', '1990-01-20', 'f');\ninsert into employee (first_name, last_name, birth_date, gender) values ('stephen', 'taylor', '2003-12-31', 'm');\ninsert into dept_emp (emp_no, dept_no) values (1, 1);\ninsert into dept_emp (emp_no, dept_no) values (2, 1);\ninsert into dept_emp (emp_no, dept_no) values (3, 2);\ninsert into dept_emp (emp_no, dept_no) values (4, 3);\ninsert into dept_emp (emp_no, dept_no) values (5, 4)\n]\n[debug] execute update sql.\n[debug] sql execution time [setup/insert_data] : [00:00:00.017]\nupdate sql[setup/insert_data] end. row count=1\nuroborosql >\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\nこれでテーブルに初期データが挿入されました。 では、挿入したデータを検索してみましょう。\n\n検索を行う前に、検索を行うsqlの内容を確認してみましょう。\nsqlの内容を確認するにはviewコマンドを使用します。\n\nuroborosql > view department/select_department[enter]\n\n\n1\nuroborosql > view department/select_department\nselect /* _sql_id_ */\n dept.dept_no as dept_no\n, dept.dept_name as dept_name\n, dept.lock_version as lock_version\nfrom\n department dept\n/*begin*/\nwhere\n/*if sf.isnotempty(deptno)*/\nand dept.dept_no = /*deptno*/1\n/*end*/\n/*if sf.isnotempty(deptname)*/\nand dept.dept_name = /*deptname*/'sample'\n/*end*/\n/*end*/\nuroborosql >\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n検索を行う場合はqueryコマンドを使用します。queryの後に実行するsql名を指定します。\n\nuroborosql > query department/select_department[enter]\n\n\n1\nuroborosql > query department/select_department\n[debug] evaluation expression:[sf.isnotempty(deptno)], result:[false], parameter:[deptno:[null]]\n[debug] evaluation expression:[sf.isnotempty(deptname)], result:[false], parameter:[deptname:[null]]\n[debug] executed sql[\nselect /* department/select_department */\n dept.dept_no as dept_no\n, dept.dept_name as dept_name\n, dept.lock_version as lock_version\nfrom\n department dept\n\n]\n[debug] execute search sql.\n[info ]\n+-------+----------+------------+\n|dept_no|dept_name |lock_version|\n+-------+----------+------------+\n| 1|sales | 0|\n| 2|export | 0|\n| 3|accounting| 0|\n| 4|personnel | 0|\n+-------+----------+------------+\n[debug] sql execution time [department/select_department] : [00:00:00.078]\nquery sql[department/select_department] end.\nuroborosql >\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\nここではバインドパラメータを指定しなかったため、絞込み条件のないsqlが実行され検索結果として4件のデータが取得できました。\n\nreplでは上の結果のように、\n\n * 実行するsql\n * バインドパラメータ\n * sql文の中の評価式とその評価結果\n * 検索結果\n * 実行時間\n\nが表示されるので、sqlがどういう風に実行され、どういう値が取得できるのかが良く分かるようになっています。\n\n次にバインドパラメータを指定して検索してみましょう。\n\n検索するsqlにどのようなバインドパラメータや条件分岐があるかを確認するにはparseコマンドを使用します。\n\nuroborosql > parse department/select_department[enter]\n\n\n1\nuroborosql > parse department/select_department\nparse:\n\nsql :\nselect /* _sql_id_ */\n dept.dept_no as dept_no\n, dept.dept_name as dept_name\n, dept.lock_version as lock_version\nfrom\n department dept\n/*begin*/\nwhere\n/*if sf.isnotempty(deptno)*/\nand dept.dept_no = /*deptno*/1\n/*end*/\n/*if sf.isnotempty(deptname)*/\nand dept.dept_name = /*deptname*/'sample'\n/*end*/\n/*end*/\n\nbranches :\n begin {\n if ( sf.isnotempty(deptno) ) {\n }\n if ( sf.isnotempty(deptname) ) {\n }\n }\n\nbind_params :\n deptname\n deptno\nuroborosql >\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\nparseコマンドの結果は以下のようになります。\n\n * sql : 解析対象のsql\n * branches : 条件分岐\n * bind_params : バインドパラメータ\n\n条件分岐では beginのスコープ({}で囲まれた中)に2つのif分岐が並んでいることがわかります。\nまた、バインドパラメータでは deptnoとdeptnameがあることがわかります。\n\nparseコマンドで確認したバインドパラメータを指定して検索を行います。\n\nuroborosql > query department/select_department deptno=1[enter]\n\n\n1\nuroborosql > query department/select_department deptno=1\n[debug] evaluation expression:[sf.isnotempty(deptno)], result:[true], parameter:[deptno:[1]]\n[debug] evaluation expression:[sf.isnotempty(deptname)], result:[false], parameter:[deptname:[null]]\n[debug] executed sql[\nselect /* department/select_department */\n dept.dept_no as dept_no\n, dept.dept_name as dept_name\n, dept.lock_version as lock_version\nfrom\n department dept\nwhere\ndept.dept_no = ?/*deptno*/\n\n]\n[debug] set the parameter.[index[1], parameter name[deptno], value[1], class[integer]]\n[debug] execute search sql.\n[info ]\n+-------+---------+------------+\n|dept_no|dept_name|lock_version|\n+-------+---------+------------+\n| 1|sales | 0|\n+-------+---------+------------+\n[debug] sql execution time [department/select_department] : [00:00:00.005]\nquery sql[department/select_department] end.\nuroborosql >\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\ndeptnoに1を指定して検索しています。 この時、sql文の評価式である/*if sf.isnotempty(deptno)*/がtrueとなりsqlのwhere句にdept_noの条件が追加されバインドパラメータがバインドされます。\nその結果、検索結果は1件になっています。\n\nこのようにsql名の後ろにバインドパラメータ名=値という形でバインドパラメータを記述することでバインドパラメータを指定してsqlを実行することができます。\n\nバインドパラメータが複数ある場合はバインドパラメータ名1=値1 バインドパラメータ名2=値2 ... という風に各パラメータの間を空白で区切って指定してください。\n\n * バインドパラメータを複数指定する例\n\nuroborosql > query department/select_department deptno=1 deptname=sales[enter]\n\n\n1\nuroborosql > query department/select_department deptno=1 deptname=sales\n[debug] evaluation expression:[sf.isnotempty(deptno)], result:[true], parameter:[deptno:[1]]\n[debug] evaluation expression:[sf.isnotempty(deptname)], result:[true], parameter:[deptname:[{115,97,108,101,115},0,0]]\n[debug] executed sql[\nselect /* department/select_department */\n dept.dept_no as dept_no\n, dept.dept_name as dept_name\n, dept.lock_version as lock_version\nfrom\n department dept\nwhere\ndept.dept_no = ?/*deptno*/\nand dept.dept_name = ?/*deptname*/\n\n]\n[debug] set the parameter.[index[1], parameter name[deptno], value[1], class[integer]]\n[debug] set the parameter.[index[2], parameter name[deptname], value[sales], class[string]]\n[debug] execute search sql.\n[info ]\n+-------+---------+------------+\n|dept_no|dept_name|lock_version|\n+-------+---------+------------+\n| 1|sales | 0|\n+-------+---------+------------+\n[debug] sql execution time [department/select_department] : [00:00:00.006]\nquery sql[department/select_department] end.\nuroborosql >\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\nreplを終了する場合はコマンドquit,もしくはexitを入力してください。\n\nuroborosql > quit[enter]\nsql repl end.\n\n\n1\n2\n終了メッセージが表示されてreplが終了します。\n\nreplには他にも以下のコマンドがあります。\n\nコマンド 説明 \nquery 検索sqlを実行します \nupdate 更新sql(insert/update/delete)やddlを実行します \nview sql名で指定したsqlの内容を表示します \nlist 使用可能なsql名の一覧を表示します \nhistory 実行したコマンドの履歴を表示します \ndriver 使用可能なjdbcドライバーの一覧を表示します \ndesc 指定したテーブルの定義情報を表示します \ngenerate 指定したテーブルに対するselect/insert/update/deleteを行うsqlを生成します \nparse 指定したsqlで使用されているバインドパラメータやif分岐条件を抽出して表示します \ncls コンソール画面のクリア \nexit replを終了します \nhelp 利用できるコマンドの説明を表示します \n\n# replの設定\nさて、ここまでreplの操作を説明してきましたが、db接続情報やsqlファイルの場所はどこで指定していたのでしょうか。 実はjp.co.future.uroborosql.client.sqlreplを実行する際、引数としてプロパティファイルを指定します。このプロパティファイルにdb接続情報やsqlファイルの場所などreplを実行するのに必要な情報が記載されています。\n\npom.xmlのrepl実行部分\n\n\n org.codehaus.mojo\n exec-maven-plugin\n \n \n repl\n \n java\n \n \n ${basedir}\n jp.co.future.uroborosql.client.sqlrepl\n \n repl/repl.properties\n \n \n process-test-classes\n \n \n\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n初期設定ではプロパティファイルの場所はrepl/repl.propertiesになっています。\n\n * repl/repl.properties\n\ndb.url=jdbc:h2:file:./target/db/repldb;\ndb.user=sa\ndb.password=\n\nsql.additionalclasspath=${user.home}/.m2/repository/com/h2database/h2/1.4.192/h2-1.4.192.jar\n\n\n1\n2\n3\n4\n5\nプロパティ名 説明 \ndb.url db接続url \ndb.schema db接続スキーマ \ndb.user db接続ユーザ \ndb.password db接続パスワード \nsql.loadpath sqlをロードするパス。初期値はsql \nsql.encoding sqlファイルのエンコーディング。初期値はutf-8 \nsql.fileextension ロードするsqlファイルの拡張子。初期値は.sql \nsql.detectchanges sqlファイルの変更検知を行うかどうか。初期値はtrue \nsql.additionalclasspath repl起動時に起動時クラスパス以外でクラスパスに追加する場所。;で区切ることで複数指定可。sqlファイルのルート(sqlフォルダの親フォルダ)をクラスパスに追加することで、自動的にsqlファイルがロードされます。合わせて接続するdbのjdbcドライバを含むjarを指定することで動的にjdbcドライバを読み込みます。 \nsqlcontextfactory.constantclassnames sqlcontextfactoryに登録する定数クラスを指定。,で区切ることで複数指定可。 ex) jp.co.future.uroborosql.context.test.testconsts \nsqlcontextfactory.enumconstantpackagenames sqlcontextfactoryに登録するenum定数パッケージ名を指定。,で区切ることで複数指定可。ex) jp.co.future.uroborosql.context.test \n\nこのプロパティファイルを変更することでいろいろなdbに接続することができるようになります。\n\nこれまで見てきたようにreplを利用することで簡単にsql実行や動作確認ができるので、sql開発には欠かせないツールになります。 色々なsqlを記述してreplで試してみてください。\n\nこれで getting started は終了です。\n\nuroborosqlで使用するsqlの文法や基本的な操作については基本操作を参照してください。",charsets:{cjk:!0}},{title:"Developer Tools",frontmatter:{meta:[{name:"og:title",content:"Developer Tools"},{name:"og:url",content:"/uroborosql-doc/developer_tools/"}]},regularPath:"/developer_tools/",relativePath:"developer_tools/README.md",key:"v-40edc294",path:"/developer_tools/",lastUpdated:"2019-9-4 23:08:33",headersStr:null,content:"# Developer Tools\n\n\n * CLI * https://github.com/future-architect/uroboroSQL-formatter\n \n \n * Sublime Text 3 Plugin * https://github.com/future-architect/Sublime-uroboroSQL-formatter\n \n \n * IntelliJ IDEA Platform Plugin * https://github.com/future-architect/idea-uroborosql-formatter\n \n \n * Eclipse Plugin * https://github.com/future-architect/eclipse-uroborosql-formatter",normalizedContent:"# developer tools\n\n\n * cli * https://github.com/future-architect/uroborosql-formatter\n \n \n * sublime text 3 plugin * https://github.com/future-architect/sublime-uroborosql-formatter\n \n \n * intellij idea platform plugin * https://github.com/future-architect/idea-uroborosql-formatter\n \n \n * eclipse plugin * https://github.com/future-architect/eclipse-uroborosql-formatter",charsets:{}},{title:"uroboroSQLとは",frontmatter:{meta:[{name:"og:title",content:"uroboroSQLとは"},{name:"og:url",content:"/uroborosql-doc/why_uroborosql/"}]},regularPath:"/why_uroborosql/",relativePath:"why_uroborosql/README.md",key:"v-9a459e98",path:"/why_uroborosql/",headers:[{level:2,title:"uroboroSQLを使う理由",slug:"uroborosqlを使う理由",normalizedTitle:"uroborosqlを使う理由",charIndex:303},{level:2,title:"Further Reading",slug:"further-reading",normalizedTitle:"further reading",charIndex:1077}],lastUpdated:"2019-9-4 23:08:33",headersStr:"uroboroSQLを使う理由 Further Reading",content:"# uroboroSQLとは\nuroboroSQLは2Way-SQLが利用可能なJava製のシンプルなSQL実行ライブラリです。\n\nフューチャーアーキテクト社内にて、2006-2007年頃にS2Daoを参考に開発され、プロジェクトで実際に利用されて現在まで改善が続けられてきました。社内ではWebアプリケーションフレームワークや各種設計開発支援ツールと連携・統合される形で利用されています。\n\nとはいえ、社内で秘伝のタレ化していることは否めず、開発フェーズでは開発パートナーさんからも「ググれない」から使い方がわからないいう声もちらほら。だったらOSS化してしまえということのが公開のきっかけです。\n\n# uroboroSQLを使う理由\nJavaからRDBにアクセスするとき、Java標準のJPA(Java Persistence API)の実装であるEclipseLink、OpenJPAはもとより、歴史のあるORMとしてHibernate、MyBatis、Spring Data JDBCといったグローバルで使われているものもありますし、日本でよく使われてきたS2Dao、S2JDBC、DBflute、Domaといったものもあります。\n\nこういった数多のDB系ライブラリ・フレームワークの中で解決したい領域もそれぞれですが、uroboroSQLは主にSQL中心の設計コンセプトを採用しています。Javaを中心に考えてSQLを組み立てるという思想ではなく、SQLに足りないところをJavaで補うという思想です。\n\nこれはエンタープライズシステムにおいて、ORマッパーやクエリビルダでは実装しきれない、hint句による実行計画の指定や分析関数の利用など複雑かつDBプロダクト依存のSQLを使う場合に有効と考えています。\n\nそのため、uroboroSQLはSQLは2Way-SQL方式で記述ができるものの、ORMでよくあるエンティティクラスとリレーションをたどって遅延ロードして子エンティティを取得するなどの機能は有していません。(単純なエンティティクラスへのマッピングは提供しています)\n\nその分、エンタープライズで培われたノウハウとして、区分値サポート、リトライ、フィルターによるカスタマイズなどの機能を充実させています。また、2Way-SQLのIF分岐に対してカバレッジを取れるようにするという、品質視点での機能があるのも特徴です。\n\nSQLの能力を最大限活かしつつ、生産性と品質を高めたい\nそれがuroboroSQLの最大の関心事なのです。\n\n# Further Reading\nuroboroSQLの紹介 (OSC2017 Tokyo/Spring) from Kenichi Hoshi",normalizedContent:"# uroborosqlとは\nuroborosqlは2way-sqlが利用可能なjava製のシンプルなsql実行ライブラリです。\n\nフューチャーアーキテクト社内にて、2006-2007年頃にs2daoを参考に開発され、プロジェクトで実際に利用されて現在まで改善が続けられてきました。社内ではwebアプリケーションフレームワークや各種設計開発支援ツールと連携・統合される形で利用されています。\n\nとはいえ、社内で秘伝のタレ化していることは否めず、開発フェーズでは開発パートナーさんからも「ググれない」から使い方がわからないいう声もちらほら。だったらoss化してしまえということのが公開のきっかけです。\n\n# uroborosqlを使う理由\njavaからrdbにアクセスするとき、java標準のjpa(java persistence api)の実装であるeclipselink、openjpaはもとより、歴史のあるormとしてhibernate、mybatis、spring data jdbcといったグローバルで使われているものもありますし、日本でよく使われてきたs2dao、s2jdbc、dbflute、domaといったものもあります。\n\nこういった数多のdb系ライブラリ・フレームワークの中で解決したい領域もそれぞれですが、uroborosqlは主にsql中心の設計コンセプトを採用しています。javaを中心に考えてsqlを組み立てるという思想ではなく、sqlに足りないところをjavaで補うという思想です。\n\nこれはエンタープライズシステムにおいて、orマッパーやクエリビルダでは実装しきれない、hint句による実行計画の指定や分析関数の利用など複雑かつdbプロダクト依存のsqlを使う場合に有効と考えています。\n\nそのため、uroborosqlはsqlは2way-sql方式で記述ができるものの、ormでよくあるエンティティクラスとリレーションをたどって遅延ロードして子エンティティを取得するなどの機能は有していません。(単純なエンティティクラスへのマッピングは提供しています)\n\nその分、エンタープライズで培われたノウハウとして、区分値サポート、リトライ、フィルターによるカスタマイズなどの機能を充実させています。また、2way-sqlのif分岐に対してカバレッジを取れるようにするという、品質視点での機能があるのも特徴です。\n\nsqlの能力を最大限活かしつつ、生産性と品質を高めたい\nそれがuroborosqlの最大の関心事なのです。\n\n# further reading\nuroborosqlの紹介 (osc2017 tokyo/spring) from kenichi hoshi",charsets:{cjk:!0}},{title:"SQLファイルを使用したDBアクセス",frontmatter:{meta:[{name:"og:title",content:"SQLファイルを使用したDBアクセス"},{name:"og:url",content:"/uroborosql-doc/getting_started/sql-file-access.html"}]},regularPath:"/getting_started/sql-file-access.html",relativePath:"getting_started/sql-file-access.md",key:"v-55b77452",path:"/getting_started/sql-file-access.html",headers:[{level:2,title:"SqlConfigの生成",slug:"sqlconfigの生成",normalizedTitle:"sqlconfigの生成",charIndex:23},{level:2,title:"テーブルの作成と初期データの登録",slug:"テーブルの作成と初期データの登録",normalizedTitle:"テーブルの作成と初期データの登録",charIndex:1131},{level:2,title:"SQLファイルを使用した検索",slug:"sqlファイルを使用した検索",normalizedTitle:"sqlファイルを使用した検索",charIndex:2074},{level:2,title:"SQLファイルを使用した行挿入",slug:"sqlファイルを使用した行挿入",normalizedTitle:"sqlファイルを使用した行挿入",charIndex:4117}],lastUpdated:"2019-9-23 23:39:17",headersStr:"SqlConfigの生成 テーブルの作成と初期データの登録 SQLファイルを使用した検索 SQLファイルを使用した行挿入",content:'# SQLファイルを使用したDBアクセス\n# SqlConfigの生成\nSQLファイルを使用したサンプルコード SqlFileApiSample.java を例として説明します。\n\nまず初めにコンストラクタの中で最初にSqlConfigクラスを作成しています。SqlConfigはuroboroSQLに対する各種の設定を保持するクラスで、SqlConfigの設定を変更することでuroboroSQLの動作を変更することが出来ます。\nここではH2DBのメモリDBに接続するSqlConfigインスタンスを生成しています。SqlConfigの生成にはUroboroSQLクラスによるBuilderAPIを使用します。\n\n * 基本的な呼出方法(DBへの接続情報のみ指定)\n\n// create SqlConfig\nSqlConfig config = UroboroSQL.builder("jdbc:h2:mem:test;DB_CLOSE_DELAY=-1", "sa", "").build();\n\n\n1\n2\n * 設定のカスタマイズ(定数の指定や検索結果の取得方法変更)\n\n// create SqlConfig\nSqlConfig config = UroboroSQL\n .builder("jdbc:h2:mem:test;DB_CLOSE_DELAY=-1", "sa", "")\n // SqlContextFactoryの設定(Enum定数パッケージ設定の追加)\n .setSqlContextFactory(new SqlContextFactoryImpl()\n .setEnumConstantPackageNames(Arrays.asList(Gender.class.getPackage().getName())))\n // SqlAgentFactoryの設定(Queryの戻り値のMapのキー文字列のデフォルトCaseFormat設定の追加)\n .setSqlAgentFactory(new SqlAgentFactoryImpl().setDefaultMapKeyCaseFormat(CaseFormat.CAMEL_CASE))\n // SqlManagerの設定(NioSqlManagerImplの指定)\n .setSqlManager(new NioSqlManagerImpl(false))\n .build();\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\nSqlConfig生成時のカスタマイズの詳細については 設定を参照してください。\n\n# テーブルの作成と初期データの登録\n次に事前準備として以降の処理で使用するテーブルの作成と初期データの登録を行います。(SqlFileApiSample#setupTableAndData()を参照)\nSQLを実行する場合はSqlConfigからSqlAgentを生成します。SqlAgentはuroboroSQLの中核となるクラスで、uroboroSQLの各操作はこのSqlAgentを使って行います。\nSqlAgentはAutoClosableインタフェースを実装しているので、try-with-resources文で囲むことで処理終了時に自動でクローズされます。 このときSqlAgentの中に保持するConnectionやStatementも合わせてクローズされるため、クローズ漏れによるメモリリークを防ぐことができます。\n\n// create SqlAgent. SqlAgent implements AutoClosable.\ntry (SqlAgent agent = config.agent()) {\n // ここにSQL実行の処理を実装する\n}\n\n\n1\n2\n3\n4\nTIP\n\n以降の説明ではSqlAgentに対する処理はtry-with-resources文の中で行っているものとします。\n\nuroboroSQLでは実行するSQLをファイルパスに似た表現(以降 SQL名 と呼ぶ)で指定します。 下の例ではクラスパス上にあるsqlフォルダ配下のddl/create_tables.sqlを指定してSQL更新処理を実行します。\n\n更新処理を行う場合、SqlAgent#update("[SQL名]")メソッドを使用してSqlUpdateを取得しUpdateの実行を行います。\n\n// create table : テーブル作成\nagent.update("ddl/create_tables").count();\n// setup data : 初期データ挿入\nagent.update("setup/insert_data").count();\n\n\n1\n2\n3\n4\nddl/create_tables.sqlで作成したテーブルの構成は以下になります。\n\n\n\n# SQLファイルを使用した検索\n登録したデータを検索します。検索を行う際は、SqlAgent#query("[SQL名]")メソッドを使用してSqlQueryを取得し、バインドパラメータの設定や検索の実行を行います。\n\nSqlQueryでは検索結果をいくつかの形式で取得することができます。\n\nメソッド 説明 \nSqlQuery#collect() 検索結果をListの形式で取得する \nSqlQuery#stream() 検索結果をjava.util.Streamの形式で取得する \nSqlQuery#resultSet() 検索結果のResultSetを取得する \nSqlQuery#first() 検索結果の1件目を取得する。取得できない場合はRuntimeExceptionがスローされる \nSqlQuery#findFirst() 検索結果の1件目を取得する。戻り値はOptional \nSqlQuery#one() 検索結果の1件目を取得する。取得できない場合、もしくは2件以上取得出来た場合はRuntimeExceptionがスローされる \nSqlQuery#findOne() 検索結果の1件目を取得する。戻り値はOptional。2件以上取得出来た場合はRuntimeExceptionがスローされる \n\n以下のように呼び出します。\n\n// no parameter : バインドパラメータ指定なしで検索\nList> deps1 = agent.query("department/select_department")\n .collect();\n\n// add bind parameter : バインドパラメータを設定して検索\nList> deps2 = agent.query("department/select_department")\n .param("deptNo", 1)\n .collect();\n\n\n1\n2\n3\n4\n5\n6\n7\n8\nここで実行されるSQLは以下のようになっています。\n\n * department/select_department.sql\n\nselect /* _SQL_ID_ */\n dept.dept_no as dept_no\n, dept.dept_name as dept_name\n, dept.lock_version as lock_version\nfrom\n department dept\n/*BEGIN*/\nwhere\n/*IF SF.isNotEmpty(deptNo)*/\nand dept.dept_no = /*deptNo*/1\n/*END*/\n/*IF SF.isNotEmpty(deptName)*/\nand dept.dept_name = /*deptName*/\'sample\'\n/*END*/\n/*END*/\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n * /* _SQL_ID_ */ はSQLを特定するID(SQL_IDといいます)を付与するための予約語で、実行時にSQLファイルを特定するための文字列に変換されます。\n * /*IF*/ ... /*END*/は条件分岐で、IFの後ろの評価式がTrueとなる場合に/*IF*/と/*END*/で囲まれた部分が出力されます。\n * /*deptNo*/はバインドパラメータで、実行時に?に変換され、SqlQueryに設定したパラメータがSQLへバインドされます。\n * /*deptNo*/の後ろの1はテスト用データです。このようにテスト用データをSQL文に記述しておくことで、このSQLを SQLクライアントツールで実行する際にエラーにならずに文法の確認を行うことができます。\n\nSQLで使用できる構文については2WaySQLを参照してください。\nまた、検索のより詳しい説明はSQLによる検索を参照してください。\n\n# SQLファイルを使用した行挿入\nテーブルに対して行挿入を行うことも出来ます。 行挿入を行う際は、SqlAgent#update("[SQL名]")メソッドを使用してSqlUpdateを取得し、続けてバインドパラメータの設定やSQLの実行を行います。\n\nagent.update("department/insert_department")\n .param("deptName", "production")\n .count();\n\n\n1\n2\n3\nここで実行されるSQLは以下のようになっています。\n\n * department/insert_department.sql\n\ninsert /* _SQL_ID_ */\ninto\n department\n(\n dept_name\n, lock_version\n) values (\n /*deptName*/\'sample\'\n, 0\n)\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\nSqlAgent#update("[SQL名]")では実行するSQLの内容によって行挿入の他に行更新や行削除を行うことが出来ます。より詳しい説明はSQLによる更新を参照してください。',normalizedContent:'# sqlファイルを使用したdbアクセス\n# sqlconfigの生成\nsqlファイルを使用したサンプルコード sqlfileapisample.java を例として説明します。\n\nまず初めにコンストラクタの中で最初にsqlconfigクラスを作成しています。sqlconfigはuroborosqlに対する各種の設定を保持するクラスで、sqlconfigの設定を変更することでuroborosqlの動作を変更することが出来ます。\nここではh2dbのメモリdbに接続するsqlconfigインスタンスを生成しています。sqlconfigの生成にはuroborosqlクラスによるbuilderapiを使用します。\n\n * 基本的な呼出方法(dbへの接続情報のみ指定)\n\n// create sqlconfig\nsqlconfig config = uroborosql.builder("jdbc:h2:mem:test;db_close_delay=-1", "sa", "").build();\n\n\n1\n2\n * 設定のカスタマイズ(定数の指定や検索結果の取得方法変更)\n\n// create sqlconfig\nsqlconfig config = uroborosql\n .builder("jdbc:h2:mem:test;db_close_delay=-1", "sa", "")\n // sqlcontextfactoryの設定(enum定数パッケージ設定の追加)\n .setsqlcontextfactory(new sqlcontextfactoryimpl()\n .setenumconstantpackagenames(arrays.aslist(gender.class.getpackage().getname())))\n // sqlagentfactoryの設定(queryの戻り値のmapのキー文字列のデフォルトcaseformat設定の追加)\n .setsqlagentfactory(new sqlagentfactoryimpl().setdefaultmapkeycaseformat(caseformat.camel_case))\n // sqlmanagerの設定(niosqlmanagerimplの指定)\n .setsqlmanager(new niosqlmanagerimpl(false))\n .build();\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\nsqlconfig生成時のカスタマイズの詳細については 設定を参照してください。\n\n# テーブルの作成と初期データの登録\n次に事前準備として以降の処理で使用するテーブルの作成と初期データの登録を行います。(sqlfileapisample#setuptableanddata()を参照)\nsqlを実行する場合はsqlconfigからsqlagentを生成します。sqlagentはuroborosqlの中核となるクラスで、uroborosqlの各操作はこのsqlagentを使って行います。\nsqlagentはautoclosableインタフェースを実装しているので、try-with-resources文で囲むことで処理終了時に自動でクローズされます。 このときsqlagentの中に保持するconnectionやstatementも合わせてクローズされるため、クローズ漏れによるメモリリークを防ぐことができます。\n\n// create sqlagent. sqlagent implements autoclosable.\ntry (sqlagent agent = config.agent()) {\n // ここにsql実行の処理を実装する\n}\n\n\n1\n2\n3\n4\ntip\n\n以降の説明ではsqlagentに対する処理はtry-with-resources文の中で行っているものとします。\n\nuroborosqlでは実行するsqlをファイルパスに似た表現(以降 sql名 と呼ぶ)で指定します。 下の例ではクラスパス上にあるsqlフォルダ配下のddl/create_tables.sqlを指定してsql更新処理を実行します。\n\n更新処理を行う場合、sqlagent#update("[sql名]")メソッドを使用してsqlupdateを取得しupdateの実行を行います。\n\n// create table : テーブル作成\nagent.update("ddl/create_tables").count();\n// setup data : 初期データ挿入\nagent.update("setup/insert_data").count();\n\n\n1\n2\n3\n4\nddl/create_tables.sqlで作成したテーブルの構成は以下になります。\n\n\n\n# sqlファイルを使用した検索\n登録したデータを検索します。検索を行う際は、sqlagent#query("[sql名]")メソッドを使用してsqlqueryを取得し、バインドパラメータの設定や検索の実行を行います。\n\nsqlqueryでは検索結果をいくつかの形式で取得することができます。\n\nメソッド 説明 \nsqlquery#collect() 検索結果をlistの形式で取得する \nsqlquery#stream() 検索結果をjava.util.streamの形式で取得する \nsqlquery#resultset() 検索結果のresultsetを取得する \nsqlquery#first() 検索結果の1件目を取得する。取得できない場合はruntimeexceptionがスローされる \nsqlquery#findfirst() 検索結果の1件目を取得する。戻り値はoptional \nsqlquery#one() 検索結果の1件目を取得する。取得できない場合、もしくは2件以上取得出来た場合はruntimeexceptionがスローされる \nsqlquery#findone() 検索結果の1件目を取得する。戻り値はoptional。2件以上取得出来た場合はruntimeexceptionがスローされる \n\n以下のように呼び出します。\n\n// no parameter : バインドパラメータ指定なしで検索\nlist> deps1 = agent.query("department/select_department")\n .collect();\n\n// add bind parameter : バインドパラメータを設定して検索\nlist> deps2 = agent.query("department/select_department")\n .param("deptno", 1)\n .collect();\n\n\n1\n2\n3\n4\n5\n6\n7\n8\nここで実行されるsqlは以下のようになっています。\n\n * department/select_department.sql\n\nselect /* _sql_id_ */\n dept.dept_no as dept_no\n, dept.dept_name as dept_name\n, dept.lock_version as lock_version\nfrom\n department dept\n/*begin*/\nwhere\n/*if sf.isnotempty(deptno)*/\nand dept.dept_no = /*deptno*/1\n/*end*/\n/*if sf.isnotempty(deptname)*/\nand dept.dept_name = /*deptname*/\'sample\'\n/*end*/\n/*end*/\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n * /* _sql_id_ */ はsqlを特定するid(sql_idといいます)を付与するための予約語で、実行時にsqlファイルを特定するための文字列に変換されます。\n * /*if*/ ... /*end*/は条件分岐で、ifの後ろの評価式がtrueとなる場合に/*if*/と/*end*/で囲まれた部分が出力されます。\n * /*deptno*/はバインドパラメータで、実行時に?に変換され、sqlqueryに設定したパラメータがsqlへバインドされます。\n * /*deptno*/の後ろの1はテスト用データです。このようにテスト用データをsql文に記述しておくことで、このsqlを sqlクライアントツールで実行する際にエラーにならずに文法の確認を行うことができます。\n\nsqlで使用できる構文については2waysqlを参照してください。\nまた、検索のより詳しい説明はsqlによる検索を参照してください。\n\n# sqlファイルを使用した行挿入\nテーブルに対して行挿入を行うことも出来ます。 行挿入を行う際は、sqlagent#update("[sql名]")メソッドを使用してsqlupdateを取得し、続けてバインドパラメータの設定やsqlの実行を行います。\n\nagent.update("department/insert_department")\n .param("deptname", "production")\n .count();\n\n\n1\n2\n3\nここで実行されるsqlは以下のようになっています。\n\n * department/insert_department.sql\n\ninsert /* _sql_id_ */\ninto\n department\n(\n dept_name\n, lock_version\n) values (\n /*deptname*/\'sample\'\n, 0\n)\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\nsqlagent#update("[sql名]")では実行するsqlの内容によって行挿入の他に行更新や行削除を行うことが出来ます。より詳しい説明はsqlによる更新を参照してください。',charsets:{cjk:!0}},{title:"エンティティクラスを使用したDBアクセス",frontmatter:{meta:[{name:"og:title",content:"エンティティクラスを使用したDBアクセス"},{name:"og:url",content:"/uroborosql-doc/getting_started/entity-access.html"}]},regularPath:"/getting_started/entity-access.html",relativePath:"getting_started/entity-access.md",key:"v-0dbd5a97",path:"/getting_started/entity-access.html",headers:[{level:2,title:"エンティティクラスを使用した検索",slug:"エンティティクラスを使用した検索",normalizedTitle:"エンティティクラスを使用した検索",charIndex:114},{level:2,title:"エンティティクラスを使用した行挿入",slug:"エンティティクラスを使用した行挿入",normalizedTitle:"エンティティクラスを使用した行挿入",charIndex:2726},{level:2,title:"エンティティクラスを使用した行更新",slug:"エンティティクラスを使用した行更新",normalizedTitle:"エンティティクラスを使用した行更新",charIndex:2966},{level:2,title:"エンティティクラスを使用した行削除",slug:"エンティティクラスを使用した行削除",normalizedTitle:"エンティティクラスを使用した行削除",charIndex:3272}],lastUpdated:"2019-10-20 21:14:04",headersStr:"エンティティクラスを使用した検索 エンティティクラスを使用した行挿入 エンティティクラスを使用した行更新 エンティティクラスを使用した行削除",content:'# エンティティクラスを使用したDBアクセス\nuroboroSQLではSQLファイルを使用したDBアクセスの他にエンティティクラスを使用したDBアクセスも提供しています。(EntityApiSample.javaを参照)\n\n# エンティティクラスを使用した検索\nエンティティクラスを使用した検索を行う際は、SqlAgent#query(エンティティクラス)メソッドを使用してSqlEntityQueryを取得し、バインドパラメータの設定や検索の実行を行います。\n\nSqlEntityQueryでは検索結果をいくつかの形式で取得することができます。\n\nメソッド 説明 \nSqlEntityQuery#collect() 検索結果をList<エンティティクラス>の形式で取得する \nSqlEntityQuery#stream() 検索結果をjava.util.Streamの形式で取得する \nSqlEntityQuery#first() 検索結果の1件目を取得する。戻り値はOptional \nSqlEntityQuery#one() 検索結果の1件目を取得する。検索結果が複数件になる場合はDataNonUniqueExceptionをスローする。戻り値はOptional \n\nまずはテーブルに紐づくエンティティクラスを作成します。\n\n * Department.java\n\npackage jp.co.future.uroborosql.sample.entity;\n\nimport jp.co.future.uroborosql.enums.GenerationType;\nimport jp.co.future.uroborosql.mapping.annotations.GeneratedValue;\nimport jp.co.future.uroborosql.mapping.annotations.Id;\nimport jp.co.future.uroborosql.mapping.annotations.Table;\nimport jp.co.future.uroborosql.mapping.annotations.Version;\n\n/**\n * Entity that can be mapped to department table\n */\n@Table(name = "department")\npublic class Department {\n @Id\n @GeneratedValue(strategy = GenerationType.IDENTITY)\n private long deptNo;\n\n private String deptName;\n\n @Version\n private long lockVersion;\n\n public long getDeptNo() {\n return this.deptNo;\n }\n\n public void setDeptNo(final long deptNo) {\n this.deptNo = deptNo;\n }\n\n public String getDeptName() {\n return this.deptName;\n }\n\n public void setDeptName(final String deptName) {\n this.deptName = deptName;\n }\n\n public long getLockVersion() {\n return this.lockVersion;\n }\n\n public void setLockVersion(final long lockVersion) {\n this.lockVersion = lockVersion;\n }\n\n @Override\n public String toString() {\n return "Department [deptNo=" + this.deptNo + ", deptName=" + this.deptName + ", lockVersion="\n + this.lockVersion + "]";\n }\n}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n@Tableアノテーションをクラスに指定することでテーブルとの紐づけを行います。上記の場合はdepartmentテーブルと紐づけています。\nエンティティクラスの詳細についてはDAOインタフェースを参照してください。\n\nこのDepartmentクラスを使用した検索は以下のようになります。\n\n// no parameter : バインドパラメータ指定なしで検索\nList deps1 = agent.query(Department.class)\n .collect();\n// add bind parameter : バインドパラメータを設定して検索\nList deps2 = agent.query(Department.class)\n .equal("deptNo", 1)\n .collect();\n\n\n1\n2\n3\n4\n5\n6\n7\n検索結果の各行がDepartmentクラスのインスタンスとして取得出来ます。\n\n# エンティティクラスを使用した行挿入\nエンティティクラスを使用してテーブルに行挿入を行うことが出来ます。行挿入を行う場合はSqlAgent#insert(エンティティクラスインスタンス)メソッドを使用します。\n\nDepartment dept = new Department();\ndept.setDeptName("production");\n// insert entity : 行挿入\nint count = agent.insert(dept);\n\n\n1\n2\n3\n4\n# エンティティクラスを使用した行更新\nエンティティクラスを使用してテーブルの行更新を行うことが出来ます。行更新を行う場合はSqlAgent#update(エンティティクラスインスタンス)メソッドを使用します。\n\nDepartment dept = agent.query(Department.class)\n .first().orElseThrow(UroborosqlRuntimeException::new);\ndept.setDeptName("R&D");\n// update entity : 行更新\nint count = agent.update(dept);\n\n\n1\n2\n3\n4\n5\n# エンティティクラスを使用した行削除\nエンティティクラスを使用してテーブルの行削除を行うことが出来ます。行更新を行う場合はSqlAgent#delete(エンティティクラスインスタンス)メソッドを使用します。\n\nDepartment dept = agent.query(Department.class)\n .first().orElseThrow(UroborosqlRuntimeException::new);\n// delete entity : 行削除\nint count = agent.delete(dept);\n\n\n1\n2\n3\n4\nエンティティクラスを使用したDBアクセスの詳細についてはDAOインタフェースを参照してください。\n\nuroboroSQLではこれらの基本的な操作のほか、バッチ処理やトランザクション処理なども行うことができます。 詳細については基本操作を参照してください。',normalizedContent:'# エンティティクラスを使用したdbアクセス\nuroborosqlではsqlファイルを使用したdbアクセスの他にエンティティクラスを使用したdbアクセスも提供しています。(entityapisample.javaを参照)\n\n# エンティティクラスを使用した検索\nエンティティクラスを使用した検索を行う際は、sqlagent#query(エンティティクラス)メソッドを使用してsqlentityqueryを取得し、バインドパラメータの設定や検索の実行を行います。\n\nsqlentityqueryでは検索結果をいくつかの形式で取得することができます。\n\nメソッド 説明 \nsqlentityquery#collect() 検索結果をlist<エンティティクラス>の形式で取得する \nsqlentityquery#stream() 検索結果をjava.util.streamの形式で取得する \nsqlentityquery#first() 検索結果の1件目を取得する。戻り値はoptional \nsqlentityquery#one() 検索結果の1件目を取得する。検索結果が複数件になる場合はdatanonuniqueexceptionをスローする。戻り値はoptional \n\nまずはテーブルに紐づくエンティティクラスを作成します。\n\n * department.java\n\npackage jp.co.future.uroborosql.sample.entity;\n\nimport jp.co.future.uroborosql.enums.generationtype;\nimport jp.co.future.uroborosql.mapping.annotations.generatedvalue;\nimport jp.co.future.uroborosql.mapping.annotations.id;\nimport jp.co.future.uroborosql.mapping.annotations.table;\nimport jp.co.future.uroborosql.mapping.annotations.version;\n\n/**\n * entity that can be mapped to department table\n */\n@table(name = "department")\npublic class department {\n @id\n @generatedvalue(strategy = generationtype.identity)\n private long deptno;\n\n private string deptname;\n\n @version\n private long lockversion;\n\n public long getdeptno() {\n return this.deptno;\n }\n\n public void setdeptno(final long deptno) {\n this.deptno = deptno;\n }\n\n public string getdeptname() {\n return this.deptname;\n }\n\n public void setdeptname(final string deptname) {\n this.deptname = deptname;\n }\n\n public long getlockversion() {\n return this.lockversion;\n }\n\n public void setlockversion(final long lockversion) {\n this.lockversion = lockversion;\n }\n\n @override\n public string tostring() {\n return "department [deptno=" + this.deptno + ", deptname=" + this.deptname + ", lockversion="\n + this.lockversion + "]";\n }\n}\n\n\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n@tableアノテーションをクラスに指定することでテーブルとの紐づけを行います。上記の場合はdepartmentテーブルと紐づけています。\nエンティティクラスの詳細についてはdaoインタフェースを参照してください。\n\nこのdepartmentクラスを使用した検索は以下のようになります。\n\n// no parameter : バインドパラメータ指定なしで検索\nlist deps1 = agent.query(department.class)\n .collect();\n// add bind parameter : バインドパラメータを設定して検索\nlist deps2 = agent.query(department.class)\n .equal("deptno", 1)\n .collect();\n\n\n1\n2\n3\n4\n5\n6\n7\n検索結果の各行がdepartmentクラスのインスタンスとして取得出来ます。\n\n# エンティティクラスを使用した行挿入\nエンティティクラスを使用してテーブルに行挿入を行うことが出来ます。行挿入を行う場合はsqlagent#insert(エンティティクラスインスタンス)メソッドを使用します。\n\ndepartment dept = new department();\ndept.setdeptname("production");\n// insert entity : 行挿入\nint count = agent.insert(dept);\n\n\n1\n2\n3\n4\n# エンティティクラスを使用した行更新\nエンティティクラスを使用してテーブルの行更新を行うことが出来ます。行更新を行う場合はsqlagent#update(エンティティクラスインスタンス)メソッドを使用します。\n\ndepartment dept = agent.query(department.class)\n .first().orelsethrow(uroborosqlruntimeexception::new);\ndept.setdeptname("r&d");\n// update entity : 行更新\nint count = agent.update(dept);\n\n\n1\n2\n3\n4\n5\n# エンティティクラスを使用した行削除\nエンティティクラスを使用してテーブルの行削除を行うことが出来ます。行更新を行う場合はsqlagent#delete(エンティティクラスインスタンス)メソッドを使用します。\n\ndepartment dept = agent.query(department.class)\n .first().orelsethrow(uroborosqlruntimeexception::new);\n// delete entity : 行削除\nint count = agent.delete(dept);\n\n\n1\n2\n3\n4\nエンティティクラスを使用したdbアクセスの詳細についてはdaoインタフェースを参照してください。\n\nuroborosqlではこれらの基本的な操作のほか、バッチ処理やトランザクション処理なども行うことができます。 詳細については基本操作を参照してください。',charsets:{cjk:!0}},{title:"License",frontmatter:{meta:[{name:"og:title",content:"License"},{name:"og:url",content:"/uroborosql-doc/license/"}]},regularPath:"/license/",relativePath:"license/README.md",key:"v-bbc2ee00",path:"/license/",lastUpdated:"2019-9-4 23:08:33",headersStr:null,content:'# License\nMIT License\n\nCopyright (c) 2018\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.',normalizedContent:'# license\nmit license\n\ncopyright (c) 2018\n\npermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "software"), to deal in the software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the software, and to permit persons to whom the software is furnished to do so, subject to the following conditions:\n\nthe above copyright notice and this permission notice shall be included in all copies or substantial portions of the software.\n\nthe software is provided "as is", without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. in no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software.',charsets:{}}],themeConfig:{logo:"/images/logo.png",repo:"https://github.com/future-architect/uroborosql",docsRepo:"https://github.com/future-architect/uroborosql-doc",docsDir:"src",editLinks:!0,lastUpdated:!0,searchMaxSuggestions:15,sidebarDepth:2,nav:[{text:"Home",link:"/"},{text:"Getting Started",link:"/getting_started/"},{text:"基本操作",link:"/basics/"},{text:"設定",link:"/configuration/"},{text:"高度な操作",link:"/advanced/"},{text:"Developer Tools",link:"/developer_tools/"}],sidebar:[{title:"Why uroboroSQL",collapsable:!0,children:["/why_uroborosql/"]},{title:"Getting Started",collapsable:!0,children:["/getting_started/","/getting_started/sql-file-access","/getting_started/entity-access","/getting_started/sql-repl"]},{title:"前提知識",collapsable:!0,children:["/background/","/background/el"]},{title:"基本操作",collapsable:!0,children:["/basics/","/basics/sql-file-api","/basics/entity-api","/basics/transaction"]},{title:"設定",collapsable:!0,children:["/configuration/","/configuration/connection-supplier","/configuration/sql-context-factory","/configuration/sql-agent-factory","/configuration/sql-manager","/configuration/sql-filter-manager","/configuration/entity-handler","/configuration/dialect"]},{title:"高度な操作",collapsable:!0,children:["/advanced/"]},"/developer_tools/","/developer_guide/","/license/","/about/"]},locales:{"/":{lang:"ja",path:"/"}}};t(144);Da.component("mermaid",()=>t.e(10).then(t.bind(null,197))),Da.component("Badge",()=>Promise.all([t.e(0),t.e(4)]).then(t.bind(null,209))),Da.component("CodeBlock",()=>Promise.all([t.e(0),t.e(5)]).then(t.bind(null,199))),Da.component("CodeGroup",()=>Promise.all([t.e(0),t.e(6)]).then(t.bind(null,200)));t(145);var ii={props:{color:{required:!1,default:"rgb(66, 185, 131)"}}},li=(t(146),Object(ri.a)(ii,(function(){var n=this.$createElement;return(this._self._c||n)("div",{staticClass:"spinner",style:{background:this.color}})}),[],!1,null,"1bbcb91a",null).exports);const ci={name:"Mermaid",props:{id:{type:String,required:!0},graph:{type:String,required:!0}},data:()=>({svg:void 0}),render(n){return void 0===this.svg?n("Loading"):n("div",{domProps:{innerHTML:this.svg,style:"width: 100%"}})},mounted(){t.e(34).then(t.t.bind(null,194,7)).then(n=>{n.initialize({startOnLoad:!0});let e=document.createElement("div");document.body.appendChild(e),n.render(this.id,this.graph,n=>{this.svg=n,document.body.removeChild(e)},e)})},components:{Loading:li}};var pi=[{},({Vue:n})=>{n.mixin({computed:{$dataBlock(){return this.$options.__data__block__}}})},{},{},({router:n})=>{var e,t,r,a,o,s;"undefined"!=typeof window&&(e=window,t=document,r="script",a="ga",e.GoogleAnalyticsObject=a,e.ga=e.ga||function(){(e.ga.q=e.ga.q||[]).push(arguments)},e.ga.l=1*new Date,o=t.createElement(r),s=t.getElementsByTagName(r)[0],o.async=1,o.src="https://www.google-analytics.com/analytics.js",s.parentNode.insertBefore(o,s),ga("create","UA-93486523-1","auto"),ga("set","anonymizeIp",!0),n.afterEach((function(e){ga("set","page",n.app.$withBase(e.fullPath)),ga("send","pageview")})))},({Vue:n})=>{n.component("Mermaid",ci)}],ui=[];class di extends class{constructor(){this.store=new Da({data:{state:{}}})}$get(n){return this.store.state[n]}$set(n,e){Da.set(this.store.state,n,e)}$emit(...n){this.store.$emit(...n)}$on(...n){this.store.$on(...n)}}{}Object.assign(di.prototype,{getPageAsyncComponent:Fs,getLayoutAsyncComponent:Rs,getAsyncComponent:Ms,getVueComponent:$s});var mi={install(n){const e=new di;n.$vuepress=e,n.prototype.$vuepress=e}};function fi(n,e){return n.options.routes.filter(n=>n.path.toLowerCase()===e.toLowerCase()).length>0}var gi={props:{pageKey:String,slotKey:{type:String,default:"default"}},render(n){const e=this.pageKey||this.$parent.$page.key;return Bs("pageKey",e),Da.component(e)||Da.component(e,Fs(e)),Da.component(e)?n(e):n("")}},hi={functional:!0,props:{slotKey:String,required:!0},render:(n,{props:e,slots:t})=>n("div",{class:["content__"+e.slotKey]},t()[e.slotKey])},yi={computed:{openInNewWindowTitle(){return this.$themeLocaleConfig.openNewWindowText||"(opens new window)"}}},qi=(t(147),t(148),Object(ri.a)(yi,(function(){var n=this.$createElement,e=this._self._c||n;return e("span",[e("svg",{staticClass:"icon outbound",attrs:{xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",focusable:"false",x:"0px",y:"0px",viewBox:"0 0 100 100",width:"15",height:"15"}},[e("path",{attrs:{fill:"currentColor",d:"M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"}}),this._v(" "),e("polygon",{attrs:{fill:"currentColor",points:"45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"}})]),this._v(" "),e("span",{staticClass:"sr-only"},[this._v(this._s(this.openInNewWindowTitle))])])}),[],!1,null,null,null).exports),vi={functional:!0,render(n,{parent:e,children:t}){if(e._isMounted)return t;e.$once("hook:mounted",()=>{e.$forceUpdate()})}};Da.config.productionTip=!1,Da.use(xs),Da.use(mi),Da.mixin(function(n,e,t=Da){!function(n){n.locales&&Object.keys(n.locales).forEach(e=>{n.locales[e].path=e});Object.freeze(n)}(e),t.$vuepress.$set("siteData",e);const r=new(n(t.$vuepress.$get("siteData"))),a=Object.getOwnPropertyDescriptors(Object.getPrototypeOf(r)),o={};return Object.keys(a).reduce((n,e)=>(e.startsWith("$")&&(n[e]=a[e].get),n),o),{computed:o}}(n=>class{setPage(n){this.__page=n}get $site(){return n}get $themeConfig(){return this.$site.themeConfig}get $frontmatter(){return this.$page.frontmatter}get $localeConfig(){const{locales:n={}}=this.$site;let e,t;for(const r in n)"/"===r?t=n[r]:0===this.$page.path.indexOf(r)&&(e=n[r]);return e||t||{}}get $siteTitle(){return this.$localeConfig.title||this.$site.title||""}get $canonicalUrl(){const{canonicalUrl:n}=this.$page.frontmatter;return"string"==typeof n&&n}get $title(){const n=this.$page,{metaTitle:e}=this.$page.frontmatter;if("string"==typeof e)return e;const t=this.$siteTitle,r=n.frontmatter.home?null:n.frontmatter.title||n.title;return t?r?r+" | "+t:t:r||"VuePress"}get $description(){const n=function(n){if(n){const e=n.filter(n=>"description"===n.name)[0];if(e)return e.content}}(this.$page.frontmatter.meta);return n||(this.$page.frontmatter.description||this.$localeConfig.description||this.$site.description||"")}get $lang(){return this.$page.frontmatter.lang||this.$localeConfig.lang||"en-US"}get $localePath(){return this.$localeConfig.path||"/"}get $themeLocaleConfig(){return(this.$site.themeConfig.locales||{})[this.$localePath]||{}}get $page(){return this.__page?this.__page:function(n,e){for(let t=0;tt||(n.hash?!Da.$vuepress.$get("disableScrollBehavior")&&{selector:decodeURIComponent(n.hash)}:{x:0,y:0})});!function(n){n.beforeEach((e,t,r)=>{if(fi(n,e.path))r();else if(/(\/|\.html)$/.test(e.path))if(/\/$/.test(e.path)){const t=e.path.replace(/\/$/,"")+".html";fi(n,t)?r(t):r()}else r();else{const t=e.path+"/",a=e.path+".html";fi(n,a)?r(a):fi(n,t)?r(t):r()}})}(t);const r={};try{await Promise.all(pi.filter(n=>"function"==typeof n).map(e=>e({Vue:Da,options:r,router:t,siteData:si,isServer:n})))}catch(n){console.error(n)}return{app:new Da(Object.assign(r,{router:t,render:n=>n("div",{attrs:{id:"app"}},[n("RouterView",{ref:"layout"}),n("div",{class:"global-ui"},ui.map(e=>n(e)))])})),router:t}}(!1).then(({app:n,router:e})=>{e.onReady(()=>{n.$mount("#app")})})}]); \ No newline at end of file diff --git a/docs/background/el.html b/docs/background/el.html deleted file mode 100644 index 637cec3..0000000 --- a/docs/background/el.html +++ /dev/null @@ -1,73 +0,0 @@ - - - - - - 式言語 | uroboroSQL - - - - - - - - - - - - - -

# 式言語

uroboroSQLでは、条件分岐に式言語を利用することができます。
-利用可能な式言語は以下の2つになります。

利用する式言語の切替は依存関係ライブラリの指定により行ってください。
-依存関係ライブラリの指定については環境設定を参照してください。

条件分岐の評価式として使用する場合、評価結果が真偽値(true/false)になるように記述してください。

# OGNL

以下に式言語としてOGNLを利用する場合の基本文法を提示します。
-OGNL文法の詳細はこちら (opens new window)を参照してください。

# リテラル(OGNL)

以下のリテラルが使用できます。

  • “a”(java.lang.String)
  • 'a'(char)
  • 1(int)
  • 1L(long)
  • 0.1F(float)
  • 0.1D(double)
  • 0.1B(java.math.BigDecimal)
  • 1H(java.math.BigInteger)
  • true, false(Boolean)
  • null

# 演算子(OGNL)

以下の演算子が使用できます。

# 算術演算子(OGNL)

  • e1 + e2 (足し算)
  • e1 - e2 (引き算)
  • e1 * e2 (掛け算)
  • e1 / e2 (割り算)
  • e1 % e2 (余り)

# 比較演算子(OGNL)

  • e1 eq e2, e1 == e2 (等しい) -
    • e1・e2のいずれかがnullの場合、両方ともnullの時のみe1とe2は等しい
    • e1・e2が同じオブジェクトの場合、またはequals()メソッドにより等しいと判断される場合、e1とe2は等しい
    • e1・e2が数値の場合、倍精度浮動小数点数が等しい時のみe1とe2は等しい
    • その以外の場合、e1とe2は等しくない
  • e1 neq e2, e1 != e2 (等しくない)
  • e1 lt e2, e1 < e2 (小なり)
  • e1 lte e2, e1 <= e2 (小なりイコール)
  • e1 gt e2, e1 > e2 (大なり)
  • e1 gte e2, e1 >= e2 (大なりイコール)

# 論理演算子(OGNL)

  • e1 or e2, e1 || e2 (論理和)
  • e1 and e2, e1 && e2 (論理積)
  • not e, ! e (論理否定)

# 連結演算子(OGNL)

  • e1 + e2 (文字列連結)

# メソッド・フィールドの呼び出し(OGNL)

以下のようにメソッド・フィールドの呼び出しができます。

  • e.method(args) (メソッドの呼び出し)
  • e.property (フィールドの呼び出し)

# Spring Expression Language(SpEL)

以下に式言語としてSpring Expression Language(SpEL)を利用する場合の基本文法を提示します。
-SpEL文法の詳細はこちら (opens new window)を参照してください。

# リテラル(SpEL)

以下のリテラルが使用できます。

  • 文字列はシングルクォートで囲む。シングルクォート自体を使用する場合はシングルクォートを2つ重ねる('')
  • 数字や真偽値、nullはそのまま記述

# 演算子(SpEL)

以下の演算子が使用できます。

# 算術演算子(SpEL)

  • e1 + e2 (足し算)
  • e1 - e2 (引き算)
  • e1 * e2 (掛け算)
  • e1 / e2, e1 div e2 (割り算)
  • e1 % e2, e1 mod e2 (余り)

# 比較演算子(SpEL)

  • e1 eq e2, e1 == e2 (等しい) -
    • e1・e2のいずれかがnullの場合、両方ともnullの時のみe1とe2は等しい
    • e1・e2が同じオブジェクトの場合、またはequals()メソッドにより等しいと判断される場合、e1とe2は等しい
    • e1・e2が数値の場合、倍精度浮動小数点数が等しい時のみe1とe2は等しい
    • その以外の場合、e1とe2は等しくない
  • e1 ne e2, e1 != e2 (等しくない)
  • e1 lt e2, e1 < e2 (小なり)
  • e1 le e2, e1 <= e2 (小なりイコール)
  • e1 gt e2, e1 > e2 (大なり)
  • e1 ge e2, e1 >= e2 (大なりイコール)

# 論理演算子(SpEL)

  • e1 or e2 (論理和)
  • e1 and e2 (論理積)
  • not e, ! e (論理否定)

# 連結演算子(SpEL)

  • e1 + e2 (文字列連結)

# その他の演算子(SpEL)

  • instanceof (型判定) -
    • ex) 'xyz' instanceof T(int) // false T() はタイプ(型)を表す
  • matches (正規表現) -
    • ex) '5.00' matches '^[0-9]{2}$' // false

# メソッド・フィールドの呼び出し(SpEL)

以下のようにメソッド・フィールドの呼び出しができます。

  • e.method(args) (メソッドの呼び出し)
  • e.property (フィールドの呼び出し)
  • T(type).staticMethod(args) (staticメソッドの呼び出し)

# StringFunction(SF)

uroboroSQLでは評価式を利用する際、標準でStringFunction(SF)を使用することができます。 -評価式と合わせてStringFunctionクラスのメソッドを呼び出すことができます。

  • 評価式で使用する場合
/*IF SF.isNotEmpty(emp_no)*/
-  -- emp_noが null または "" でない場合に処理される
-/*END*/
-
1
2
3
  • バインドパラメータと合わせて使用する場合
emp_name like /*SF.contains(emp_name)*/'' escape '$'
--- emp_name=Bobの場合、 emp_name like %Bob% escape '$' となる
-
1
2
  • StringFunctionが提供するメソッドの一覧
メソッド名 戻り値 説明
SF.isEmpty(String str) booean 対象文字列が空文字であること判定する
SF.isNotEmpty(String str) boolean 対象文字列が空文字でないことを判定する
SF.isBlank(String str) boolean 対象文字列が空文字、もしくは空白であること判定する
SF.isNotBlank(String str) boolean 対象文字列が空文字、もしくは空白でないこと判定する
SF.trim(String str) String 文字列の前後の空白を除去する。nullを渡した場合は結果もnullとなる
SF.trimToEmpty(String str) String 文字列の前後の空白を除去する。nullを渡した場合は空文字となる
SF.left(String str, int len) String 文字列の先頭から指定した文字数の文字列を取得する
SF.right(String str, int len) String 文字列の最後から指定した文字数の文字列を取得する
SF.mid(String str, int pos, int len) String 文字列の指定した位置から指定した文字数の文字列を取得する
SF.rightPad(String str, int size) String 文字列の末尾に空白を埋めて指定された長さにする
SF.rightPad(String str, int size, char padChar) String 文字列の末尾に指定した埋め込み文字を埋めて指定された長さにする
SF.leftPad(String str, int size) String 文字列の先頭に空白を埋めて指定された長さにする
SF.leftPad(String str, int size, char padChar) String 文字列の先頭に指定した埋め込み文字を埋めて指定された長さにする
SF.split(String str) String[] 文字列を空白で区切って配列に格納する。nullが入力された場合はnullを返す
SF.split(String str, char separatorChar) String[] 文字列を指定した区切り文字で区切って配列に格納する。nullが入力された場合はnullを返す
SF.split(String str, String separatorChars, int max) String[] 文字列を指定した区切り文字で区切って配列に格納する。nullが入力された場合はnullを返す
SF.capitalize(String str) String 文字列の先頭文字を大文字にする
SF.uncapitalize(String str) String 文字列の先頭を小文字にする
SF.startsWith(CharSequence text) String 指定されたテキストで始まるLIKE句用の検索文字列を生成する。引数のテキストはエスケープ処理される 0.12.0+
SF.contains(CharSequence text) String 指定されたテキストを含むLIKE句用の検索文字列を生成する。引数のテキストはエスケープ処理される 0.12.0+
SF.endsWith(CharSequence text) String 指定されたテキストで終わるLIKE句用の検索文字列を生成する。数のテキストはエスケープ処理される 0.12.0+
- - - diff --git a/docs/background/index.html b/docs/background/index.html deleted file mode 100644 index c109c18..0000000 --- a/docs/background/index.html +++ /dev/null @@ -1,242 +0,0 @@ - - - - - - 2WaySQL | uroboroSQL - - - - - - - - - - - - - -

# 2WaySQL

uroboroSQLの基本操作について説明する前にuroboroSQLを利用する上で必要になる項目について説明します。

# 2WaySQLとは

2WaySQLは普通のSQL文をファイルに保存したものです。そのままSQLクライアントツールで実行することもできますし、uroboroSQLで読み込んで実行することも出来ます。
-(2つの実行方法があることから2WaySQLと呼ばれます)

# バインドパラメータ (/* */)

SQLにバインドするパラメータを /*parameter name*/の形式で指定することができます。

select
-  *
-from
-  department
-where
-  dept_no    =  /*dept_no*/10
-AND  dept_name  =  /*dept_name*/'Sales'
-
1
2
3
4
5
6
7

上の例では、/*dept_no*/, /*dept_name*/ がバインドパラメータで、uroboroSQLから実行される際はこの部分が?に置き換わり、後ろの10'Sales'が削除されます。

select
-  *
-from
-  department
-where
-  dept_no    =  ?/*dept_no*/
-and  dept_name  =  ?/*dept_name*/
-
1
2
3
4
5
6
7

# IN句の利用方法

List型の値をIN句のバインドパラメータとして指定することもできます。

WARNING

IN句にバインドパラメータを指定する場合、バインドパラメータの後ろに()を記述する必要があります。

select
-  *
-from
-  employee  emp
-where
-/*IF gender_list != null*/
-and  emp.gender  in  /*gender_list*/('M')
-/*END*/
-
1
2
3
4
5
6
7
8

上の例にgender_listとして{"M", "F"}を指定すると以下のように変換されます。

select
-  *
-from
-  employee  emp
-where
-/*IF gender_list != null*/
-and  emp.gender  in  (?, ?)/*gender_list*/
-/*END*/
-
1
2
3
4
5
6
7
8

# LIKE句の利用方法

LIKE句に対してバインドパラメータを使用する場合は、以下のようにStringFunctionを使って記述してください。

select
-  *
-from
-  employee  emp
-where
-/*IF first_name != null*/
-and  emp.first_name like /*SF.contains(first_name)*/'' escape /*#ESC_CHAR*/'$'
-/*END*/
-/*IF last_name != null*/
-and  emp.last_name  like /*SF.startsWith(last_name)*/'' escape /*#ESC_CHAR*/'$'
-/*END*/
-
1
2
3
4
5
6
7
8
9
10
11

上の例で、バインドパラメータ first_namea, last_nameDを指定した場合は以下のようになります。

select
-  *
-from
-  employee  emp
-where
-    emp.first_name like '%a%' escape '$'
-and emp.last_name  like 'D%' escape '$'
-/*END*/
-
1
2
3
4
5
6
7
8

上の例で、ワイルドカードを含む例としてバインドパラメータ first_namea%, last_nameD_を指定した場合は以下のようになります。

select
-  *
-from
-  employee  emp
-where
-    emp.first_name like '%a$%%' escape '$' -- %がエスケープされる
-and emp.last_name  like 'D$_%' escape '$'  -- _がエスケープされる
-/*END*/
-
1
2
3
4
5
6
7
8

TIP

ワイルドカード(%_)を含む文字列がバインドパラメータに指定された場合でも、StringFunctionを利用することで文字列のエスケープ処理が適切に行われます。

WARNING

エスケープキャラクタ(上記の例では$)はDB毎の設定(Dialect)によって変わります。
-現在の設定では、Oracleの場合は\, その他のDBでは$となります。
\$のかわりに/*#ESC_CHAR*/と記載することでDB毎の設定を気にせずにエスケープ文字を指定することができます。0.14.0+

# バインド出来るパラメータの型

バインドパラメータに指定できるJava型は以下になります。

  • プリミティブ型とそのラッパー型(ただし char と java.lang.Character は除く)
  • java.math.BigDecimal
  • java.math.BigInteger
  • java.lang.String
  • byte[]
  • java.sql.Date
  • java.sql.Time
  • java.sql.Timestamp
  • java.sql.Array
  • java.sql.Ref
  • java.sql.Blob
  • java.sql.Clob
  • java.sql.SQLXML
  • java.sql.Struct
  • 列挙型(enum)
  • java.util.Date
  • java.util.Optional
  • java.util.OptionalInt
  • java.util.OptionalLong
  • java.util.OptionalDouble
  • java.time.LocalDateTime
  • java.time.OffsetDateTime
  • java.time.ZonedDateTime
  • java.time.LocalDate
  • java.time.LocalTime
  • java.time.OffsetTime
  • java.time.Year
  • java.time.YearMonth
  • java.time.MonthDay
  • java.time.Month
  • java.time.DayOfWeek

# 置換文字列 (/*$ */ , /*# */)

置換文字列を使うとSQLを動的に変更することができます。

置換文字列は /*$parameter name*/ もしくは /*#parameter name*/と記述します。
/*#parameter name*/ と記述した場合は、置換文字列の前後を'(シングルクォート)で囲みます。

select
-  *
-from    /*$table_name*/
-where
-  gender  =  /*#gender*/
-
1
2
3
4
5

上の例では、table_namegenderに設定した値でSQLが置換されます。

  • table_nameemployee, genderMを設定した場合
select
-  *
-from  employee
-where
-  gender  =  'M'
-
1
2
3
4
5

という風に置換されたSQLが実行されることになります。

注意

置換文字列はSQLインジェクションなど脆弱性の原因となる可能性があります。十分に注意を払ったうえで利用してください

TIP

置換文字列はSQLインジェクションを防ぐため、変換の際にシングルクォート'''にエスケープします

WARNING

置換文字列はバインドパラメータとしてではなく実行されるSQLを構築する時点で置換される点に注意してください。
-データベースによってはSQL文が動的に変わることで解析結果のキャッシュが適用されず、
-解析処理が都度実行されることでCPUに負荷をかける可能性があります。

# 条件分岐 ( /*IF*/, /*ELIF*/, /*ELSE*/, /*END*/ )

/*IF*/, /*ELIF*/, /*ELSE*/, /*END*/ を使用してSQLを動的に変更することができます。

# 記述方法

/*IF [評価式]*/
--- IFの評価式が真の場合に適用されるSQL
-/*ELIF [評価式]*/
--- ELIFの評価式が真の場合に適用されるSQL
-/*ELSE*/
--- IF,ELIFの評価式が偽の場合に適用されるSQL
-/*END*/
-
1
2
3
4
5
6
7

/*IF*/, /*ELIF*/の評価式として式言語を利用します。 -( 式言語の説明はこちら )
-また、標準でSF関数(String Function)を使うことができます。

select
-  *
-from
-  employee  emp
-where
-/*IF SF.isNotEmpty(birth_date_from) and SF.isNotEmpty(birth_date_to)*/
-and  emp.birth_date  between  /*birth_date_from*/'1990-01-01'  and  /*birth_date_to*/'1999-12-31'
-/*ELIF SF.isNotEmpty(birth_date_from)*/
-and  emp.birth_date  >=    /*birth_date_from*/'1990-01-01'
-/*ELIF SF.isNotEmpty(birth_date_to)*/
-and  emp.birth_date  <    /*birth_date_to*/'1999-12-31'
-/*ELSE*/
-/*END*/
-
1
2
3
4
5
6
7
8
9
10
11
12
13

上の例ではIFの評価式としてSF.isNotEmpty()を使用してバインドパラメータがnullまたは""でないことを評価しています。

バインドパラメータとしてbirth_date_from2000-01-01, birth_date_to2010-12-31を指定した場合、生成されるSQLは以下のようになります。

select
-  *
-from
-  employee  emp
-where
-  emp.birth_date  between  ?/*birth_date_from*/  and  ?/*birth_date_to*/
-
1
2
3
4
5
6

最後にバインドパラメータが評価され、実行されるSQLが以下になります。

select
-  *
-from
-  employee  emp
-where
-  emp.birth_date  between  '2000-01-01'/*birth_date_from*/  and  '2010-12-31'/*birth_date_to*/
-
1
2
3
4
5
6

ここでemp.birth_dateの前にあったandが消えていることに注目してください。

TIP

uroboroSQLでは動的SQLを生成する際、WHERE句の後ろにandorが来る場合はそれを削除してSQL文として正しい状態にします

ただし、上の加工前SQLのようにSQL文として不正な状態になってしまうのでSQLクライアントツールからは実行できないという欠点もあります。
-このようにSQL文として不正になることを防ぐために、WHERE句のあとに他に影響を与えない評価を入れる方法があります。

select
-  *
-from
-  employee  emp
-where
-  1        =    1  // <-- 必ずtrueとなる評価を入れる
-/*IF SF.isNotEmpty(birth_date_from) and SF.isNotEmpty(birth_date_to)*/
-and  emp.birth_date  between  /*birth_date_from*/'1990-01-01'  and  /*birth_date_to*/'1999-12-31'
-/*ELIF SF.isNotEmpty(birth_date_from)*/
-and  emp.birth_date  >=    /*birth_date_from*/'1990-01-01'
-/*ELIF SF.isNotEmpty(birth_date_to)*/
-and  emp.birth_date  <    /*birth_date_to*/'1999-12-31'
-/*ELSE*/
-/*END*/
-
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 範囲の有効化 ( /*BEGIN*/, /*END*/ )

/*BEGIN*/, /*END*/ で囲まれた範囲は、その中の/*IF*/, /*ELIF*/のうち、どれか1つでも真(true)になった場合に出力されます。
-範囲内の全ての評価式が偽(false)の場合、/*BEGIN*/, /*END*/ で囲まれた範囲は出力されません。

select
-  *
-from
-  employee  emp
-/*BEGIN*/
-where
-/*IF SF.isNotEmpty(first_name)*/
-and  emp.first_name  =  /*first_name*/'Bob'
-/*END*/
-/*IF SF.isNotEmpty(last_name)*/
-and  emp.last_name  =  /*last_name*/'Smith'
-/*END*/
-/*END*/
-
1
2
3
4
5
6
7
8
9
10
11
12
13

上の例で、バインドパラメータ first_nameWillson, last_namenullを指定した場合は以下のようになります。

select
-  *
-from
-  employee  emp
-where
-  emp.first_name  =  ?/*first_name*/
-
1
2
3
4
5
6

バインドパラメータ first_name, last_nameともにnullを指定した場合は以下のようになります。

select
-  *
-from
-  employee  emp
-
1
2
3
4

/*BEGIN*/,/*END*/で囲まれたwhereが出力されていないことがわかります。

# 不要なカンマの除去

IF分岐を使って動的なSQLを構築する場合、カンマの有無が問題になる場合があります。
-以下のSQLを例として説明します。

select
-/*IF detail*/
-,  first_name
-,  last_name
-,  birth_date
-,  gender
-/*END*/
-,  emp_no
-from
-  employee  emp
-order by
-/*IF detail*/
-,  birth_date
-/*END*/
-,  emp_no
-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

ここでバインドパラメータdetailtrueを指定した場合、生成されるSQLは以下になります。

select
-,  first_name
-,  last_name
-,  birth_date
-,  gender
-,  emp_no
-from
-  employee  emp
-order by
-,  birth_date
-,  emp_no
-
1
2
3
4
5
6
7
8
9
10
11

このSQLではselectの直後やorder byの直後にカンマが出現しておりSQL文として不正であるため、SQLの実行に失敗します。
-これを避けるためuroboroSQLでは、生成後のSQLに含まれる不要なカンマを除去するようになっています。

実際に生成されるSQLは以下になります。

select
-  first_name     -- 先頭のカンマが除去される
-,  last_name
-,  birth_date
-,  gender
-,  emp_no
-from
-  employee  emp
-order by
-  birth_date     -- 先頭のカンマが除去される
-,  emp_no
-
1
2
3
4
5
6
7
8
9
10
11

カンマが除去されるのは、以下の予約語の直後にカンマが出現した場合です(大文字小文字の区別無し)。

  • SELECT
  • ORDER BY
  • GROUP BY
  • (
  • SET
- - - diff --git a/docs/basics/entity-api.html b/docs/basics/entity-api.html deleted file mode 100644 index 75a47f8..0000000 --- a/docs/basics/entity-api.html +++ /dev/null @@ -1,351 +0,0 @@ - - - - - - DAOインタフェース | uroboroSQL - - - - - - - - - - - - - -

# DAOインタフェース

uroboroSQLはDAO(Data Access Object)を用いた単一テーブルへのCRUDに対応しています。

下記のテーブルとそれに対応するエンティティクラスを例として説明します。

-- MySQLの場合
-create table employee (
-  emp_no number(6) not null auto_increment
-  , first_name varchar(20) not null
-  , last_name varchar(20) not null
-  , birth_date date not null
-  , gender char(1) not null
-  , lock_version number(10) not null
-  , constraint employee_PKC primary key (emp_no)
-)
-
--- Postgresqlの場合
-create table employee (
-  emp_no serial not null
-  , first_name varchar(20) not null
-  , last_name varchar(20) not null
-  , birth_date date not null
-  , gender char(1) not null
-  , lock_version number(10) not null
-  , constraint employee_PKC primary key (emp_no)
-) ;
-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class Employee {
-  private long empNo;
-  private String firstName;
-  private String lastName;
-  private LocalDate birthDate;
-  private Gender gender;
-  private long lockVersion = 0;
-
-  // 中略 getter/setter
-}
-
1
2
3
4
5
6
7
8
9
10

# エンティティクラスの検索

# キーを指定した1件取得(SqlAgent#find)

メソッド名 戻り値の型
SqlAgent#find(Class<E>, Object...) Optional<E>

主キーを指定してエンティティを取得します。PKカラムの数と引数に指定するキーの数は合わせる必要があります。

// emp_no = 1 のレコードをエンティティとして取得
-Optional<Employee> employee = agent.find(Employee.class, 1);
-
1
2

# 条件指定検索(SqlAgent#query) 0.11.0+

メソッド名 戻り値の型
SqlAgent#query(Class<E>) SqlEntityQuery<E>

エンティティクラスを利用した検索を行うためのオブジェクト(SqlEntityQuery)を取得します。
SqlEntityQueryに対して抽出条件の指定を行い、抽出条件に該当するエンティティを取得します。


# 抽出条件の指定(SqlEntityQuery#equal /#notEqual /#greaterThan /#lessThan /#greaterEqual /#lessEqual /#in /#notIn /#like /#startsWith /#endsWith /#contains /#notLike /#notStartsWith /#notEndsWith /#notContains /#between /#isNull /#isNotNull /#where)

抽出条件指定メソッド記述例 生成されるwhere句の条件式 補足説明
equal("col", "value") col = 'value'
notEqual("col", "value") col != 'value'
greaterThan("col", 1) col > 1
lessThan("col", 1) col < 1
greaterEqual("col", 1) col >= 1
lessEqual("col", 1) col <= 1
in("col", "val1", "val2") col in ('val1', 'val2')
in("col", List.of("val1", "val2")) col in ('val1', 'val2')
notIn("col", "val1", "val2") col not in ('val1', 'val2')
notIn("col", List.of("val1", "val2")) col not in ('val1', 'val2')
like("col", "%val%") like '%val%' valはエスケープされない
startsWith("col", "val") like 'val%' valはエスケープされる
endsWith("col", "val") like '%val' valはエスケープされる
contains("col", "val") like '%val%' valはエスケープされる
notLike("col", "%val%") not like '%val%' valはエスケープされない
notStartsWith("col", "val") not like 'val%' valはエスケープされる
notEndsWith("col", "val") not like '%val' valはエスケープされる
notContains("col", "val") not like '%val%' valはエスケープされる
between("col", 1, 2) col between 1 and 2
isNull("col") col is null
isNotNull("col") col is not null
where("col = 1 or col = 2") (col = 1 or col = 2) もし複数回where()が呼び出された場合は条件を AND で結合する
where("col = /*col1*/", "col1", 1) (col = 1/*col1*/) パラメータの指定(1件)付き
where("col = /*col1*/ or col = /*col2*/", Map.of("col1", 1, "col2", 2)) (col = 1/*col1*/ or col = 2/*col2*/) パラメータの指定(複数件)付き
// emp_no = 1 のレコードをList<Employee>で取得
-agent.query(Employee.class).equal("emp_no", 1).collect();
-
-// emp_no = 10 又は 20 のレコードをList<Employee>で取得
-agent.query(Employee.class).in("emp_no", 10, 20).collect();
-
-// first_name like '%Bob%' のレコードをList<Employee>で取得
-agent.query(Employee.class).contains("first_name", "Bob").collect();
-
-// where句を直接記述(first_name = 'Bob' and last_name = 'Smith')した結果をList<Employee>で取得
-agent.query(Employee.class).where("first_name =''/*firstName*/", "firstName", "Bob").where("last_name = ''/*lastName*/", "lastName", "Smith").collect();
-
1
2
3
4
5
6
7
8
9
10
11

注意

SqlEntityQueryに対して抽出条件を指定する場合paramメソッドは使用しないでください。 -SqlEntityQuery#param()には@Deprecatedが付与されており、将来削除される予定です。

# ソート順(SqlEntityQuery#asc /#desc)や取得データの件数(#limit)、開始位置(#offset)、悲観ロック(#forUpdate /#forUpdateNoWait /#forUpdateWait)の指定 0.11.0+

SqlEntityQueryでは抽出条件に加えて検索結果のソート順や取得件数の制限、開始位置の指定、明示的なロック指定が行えます。

条件指定メソッド記述例 生成されるSQL 補足説明
asc("col1", "col2") order by col1 asc, col2 asc NULLSが有効な場合はNULLS LASTが出力される
asc("col1", Nulls.FIRST) order by col1 asc NULLS FIRST 複数回asc()が呼び出された場合は呼び出し順に並べる
desc("col1", "col2") order by col1 desc, col2 desc NULLSが有効な場合はNULLS LASTが出力される
desc("col1", Nulls.FIRST) order by col1 desc NULLS FIRST 複数回asc()が呼び出された場合は呼び出し順に並べる
limit(10) LIMIT 10 接続しているDBでlimit句が使用できない場合はUroborosqlRuntimeExceptionがスローされる
offset(10) OFFSET 10 接続しているDBでoffset句が使用できない場合はUroborosqlRuntimeExceptionがスローされる
forUpdate()0.14.0+ FOR UPDATE 接続しているDBでFOR UPDATE句が使用できない場合はUroborosqlRuntimeExceptionがスローされる
forUpdateNoWait()0.14.0+ FOR UPDATE NOWAIT 接続しているDBでFOR UPDATE NOWAIT句が使用できない場合はUroborosqlRuntimeExceptionがスローされる
forUpdateWait()0.14.0+ FOR UPDATE WAIT 10 接続しているDBでFOR UPDATE WAIT句が使用できない場合はUroborosqlRuntimeExceptionがスローされる
forUpdateWait(30)0.14.0+ FOR UPDATE WAIT 30 接続しているDBでFOR UPDATE WAIT句が使用できない場合はUroborosqlRuntimeExceptionがスローされる
// birth_dateの降順、first_nameの昇順でソートした結果を List<Employee>で取得
-agent.query(Employee.class).desc("birth_date").asc("first_name").collect();
-
-// emp_no の昇順でソートした結果の3行目から5件取得
-agent.query(Employee.class).asc("emp_no").offset(3).limit(5).collect();
-
-// 明示的な行ロックを行う
-agent.query(Employee.class).forUpdate().collect();
-
1
2
3
4
5
6
7
8

# オプティマイザーヒントの指定(SqlEntityQuery#hint) 0.18.0+

SqlEntityQuery#hint()を使用することで、SQLに対してオプティマイザーヒントを指定することができます。

SqlAgent agent = ...
-agent.query(User.class).hint("ORDERED").lessThan("age", 30).collect();
-
1
2

出力されるSQL(Oracleの場合)

select /*+ ORDERED */ id, name, age, ... from user where age < 30
-
1

注意

オプティマイザーヒントの指定は、利用するDBがオプティマイザーヒントをサポートしている場合に有効になります。
-また、指定可能なヒント句は利用するDBに依存します。

# 検索結果の取得(SqlEntityQury#collect /#first /#one /#select /#stream)

SqlEntityQueryから抽出条件に該当するエンティティを取得します。

メソッド 説明
collect() 検索結果をエンティティのリストとして取得する
first() 検索結果の先頭行を取得する
one() 検索結果の先頭行を取得する。検索結果が2件以上の場合DataNonUniqueExceptionをスローする
Stream<C> select(String col, Class<C> type) 0.18.0+ 検索結果の指定したカラムの値をjava.util.stream.Streamとして取得する。
stream() 検索結果をjava.util.stream.Streamとして取得する
// List<Employee>で取得
-List<Enployee> employees = agent.query(Employee.class).collect();
-
-// 検索結果の先頭行を取得
-Optional<Enployee> employee = agent.query(Employee.class).first();
-
-// 検索結果(カラム値)の取得
-String employeeName = agent.query(Employee.class)
-    .equal("employeeId", 1)
-    .select("employeeName", String.class).findFirst().get();
-
1
2
3
4
5
6
7
8
9
10

# 集約関数(SqlEntityQuery#count /#sum /#sum /#min /#max /#exists /#notExists) 0.12.0+

SqlEntityQueryではエンティティを取得する他に結果の集計を行うこともできます。

メソッド 説明
count() 検索結果の件数を取得する
count(String col) 検索結果のうち、引数で指定したカラムがNULLでない行の件数を取得する
sum(String col) 検索結果のうち、引数で指定したカラムの合計値を取得する
min(String col) 検索結果のうち、引数で指定したカラムの最小値を取得する
max(String col) 検索結果のうち、引数で指定したカラムの最大値を取得する
exists(Runnable runnable) 検索結果が1件以上ある場合に引数で渡した関数を実行する
notExists(Runnable runnable) 検索結果が0件の場合に引数で渡した関数を実行する
// 検索結果の件数を取得
-long count = agent.query(Employee.class).count();
-
-// 検索結果が1件以上の場合にログを出力する
-agent.query(Employee.class).greaterThan("emp_no", 10).exists(() -> {
-  log.info("Employee(emp_no > 10) exists.");
-});
-
1
2
3
4
5
6
7

TIP

集約関数を使用すると、検索結果からEntityオブジェクトを生成しないためメモリ効率が良くなります。 -以下2つの処理結果は同じですが、メモリの使い方が違います。

// collect()を使用すると、検索結果がエンティティに変換されるためメモリを使用する
-long count = agent.query(Employee.class).collect().size();
-
-// count()を使用すると件数のみ取得できる(エンティティは生成されない)
-long count = agent.query(Employee.class).count();
-
1
2
3
4
5

# エンティティの挿入

# 1件の挿入(SqlAgent#insert/#insertAndReturn)

メソッド名 戻り値の型
<E> SqlAgent#insert(E) int
<E> SqlAgent#insertAndReturn(E) 0.15.0+ E

エンティティクラスのインスタンスを使って1レコードの挿入を行います。

  • @Idアノテーションの指定があるフィールド
  • 対するカラムが自動採番となっているフィールド

の型がprimitive型の場合、もしくはフィールドの値がnullの場合、カラムの値は挿入時に自動採番されます。
-また、挿入により採番された値がエンティティの該当フィールドにも設定されます。
-フィールドに値を指定した場合は自動採番カラムであっても指定した値が挿入されます。

AndReturnが付くメソッドでは、挿入したエンティティオブジェクトを戻り値として取得できるため、 -エンティティの挿入に続けて処理を行う場合に便利です。

Employee employee = new Employee();
-employee.setFirstName("Susan");
-employee.setLastName("Davis");
-employee.setBirthDate(LocalDate.of(1969, 2, 10));
-employee.setGender(Gender.FEMALE); // MALE("M"), FEMALE("F"), OTHER("O")
-
-// 1件の挿入
-agent.insert(employee);
-System.out.println(employee.getEmpNo()); // 自動採番された値が出力される
-
1
2
3
4
5
6
7
8
9

# 複数件の挿入(SqlAgent#inserts /#insertsAndReturn) 0.10.0+

メソッド名 戻り値の型
SqlAgent#inserts(Stream<E>) int
SqlAgent#inserts(Stream<E>, InsertsType) int
SqlAgent#inserts(Stream<E>, InsertsCondition<? super E>) int
SqlAgent#inserts(Stream<E>, InsertsCondition<? super E>, InsertsType) int
SqlAgent#insertsAndReturn(Stream<E>) 0.15.0+ Stream<E>
SqlAgent#insertsAndReturn(Stream<E>, InsertsType) 0.15.0+ Stream<E>
SqlAgent#insertsAndReturn(Stream<E>, InsertsCondition<? super E>) 0.15.0+ Stream<E>
SqlAgent#insertsAndReturn(Stream<E>, InsertsCondition<? super E>, InsertsType) 0.15.0+ Stream<E>
SqlAgent#inserts(Class<E>, Stream<E>) int
SqlAgent#inserts(Class<E>, Stream<E>, InsertsType) int
SqlAgent#inserts(Class<E>, Stream<E>, InsertsCondition<? super E>) int
SqlAgent#inserts(Class<E>, Stream<E>, InsertsCondition<? super E>, InsertsType) int
SqlAgent#insertsAndReturn(Class<E>, Stream<E>) 0.15.0+ Stream<E>
SqlAgent#insertsAndReturn(Class<E>, Stream<E>, InsertsType) 0.15.0+ Stream<E>
SqlAgent#insertsAndReturn(Class<E>, Stream<E>, InsertsCondition<? super E>) 0.15.0+ Stream<E>
SqlAgent#insertsAndReturn(Class<E>, Stream<E>, InsertsCondition<? super E>, InsertsType) 0.15.0+ Stream<E>

java.util.stream.Stream経由で渡される複数のエンティティインスタンスを挿入します。

  • @Idアノテーションの指定があるフィールド
  • 対するカラムが自動採番となっているフィールド

の型がprimitive型の場合、もしくはフィールドの値がnullの場合、カラムの値は挿入時に自動採番されます。
-また、挿入により採番された値がエンティティの該当フィールドにも設定されます。
-フィールドに値を指定した場合は自動採番カラムであっても指定した値が挿入されます。

注意

複数件の挿入で生成されるSQLでは、行毎のフィールドの値の有無を変更することができません。
-最初に挿入するエンティティで@Idの指定があるフィールドや自動採番カラムに対するフィールドに値を設定する場合は、 -2件目以降のエンティティにも必ず値を設定するようにしてください。
-また、最初に挿入するエンティティで@Idの指定があるフィールドや自動採番カラムに対するフィールドの値にnullを設定する場合は、 -2件目以降のエンティティで値を設定していても無視されて自動採番されます。

AndReturnが付くメソッドでは、挿入したエンティティオブジェクトのjava.util.stream.Streamを戻り値として取得できるため、 -エンティティの挿入に続けて処理を行う場合に便利です。

注意

AndReturnの戻り値となるStream<E>を生成する際、挿入したエンティティを全件メモリ上に保持します。 -大量データの挿入を行うとOOMEが発生する場合があるので、insertsAndReturnを使用する場合は挿入する -データの件数に気をつけてください。件数が多い場合は一度insertsで挿入した後に、再度検索するといった方法を検討してください。

// 1件の挿入
-Department dept = new Department();
-dept.setDeptName("sales");
-agent.insert(dept);
-
-// 複数件の挿入(EmployeeとDeptEmpの挿入)
-agent.inserts(agent.insertsAndReturn(agent.query(Employee.class).stream())
-  .map(e -> {
-    DepEmp deptEmp = new DeptEmp();
-    deptEmp.setEmpNo(e.getEmpNo());
-    deptEmp.setDepNo(dept.getDepNo());
-    return deptEmp;
-  })
-);
-
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 挿入方法(InsertsType)の指定

InsertsTypeを指定することで実行される挿入用のSQLを変更することが出来ます。

InsertsType 説明
BULK insert into ... values ( ... ), ( ... )という風にvaluesに複数行の値を出力し一度に複数レコードを挿入する。
DBがこの記法をサポートしている場合に指定可能。DBが未サポートの場合、指定してもBATCHとして実行される。
BATCH java.sql.PreparedStatement#executeBatch()を使用したバッチSQL実行
Stream<Employee> employees = agent.query(Employee.class)
-  .stream()
-  .map(e -> e.setEmpNo(e.getEmpNo() + 1000));
-  
-// 複数件の挿入(バッチ実行)
-agent.inserts(employees, InsertsType.BATCH);
-}
-
1
2
3
4
5
6
7

TIP

InsertsTypeは、初期値設定が可能です。

# 挿入条件(InsertsCondition)の指定

挿入用SQLの実行条件を指定します。
InsertsCondition<E>#test(SqlContext ctx, int count, E entity)の戻り値がtrueの場合に挿入用SQLを実行します。
InsertsConditionはFunctionalInterfaceのためlambda式が利用できます。

Stream<Employee> employees = agent.query(Employee.class)
-  .stream()
-  .map(e -> e.setEmpNo(e.getEmpNo() + 1000));
-  
-// 複数件の挿入(10件毎に挿入)
-agent.inserts(employees, (ctx, count, entity) -> count == 10);
-
1
2
3
4
5
6

# エンティティの更新

# 1件の更新(SqlAgent#update /#updateAndReturn)

メソッド名 戻り値の型
<E> SqlAgent#update(E) int
<E> SqlAgent#updateAndReturn(E) 0.15.0+ E

エンティティクラスのインスタンスを使って1レコードの更新を行います。

レコード更新時、@Versionアノテーションの指定があるフィールドに対するカラムはカウントアップされます。
-また、更新された値がエンティティの該当フィールドにも設定されます。

補足

エンティティクラスのインスタンスを使った1レコードの更新では、@Idを指定したフィールドに対するカラムや自動採番カラムは更新できません。
@Idを指定したフィールドに対するカラムや自動採番カラムを更新する場合は、後述する条件指定による複数件の更新を使用してください。

AndReturnが付くメソッドでは、更新したエンティティオブジェクトを戻り値として取得できるため、 -エンティティの更新に続けて処理を行う場合に便利です。

agent.find(Employee.class, 1).ifPresent(employee -> {
-  employee.setLastName("Wilson");
-  System.out.println(employee.getLockVersion()); // 1
-
-  // エンティティの更新
-  agent.update(employee);
-  System.out.println(employee.getLockVersion()); // 2
-});
-
1
2
3
4
5
6
7
8

# 条件指定による複数件の更新(SqlAgent#update) 0.15.0+

メソッド名 戻り値の型
SqlAgent#update(Class<? extends E>) SqlEntityUpdate<E>

更新対象のレコードを抽出する条件を指定して更新を行います。
-抽出条件の指定方法は 抽出条件の指定 を参照してください。
-また、set()メソッドで更新対象のフィールドと値を指定することができます。

// first_name に 'Bob' を含むエンティティの性別を更新
-agent.update(Employee.class)
-  .contains("firstName", "Bob")
-  .set("gender", Gender.MALE)
-  .count();
-
1
2
3
4
5

# 複数件の更新(SqlAgent#updates /#updatesAndReturn) 0.15.0+

メソッド名 戻り値の型
SqlAgent#updates(Stream<E>) int
SqlAgent#updates(Stream<E>, UpdatesCondition<? super E>) int
SqlAgent#updatesAndReturn(Stream<E>) Stream<E>
SqlAgent#updatesAndReturn(Stream<E>, UpdatesCondition<? super E>) Stream<E>
SqlAgent#updates(Class<E>, Stream<E>) int
SqlAgent#updates(Class<E>, Stream<E>, UpdatesCondition<? super E>) int
SqlAgent#updatesAndReturn(Class<E>, Stream<E>) Stream<E>
SqlAgent#updatesAndReturn(Class<E>, Stream<E>, UpdatesCondition<? super E>) Stream<E>

java.util.stream.Stream経由で渡される複数のエンティティインスタンスを使って更新します。

TIP

insertsと違い必ずバッチSQL実行になります。

レコード更新時、@Versionアノテーションの指定があるフィールドに対するカラムはカウントアップされます。
-また、更新された値がエンティティの該当フィールドにも設定されます。

AndReturnが付くメソッドでは、更新したエンティティオブジェクトのjava.util.stream.Streamを戻り値として取得できるため、 -エンティティの更新に続けて処理を行う場合に便利です。

WARNING

AndReturnの戻り値となるStream<E>を生成する際、更新したエンティティを全件メモリ上に保持します。 -大量データの更新を行うとOOMEが発生する場合があるので、updatesAndReturnを使用する場合は更新する -データの件数に気をつけてください。件数が多い場合は一度updatesで更新した後に、再度検索するといった方法を検討してください。

// 複数件の更新
-agent.updates(agent.query(Employee.class)
-  .stream()
-  .map(e -> {
-    e.setFirstName(e.getFirstName() + "_new");
-    return e;
-  })
-);
-
1
2
3
4
5
6
7
8

# 更新条件(UpdatesCondition)の指定

更新用SQLの実行条件を指定します。
UpdatesCondition<E>#test(SqlContext ctx, int count, E entity)の戻り値がtrueの場合に更新用SQLを実行します。
UpdatesConditionはFunctionalInterfaceのためlambda式が利用できます。

Stream<Employee> employees = agent.query(Employee.class)
-  .stream()
-  .map(e -> {
-    e.setFirstName(e.getFirstName() + "_new");
-    return e;
-  });
-  
-// 複数件の更新(10件毎に挿入)
-agent.updates(employees, (ctx, count, entity) -> count == 10);
-
1
2
3
4
5
6
7
8
9

# エンティティの削除

# 1件の削除(SqlAgent#delete /#deleteAndReturn)

メソッド名 戻り値の型
<E> SqlAgent#delete(E) int
<E> SqlAgent#deleteAndReturn(E) 0.15.0+ E

エンティティクラスのインスタンスを使って1レコードの削除を行います。

AndReturnが付くメソッドでは、削除したエンティティオブジェクトを戻り値として取得できるため、 -エンティティの削除に続けて処理を行う場合に便利です。

agent.find(Employee.class, 1).ifPresent(employee -> {
-  // エンティティの削除
-  agent.delete(employee);
-});
-
1
2
3
4

# PKを指定した複数件の削除(SqlAgent#delete) 0.11.0+

メソッド名 戻り値の型
SqlAgent#delete(Class<? extends E>, Object...) int
// PK(emp_no) = 1 or 2 のエンティティの削除
-agent.delete(Employee.class, 1, 2);
-
1
2

# 条件指定による複数件の削除(SqlAgent#delete) 0.11.0+

メソッド名 戻り値の型
SqlAgent#delete(Class<? extends E>) SqlEntityDelete<E>

削除対象のレコードを抽出する条件を指定して削除を行います。
-抽出条件の指定方法は 抽出条件の指定 を参照してください。

// first_name = 'Bob' に該当するエンティティの削除
-agent.delete(Employee.class).contains("firstName", "Bob").count();
-
1
2

# 全ての行を削除(SqlAgent#truncate0.17.0+

メソッド名 戻り値の型
SqlAgent#truncate(Class<? extends E>) SqlAgent

エンティティクラスとマッピングされているテーブルの全てのレコードをTRUNCATE文により削除します。 -一般的に大量レコードの削除は、TRUNCATE文による削除のほうが性能上有利ですが、DBMSによってはロールバックできませんので、注意してください。

TIP

PostgreSQLは、TRUNCATE文のロールバック可能です。

SqlAgent#truncateは、SqlAgentを戻り値として返すため、SqlAgent#truncateに続けて、SqlAgent#insertsをつなげることにより、 -テーブルの洗い替えを実装することが可能です。

// 全てのレコードを削除
-agent.truncate(Employee.class);
-
-// テーブルの洗い替え
-agent.truncate(Employee.class)
-     .inserts(employees.stream());
-
1
2
3
4
5
6

# Entityアノテーション

DAOインタフェースで利用するエンティティクラスではテーブルとのマッピングやカラムの属性を指定するためにアノテーションを利用することができます。

# @Table

エンティティクラスに紐づけるテーブル名を指定します。
-テーブル名と名前が一致しないエンティティクラスにマッピングしたい場合に利用します。

属性名 必須 説明 初期値
name String - マッピングするテーブル名。指定しない場合はクラス名をスネークケースにしたテーブルとマッピングする なし
schema String - マッピングするテーブルの所属するスキーマ名 なし
import jp.co.future.uroborosql.mapping.annotations.Table;
-
-// name指定なし (departmentテーブルにマッピング)
-@Table
-public class Department {
-  // 以下略
-}
-
-// name指定あり
-@Table(name = "employee")
-public class CustomEmployee {
-  // 以下略
-}
-
1
2
3
4
5
6
7
8
9
10
11
12
13

# @Column

フィールドに紐づけるカラム名を指定します。
-カラム名と名前が一致しないフィールドにマッピングしたい場合に利用します。

属性名 必須 説明 初期値
name String マッピングするカラム名 なし
import jp.co.future.uroborosql.mapping.annotations.Table;
-import jp.co.future.uroborosql.mapping.annotations.Column;
-
-@Table(name = "employee")
-public class Employee {
-  @Column(name = "emp_no")
-  private long employeeNo;
-
-  private String firstName;
-
-  // 以下略
-}
-
1
2
3
4
5
6
7
8
9
10
11
12

# @Domain

独自に作成した型(ドメインクラス)のフィールドにカラムをマッピングする場合に指定します。

属性名 必須 説明 初期値
valueType Class<?> ドメインクラスを生成するのに必要な値の型 なし
factoryMethod String - ドメインクラスを生成・取得するメソッド名。指定しない場合はコンストラクタが呼び出される。 ""
toJdbcMethod String - JDBCが受け付けられる値に変換するメソッド名 "getValue"
nullable boolean - null可かどうかの指定 false

import jp.co.future.uroborosql.mapping.annotations.Table;
-import jp.co.future.uroborosql.mapping.annotations.Domain;
-
-@Domain(valueType = String.class, factoryMethod = "of", toJdbcMethod = "getName", nullable = true)
-public static class NameDomain {
-  private String name;
-
-  private NameDomain(String name) {
-    this.name = name;
-  }
-
-  public static NameDomain of(String name) {
-    return new NameDomain(name);
-  }
-
-  public String getName() {
-    return name;
-  }
-}
-
-@Table
-public class Employee {
-  private long empNo;
-  private NameDomain firstName;
-
-  // 以下略
-}
-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

# @Transient

フィールドとカラムのマッピング対象から除外します。

TIP

例えば、エンタープライズシステムの設計でしばしば利用される最終登録日時や最終更新日時など、 -INSERT/UPDATEの対象から除外したいケースで利用します。

属性名 必須 説明 初期値
insert boolean - agent#insert()実行時にフィールドを無視するかどうか。trueの場合は無視する。 true
update boolean - agent#update()実行時にフィールドを無視するかどうか。trueの場合は無視する。 true

import jp.co.future.uroborosql.mapping.annotations.Table;
-import jp.co.future.uroborosql.mapping.annotations.Transient;
-
-@Table
-public class Employee {
-
-  // 途中略
-
-  @Transient
-  private String memo; // 常に無視
-
-  @Transient(insert = false, update = true)
-  private LocalDate creationDate; // insert時は対象、update時は無視
-
-  @Transient(insert = true, update = false)
-  private LocalDate updateDate;  // insert時は無視、update時は対象
-
-  // 以下略
-}
-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# @Version

このアノテーションが付与されたフィールドは楽観ロック用のバージョン情報を保持するフィールドになります。
-デフォルト(LockVersionOptimisticLockSupplier)ではUPDATE時にはSET句で+1され、WHERE句の検索条件に追加されてSQLを実行し更新件数が0の場合にはOptimisticLockExceptionをスローします。

WARNING

@Versionを付与するフィールドにマッピングされるDBカラムの型は数値型でなければなりません。

属性名 必須 説明 初期値
supplier0.17.0+ OptimisticLockSupplier - バージョン情報カラム LockVersionOptimisticLockSupplier

# サプライヤの種類

サプライヤ型 概要 説明
LockVersionOptimisticLockSupplier ロックバージョン UPDATEのSET句で+1がセットされます。
CyclicLockVersionOptimisticLockSupplier 循環式ロックバージョン UPDATEのSET句でバージョン情報カラム名 % 数値カラムの最大値 + 1がセットされます。
TimestampOptimisticLockSupplier タイムスタンプ UPDATEのSET句でタイムスタンプ(System.currentTimeMillis())がセットされます。
FieldIncrementOptimisticLockSupplier フィールド値インクリメント UPDATEのSET句で2WaySQLのバインド変数を利用して、バージョン情報カラム名+1がセットされます。

import jp.co.future.uroborosql.mapping.annotations.Table;
-import jp.co.future.uroborosql.mapping.annotations.Version;
-import jp.co.future.uroborosql.mapping.TimestampOptimisticLockSupplier;
-
-@Table
-public class Employee {
-  private long empNo;
-  private String firstName;
-  private String lastName;
-
-  // 途中略
-
-  @Version(supplier = TimestampOptimisticLockSupplier.class)
-  private long lockVersion = 0;
-
-  // 以下略
-}
-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

# @Id /@GeneratedValue /@SequenceGenerator 0.12.0+

これらのアノテーションが付与されたフィールドは自動採番フィールドになります。
@Id@GeneratedValueは必ずセットでフィールドに付与する必要があります。
@GeneratedValueのstrategy属性がGenerationType.SEQUENCEの場合に@SequenceGeneratorを付与してシーケンスの生成方法を指定する必要があります。

アノテーション 説明
@Id エンティティの主キーを識別するアノテーション
@GeneratedValue 主キーの値の生成戦略を指定するアノテーション
@SequenceGenerator SEQUENCEによるID生成を設定するアノテーション
アノテーション 属性名 必須 説明 初期値
@Id なし - - - -
@GeneratedValue strategy GenerationType - 主キー生成戦略の型。GenerationType.IDENTITY, GenerationType.SEQUENCEのいずれかを指定 GenerationType.IDENTITY
@SequenceGenerator sequence String シーケンス名 なし
@SequenceGenerator catalog String - シーケンスが所属するカタログ名 ""
@SequenceGenerator schema String - シーケンスが所属するスキーマ名 ""
import jp.co.future.uroborosql.mapping.annotations.Table;
-import jp.co.future.uroborosql.mapping.annotations.Id;
-import jp.co.future.uroborosql.mapping.annotations.GeneratedValue;
-import jp.co.future.uroborosql.mapping.annotations.SequenceGenerator;
-
-@Table
-public class Employee {
-  @Id
-  @GeneratedValue(strategy = GenerationType.SEQUENCE)
-  @SequenceGenerator(sequence = 'employee_emp_id_seq')
-  private long empNo;
-
-  private String firstName;
-
-  // 以下略
-}
-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
- - - diff --git a/docs/basics/index.html b/docs/basics/index.html deleted file mode 100644 index 213ca36..0000000 --- a/docs/basics/index.html +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - 事前準備 | uroboroSQL - - - - - - - - - - - - - -

# 事前準備

uroboroSQLを利用した基本的なDB操作を説明します。

# DB接続

まず最初にSQLを実行するDBへの接続を行います。
-DBに接続するためにはSqlConfigインタフェースのインスタンスを生成する必要があります。

SqlConfigインスタンスはUroboroSQLクラスのビルダーメソッドを使用して生成します。

// JDBC接続を行うSqlConfigの生成
-// SqlConfig config = UroboroSQL.builder(url, user, password).build();
-SqlConfig config = UroboroSQL.builder("jdbc:h2:mem:uroborosql", "sa", "").build();
-
-// DataSourceを使用したDB接続を行うSqlConfigの生成
-// SqlConfig config = UroboroSQL.builder(datasource).build();
-Context context = new InitialContext();
-DataSource dataSource = context.lookup("java:comp/env/jdbc/datasource");
-SqlConfig config = UroboroSQL.builder(dataSource).build();
-
-
1
2
3
4
5
6
7
8
9
10

UroboroSQLクラスを使ってSqlConfigインスタンスを生成する際、uroboroSQLの挙動を変更する各種の設定も合わせて行うことができます。
-設定の詳細については設定を参照してください。

WARNING

SqlConfigインスタンスはアプリケーション内で接続先毎に1つ保持するようにしてください。 -SQL実行の都度生成すると、不要なインスタンスの生成やSQLロード処理が実行されます。

# SqlAgentインスタンスの取得

次にすべての操作の基点となるSqlAgentインタフェースのインスタンスを取得します。

try (SqlAgent agent = config.agent()) {
-  // この中でSQLの操作を行う
-}
-
1
2
3

SQLの操作はすべてこのSqlAgentインスタンスを使って行うことになります。

TIP

SqlAgentインタフェースはjava.lang.AutoClosableインタフェースを実装しており、try-with-resourcesで記述することで終了時に自動的にclose処理が呼び出され、中で保持しているConnectionやPreparedStatementなどのリソースオブジェクトも正しくクローズされます。

# SQLファイルの配置

uroboroSQLではSQL文の書かれたファイルのパスを指定してSQLを実行することができます。
-その際、SQLファイルはクラスパスから参照できる場所に配置されている必要があります。

src
-    └─main
-        └─resources
-            └─sql
-                ├─department
-                │    ├─insert_department.sql
-                │    └─select_department.sql
-                └─employee
-                     ├─insert_employee.sql
-                     └─select_employee.sql
-
1
2
3
4
5
6
7
8
9
10

上のようなフォルダ構成の場合で、src/main/resources/をクラスパスに指定すれば、 -その下のsqlフォルダをルートフォルダとした相対パスでSQLファイルを指定することができます。

TIP

SQLファイルのルートフォルダ(初期値:sql)は変更することができます。
-変更方法の詳細は SQLファイルルートフォルダの設定 を参照してください。

# SQL名

SQLファイルの指定する際のファイルパスをSQL名といいます。
-上記フォルダ構成の場合、それぞれのSQLファイルは以下のようなSQL名となります。

SQLファイルパス(SQLルートフォルダから) SQL名
department/insert_department.sql department/insert_department
department/select_department.sql department/select_department
employee/insert_employee.sql employee/insert_employee
employee/select_employee.sql employee/select_employee

SQLファイルの配置は設定によりカスタマイズが可能です。SQLファイル配置のカスタマイズについては SQLファイルの解決ルール を参照してください。

# 共通API

検索(SqlQuery (opens new window))、更新(SqlUpdate (opens new window))、バッチ更新(SqlBatch (opens new window))、ストアドプロシージャ実行(Procedure (opens new window))を行うクラスは、バインドパラメータや置換文字列の設定を行うためのAPI(SqlFluent (opens new window))を実装しています。

バインドパラメータや置換文字列の設定はこのAPIを利用して設定を行ってください。
-流れるAPI(Fluent API)を採用しているため、値の設定は連続して行うことができるようになっています。

パラメータ設定例

Map<String, Object> department = agent.query("department/select_department")
-  .param("dept_no", 1)
-  .param("dept_name", "sales")
-  .first();
-
1
2
3
4
主なメソッド 説明
<V> SqlFluent#param(String key, V value) バインドパラメータや置換文字列として使用するキーと値のセットを設定する
<V> SqlFluent#param(String key, Supplier<V> supplier) supplierの評価結果をキーの値としてパラメータに設定する 0.10.1+
<V> SqlFluent#paramList(String key, V... value) IN句のバインドパラメータに使用するキーと値のセットを設定する。
0.14.0+ から非推奨。かわりにparam()Arrays.asList()もしくはList.of()を使ってList型に詰めて設定してください
SqlFluent#paramMap(Map<String, ?> paramMap) 引数のMapのKey/Valueのセットをパラメータに設定する
<V> SqlFluent#paramBean(V bean) 引数として渡されたbeanのフィールド名と値のセットをパラメータに設定する

他にもパラメータの型に応じたパラメータ設定メソッドが提供されています。

- - - diff --git a/docs/basics/sql-file-api.html b/docs/basics/sql-file-api.html deleted file mode 100644 index d1d40c2..0000000 --- a/docs/basics/sql-file-api.html +++ /dev/null @@ -1,359 +0,0 @@ - - - - - - SQLファイルインタフェース | uroboroSQL - - - - - - - - - - - - - -

# SQLファイルインタフェース

# SQLによる検索(SqlAgent#query /#queryWith)

SQLを検索する方法は2つあります。

利用メソッド 説明
SqlAgent#query("[SQL名]") SQL名で説明したSQL名を指定
SqlAgent#queryWith("[SQL文字列]") SQL文字列を直接指定

上記2つのメソッドは検索を行うためのSqlQueryインタフェースのインスタンスを返却します。

// SQL名を指定
-SqlQuery query1 = agent.query("employee/select_employee");
-
-// SQL文字列を指定
-SqlQuery query2 = agent.queryWith("select first_name, last_name where employee");
-
1
2
3
4
5

# 検索結果の取得

SqlAgentから取得したSQLQueryを使用していろいろな形式で検索結果を取得することが出来ます。
-下記のSQLを例に説明します。

-- department/select_department.sql
-select /* _SQL_ID_ */
-  dept.dept_no  as  dept_no
-,  dept.dept_name  as  dept_name
-from
-  department  dept
-where
-  1        =  1
-/*IF SF.isNotEmpty(dept_no)*/
-and  dept.dept_no  =  /*dept_no*/1
-/*END*/
-/*IF SF.isNotEmpty(dept_name)*/
-and  dept.dept_name  =  /*dept_name*/'sample'
-/*END*/
-
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# リスト取得(SqlQuery#collect)

メソッド名 戻り値の型
SqlQuery#collect() List<Map<String, Object>>
SqlQuery#collect(CaseFormat) List<Map<String, Object>>
SqlQuery#collect(Class<T>) List<Class<T>>

検索結果をMapやエンティティクラスのListとして取得します。
-Mapにはキー:カラムラベル名値:カラムの値の形で1行分のデータが格納されます。

WARNING

SqlQuery#collect()では検索結果をすべてメモリ上に格納します。大量データの検索を行う場合は後述のSqlQuery#strem()の利用を検討してください。

引数なし

try (SqlAgent agent = config.agent()) {
-  List<Map<String, Object>> departments =
-    agent.query("department/select_department").collect();
-}
-// 結果(departments)
-[
- {"DEPT_NO"=1, "DEPT_NAME"="sales"},
- {"DEPT_NO"=2, "DEPT_NAME"="export"},
- {"DEPT_NO"=3, "DEPT_NAME"="accounting"},
- {"DEPT_NO"=4, "DEPT_NAME"="personnel"}
-]
-
1
2
3
4
5
6
7
8
9
10
11

引数にjp.co.future.uroborosql.utils.CaseFormatを指定することで、Mapのキー名に対する書式を変更することができます。

CaseFormat.CAMEL_CASE指定

try (SqlAgent agent = config.agent()) {
-  List<Map<String, Object>> departments =
-    agent.query("department/select_department").collect(CaseFormat.CAMEL_CASE);
-}
-// 結果(departments) のキーが"deptNo", "deptName"となる
-[
- {"deptNo"=1, "deptName"="sales"},
- {"deptNo"=2, "deptName"="export"},
- {"deptNo"=3, "deptName"="accounting"},
- {"deptNo"=4, "deptName"="personnel"}
-]
-
1
2
3
4
5
6
7
8
9
10
11

CaseFormatの指定がない場合はデフォルトのCaseFormat(初期設定ではUPPER_SNAKE_CASE)で加工した値になります。
-デフォルトのCaseFormatはSqlConfig生成時に変更することができます。 -デフォルトCaseFormatの設定の詳細は CaseFormatの初期値設定 を参照してください

引数にエンティティクラスを指定すると、検索結果をMapの代わりにエンティティクラスのインスタンスのListで取得することができます。

エンティティクラス

/**
- * Entity that can be mapped to department table
- */
-public class Department {
-  private long deptNo;
-  private String deptName;
-
-  public long getDeptNo() { return this.deptNo; }
-  public void setDeptNo(long deptNo) { this.deptNo = deptNo; }
-  public String getDeptName() { return this.deptName; }
-  public void setDeptName(String deptName) { this.deptName = deptName; }
-}
-
1
2
3
4
5
6
7
8
9
10
11
12
try (SqlAgent agent = config.agent()) {
-  List<Department> departments =
-    agent.query("department/select_department").collect(Department.class);
-}
-
1
2
3
4

# 先頭取得(SqlQuery#first)

メソッド名 戻り値の型
SqlQuery#first() Map<String, Object>
SqlQuery#first(CaseFormat) Map<String, Object>
SqlQuery#first(Class<T>) T

検索結果の1件目を取得します。
-結果を取得できない(検索結果が0件)場合、jp.co.future.uroborosql.exception.DataNotFoundExceptionをスローします。

TIP

メモリ上には最大1件分のデータしか格納しないため、検索結果が大量になる場合でもメモリ使用量を気にせず呼び出すことができます。

引数なし

try (SqlAgent agent = config.agent()) {
-  Map<String, Object> department =
-    agent.query("department/select_department").first();
-} catch (DataNotFoundException ex) {
-  ex.printStackTrace();
-}
-
-// 結果(department)
- {"DEPT_NO"=1, "DEPT_NAME"="sales"}
-
1
2
3
4
5
6
7
8
9

引数にjp.co.future.uroborosql.utils.CaseFormatを指定することで、Mapのキー名に対する書式を変更することができます。

CaseFormat.CAMEL_CASE指定

try (SqlAgent agent = config.agent()) {
-  Map<String, Object> department =
-    agent.query("department/select_department").first(CaseFormat.CAMEL_CASE);
-} catch (DataNotFoundException ex) {
-  ex.printStackTrace();
-}
-// 結果(department)
- {"deptNo"=1, "deptName"="sales"}
-
1
2
3
4
5
6
7
8

引数にエンティティクラスを指定すると、検索結果をエンティティクラスのインスタンスの形で取得することができます。

エンティティクラス

try (SqlAgent agent = config.agent()) {
-  Department department =
-    agent.query("department/select_department").first(Department.class);
-} catch (DataNotFoundException ex) {
-  ex.printStackTrace();
-}
-
1
2
3
4
5
6

# 先頭取得(SqlQuery#findFirst)

メソッド名 戻り値の型
SqlQuery#findFirst() Optional<Map<String, Object>>
SqlQuery#findFirst(CaseFormat) Optional<Map<String, Object>>
SqlQuery#findFirst(Class<T>) Optional<T>

検索結果の1件目をOptionalの形式で取得します。
-メモリ上には最大1件分のデータしか格納しないため、検索結果が大量になる場合でもメモリ使用量を気にせず呼び出すことができます。

引数なし

try (SqlAgent agent = config.agent()) {
-  Optional<Map<String, Object>> department =
-    agent.query("department/select_department").findFirst();
-}
-// 結果(department)
- {"DEPT_NO"=1, "DEPT_NAME"="sales"}
-
1
2
3
4
5
6

引数にjp.co.future.uroborosql.utils.CaseFormatを指定することで、Mapのキー名に対する書式を変更することができます。

CaseFormat.CAMEL_CASE指定

try (SqlAgent agent = config.agent()) {
-  Optional<Map<String, Object>> department =
-    agent.query("department/select_department").findFirst(CaseFormat.CAMEL_CASE);
-}
-// 結果(department)
- {"deptNo"=1, "deptName"="sales"}
-
1
2
3
4
5
6

引数にエンティティクラスを指定すると、検索結果をエンティティクラスのインスタンスの形で取得することができます。

エンティティクラス

try (SqlAgent agent = config.agent()) {
-  Department department =
-    agent.query("department/select_department").findFirst(Department.class).orElse(null);
-}
-
1
2
3
4

# 先頭1件取得(SqlQuery#one)

メソッド名 戻り値の型
SqlQuery#one() Map<String, Object>
SqlQuery#one(CaseFormat) Map<String, Object>
SqlQuery#one(Class<T>) T

検索結果の1件目を取得します。find()と違い、実行するSQLで複数件の検索結果を返す場合は例外をスローします。
-結果を取得できない(検索結果が0件)場合、jp.co.future.uroborosql.exception.DataNotFoundExceptionをスローします。
-検索結果が2件以上存在する場合、jp.co.future.uroborosql.exception.DataNotUniqueExceptionをスローします。

TIP

メモリ上には最大1件分のデータしか格納しないため、検索結果が大量になる場合でもメモリ使用量を気にせず呼び出すことができます。

引数なし

try (SqlAgent agent = config.agent()) {
-  Map<String, Object> department =
-    agent.query("department/select_department").one();
-} catch (DataNotFoundException | DataNotUniqueException ex) {
-  ex.printStackTrace();
-}
-
-// 結果(department)
- {"DEPT_NO"=1, "DEPT_NAME"="sales"}
-
1
2
3
4
5
6
7
8
9

引数にjp.co.future.uroborosql.utils.CaseFormatを指定することで、Mapのキー名に対する書式を変更することができます。

CaseFormat.CAMEL_CASE指定

try (SqlAgent agent = config.agent()) {
-  Map<String, Object> department =
-    agent.query("department/select_department").one(CaseFormat.CAMEL_CASE);
-} catch (DataNotFoundException | DataNotUniqueException ex) {
-  ex.printStackTrace();
-}
-// 結果(department)
- {"deptNo"=1, "deptName"="sales"}
-
1
2
3
4
5
6
7
8

引数にエンティティクラスを指定すると、検索結果をエンティティクラスのインスタンスの形で取得することができます。

エンティティクラス

try (SqlAgent agent = config.agent()) {
-  Department department =
-    agent.query("department/select_department").one(Department.class);
-} catch (DataNotFoundException | DataNotUniqueException ex) {
-  ex.printStackTrace();
-}
-
1
2
3
4
5
6

# 先頭1件取得(SqlQuery#findOne)

メソッド名 戻り値の型
SqlQuery#findOne() Optional<Map<String, Object>>
SqlQuery#findOne(CaseFormat) Optional<Map<String, Object>>
SqlQuery#findOne(Class<T>) Optional<T>

検索結果の1件目をOptionalの形式で取得します。
-検索結果が2件以上存在する場合、jp.co.future.uroborosql.exception.DataNotUniqueExceptionをスローします。
-メモリ上には最大1件分のデータしか格納しないため、検索結果が大量になる場合でもメモリ使用量を気にせず呼び出すことができます。

引数なし

try (SqlAgent agent = config.agent()) {
-  Optional<Map<String, Object>> department =
-    agent.query("department/select_department").findOne();
-} catch (DataNotUniqueException ex) {
-  ex.printStackTrace();
-}
-// 結果(department)
- {"DEPT_NO"=1, "DEPT_NAME"="sales"}
-
1
2
3
4
5
6
7
8

引数にjp.co.future.uroborosql.utils.CaseFormatを指定することで、Mapのキー名に対する書式を変更することができます。

CaseFormat.CAMEL_CASE指定

try (SqlAgent agent = config.agent()) {
-  Optional<Map<String, Object>> department =
-    agent.query("department/select_department").findOne(CaseFormat.CAMEL_CASE);
-} catch (DataNotUniqueException ex) {
-  ex.printStackTrace();
-}
-// 結果(department)
- {"deptNo"=1, "deptName"="sales"}
-
1
2
3
4
5
6
7
8

引数にエンティティクラスを指定すると、検索結果をエンティティクラスのインスタンスの形で取得することができます。

エンティティクラス

try (SqlAgent agent = config.agent()) {
-  Department department =
-    agent.query("department/select_department").findOne(Department.class).orElse(null);
-} catch (DataNotUniqueException ex) {
-  ex.printStackTrace();
-}
-
1
2
3
4
5
6

# Stream取得(SqlQuery#stream)

メソッド名 戻り値の型
SqlQuery#stream() Stream<Map<String, Object>>
SqlQuery#stream(CaseFormat) Stream<Map<String, Object>>
SqlQuery#stream(Class<T>) Stream<T>
SqlQuery#stream(ResultSetConverter<T>) Stream<T>

検索結果をjava.util.stream.Streamの形式で取得します。
-Streamによる順次読み込みと終端操作までの遅延処理により、メモリ効率の良い操作が可能になります。

引数なし

try (SqlAgent agent = config.agent()) {
-  agent.query("department/select_department").stream()
-    .forEach(System.out::println);
-}
-// 結果
-{"DEPT_NO"=1, "DEPT_NAME"="sales"}
-{"DEPT_NO"=2, "DEPT_NAME"="export"}
-{"DEPT_NO"=3, "DEPT_NAME"="accounting"}
-{"DEPT_NO"=4, "DEPT_NAME"="personnel"}
-
1
2
3
4
5
6
7
8
9

引数にjp.co.future.uroborosql.utils.CaseFormatを指定することで、Mapのキー名に対する書式を変更することができます。

CaseFormat.PASCAL_CASE指定

try (SqlAgent agent = config.agent()) {
-  agent.query("department/select_department").stream(CaseFormat.PASCAL_CASE)
-    .forEach(System.out::println);
-}
-// 結果
-{"DeptNo"=1, "DeptName"="sales"}
-{"DeptNo"=2, "DeptName"="export"}
-{"DeptNo"=3, "DeptName"="accounting"}
-{"DeptNo"=4, "DeptName"="personnel"}
-
1
2
3
4
5
6
7
8
9

引数にエンティティクラスを指定すると、検索結果をエンティティクラスのインスタンスの形で取得することができます。

エンティティクラス

try (SqlAgent agent = config.agent()) {
-  agent.query("department/select_department").stream(Department.class)
-    .forEach(System.out::println);
-}
-
1
2
3
4

jp.co.future.uroborosql.converter.ResultSetConverterインタフェースを実装したクラスを引数に渡すことで、検索結果により複雑な加工を行うことができます。
ResultSetConverterFunctionInterfaceとして提供されているので、lambda式による記述も可能です。

ResultSetConverter指定(lambda式)

try (SqlAgent agent = config.agent()) {
-  // ResultSetConverterはlambda式で指定可能
-  agent.query("department/select_department").stream(rs -> {
-    Map<String, Object> row = new HashMap<>();
-    row.put("deptNo", rs.getObject("DEPT_NO"));
-    row.put("deptName", rs.getObject("DEPT_NAME"));
-    return row;
-  }).forEach(System.out::println);
-}
-// 結果
-{"deptNo"=1, "deptName"="sales"}
-{"deptNo"=2, "deptName"="export"}
-{"deptNo"=3, "deptName"="accounting"}
-{"deptNo"=4, "deptName"="personnel"}
-
1
2
3
4
5
6
7
8
9
10
11
12
13
14

注意

戻り値として取得されるStreamインスタンスは内部にResultSetリソースを保持しています。このResultSetはデータを最後まで読み込むかStream#close()が呼ばれたタイミングでリソースのクローズを行います。(Stream生成時、Stream#onClose()にResultSetリソースのcloseHandlerを登録します)
-そのため、取得したStreamで全データを扱う終端処理(collectなど)を行うか、try-with-resourcesの利用やStream#close()の明示的な呼び出しによるStreamのクローズを行わないとResultSetリソースがクローズされずカーソルのリークが発生します。

注意

取得したStreamのクローズより先にSqlAgentインスタンスがクローズ、または破棄された場合、Streamの内部に保持しているResultSetリソースもクローズされてしまい不正な動作となります。StreamインスタンスとそのStreamを生成したSqlAgentインスタンスの生存期間を合わせる、もしくはSqlAgentインスタンスの生存期間を長くしてください。

Streamのクローズ

try (SqlAgent agent = config.agent()) {
-  try (Stream<Map<String, Object>> stream = agent.query("department/select_department").stream()) {
-    // Stream#findFirst() はStream内のResultSetリソースをクローズしないので、try-with-resourcesでStreamをクローズする
-    stream.findFirst().ifPresent(System.out::println);
-  }
-}
-
1
2
3
4
5
6

# ResultSet取得(SqlQuery#resultSet)

メソッド名 戻り値の型
SqlQuery#resultSet() ResulitSet

検索結果をjava.sql.ResultSetの形式で取得します。

注意

ResultSetリソースのクローズは各自で行う必要があります。

注意

ResultSetリソースのクローズより先にSqlAgentインスタンスがクローズ、または破棄された場合、ResultSetリソースもクローズされてしまい不正な動作となります。ResultSetリソースとそのResultSetを生成したSqlAgentインスタンスの生存期間を合わせる、もしくはSqlAgentインスタンスの生存期間を長くしてください。

このAPIは他のフレームワークとの連携など、ResultSetリソースの取得が必要なケースを想定して提供しています。

WARNING

ResultSetリソースの取得が必要でなければ、ResultSetリソースのクローズが管理されている他のAPIの利用を検討してください。

try (SqlAgent agent = config.agent()) {
-  try (ResultSet rs = agent.query("department/select_department").resultSet()) {
-    // try-with-resourcesでResultSetをクローズする
-    while (rs.next()) {
-      // ResultSetからの値取得
-      ・・・
-    }
-  }
-}
-
1
2
3
4
5
6
7
8
9

# SQLによる更新(SqlAgent#update /#updateWith)

DB更新処理(登録/変更/削除)やDDLの実行も検索処理と同様SQL名を指定する場合とSQL文字列を指定する2つのAPIが提供されています。

利用メソッド 説明
SqlAgent#update("[SQL名]") SQL名で説明したSQL名を指定
SqlAgent#updateWith("[SQL文字列]") SQL文字列を直接指定

上記2つのメソッドは更新を行うためのSqlUpdateインタフェースのインスタンスを返却します。

// 1件挿入(SQL名指定)
-int count = agent.update("department/insert_department")
-  .param("dept_no", 1)
-  .param("dept_name", "Sales")
-  .count();
-
-// 更新(SQL文字列指定)
-int count = agent.updateWith("update employee set first_name = /*first_name*/ where emp_no = /*emp_no*/")
-  .param("emp_no", 1)
-  .param("first_name", "Bob")
-  .count();
-
1
2
3
4
5
6
7
8
9
10
11

department/insert_department.sql

insert /* _SQL_ID_ */
-into
-  department
-(
-  dept_name
-, lock_version
-) values (
-  /*dept_name*/'sample'
-,  0
-)
-
1
2
3
4
5
6
7
8
9
10

SqlUpdateインタフェースの主なAPIは以下になります。

# 更新の実行(SqlUpdate#count)

メソッド名 戻り値の型
SqlUpdate#count() int

更新処理を行い、登録、更新、削除を行った行数を返します。

try (SqlAgent agent = config.agent()) {
-  // insert
-  agent.update("department/insert_department")
-    .param("dept_no", 1)
-    .param("dept_name", "sales")
-    .count();
-  // update
-  agent.update("department/update_department")
-    .param("dept_no", 1)
-    .param("dept_name", "HR")
-    .count();
-  // delete
-  agent.update("department/delete_department")
-    .param("dept_no", 1)
-    .count();
-}
-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# SQLによるバッチ更新(SqlBatch#batch /#batchWith)

大量のデータを一括で更新する場合、通常の更新ではSQLが都度実行されるため処理速度が遅く問題になる場合があります。
-こういったケースに対応するため、uroboroSQLではバッチ更新用のAPIを提供しています。

バッチ更新処理も他と同様SQL名を指定する場合とSQL文字列を直接記述する2つのAPIが提供されています。

利用メソッド 説明
SqlAgent#batch("[SQL名]") SQL名で説明したSQL名を指定
SqlAgent#batchWith("[SQL文字列]") SQL文字列を直接指定

上記2つのメソッドはバッチ更新を行うためのSqlBatchインタフェースのインスタンスを返却します。

SqlBatchインタフェースでは、SqlFluentインタフェースによるバインドパラメータの設定とは別にjava.util.stream.Streamを用いたバッチパラメータの設定を行うAPIが提供されています。

メソッド 説明
SqlBatch#paramStream(Stream<Map<String, Object>>) バインドパラメータや置換文字列として使用するキーと値のセットをjava.util.stream.Streamで設定する。0.5.0+
SqlBatch#paramStream(Stream<E>) バインドパラメータや置換文字列として使用するエンティティクラスインスタンスをjava.util.stream.Streamで設定する。0.10.0+

# バッチ更新の実行(SqlBatch#count)

メソッド名 戻り値の型
SqlBatch#count() int

バッチ更新処理を行い、登録、更新、削除を行った行数を返します。

バッチ更新

// バッチ処理の実行
-int count = agent.batch("department/insert_department")
-  // 指定したファイルからMap<String, Object>のStreamを生成し、バッチ処理のパラメータとして指定する
-  .paramStream(getDataByFile(Paths.get("data/department.tsv")))
-  .count();
-
-・・・
-
-private Stream<Map<String, Object>> getDataByFile(final Path filePath) {
-  try {
-    final List<String> lines = Files.readAllLines(filePath);
-    final String[] header = lines.get(0).split("\\t");
-    return lines.stream()
-        .skip(1)
-        .map(s -> s.split("\\t"))
-        .map(data -> IntStream.range(0, header.length)
-            .<Map<String, Object>> collect(HashMap::new, (row, i) -> row.put(header[i], data[i]),
-                Map::putAll));
-  } catch (IOException e) {
-    e.printStackTrace();
-    throw new UncheckedIOException(e);
-  }
-}
-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

data/department.tsv の内容

dept_no  dept_name
-1  sales
-2  export
-3  accounting
-4  personnel
-
1
2
3
4
5

paramStream()メソッドにSqlQuery#stream()の結果を指定することで疑似的にSELECT-INSERT / SELECT-UPDATE / SELECT-DELETEを行うことができます。
-Stream APIを利用することで検索結果の件数が多い場合でも、少ないメモリ使用量でバッチ処理を行うことができます。

SELECT-UPDATE

int updateCount = agent.batch("department/update_department")
-  .paramStream(agent.query("department/select_department")
-    .stream(CaseFormat.LOWER_SNAKE_CASE).map(e -> {
-      Map<String, Object> ans = new HashMap<>(e);
-      ans.replaceAll((k, v) -> v != null ? v.toString() + "_after" : "after"); // 取得した検索結果の各行の値に "_after" を付与する
-      return ans;
-    }))
-  .count();
-
-
1
2
3
4
5
6
7
8
9

# バッチSQL実行動作のカスタマイズ

SqlBatchインタフェースにはバッチSQL実行時の動作を変更するためのAPIが提供されています。

メソッド 説明 デフォルト値
by(BiPredicate<SqlContext, Map<String, Object>>) バッチSQLの実行条件を指定します。BiPredicateの結果がtrueの場合にバッチSQLを実行します。 1000件毎
batchWhen(BiConsumer<SqlAgent, SqlContext>) バッチSQLの実行タイミングで行う操作を指定します。 何もしない
errorWhen(TriConsumer<SqlAgent, SqlContext, Exception>) バッチSQLの実行時に例外が発生した時の動作を指定します。 UroborosqlRuntimeExceptionをスローする

これらのAPIを利用することでより柔軟なSQL実行が可能になります。

バッチSQL実行時動作のカスタマイズ例

List<Map<String, Object>> inputData = new ArrayList<>();
-// 中略 入力データ作成
-
-try (SqlAgent agent = config.agent()) {
-  agent.batch("department/insert_department")
-    .paramStream(inputData.stream())
-    .by((ctx, row) -> ctx.batchCount() == 10)  // 10件毎にSQL実行
-    .batchWhen((agent, ctx) -> agent.commit())  // SQL実行が成功したらコミットする
-    .errorWhen((agent, ctx, ex) -> {
-      log.error("error occured. ex:{}", ex.getMessage());
-    })  // 例外が発生したらログ出力する
-    .count();
-}
-
1
2
3
4
5
6
7
8
9
10
11
12
13

# ストアドプロシージャの実行(SqlAgent#proc /#procWith)

uroboroSQLでは、SQLの検索/更新のほかDBが提供するストアドプロシージャの呼び出し用APIも提供しています。

利用メソッド 説明
SqlAgent#proc("[SQL名]") SQL名で説明したSQL名を指定
SqlAgent#procWith("[SQL文字列]") SQL文字列を直接指定

上記2つのメソッドはストアドプロシージャの呼出を行うためのProcedureインタフェースのインスタンスを返却します。

# Procedureインタフェース

メソッド名 戻り値の型
Procedure#call() Map<String, Object>

Procedureインタフェースでは、ストアドプロシージャからの戻り値を取得するためのAPIが提供されています。

メソッド 説明
ProcedureFluent#outParam(String, int) ストアドプロシージャからの戻り値として受け取るパラメータを指定します
実行したストアドプロシージャ内で指定したキーに設定された値が、戻り値のMap<String, Object>に格納されて取得できます。第2引数で受け取る値の型をint型で指定します
ProcedureFluent#outParam(String, SQLType) ストアドプロシージャからの戻り値として受け取るパラメータを指定します
実行したストアドプロシージャ内で指定したキーに設定された値が、戻り値のMap<String, Object>に格納されて取得できます。第2引数で受け取る値の型をSQLType型で指定します
ProcedureFluent#inOutParam(String, int) ストアドプロシージャに渡し、かつ、戻り値として受け取るパラメータを指定します
実行したストアドプロシージャ内で指定したキーに設定された値が、戻り値のMap<String, Object>に格納されて取得できます。第2引数で受け取る値の型をint型で指定します
ProcedureFluent#inOutParam(String, SQLType) ストアドプロシージャに渡し、かつ、戻り値として受け取るパラメータを指定します
実行したストアドプロシージャ内で指定したキーに設定された値が、戻り値のMap<String, Object>に格納されて取得できます。第2引数で受け取る値の型をSQLType型で指定します
ProcedureFluent#inOutParamIfAbsent(String, int) ストアドプロシージャに渡し、かつ、戻り値として受け取るパラメータを指定します
指定したパラメータ名のパラメータが事前に登録されていない場合に値を追加します
実行したストアドプロシージャ内で指定したキーに設定された値が、戻り値のMap<String, Object>に格納されて取得できます。第2引数で受け取る値の型をint型で指定します
ProcedureFluent#inOutParamIfAbsent(String, SQLType) ストアドプロシージャに渡し、かつ、戻り値として受け取るパラメータを指定します
指定したパラメータ名のパラメータが事前に登録されていない場合に値を追加します
実行したストアドプロシージャ内で指定したキーに設定された値が、戻り値のMap<String, Object>に格納されて取得できます。第2引数で受け取る値の型をSQLType型で指定します
// Procedureインタフェースのインスタンスを取得
-Map<String, Object> result = agent.procWith("{call product_id_exist_check(/*product_id*/, /*check_out*/)}")
-  .param("product_id", 0)
-  .outParam("check_out", java.sql.JDBCType.NUMERIC)
-  .call();
-// outParamメソッドで指定したパラメータの値(戻り値)を取得
-BigDecimal checkOut = (BigDecimal)result.get("check_out");
-
1
2
3
4
5
6
7
- - - diff --git a/docs/basics/transaction.html b/docs/basics/transaction.html deleted file mode 100644 index 1675274..0000000 --- a/docs/basics/transaction.html +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - トランザクション | uroboroSQL - - - - - - - - - - - - - -

# トランザクション

uroboroSQLではローカルトランザクションを提供します。
-トランザクションを利用することで、エラー発生時でも一部のデータだけ登録を成功させるといった細かな制御ができるようになります。

# トランザクションの開始と終了 ( SqlAgent#required /#requiredNew /#notSupported )

uroboroSQLで提供するトランザクションのレベルは以下の3つです

トランザクションタイプ トランザクション有り トランザクションなし
required トランザクション内で処理を実行 新たなトランザクションを開始して処理を実行
requiresNew 既存のトランザクションを停止し、新たなトランザクションを開始して処理を実行。
トランザクションが終了すると停止していたトランザクションを再開させる
新たなトランザクションを開始して処理を実行
notSupported 既存のトランザクションを停止し、トランザクション外で処理を実行。
処理が終了すると停止していたトランザクションを再開させる
トランザクション外で処理を実行

SqlAgentインタフェースにトランザクションタイプに応じたメソッドが提供されており、そのメソッドを呼び出すことでトランザクションの開始と終了を制御します。

agent.required(() -> {
-  // トランザクション開始
-  agent.updateWith("insert into employee (emp_no) values (/*emp_no*/1001)")
-    .param("emp_no", 1)
-    .count();
-
-  agent.requiresNew(() -> {
-    // 新しい トランザクション開始
-    agent.updateWith("insert into department (dept_no, dept_name) values (/*dept_no*/1111, /*dept_name*/'Sales')")
-      .param("dept_no", 2)
-      .param("dept_name", "export")
-      .count();
-    // 新しい トランザクション終了 commit
-  });
-  // トランザクション終了 commit
-});
-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

TIP

設定によりDB更新処理の実行をトランザクション内で行うことを強制することができます。詳しくは -DB更新処理をトランザクション内のみに強制を参照してください。

# コミットとロールバック ( SqlAgent#commit /#setRollbackOnly )

トランザクションのlambda式が正常に終了すればトランザクションはコミットされます。
-トランザクションのlambda式が例外をスローした場合はトランザクションをロールバックします。
-明示的にコミットを行う場合はSqlAgent#commit()を呼び出します。
-例外をスローせずに明示的にロールバックを行う場合はSqlAgent#setRollbackOnly()を呼び出します。

agent.required(() -> {
-  // トランザクション開始
-  agent.updateWith("insert into employee (emp_no) values (/*emp_no*/1001)")
-    .param("emp_no", 1)
-    .count();
-
-  // 新しい トランザクション開始
-  agent.requiresNew(() -> {
-    agent.updateWith("insert into department (dept_no, dept_name) values (/*dept_no*/1, /*dept_name*/'')")
-      .param("dept_no", 2)
-      .param("dept_name", "Production")
-      .count();
-    // 明示的なcommit
-    agent.commit();
-
-    agent.updateWith("insert into department (dept_no, dept_name) values (/*dept_no*/1, /*dept_name*/'')")
-      .param("dept_no", 3)
-      .param("dept_name", "export")
-      .count();
-    // 明示的なrollback
-    agent.setRollbackOnly();
-    // 新しい トランザクション終了
-  });
-  // トランザクション終了 commit
-});
-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

# セーブポイント ( SqlAgent#setSavepoint /#rollback /#releaseSavepoint)

トランザクション内にセーブポイントを設けることで、トランザクション内の特定の操作のみ取り消すといった細かな制御ができます。

agent.required(() -> {
-  // トランザクション開始
-  agent.update("employee/insert_employee")
-    .param("emp_no", 1001)
-    .count();
-
-  // セーブポイント(名前:sp)の設定
-  agent.setSavepoint("sp");
-  agent.update("employee/insert_employee")
-    .param("emp_no", 1002)
-    .count();
-
-  assertThat(agent.query("employee/select_employee").collect().size(), 2);
-
-  // 最後のinsertを取消(セーブポイント(名前:sp)までロールバック)
-  agent.rollback("sp");
-
-  assertThat(agent.query("employee/select_employee").collect().size(), 1);
-});
-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# セーブポイントスコープ(SqlAgent#savepointScope) 0.18.0+

SqlAgent#savepointScope() を使用して、より確実にsavepointの制御を行うことができます。

// SqlAgent#savepoint()を使ったsavepointの実装
-agent.required(() -> {
-  // トランザクション開始
-  agent.update("employee/insert_employee")
-    .param("emp_no", 1001)
-    .count();
-
-  // セーブポイントスコープの開始
-  agent.savepointScope(() -> {
-    agent.update("employee/insert_employee")
-      .param("emp_no", 1002)
-      .count();
-
-    assertThat(agent.query("employee/select_employee").collect().size(), 2);
-    // savepointScope内の処理を取り消す場合は例外をスローする
-    throw new UroborosqlRuntimeException();
-  })
-  assertThat(agent.query("employee/select_employee").collect().size(), 1);
-});
-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

TIP

PostgreSQLについては、自動的にセーブポイントを利用したトランザクションの部分ロールバックに対応しています。 -詳細は、PostgreSQLのトランザクション内SQLエラー対応を参照してください。

# エラーハンドリング ( UroborosqlSQLException )

uroboroSQLからSQLを実行した際にSQLExceptionがスローされると、 -そのSQLExceptionを内部に保持するUroborosqlSQLExceptionが呼び出し元に返却されます。
UroborosqlSQLExceptionjava.lang.RuntimeExceptionを継承しているため明示的なキャッチは不要です。

呼出元のアプリケーションで明示的にエラーハンドリングを行う場合は、try-catchでUroborosqlSQLExceptionをキャッチすることで、 -例外発生時の挙動を制御することができます。

エラーハンドリングの例

SqlConfig config = UroboroSQL.builder(...).build();
-
-try (SqlAgent agent = config.agent()) {
-  // INSERT文の実行
-  // insert into product (product_id) values (/*product_id*/0);
-  agent.update("example/insert_product")
-    .param("product_id", 1)
-    .count();
-} catch (UroborosqlSQLException ex) {
-  // SQLExceptionが発生した際に行う処理を実装
-  throw new Exception("exception occured. ex=" + ex.getCause().getMessage(), ex);
-}
-
1
2
3
4
5
6
7
8
9
10
11
12
- - - diff --git a/docs/configuration/connection-supplier.html b/docs/configuration/connection-supplier.html deleted file mode 100644 index cc9f346..0000000 --- a/docs/configuration/connection-supplier.html +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - ConnectionSupplier | uroboroSQL - - - - - - - - - - - - - -

# ConnectionSupplier

DB接続を行う際のコネクションを提供するクラスです。 -標準で以下のクラスが提供されているので用途に応じて使い分けてください。

クラス名 説明
DefaultConnectionSupplierImpl コンストラクタで受け取ったコネクションを返すだけのコネクション供給クラス
JdbcConnectionSupplierImpl JDBCドライバーマネージャを使用したコネクション提供クラス
DataSourceConnectionSupplierImpl データソースを使用したコネクション提供クラス

また、ConnectionSupplier (opens new window)インタフェースを実装した独自のJDBCコネクション提供クラスを利用することもできます。

# ConnectionContext 0.19.0+

動的にSqlAgentの接続先を切り替える場合は、SqlConfig#agent(ConnectionContext)メソッドを使用します。

ConnectionContextは、ConnectionContextBuilderの下記メソッドを利用して、インスタンスを生成します。

戻り値 メソッド名 説明
DataSourceConnectionContext dataSource() DataSourceConnectionContext を生成する.
DataSourceConnectionContext dataSource(String dataSourceName) DataSourceConnectionContext を生成する.
JdbcConnectionContext jdbc(String url) JdbcConnectionContext を生成する.
JdbcConnectionContext jdbc(String url, String user, String password) JdbcConnectionContext を生成する.
JdbcConnectionContext jdbc(String url, String user, String password, String schema) JdbcConnectionContext を生成する.

# 実装例

SqlConfig config = UroboroSQL
-    .builder()
-    .setConnectionSupplier(new JdbcConnectionSupplier("jdbc:h2:mem:mainConnection", "sa", "sa"))
-    .build();
-
-try (SqlAgent agent = config.agent()) {
-  // using jdbc:h2:mem:mainConnection
-  agent.required(() -> {
-    ....
-  });
-}
-
-//-------------------------------------------------------
-
-try (SqlAgent agent = config.agent(ConnectionContextBuilder
-				.jdbc("jdbc:h2:mem:subConnection", "sa", "sa"))) {
-  // usingjdbc:h2:mem:subConnection
-  agent.required(() -> {
-    ....
-  });
-}
-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
- - - diff --git a/docs/configuration/dialect.html b/docs/configuration/dialect.html deleted file mode 100644 index 3a89c36..0000000 --- a/docs/configuration/dialect.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - Dialect | uroboroSQL - - - - - - - - - - - - - -

# Dialect

複数のDBを対象とするアプリケーションを作成する場合、DB毎のSQL文法の差異を吸収するため -アプリケーションで対象DBを判定し実行するSQLファイルを切り替える、といった対応が必要になります。 -uroboroSQLでは、こういったDB毎のSQL文法の差異に対応するため、Dialectという仕組みを提供しています。
Dialectは接続したDBから取得できる情報を元に自動で判別される為、通常は変更する必要はありません。

現在、標準で以下のDBに対するDialectが提供されています。

DB名 Dialect
H2 DB H2Dialect (opens new window)
Microsoft SQL Server MsSqlDialect (opens new window)
MySQL MySqlDialect (opens new window)
Oracle10g以下 Oracle10Dialect (opens new window)
Oracle11g Oracle11Dialect (opens new window)
Oracle12c以上 Oracle12Dialect (opens new window)
Postgresql PostgresqlDialect (opens new window)
その他 DefaultDialect (opens new window)

WARNING

該当するDBが見つからない場合はDefaultDialectが適用されます

# カスタムDialectの登録

標準でサポートしている上記のDB以外に接続し、DefaultDialectと違う動作をさせたい場合は、対象のDBに対するDialectクラスを作成してuroboroSQLに登録する必要があります。

Dialectの登録には、Javaの java.util.ServiceLoader (opens new window)を利用します。

最初に対象のDB(ここではSQLiteとする)に対するDialectクラスを作成します。

package foo.bar.dialect;
-
-public class SqliteDialect extends AbstractDialect {
-  /**
-   * コンストラクタ
-   */
-  public SqliteDialect() {
-    super();
-  }
-
-  @Override
-  public String getDatabaseName() {
-    return "SQLite";  // 対象DBの製品名を特定するための文字列を返す
-  }
-
-  // supportsXXXメソッド、isXXXメソッド、getXXXメソッドを必要に応じて実装
-}
-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

Dialectインタフェースで提供すべきメソッドは以下になります。

メソッド名 戻り値 説明
supportsBulkInsert() boolean BULK INSERTをサポートするかどうか
supportsLimitClause() boolean LIMIT句をサポートするかどうか
supportsOptimizerHints() 0.18.0+ boolean オプティマイザーヒントをサポートするかどうか
supportsNullValuesOrdering() boolean SELECT句のORDER BYでNULL値の順序を指定できるか(NULLS FIRST/LAST)
supportsIdentity() boolean データベースのIDカラムを使用したID自動採番をサポートしているか
supportsSequence() boolean データベースのシーケンスを使用したID自動採番をサポートしているか
supportsForUpdate() boolean 明示的な行ロックをサポートしているか
supportsForUpdateNoWait() boolean 明示的な行ロック(待機なし)をサポートしているか
supportsForUpdateWait() boolean 明示的な行ロック(待機あり)をサポートしているか
isRemoveTerminator() boolean 実行するSQLに記述されている終端文字(;)を削除するかどうか
isRollbackToSavepointBeforeRetry() boolean リトライする前に設定したSavepointまでロールバックするかどうか
getSequenceNextValSql(String sequenceName) String シーケンスを取得するためのSQL文を取得する
getLimitClause(long limit, long offset) String LIMIT句(とOFFSET句)を取得する
escapeLikePattern(CharSequence pattern) String LIKE演算子のパターン文字列をエスケープする
getJavaType(JDBCType jdbcType, String jdbcTypeName) JavaType 引数で渡ってきたJavaTypeを変換したJavaTypeを取得する。(DB固有のJava型変換を行う場合に実装)
getJavaType(int jdbcType, String jdbcTypeName) JavaType 引数で渡ってきたJavaTypeを変換したJavaTypeを取得する。(DB固有のJava型変換を行う場合に実装)
getDatabaseName() String データベースを判別するための文字列を取得する
getDatabaseType() String データベースの種別を表す名前を取得する
getEscapeChar() char LIKE句で指定するエスケープキャラクタを取得する
addForUpdateClause(StringBuilder sql, ForUpdateType forUpdateType, int waitSeconds) StringBuilder FOR UPDATE句の文字列をSQLに追加する
addOptimizerHints(StringBuilder sql, List<String> hints) 0.18.0+ StringBuilder 引数で渡したSQLにオプティマイザーヒントを付与する
getModLiteral(final String dividend, final String divisor) 0.17.0+ StringBuilder 乗除を行うためのSQL文字列を取得する
getPessimisticLockingErrorCodes() 0.18.2+ Set<String> 悲観ロックのErrorCode もしくは SqlStateを取得する

Dialectインタフェースのデフォルト実装やAbstractDialectクラスを参考に、上記のメソッドのうち変更が必要なメソッドの実装を行ってください。

次にuroboroSQLを利用するアプリケーションのクラスパス上に以下のファイル名のファイルを作成します。

META-INF
-  └─services
-      └─jp.co.future.uroborosql.dialect.Dialect
-
1
2
3

最後に作成したjp.co.future.uroborosql.dialect.Dialectファイルの中に作成したDialectのクラス名(FQDN名)を記述します。

foo.bar.dialect.SqliteDialect
-
1

アプリケーションでjp.co.future.uroborosql.dialect.DialectServiceLoader経由で読み込まれれば登録したSqliteDialectが利用可能になります。

- - - diff --git a/docs/configuration/entity-handler.html b/docs/configuration/entity-handler.html deleted file mode 100644 index 37aaea9..0000000 --- a/docs/configuration/entity-handler.html +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - EntityHandler | uroboroSQL - - - - - - - - - - - - - -

# EntityHandler

EntityHandlerはDAOインタフェースを利用したDB操作を行う際に実行するSQLの生成を制御するためのクラスです。
-アプリケーションの要件によってEntityHandler (opens new window)インタフェースやDefaultEntityHandler (opens new window)クラスを継承した独自のEntityHandlerを指定することが出来ます。

TIP

EntityHandlerはDAOインタフェース利用時のみに有効な手段ですが、SQLファイルインタフェースにおいても自動でバインドする場合は、自動パラメータバインド関数の設定を参照してください。

EntityHandler拡張例

public class CustomEntityHandler extends DefaultEntityHandler
-  implements EntityHandler<Object> {
-
-  @Override
-  public void setInsertParams(final SqlContext context, final Object entity) {
-    setEntityModelInsertParams((EntityModel) entity);  // entityがEntityModel型を継承している場合
-    super.setInsertParams(context, entity);
-  }
-
-  @Override
-  public void setUpdateParams(final SqlContext context, final Object entity) {
-    setEntityModelUpdateParams((EntityModel) entity);  // entityがEntityModel型を継承している場合
-    super.setUpdateParams(context, entity);
-  }
-
-  @Override
-  public void setBulkInsertParams(final SqlContext context, final Object entity, final int entityIndex) {
-    setEntityModelInsertParams((EntityModel) entity);  // entityがEntityModel型を継承している場合
-    super.setBulkInsertParams(context, entity, entityIndex);
-  }
-
-  private void setEntityModelInsertParams(final EntityModel model) {
-    ZonedDateTime now = ZonedDateTime.now();
-    model.setCreatedAt(now);
-    model.setUpdatedAt(now);
-  }
-
-  private void setEntityModelUpdateParams(final EntityModel model) {
-    model.setUpdatedAt(ZonedDateTime.now());
-  }
-}
-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// create SqlConfig
-SqlConfig config = UroboroSQL
-  .builder(...)
-  // EntityHandlerの設定
-  .setEntityHandler(new CustomEntityHandler()).build();
-
1
2
3
4
5
- - - diff --git a/docs/configuration/index.html b/docs/configuration/index.html deleted file mode 100644 index 7148a92..0000000 --- a/docs/configuration/index.html +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - SqlConfigの生成 | uroboroSQL - - - - - - - - - - - - - -

# SqlConfigの生成

uroboroSQLではSqlConfigを生成するタイミングで各種の設定を行うことによりライブラリの動作や実行されるSQLを変更することができます。

シンプルな設定

// create SqlConfig H2DBのメモリDBに接続する
-SqlConfig config = UroboroSQL
-  .builder("jdbc:h2:mem:test;DB_CLOSE_DELAY=-1", "sa", "")
-  .build();
-
1
2
3
4

UroboroSQLビルダー取得API(UroboroSQL.UroboroSQLBuilder

メソッド名 説明
builder() DB接続設定を行っていないビルダーを取得
builder(Connection conn) 引数で指定したコネクションでDB接続するビルダーを取得
builder(DataSource dataSource) 引数で指定したデータソースを使ってDB接続するビルダーを取得
builder(String url, String user, String password) 引数で指定したDB接続情報を元にDB接続するビルダーを取得
builder(String url, String user, String password, String schema) 引数で指定したDB接続情報を元にDB接続するビルダーを取得

上記APIで取得したUroboroSQL.UroboroSQLBuilderに対して下記の設定クラスを設定することで、設定変更ができます。

設定するクラス 説明
ConnectionSupplier JDBCコネクション提供クラス
SqlContextFactory SQLコンテキスト生成クラス
SqlAgentFactory SQL実行クラス(SqlAgent)生成クラス
SqlManager SQLファイル管理クラス
SqlFilterManager SQLフィルター管理クラス
EntityHandler エンティティ処理クラス
Dialect Database方言を表すクラス
Clock (opens new window) タイムゾーンを使用して現在の時点、日付および時間へのアクセスを提供するクロック
- - - diff --git a/docs/configuration/sql-agent-factory.html b/docs/configuration/sql-agent-factory.html deleted file mode 100644 index c759cdf..0000000 --- a/docs/configuration/sql-agent-factory.html +++ /dev/null @@ -1,273 +0,0 @@ - - - - - - SqlAgentFactory | uroboroSQL - - - - - - - - - - - - - -

# SqlAgentFactory

SQL実行を行うクラスであるSqlAgentを生成するファクトリクラスです。SQL実行時の挙動を変更するための初期値の設定が行えます。

設定例

SqlConfig config = UroboroSQL.builder(...)
-  // SqlAgentFactoryの設定
-  .setSqlAgentFactory(new SqlAgentFactoryImpl()
-    // JDBCフェッチサイズ
-    .setFetchSize(1000)
-    // Statementオブジェクトの検索タイムアウト時間(s)
-    .setQueryTimeout(10)
-    // 例外発生時のログ出力を行うかどうか
-    .setOutputExceptionLog(true)
-    // SQL_IDの置換文字列
-    .setSqlIdKeyName("_SQL_ID_")
-    // 検索結果を格納するMapのキー変換に使用するCaseFormatの初期値
-    .setDefaultMapKeyCaseFormat(CaseFormat.UPPER_SNAKE_CASE)
-    // 複数件挿入時の挿入方法の初期値
-    .setDefaultInsertsType(InsertsType.BULK)
-    // アプリケーション全体のリトライ設定
-    // SQLエラーコードが54,30006のいずれか(Oracleのリソース・ビジー)の場合
-    .setSqlRetryCodeList(Arrays.asList("54", "30006"))
-    // 最大リトライ回数
-    .setDefaultMaxRetryCount(3)
-    // リトライ間隔
-    .setDefaultSqlRetryWaitTime(10)
-    // トランザクション内での更新を強制するかどうか
-    .setForceUpdateWithinTransaction(true)
-    // 明示的な行ロック時の待機時間(s)デフォルト値
-    .setDefaultForUpdateWaitSeconds(10)
-    )
-  ).build();
-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

# フェッチサイズと検索タイムアウト設定 ( SqlAgentFactory#setFetchSize /#setQueryTimeout )

SqlAgentで検索処理を行う際、データベースから一度に取得する行数(fetchSize)や -検索タイムアウト時間(秒)(queryTimeout)の初期値を指定することが出来ます。 -指定しない場合fetchSize, queryTimeoutともに-1が設定されます。

SqlConfig config = UroboroSQL.builder(...)
-  // SqlAgentFactoryの設定
-  .setSqlAgentFactory(new SqlAgentFactoryImpl()
-    // JDBCフェッチサイズ
-    .setFetchSize(1000)
-    // Statementオブジェクトの検索タイムアウト時間(s)
-    .setQueryTimeout(10)
-  ).build();
-
1
2
3
4
5
6
7
8

補足

fetchSizeは、Statement.setFetchSize (opens new window)に渡される値で、パフォーマンスに影響します。
-JDBCクライアント(uroborosqlを使用しているJavaアプリケーション)ではDBサーバ側で実行されたSELECTの結果セットをfetchサイズで指定された行数ずつ分割して取得します。 -そのため結果行数に対してfetchSizeが小さいと、JDBCクライアント <-> DBサーバ間の通信回数が増大してパフォーマンスに悪影響を及ぼします。
-(例:select結果が10,000件、fetchSizeが100の場合、JDBCクライアント⇔DBサーバ間の通信は10,000÷100 = 100回行われる)

注意

fetchSizeはcollect/foreachメソッドで返却される結果セットの行数を制限する設定ではありません。

# 例外発生時のログ出力を行うかどうかを設定 ( SqlAgentFactory#setOutputExceptionLog )

SQL実行時にSQL例外が発生した場合に、発生した例外と実行したSQLの詳細情報を出力するかどうかを指定できます。 -指定しない場合falseになります。

SqlConfig config = UroboroSQL.builder(...)
-  // SqlAgentFactoryの設定
-  .setSqlAgentFactory(new SqlAgentFactoryImpl()
-    // 例外発生時のログ出力を行うかどうか
-    .setOutputExceptionLog(true)
-  ).build();
-
1
2
3
4
5
6

# SQL_IDの置換文字列設定 ( SqlAgentFactory#setSqlIdKeyName )

SQL文に特定の置換文字列をSQLコメントとして記述することで、SQL実行時に実行したSQLの元となるSQLファイルを特定するための -情報(SQL_ID)を埋め込むことが出来ます。SQL_IDを埋め込むことでSQLログやDBのSQL履歴で実行されたSQLの元となるファイルを -特定しやすくなります。
-必要に応じてこの置換文字列は変更することが出来ます。 -指定しない場合_SQL_ID_になります。

設定例

SqlConfig config = UroboroSQL.builder(...)
-  // SqlAgentFactoryの設定
-  .setSqlAgentFactory(new SqlAgentFactoryImpl()
-    // SQL_IDの置換文字列
-    .setSqlIdKeyName("_SQL_ID_")
-  ).build();
-
1
2
3
4
5
6

department/select_department.sql

select /* _SQL_ID_ */  -- _SQL_ID_ がSQLファイルを特定するための情報の埋め込み先となる
-  dept.dept_no      as  dept_no
-, dept.dept_name    as  dept_name
-, dept.lock_version as  lock_version
-from
-  department  dept
-/*BEGIN*/
-where
-/*IF SF.isNotEmpty(deptNo)*/
-and dept.dept_no  = /*deptNo*/1
-/*END*/
-/*IF SF.isNotEmpty(deptName)*/
-and dept.dept_name  = /*deptName*/'sample'
-/*END*/
-/*END*/
-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

SQL実行処理

agent.query("department/select_department")
-  .param("deptNo", 1)
-  .collect();
-
1
2
3

実行されるSQL

select /* department/select_department */  -- _SQL_ID_ にSQL名(department/select_department)が設定される
-  dept.dept_no      as  dept_no
-, dept.dept_name    as  dept_name
-, dept.lock_version as  lock_version
-from
-  department  dept
-where
-  dept.dept_no  = 1/*deptNo*/
-
1
2
3
4
5
6
7
8

# CaseFormatの初期値設定 ( SqlAgentFactory#setDefaultMapKeyCaseFormat )

SQLによる検索で、以下のメソッドを使用してList<Map<String, Object>>Map<String, Object>を取得する際、 -取得したMapのキー名に対する書式の初期値を指定することが出来ます。 -指定しない場合CaseFormat.UPPER_SNAKE_CASEになります。

対象メソッド 戻り値の型
SqlQuery#collect() List<Map<String, Object>>
SqlQuery#findFirst() Optional<Map<String, Object>>
SqlQuery#first() Map<String, Object>
SqlQuery#stream() Stream<Map<String, Object>>

指定しない場合(初期設定:CaseFormat.UPPER_SNAKE_CASE

agent.query("department/select_department").collect();
-
-// 結果(departments) キーがUPPER_SNAKE_CASEとなっている
-[
- {"DEPT_NO"=1, "DEPT_NAME"="sales"},
- {"DEPT_NO"=2, "DEPT_NAME"="export"},
- {"DEPT_NO"=3, "DEPT_NAME"="accounting"},
- {"DEPT_NO"=4, "DEPT_NAME"="personnel"}
-]
-
1
2
3
4
5
6
7
8
9

CaseFormat.CAMEL_CASEを初期値として設定

SqlConfig config = UroboroSQL.builder(...)
-  // SqlAgentFactoryの設定
-  .setSqlAgentFactory(new SqlAgentFactoryImpl()
-    // 検索結果を格納するMapのキー変換に使用するCaseFormatの初期値
-    .setDefaultMapKeyCaseFormat(CaseFormat.CAMEL_CASE)
-  ).build();
-
1
2
3
4
5
6
agent.query("department/select_department").collect();
-
-// 結果(departments) キーがCAMEL_CASEとなっている
-[
- {"deptNo"=1, "deptName"="sales"},
- {"deptNo"=2, "deptName"="export"},
- {"deptNo"=3, "deptName"="accounting"},
- {"deptNo"=4, "deptName"="personnel"}
-]
-
1
2
3
4
5
6
7
8
9

# 複数件挿入時の挿入方法の初期値設定 ( SqlAgentFactory#setDefaultInsertsType )

SqlAgent#inserts()メソッドで使用するInsertsTypeの初期値を設定することが出来ます。 -指定しない場合InsertsType.BULKになります。

SqlConfig config = UroboroSQL.builder(...)
-  // SqlAgentFactoryの設定
-  .setSqlAgentFactory(new SqlAgentFactoryImpl()
-    // 複数件挿入時の挿入方法の初期値
-    .setDefaultInsertsType(InsertsType.BULK)
-  ).build();
-
1
2
3
4
5
6

# SQL実行のリトライ ( SqlAgentFactory#setSqlRetryCodeList /#setDefaultMaxRetryCount /#setDefaultSqlRetryWaitTime )

SQLを実行した際、タイミングによって発生する例外(テーブルロックエラーなど)の場合はリトライを行い、 -できるだけ正常に処理を終了させたい場合があります。
-通常、このようなケースでは以下のような実装を行います。

String MAX_RETRY_COUNT = 3; // MAX_RETRY_COUNT はアプリケーションで定義された最大リトライ回数の定数とする
-SqlConfig config = UroboroSQL.builder(...).build();
-
-int retryCount = 0;
-for(;;) {
-  try (SqlAgent agent = config.agent()) {
-    // INSERT文の実行
-    // insert into product (product_id) values (/*product_id*/0);
-    agent.update("example/insert_product").param("product_id", 1).count();
-    break;
-  } catch (UroborosqlSQLException ex) {
-    // SQLExceptionが発生した際に行う処理を実装
-    int errorCode = ex.getErrorCode();
-    if (errorCode == 30006 || errorCode == 54) {// リソース・ビジー(Oracleの場合)
-      // リトライ対象エラーコードの場合はリトライカウントをカウントアップしてリトライする
-      retryCount++;
-      if (retryCount == MAX_RETRY_COUNT) {
-        // 最大リトライ回数に達した場合は例外をスローする
-        throw ex;
-      } else {
-        try {
-          // 10ms 待機
-          Thread.sleep(10);
-        } catch (InterruptedException iex) {
-          // do nothing
-        }
-      }
-    } else {
-      // リトライ対象エラーコード以外はすぐに例外をスローする
-      throw ex;
-    }
-  }
-}
-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

しかし、上記のようなリトライ処理を個々の実装で行うと、 -実装漏れや実装ミス、実装方法の差異(for()の代わりにwhile()を使用するなど)により不具合が発生しやすくなります。
uroboroSQLでは、アプリケーション全体のリトライ設定と、全体設定より優先される個別処理でのリトライ用APIの -2種類のAPIを提供することで、より簡潔で確実なリトライ処理が行えるよう工夫されています。
-アプリケーション全体のリトライ設定はSqlAgentFactory生成時に行います。

SqlConfig config = UroboroSQL.builder(...)
-  // SqlAgentFactoryの設定
-  .setSqlAgentFactory(new SqlAgentFactoryImpl()
-    // アプリケーション全体のリトライ設定
-    // SQLエラーコードが54,30006のいずれか(Oracleのリソース・ビジー)の場合
-    .setSqlRetryCodeList(Arrays.asList("54", "30006"))
-    // 最大リトライ回数(3回)リトライ
-    .setDefaultMaxRetryCount(3)
-    // リトライ間隔10ms待機
-    .setDefaultSqlRetryWaitTime(10)
-  ).build();
-
1
2
3
4
5
6
7
8
9
10
11

リトライAPIを用いた実装は次のようになります。

// アプリケーション全体のリトライ設定に従ってリトライを行う。(個別のリトライ指定なし)
-try (SqlAgent agent = config.agent()) {
-  // INSERT文の実行
-  // insert into product (product_id) values (/*product_id*/0);
-  agent.update("example/insert_product")
-    .param("product_id", 1)
-    .count();
-}
-
-// 個別にリトライ設定を上書きする(retry()を利用)
-try (SqlAgent agent = config.agent()) {
-  // INSERT文の実行
-  // insert into product (product_id) values (/*product_id*/0);
-  // リトライ対象エラーコードの場合、5回のリトライを20ms間隔で行う
-  agent.update("example/insert_product")
-    .param("product_id", 1)
-    .retry(5, 20)
-    .count();
-}
-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# DB更新処理をトランザクション内のみに強制 ( SqlAgentFactory#setForceUpdateWithinTransaction ) 0.14.0+

複数のDB更新処理をまとめて行う際、途中で例外が発生するとDBデータが不整合な状態になる場合があります。このようなデータ不整合を防ぐためにはトランザクションを利用します。
-しかし、通常の設定ではトランザクションを開始しない状態でもDB更新処理を行うことが可能になっているため不具合に気付きにくいという問題があります。
uroboroSQLではトランザクションを開始していない状態でDB更新処理が行なわれた場合に例外をスローするオプションを提供しています。このオプションを使用することでDBデータの整合性を維持しやすくなります。

SqlConfig config = UroboroSQL.builder(...)
-  // SqlAgentFactoryの設定
-  .setSqlAgentFactory(new SqlAgentFactoryImpl()
-    // トランザクション内での更新を強制するかどうか
-    .setForceUpdateWithinTransaction(true)
-    )
-  ).build();
-
1
2
3
4
5
6
7

SqlAgentFactory#setForceUpdateWithinTransaction()trueを指定することでトランザクションを開始していない状態でDB更新処理が行なわれた場合にUroborosqlTransactionExceptionがスローされます。

agent.required(() -> { // トランザクション開始
-  // トランザクション内でのDB更新なのでOK
-  agent.updateWith("insert into employee (emp_no) values (/*emp_no*/1001)")
-    .param("emp_no", 1)
-    .count();
-  });
-}); // トランザクション終了
-
-// トランザクション外でのDB更新なので UroborosqlTransactionException がスローされる
-agent.updateWith("insert into department (dept_no, dept_name) values (/*dept_no*/1111, /*dept_name*/'Sales')")
-  .param("dept_no", 2)
-  .param("dept_name", "export")
-  .count();
-
1
2
3
4
5
6
7
8
9
10
11
12
13

# 明示的な行ロック時の待機時間(s)のデフォルト値設定 ( SqlAgentFactory#setDefaultForUpdateWaitSeconds ) 0.14.0+

SqlEntityQuery#forUpdateWait()による明示的な行ロックをおこなう際の待機時間を指定することができます。

SqlConfig config = UroboroSQL.builder(...)
-  // SqlAgentFactoryの設定
-  .setSqlAgentFactory(new SqlAgentFactoryImpl()
-    // 明示的な行ロック時の待機時間(s)デフォルト値
-    .setDefaultForUpdateWaitSeconds(10)
-    )
-  ).build();
-
1
2
3
4
5
6
7

待機時間の初期値を設定することでSqlEntityQuery#forUpdateWait()を発行する際に適用され、 -待機時間を都度指定する必要がなくなります。
SqlEntityQuery#forUpdateWait(int)を使って個別に待機時間を指定した場合は個別設定が優先されます。

- - - diff --git a/docs/configuration/sql-context-factory.html b/docs/configuration/sql-context-factory.html deleted file mode 100644 index 532616b..0000000 --- a/docs/configuration/sql-context-factory.html +++ /dev/null @@ -1,254 +0,0 @@ - - - - - - SqlContextFactory | uroboroSQL - - - - - - - - - - - - - -

# SqlContextFactory

SQL構造を表現するクラスであるSqlContextを生成するファクトリクラスです。生成されるSQLの挙動を変更するための設定が行えます。

設定例

// create SqlConfig
-SqlConfig config = UroboroSQL
-  .builder(...)
-  // SqlContextFactoryの設定
-  .setSqlContextFactory(new SqlContextFactoryImpl()
-    // 定数クラス設定の追加
-    .setConstantClassNames(Arrays.asList(TypeConstants.class.getName()))
-    // 列挙型パッケージ設定の追加
-    .setEnumConstantPackageNames(Arrays.asList(Gender.class.getPackage().getName()))
-     // 定数パラメータのプレフィックス指定(初期値 : CLS_)
-    .setConstParamPrefix("CLS_")
-    // query用自動パラメータバインド関数の登録
-    .addQueryAutoParameterBinder((ctx) -> ctx.paramIfAbsent("current_flg", true))
-    // update/batch/procedure用自動パラメータバインド関数の登録
-    .addUpdateAutoParameterBinder((ctx) -> ctx.paramIfAbsent("ins_datetime", LocalDateTime.now()))
-    .addUpdateAutoParameterBinder((ctx) -> ctx.paramIfAbsent("upd_datetime", LocalDateTime.now()))
-    // パラメータ変換クラスの登録
-    .addBindParamMapper(new CustomBindParamMapper())
-    // ResultSetTypeの初期値
-    // java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE, java.sql.ResultSet.TYPE_SCROLL_SENSITIVE のいづれか
-    .setDefaultResultSetType(ResultSet.TYPE_FORWARD_ONLY)
-    // ResultSetConcurrencyの初期値
-    // java.sql.ResultSet.CONCUR_READ_ONLY, java.sql.ResultSet.CONCUR_UPDATABLE のいづれか
-    .setDefaultResultSetConcurrency(ResultSet.CONCUR_READ_ONLY)
-  ).build();
-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

# 区分値定数や列挙型の利用 ( SqlContextFactory#setConstantClassNames /#setEnumConstantPackageNames)

これまでSQLの開発では、区分値や定数値などの固定値がマジックナンバーとしてSQL文内に埋め込まれていました。
-しかしマジックナンバーの記述は可読性が悪く仕様変更時の影響調査が困難なため不具合の温床となっていました。

select
- *
-from employee
-where emp_typ = '05' -- 05:従業員     <-- 従業員の区分が変わったらどうする?
-
1
2
3
4

uroboroSQLはエンタープライズ分野での開発に利用されてきた経験から、SQL文の中でマジックナンバーの代わりに定数や列挙型を利用するための仕組みを提供しています。

区分値定数/列挙型を利用するためにはSqlContextFactoryに以下の設定を追加します。

// create SqlConfig
-SqlConfig config = UroboroSQL
-  .builder(...)
-  // SqlContextFactoryの設定
-  .setSqlContextFactory(new SqlContextFactoryImpl()
-    // 定数クラス設定の追加
-    .setConstantClassNames(Arrays.asList(TypeConstants.class.getName()))
-    // 列挙型パッケージ設定の追加
-    .setEnumConstantPackageNames(Arrays.asList(Gender.class.getPackage().getName()))
-     // 定数パラメータのプレフィックス指定(初期値 : CLS_)
-    .setConstParamPrefix("CLS_")
-  ).build();
-
1
2
3
4
5
6
7
8
9
10
11
12

定数クラス : TypeConstants.javaの実装例

/**
- * 区分値定数クラス
- */
-public final class TypeConstants {
-  private TypeConstants() {}
-
-  /** 区分種別:口座種別区分  区分種別番号:0035 */
-  public static final String ACCOUNT_TYP = "0035";
-  /** 区分種別:口座種別区分  区分値:普通  区分値番号:1 */
-  public static final String ACCOUNT_TYP_SAVING = "1";
-  /** 区分種別:口座種別区分  区分値:当座  区分値番号:2 */
-  public static final String ACCOUNT_TYP_CHECKING = "2";
-  /** 区分種別:口座種別区分  区分値:定期  区分値番号:3 */
-  public static final String ACCOUNT_TYP_FIXED_DEPOSIT = "3";
-  /** 区分種別:実行区分  区分種別番号:0052 */
-  public static final String ISSUE_TYP = "0052";
-  /** 区分種別:実行区分  区分値:未実行  区分値番号:1 */
-  public static final String ISSUE_TYP_UNISSUED = "1";
-  /** 区分種別:実行区分  区分値:実行済  区分値番号:2 */
-  public static final String ISSUE_TYP_OUTSTANDING = "2";
-}
-
-/**
- * システム定数
- */
-public final class Consts {
-  private Consts() {}
-
-  public static final class CommonValue {
-    private CommonValue() {}
-
-    /** 業務日付(オンライン) */
-    public static final String ONLINE_DATE = "1";
-
-    /** 業務日付(バッチ) */
-    public static final String BATCH_DATE = "2";
-
-    /** SQL上でのフラグ表現(TRUE=1) */
-    public static final String FLAG_ON = "1";
-    /** SQL上でのフラグ表現(FALSE=0) */
-    public static final String FLAG_OFF = "0";
-    /** 日付ALL0 */
-    public static final String ZERO_DATE = "00000000";
-    /** 日付最小値 */
-    public static final String MIN_DATE = "19000101";
-    /** 日付最大値 */
-    public static final String MAX_DATE = "99991231";
-  }
-}
-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49

列挙型 : Gender.javaの実装例

/**
- * 性別を表す列挙型
- */
-public enum Gender {
-  MALE("M"), FEMALE("F"), OTHER("O");
-
-  private final String label;
-
-  private Gender(String label) {
-    this.label = label;
-  }
-
-  @Override
-  public String toString() {
-    return label;
-  }
-}
-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

このように区分値定数や列挙型を定数パラメータとして登録しておくことで、SQL文の中で定数名が利用できるようになります。

定数パラメータを利用する場合、以下の命名ルールに従ってパラメータを指定します。

パターン 書式
定数 [定数パラメータプレフィックス][定数フィールド名大文字]
定数(Innerクラスがある場合) [定数パラメータプレフィックス][Innerクラス名大文字スネークケース]_[Innerクラス内定数フィールド名大文字]
列挙型 [定数パラメータプレフィックス][列挙型名大文字]_[列挙子名大文字]

TIP

※定数パラメータプレフィックスの初期値は CLS_となっています。
SqlContextFactory#setConstParamPrefix()で変更することが可能です。

実際に使用する際はSQL文の中で置換文字列として以下のように指定します

  • /*#[定数パラメータプレフィックス][定数フィールド名大文字]*/
  • /*#[定数パラメータプレフィックス][Innerクラス名大文字スネークケース]_[Innerクラス内定数フィールド名大文字]*/
  • /*#[定数パラメータプレフィックス][列挙型名大文字]_[列挙子名大文字]*/

または

  • /*$[定数パラメータプレフィックス][定数フィールド名大文字]*/
  • /*$[定数パラメータプレフィックス][Innerクラス名大文字スネークケース]_[Innerクラス内定数フィールド名大文字]*/
  • /*$[定数パラメータプレフィックス][列挙型名大文字]_[列挙子名大文字]*/

という風に使用します。

TIP

定数や列挙型の値は固定値なので生成されるSQLは毎回同じ値になり、SQL文解析処理によるCPU負荷を考慮する必要はありません。

区分の例

select
- *
-from account
-where account_typ = /*#CLS_ACCOUNT_TYP_SAVING*/'1' -- 1:普通口座
-
1
2
3
4

定数の例

select
-  emp.emp_no    as  emp_no
-,  emp.first_name  as  first_name
-,  emp.last_name  as  last_name
-,  emp.birth_date  as  birth_date
-,  emp.gender    as  gender
-from
-  employee  emp
-where
-  emp.birth_date    !=  /*#CLS_COMMON_VALUE_ZERO_DATE*/'00000000'  -- 定数パラメータの指定
-
1
2
3
4
5
6
7
8
9
10

列挙型の例

select
-  emp.emp_no    as  emp_no
-,  emp.first_name  as  first_name
-,  emp.last_name  as  last_name
-,  emp.birth_date  as  birth_date
-,  emp.gender    as  gender
-from
-  employee  emp
-where
-  emp.gender    =  /*#CLS_GENDER_FEMALE*/'F'  -- 列挙型定数パラメータの指定
-
1
2
3
4
5
6
7
8
9
10

# 自動パラメータバインド関数の設定 ( SqlContextFactory#addQueryAutoParameterBinder /#addUpdateAutoParameterBinder ) 0.6.1+

アプリケーションで使用する各テーブルに共通項目(登録日時、更新日時など)が定義されている場合、 -INSERT文やUPDATE文を実行する際には毎回これらの共通項目に対するパラメータを指定する必要が出てきます。
-このような共通項目へのパラメータ設定を個別に行うと実装が煩雑になり、 -どうしても実装漏れや記述ミスにより正しく値が設定されない、といったことが起こります。

uroboroSQLではこのような共通項目に対して自動的にパラメータをバインドする仕組みを提供しています。
-自動パラメータバインド関数を設定することで、SQLの実行のたびに自動パラメータバインド関数が呼び出され、 -関数内で指定したパラメータがSQLにバインドされることになります。

設定例

SqlConfig config = UroboroSQL
-  .builder(...)
-  // SqlContextFactoryの設定
-  .setSqlContextFactory(new SqlContextFactoryImpl()
-    // query用自動パラメータバインド関数の登録
-    .addQueryAutoParameterBinder((ctx) -> ctx.paramIfAbsent("current_flg", true))
-    // update/batch/procedure用自動パラメータバインド関数の登録
-    .addUpdateAutoParameterBinder((ctx) -> ctx.paramIfAbsent("ins_datetime", LocalDateTime.now()))
-    .addUpdateAutoParameterBinder((ctx) -> ctx.paramIfAbsent("upd_datetime", LocalDateTime.now()))
-  ).build();
-
1
2
3
4
5
6
7
8
9
10

自動パラメータバインド関数はSqlContextを引数に受け取るので、関数内でパラメータの設定を行ってください。

TIP

関数の評価は、SQL生成処理(SQL文内の/*IF*//*BEGIN*//*parameter_name*/の評価)の直前に行われます。

# バインドパラメータ変換クラスの設定 ( SqlContextFactory#addBindParamMapper ) 0.6.1+

SQLを実行する際、独自に作成したクラスをバインドしたい場合があります。 -そういったケースに対応できるようuroboroSQLではバインドパラメータをJDBCが受け入れられる型に変換するためのクラスを -設定することが出来ます。

バインドパラメータ変換クラスの例

// Nameクラスに対するバインドパラメータ変換クラス
-public class CustomBindParamMapper implements BindParameterMapper<Name> {
-  @Override
-  public Object toJdbc(Name original, Connection connection,
-    BindParameterMapperManager parameterMapperManager) {
-    return original.toString();
-  }
-}
-
-// バインドパラメータに設定するドメインクラス
-public class Name {
-  private final String firstName;
-  private final String lastName;
-
-  public Name(String firstName, String lastName) {
-    this.firstName = firstName;
-    this.lastName = lastName;
-  }
-
-  @Override
-  public String toString() {
-    return this.firstName + " " + this.lastName;
-  }
-}
-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

SqlContextFactoryの設定

// create SqlConfig
-SqlConfig config = UroboroSQL
-.builder(...)
-// SqlContextFactoryの設定
-.setSqlContextFactory(new SqlContextFactoryImpl()
-  // パラメータ変換クラスの登録
-  .addBindParamMapper(new CustomBindParamMapper())
-).build();
-
1
2
3
4
5
6
7
8

バインドパラメータ設定例

Name name = new Name("Bob", "Smith");
-agent.update("insert_user").param("name", name).count();
-
1
2

# java.sql.ResultSetの挙動設定 0.14.0+

検索SQLの発行で取得するjava.util.ResultSetの挙動を変更することができます。

// create SqlConfig
-SqlConfig config = UroboroSQL
-  .builder(...)
-  // SqlContextFactoryの設定
-  .setSqlContextFactory(new SqlContextFactoryImpl()
-    // ResultSetTypeの初期値
-    // java.sql.ResultSet.TYPE_FORWARD_ONLY, java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE, java.sql.ResultSet.TYPE_SCROLL_SENSITIVE のいづれか
-    .setDefaultResultSetType(ResultSet.TYPE_FORWARD_ONLY)
-    // ResultSetConcurrencyの初期値
-    // java.sql.ResultSet.CONCUR_READ_ONLY, java.sql.ResultSet.CONCUR_UPDATABLE のいづれか
-    .setDefaultResultSetConcurrency(ResultSet.CONCUR_READ_ONLY)
-  ).build();
-
1
2
3
4
5
6
7
8
9
10
11
12

# カーソル型の初期値(DefaultResultSetType

java.sql.ResultSetのカーソルの型を指定します。

説明 初期値
java.sql.ResultSet#TYPE_FORWARD_ONLY カーソルは最初から最後まで順方向にしか移動できません。
java.sql.ResultSet#TYPE_SCROLL_INSENSITIVE カーソルは順方向・逆方向いずれにも移動可能です。ただし他による変更を反映しません。
java.sql.ResultSet#TYPE_SCROLL_SENSITIVE カーソルは順方向・逆方向いずれにも移動可能です。また他による変更も反映します。

# 変更可能性の初期値(DefaultResultSetConcurrency

java.sql.ResultSetの変更可能性を指定します。

説明 初期値
java.sql.ResultSet.CONCUR_READ_ONLY カーソルはデータの読み出ししかサポートしません。
java.sql.ResultSet.CONCUR_UPDATABLE カーソルは変更可能です。カーソルを用いたデータの挿入・変更・削除がサポートされます。
- - - diff --git a/docs/configuration/sql-filter-manager.html b/docs/configuration/sql-filter-manager.html deleted file mode 100644 index 8282fd3..0000000 --- a/docs/configuration/sql-filter-manager.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - - SqlFilterManager | uroboroSQL - - - - - - - - - - - - - -

# SqlFilterManager

# SQLフィルター

uroboroSQLではSQLの実行を行う一連の処理の流れの中にいくつかの拡張ポイントを設けており、この拡張ポイントに処理を追加することで、共通的なSQL文の加工や検索結果の記録といった様々な拡張を行うことができるように設計されています。

SQL処理の拡張はSqlFilterインタフェースを実装したクラスを作成し登録することで行います。
-SqlFilterインタフェースには以下のメソッドが定義されています。

SqlFilterメソッド名 説明
initialize SqlFilterの初期化を行う
doTransformSql 変換前のSQLに対して加工を行う
doParameter バインドパラメータの加工を行う
doOutParameter ストアドプロシージャのOutParameterの加工を行う
doPreparedStatement PreparedStatementの加工を行う
doCallableStatement CallableStatementの加工を行う
doQuery 検索処理結果の加工を行う
doUpdate 更新処理結果の加工を行う
doBatch バッチ処理結果の加工を行う
doProcedure Procedure呼出処理結果の加工を行う

uroboroSQLには標準でいくつかのSqlFilterの実装が含まれています。

クラス名 説明
jp.co.future.uroborosql.filter.DebugSqlFilter SqlFilterの動作を理解するためのサンプル。各拡張ポイントで呼び出されるメソッドでログを出力します。
jp.co.future.uroborosql.filter.DumpResultSqlFilter 検索結果を表形式でログ出力するSQLフィルター。SqlREPLで使用しています。
jp.co.future.uroborosql.filter.WrapContextSqlFilter SQL文の前後に文字列を追加するSQLフィルター。ページングや検索件数の上限設定に使用します。
jp.co.future.uroborosql.filter.SecretColumnSqlFilter 指定した特定のカラムのみ暗号化を行うSQLフィルター。パスワードや機密情報を暗号化してDBに格納するために使用します。
jp.co.future.uroborosql.filter.AuditLogSqlFilter 監査記録を取得するためのSQLフィルター。

SQLフィルターを利用するためには、SqlConfig生成時にSqlFilterManagerの設定を追加して利用するSQLフィルターの登録を行ってください。
-SQLフィルターは複数登録することができます。複数登録した場合は登録した順にSQLフィルターが処理されます。

// create SqlConfig
-SqlConfig config = UroboroSQL
-  .builder(...)
-  // SqlFilterManagerの設定
-  .setSqlFilterManager(new SqlFilterManagerImpl()
-    // DumpResultSqlFilterの登録
-    .addSqlFilter(new DumpResultSqlFilter())
-    // WrapContextSqlFilterの登録
-    .addSqlFilter(new WrapContextSqlFilter("",
-      "LIMIT /*$maxRowCount*/10 OFFSET /*$startRowIndex*/0",
-      ".*FOR\\sUPDATE.*"))
-  ).build();
-
1
2
3
4
5
6
7
8
9
10
11
12

独自にSqlFilterを作成する場合は、jp.co.future.uroborosql.filter.AbstractSqlFilterを継承し、必要に応じてメソッドをオーバーライドしてください。

public class CustomSqlFilter extends AbstractSqlFilter {
-
-    // 途中略
-
-    @Override
-    public ResultSet doQuery(SqlContext sqlContext, PreparedStatement preparedStatement, ResultSet resultSet) {
-        // フィルター処理の実装
-    }
-}
-
1
2
3
4
5
6
7
8
9
- - - diff --git a/docs/configuration/sql-manager.html b/docs/configuration/sql-manager.html deleted file mode 100644 index d1de6b8..0000000 --- a/docs/configuration/sql-manager.html +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - SqlManager | uroboroSQL - - - - - - - - - - - - - -

# SqlManager

SqlManagerはSQLファイルを管理するクラスです。2つのクラスが提供されています。

クラス 説明
SqlManagerImpl java.ioを利用したファイルアクセスを行うSqlManagerクラス。
NioSqlManagerImpl java.nioを利用したファイルアクセスを行うSqlManagerクラス

クラスの特徴比較

特徴 SqlManagerImpl NioSqlManagerImpl 補足
SQLファイルルートフォルダ設定
SQLファイルエンコーディング設定
起動時のファイルキャッシュ NioSqlManagerImplはファイルパスのみキャッシュ
遅延ファイルキャッシュ ×
jarファイル中のSQL参照
zipファイル中のSQL参照 ×
カスタムファイルアクセス対応 × java.nio.fileパッケージを使用
ファイル変更検知 ×
DB種類毎のファイルパス切り替え ×

利用用途に応じてSqlManagerを選択してください。
-SqlManagerクラスの切り替えはビルダーAPIで行うことが出来ます。指定しない場合の初期値はSqlManagerImplになります。

SqlConfig config = UroboroSQL.builder(...)
-  // NioSqlManagerの指定
-  .setSqlManager(new NioSqlManagerImpl(false)).build();
-
1
2
3

# SQLファイルルートフォルダの設定

uroboroSQLは初期設定ではクラスパス上にあるsqlフォルダ配下のSQLを読み込みます。
-このSQLファイルルートフォルダは変更することができます。

SQLファイルルートフォルダの設定 (custom_sqlフォルダを指定)

// SqlManagerImplの場合
-SqlConfig config = UroboroSQL.builder(...)
-  // SQLファイルのルートフォルダの設定(custom_sqlフォルダをルートフォルダにする場合)
-  .setSqlManager(new SqlManagerImpl("custom_sql")).build();
-
-// NioSqlManagerImplの場合
-SqlConfig config = UroboroSQL.builder(...)
-  // SQLファイルのルートフォルダの設定(custom_sqlフォルダをルートフォルダにする場合)
-  .setSqlManager(new NioSqlManagerImpl("custom_sql")).build();
-
1
2
3
4
5
6
7
8
9

# Spring bootでの利用 NioSqlManagerImplのみ

Spring boot利用時に実行可能jarにSQLファイルをリソースとして含める場合には、NioSqlManagerImplの場合、パスの指定を変更する必要があります。

例えば、classpath:sqlにSQLファイルを配置している場合は、実行可能jarで起動する際にはアプリケーション設定を利用してBOOT-INF/classes/sqlのように指定してください。

# DB種類毎のファイルパス切り替え NioSqlManagerImplのみ

後述するDialectを利用して、1つのSQL名に対してDB種類毎にファイルパスを切り替えることが出来ます。

以下のようなファイル構成を例として説明します。

sql
-  ├─employee
-  │    └─select_employee.sql  -- Oracle, postgresql以外のDB用SQL
-  ├─oracle
-  │   └─employee
-  │        └─select_employee.sql  -- oracle DB用SQL
-  └─postgresql
-      └─employee
-           └─select_employee.sql  -- postgresql DB用SQL
-
1
2
3
4
5
6
7
8
9

SQL名としてemployee/select_employeeを指定した場合、
-Oracle DBの場合はsql/oracle/employee/select_employee.sqlが読み込まれます。
-同様にPostgresql DBの場合はsql/postgresql/employee/select_employee.sqlが読み込まれます。
-DBに対するDialect用のフォルダがない場合は通常通りsql/employee/select_employee.sqlが読み込まれます。

DB毎のフォルダ名

DB名 フォルダ名
H2 DB h2
Microsoft SQL Server mssql
MySQL mysql
Oracle oracle
Postgresql postgresql
その他 default

# SQLファイルの更新監視 NioSqlManagerImplのみ

NioSqlManagerImplでは、最初にSQLファイルの呼び出しがあったタイミングでSQLファイルをロードし、メモリ内にSQLをキャッシュします。 -ファイル監視を有効にしている場合はキャッシュしているファイルに対してjava.nio.file.WatchServiceを利用したファイル監視を行い、 -更新があった場合は自動的にリロードする仕組みを提供しています。

WARNING

ファイル監視を行うのはファイルシステム上のファイルについてのみでjarファイルやzipファイル内のファイルに対してはファイル監視は行いません。

アプリケーションの開発中など頻繁にSQLファイルを更新する場合に有効です。
-ファイル監視の有無はNioSqlManagerImplの設定時に行います。

// NioSqlManagerImplの場合
-SqlConfig config = UroboroSQL.builder(...)
-  // SQLファイル監視を有効化(初期値はfalse)
-  .setSqlManager(new NioSqlManagerImpl(true)).build();
-
1
2
3
4
- - - diff --git a/docs/developer_guide/index.html b/docs/developer_guide/index.html deleted file mode 100644 index 633a4fa..0000000 --- a/docs/developer_guide/index.html +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - 開発者ガイド | uroboroSQL - - - - - - - - - - - - - -

# 開発者ガイド

uroboroSQLを開発する人向けのガイドです

# ソースコードの取得

GitHub (opens new window)からソースをクローンする。

git clone https://github.com/future-architect/uroborosql.git
-
1

# ソースのビルド

ビルドにはApache Maven (opens new window)を利用します。

mvn compile
-
1

# テスト

テストはJUnit (opens new window)で行います。

mvn test
-
1

カバレッジはJacoco (opens new window)で確認することができます。

mvn test jacoco:report
-
1

target/site/jacoco フォルダにjacocoカバレッジレポートが出力されます。

開発を行う際は、Jadocコメントが正しく記載されているようにしてください。
-javadocプラグインでjavadocを生成し、エラーが出力されないことを確認してください。

mvn javadoc:javadoc
-
1

# Mavenローカルリポジトリへのインストール

mvn install
-
1

# IDE

# Eclipse

クローンしたフォルダをEclipseの既存Mavenプロジェクトとしてインポートしてください。
-MavenのinitializeフェーズでEclipseプロジェクトの文字コードをUTF-8にする設定が入っているので、インポートが完了すれば開発が始められる状態になります。

# Intellij

Import Project でクローンしたフォルダを指定してください。
-Import project from external model でMavenを選択してください。
-プロジェクトが読み込まれると開発が始められる状態になります。

# Continuous Integration

Continuous Integration(CI)はTravis CI (opens new window)で行っています。

CIの状況確認は以下で行います。

また、CIと合わせてカバレッジレポートをCoveralls (opens new window)で公開しています。

# Issue Management

IssueとPullRequestはGithubの機能を利用しています。
-コメントは英語で記載をお願いします。(Google翻訳がお勧めです)

- - - diff --git a/docs/developer_tools/index.html b/docs/developer_tools/index.html deleted file mode 100644 index 5c918f3..0000000 --- a/docs/developer_tools/index.html +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - Developer Tools | uroboroSQL - - - - - - - - - - - - - - - - - diff --git a/docs/getting_started/entity-access.html b/docs/getting_started/entity-access.html deleted file mode 100644 index f2f6370..0000000 --- a/docs/getting_started/entity-access.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - - - エンティティクラスを使用したDBアクセス | uroboroSQL - - - - - - - - - - - - - -

# エンティティクラスを使用したDBアクセス

uroboroSQLではSQLファイルを使用したDBアクセスの他にエンティティクラスを使用したDBアクセスも提供しています。(EntityApiSample.java (opens new window)を参照)

# エンティティクラスを使用した検索

エンティティクラスを使用した検索を行う際は、SqlAgent#query(エンティティクラス)メソッドを使用してSqlEntityQueryを取得し、バインドパラメータの設定や検索の実行を行います。

SqlEntityQueryでは検索結果をいくつかの形式で取得することができます。

メソッド 説明
SqlEntityQuery#collect() 検索結果をList<エンティティクラス>の形式で取得する
SqlEntityQuery#stream() 検索結果をjava.util.Streamの形式で取得する
SqlEntityQuery#first() 検索結果の1件目を取得する。戻り値はOptional
SqlEntityQuery#one() 検索結果の1件目を取得する。検索結果が複数件になる場合はDataNonUniqueExceptionをスローする。戻り値はOptional

まずはテーブルに紐づくエンティティクラスを作成します。

  • Department.java
package jp.co.future.uroborosql.sample.entity;
-
-import jp.co.future.uroborosql.enums.GenerationType;
-import jp.co.future.uroborosql.mapping.annotations.GeneratedValue;
-import jp.co.future.uroborosql.mapping.annotations.Id;
-import jp.co.future.uroborosql.mapping.annotations.Table;
-import jp.co.future.uroborosql.mapping.annotations.Version;
-
-/**
- * Entity that can be mapped to department table
- */
-@Table(name = "department")
-public class Department {
-    @Id
-    @GeneratedValue(strategy = GenerationType.IDENTITY)
-    private long deptNo;
-
-    private String deptName;
-
-    @Version
-    private long lockVersion;
-
-    public long getDeptNo() {
-        return this.deptNo;
-    }
-
-    public void setDeptNo(final long deptNo) {
-        this.deptNo = deptNo;
-    }
-
-    public String getDeptName() {
-        return this.deptName;
-    }
-
-    public void setDeptName(final String deptName) {
-        this.deptName = deptName;
-    }
-
-    public long getLockVersion() {
-        return this.lockVersion;
-    }
-
-    public void setLockVersion(final long lockVersion) {
-        this.lockVersion = lockVersion;
-    }
-
-    @Override
-    public String toString() {
-        return "Department [deptNo=" + this.deptNo + ", deptName=" + this.deptName + ", lockVersion="
-                + this.lockVersion + "]";
-    }
-}
-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52

@Tableアノテーションをクラスに指定することでテーブルとの紐づけを行います。上記の場合はdepartmentテーブルと紐づけています。
-エンティティクラスの詳細についてはDAOインタフェースを参照してください。

このDepartmentクラスを使用した検索は以下のようになります。

// no parameter : バインドパラメータ指定なしで検索
-List<Department> deps1 = agent.query(Department.class)
-    .collect();
-// add bind parameter : バインドパラメータを設定して検索
-List<Department> deps2 = agent.query(Department.class)
-    .equal("deptNo", 1)
-    .collect();
-
1
2
3
4
5
6
7

検索結果の各行がDepartmentクラスのインスタンスとして取得出来ます。

# エンティティクラスを使用した行挿入

エンティティクラスを使用してテーブルに行挿入を行うことが出来ます。行挿入を行う場合はSqlAgent#insert(エンティティクラスインスタンス)メソッドを使用します。

Department dept = new Department();
-dept.setDeptName("production");
-// insert entity : 行挿入
-int count = agent.insert(dept);
-
1
2
3
4

# エンティティクラスを使用した行更新

エンティティクラスを使用してテーブルの行更新を行うことが出来ます。行更新を行う場合はSqlAgent#update(エンティティクラスインスタンス)メソッドを使用します。

Department dept = agent.query(Department.class)
-    .first().orElseThrow(UroborosqlRuntimeException::new);
-dept.setDeptName("R&D");
-// update entity : 行更新
-int count = agent.update(dept);
-
1
2
3
4
5

# エンティティクラスを使用した行削除

エンティティクラスを使用してテーブルの行削除を行うことが出来ます。行更新を行う場合はSqlAgent#delete(エンティティクラスインスタンス)メソッドを使用します。

Department dept = agent.query(Department.class)
-    .first().orElseThrow(UroborosqlRuntimeException::new);
-// delete entity : 行削除
-int count = agent.delete(dept);
-
1
2
3
4

エンティティクラスを使用したDBアクセスの詳細についてはDAOインタフェースを参照してください。

uroboroSQLではこれらの基本的な操作のほか、バッチ処理やトランザクション処理なども行うことができます。 -詳細については基本操作を参照してください。

- - - diff --git a/docs/getting_started/index.html b/docs/getting_started/index.html deleted file mode 100644 index 1f59af2..0000000 --- a/docs/getting_started/index.html +++ /dev/null @@ -1,156 +0,0 @@ - - - - - - 環境設定 | uroboroSQL - - - - - - - - - - - - - -

# 環境設定

# ビルドツールの設定

uroboroSQLをMavenプロジェクトに組み込むには、pom.xmlに以下のライブラリ依存関係を追加して下さい。 -uroboroSQLMaven Central Repository (opens new window)で公開されています。

<dependency>
-  <groupId>jp.co.future</groupId>
-  <artifactId>uroborosql</artifactId>
-  <version>0.20.2</version>
-</dependency>
-
1
2
3
4
5

また、0.18.0+ より式言語ライブラリの選択が可能になりました。
-以下の2つのライブラリのうち、どちらかを選択してライブラリ依存関係に追加して下さい。

OGNL (opens new window)を利用する場合

<dependency>
-  <groupId>ognl</groupId>
-  <artifactId>ognl</artifactId>
-  <version>3.2.16</version>
-</dependency>
-
1
2
3
4
5

Spring Expression Language(SpEL) (opens new window)を利用する場合

<dependency>
-  <groupId>org.springframework</groupId>
-  <artifactId>spring-expression</artifactId>
-  <version>5.3.1</version>
-</dependency>
-
1
2
3
4
5

uroboroSQLでREPLを使用する場合は追加で以下のライブラリ依存関係を追加してください。

<dependency>
-  <groupId>org.jline</groupId>
-  <artifactId>jline</artifactId>
-  <version>3.17.1</version>
-</dependency>
-<dependency>
-  <groupId>org.fusesource.jansi</groupId>
-  <artifactId>jansi</artifactId>
-  <version>1.18</version>
-</dependency>
-
1
2
3
4
5
6
7
8
9
10

Gradleプロジェクトの場合は、build.gradleのdependencies内に以下のライブラリ依存関係を追加してください。

compile group: 'jp.co.future', name: 'uroborosql', version: '0.20.2'
-
-// 式言語ライブラリとしてOGNLを使用する場合
-compile group: 'ognl', name: 'ognl', version: '3.2.16'
-// 式言語ライブラリとしてSpring Expression Language(SpEL)を使用する場合
-compile group: 'org.springframework', name: 'spring-expression', version: '5.3.1'
-
-// REPLを使用する場合
-compile group: 'org.jline', name: 'jline', version: '3.17.1'
-compile group: 'org.fusesource.jansi', name: 'jansi', version: '1.18'
-
1
2
3
4
5
6
7
8
9
10

TIP

uroboroSQLを利用するためには、Java8以上の環境が必要です。

# 事前準備

事前準備として、

をインストールしてください。

# サンプルプロジェクトの実行

uroboroSQLのサンプルアプリケーションであるuroborosql-sample (opens new window)を使ってuroboroSQLを動かしてみましょう。

まず始めにuroborosql-sample (opens new window)から最新のソースコードを取得します。

git clone https://github.com/future-architect/uroborosql-sample.git
-
1

取得できたらcloneしたフォルダに移動します。

cd uroborosql-sample
-
1

まずはサンプルアプリケーションを実行してみましょう。 -サンプルアプリケーションは以下の起動コマンドで実行します。

mvn -PrunMain
-
1

これでサンプルアプリケーションが実行されます。
-(初回実行時は必要なライブラリをダウンロードするため時間がかかります)
-アプリケーションの実行ログが出力され、Mavenが正常終了すれば成功です。 -色々ログが流れますが、この中で

  • DB接続
  • テーブル作成と初期データの挿入
  • SQLによる検索
  • トランザクション
  • SQLによる挿入、更新、削除
  • バッチ更新

といった一連の処理が実行されています。

# サンプルプロジェクトの構成

ではサンプルアプリケーションの構成を見ていきましょう。

uroborosql-sample
-├─REPL
-│      repl.properties
-│      
-└─src
-   └─main
-       ├─java
-       │  └─jp
-       │      └─co
-       │          └─future
-       │              └─uroborosql
-       │                  └─sample
-       │                      │  AbstractApiSample.java
-       │                      │  Main.java
-       │                      │  EntityApiSample.java
-       │                      │  SqlFileApiSample.java
-       │                      │  
-       │                      ├─entity
-       │                      │      Department.java
-       │                      │      Employee.java
-       │                      │      DeptEmp.java
-       │                      │      
-       │                      └─type
-       │                              Gender.java
-       │                              
-       └─resources
-           │  logback.xml
-           │  
-           ├─data
-           │      department.tsv
-           │      dept_emp.tsv
-           │      employee.tsv
-           │      
-           └─sql
-               ├─ddl
-               │      create_tables.sql
-               │      
-               ├─setup
-               │       insert_data.sql
-               │      
-               ├─department
-               │      insert_department.sql
-               │      select_department.sql
-               │      
-               ├─employee
-               │      insert_employee.sql
-               │      select_employee.sql
-               │      update_employee.sql
-               │      
-               └─relation
-                      insert_dept_emp.sql
-                      select_dept_emp.sql
-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52

主要なファイルの説明です

ファイル 説明
Main.java (opens new window) uroborosql-sampleのメインプログラムです。ここから各サンプルコードの呼び出しを行っています。
SqlFileApiSample.java (opens new window) / EntityApiSample.java (opens new window) 提供されているAPIの種類毎のサンプルコードです。
Department.java (opens new window) / Employee.java (opens new window) / DeptEmp.java (opens new window) テーブル構造を表すエンティティクラスです。サンプルコードの中で使用します。
Gender.java (opens new window) 性別を表すEnumクラスです。サンプルコードの中で使用します。
sqlフォルダ配下のSQL (opens new window) uroborosqlで実行するSQLファイルです。
dataフォルダ配下のTSV (opens new window) テーブルデータ作成用のTSVファイルです。Mainクラスの中でテーブルへの一括データ投入を行う際のデータとして利用します。
logback.xml (opens new window) ログ出力設定ファイルです。
- - - diff --git a/docs/getting_started/sql-file-access.html b/docs/getting_started/sql-file-access.html deleted file mode 100644 index efcb7f0..0000000 --- a/docs/getting_started/sql-file-access.html +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - SQLファイルを使用したDBアクセス | uroboroSQL - - - - - - - - - - - - - -

# SQLファイルを使用したDBアクセス

# SqlConfigの生成

SQLファイルを使用したサンプルコード SqlFileApiSample.java (opens new window) を例として説明します。

まず初めにコンストラクタの中で最初にSqlConfigクラスを作成しています。 -SqlConfiguroboroSQLに対する各種の設定を保持するクラスで、SqlConfigの設定を変更することでuroboroSQLの動作を変更することが出来ます。
-ここではH2DB (opens new window)のメモリDBに接続するSqlConfigインスタンスを生成しています。 -SqlConfigの生成にはUroboroSQLクラスによるBuilderAPIを使用します。

  • 基本的な呼出方法(DBへの接続情報のみ指定)
// create SqlConfig
-SqlConfig config = UroboroSQL.builder("jdbc:h2:mem:test;DB_CLOSE_DELAY=-1", "sa", "").build();
-
1
2
  • 設定のカスタマイズ(定数の指定や検索結果の取得方法変更)
// create SqlConfig
-SqlConfig config = UroboroSQL
-    .builder("jdbc:h2:mem:test;DB_CLOSE_DELAY=-1", "sa", "")
-    // SqlContextFactoryの設定(Enum定数パッケージ設定の追加)
-    .setSqlContextFactory(new SqlContextFactoryImpl()
-    .setEnumConstantPackageNames(Arrays.asList(Gender.class.getPackage().getName())))
-    // SqlAgentFactoryの設定(Queryの戻り値のMapのキー文字列のデフォルトCaseFormat設定の追加)
-    .setSqlAgentFactory(new SqlAgentFactoryImpl().setDefaultMapKeyCaseFormat(CaseFormat.CAMEL_CASE))
-    // SqlManagerの設定(NioSqlManagerImplの指定)
-    .setSqlManager(new NioSqlManagerImpl(false))
-    .build();
-
1
2
3
4
5
6
7
8
9
10
11

SqlConfig生成時のカスタマイズの詳細については 設定を参照してください。

# テーブルの作成と初期データの登録

次に事前準備として以降の処理で使用するテーブルの作成と初期データの登録を行います。(SqlFileApiSample#setupTableAndData()を参照)
-SQLを実行する場合はSqlConfigからSqlAgentを生成します。 -SqlAgenturoboroSQLの中核となるクラスで、uroboroSQLの各操作はこのSqlAgentを使って行います。
SqlAgentAutoClosableインタフェースを実装しているので、try-with-resources文で囲むことで処理終了時に自動でクローズされます。 -このときSqlAgentの中に保持するConnectionStatementも合わせてクローズされるため、クローズ漏れによるメモリリークを防ぐことができます。

// create SqlAgent. SqlAgent implements AutoClosable.
-try (SqlAgent agent = config.agent()) {
-  // ここにSQL実行の処理を実装する
-}
-
1
2
3
4

TIP

以降の説明ではSqlAgentに対する処理はtry-with-resources文の中で行っているものとします。

uroboroSQLでは実行するSQLをファイルパスに似た表現(以降 SQL名 と呼ぶ)で指定します。 -下の例ではクラスパス上にあるsqlフォルダ配下のddl/create_tables.sqlを指定してSQL更新処理を実行します。

更新処理を行う場合、SqlAgent#update("[SQL名]")メソッドを使用してSqlUpdateを取得しUpdateの実行を行います。

// create table :  テーブル作成
-agent.update("ddl/create_tables").count();
-// setup data : 初期データ挿入
-agent.update("setup/insert_data").count();
-
1
2
3
4

ddl/create_tables.sqlで作成したテーブルの構成は以下になります。

テーブル構成

# SQLファイルを使用した検索

登録したデータを検索します。検索を行う際は、SqlAgent#query("[SQL名]")メソッドを使用してSqlQueryを取得し、バインドパラメータの設定や検索の実行を行います。

SqlQueryでは検索結果をいくつかの形式で取得することができます。

メソッド 説明
SqlQuery#collect() 検索結果をList<Map>の形式で取得する
SqlQuery#stream() 検索結果をjava.util.Streamの形式で取得する
SqlQuery#resultSet() 検索結果のResultSetを取得する
SqlQuery#first() 検索結果の1件目を取得する。取得できない場合はRuntimeExceptionがスローされる
SqlQuery#findFirst() 検索結果の1件目を取得する。戻り値はOptional
SqlQuery#one() 検索結果の1件目を取得する。取得できない場合、もしくは2件以上取得出来た場合はRuntimeExceptionがスローされる
SqlQuery#findOne() 検索結果の1件目を取得する。戻り値はOptional。2件以上取得出来た場合はRuntimeExceptionがスローされる

以下のように呼び出します。

// no parameter : バインドパラメータ指定なしで検索
-List<Map<String, Object>> deps1 = agent.query("department/select_department")
-    .collect();
-
-// add bind parameter : バインドパラメータを設定して検索
-List<Map<String, Object>> deps2 = agent.query("department/select_department")
-    .param("deptNo", 1)
-    .collect();
-
1
2
3
4
5
6
7
8

ここで実行されるSQLは以下のようになっています。

  • department/select_department.sql
select /* _SQL_ID_ */
-    dept.dept_no        as    dept_no
-,   dept.dept_name      as    dept_name
-,   dept.lock_version   as    lock_version
-from
-    department    dept
-/*BEGIN*/
-where
-/*IF SF.isNotEmpty(deptNo)*/
-and dept.dept_no    = /*deptNo*/1
-/*END*/
-/*IF SF.isNotEmpty(deptName)*/
-and dept.dept_name  = /*deptName*/'sample'
-/*END*/
-/*END*/
-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  • /* _SQL_ID_ */ はSQLを特定するID(SQL_IDといいます)を付与するための予約語で、実行時にSQLファイルを特定するための文字列に変換されます。
  • /*IF*/ ... /*END*/は条件分岐で、IFの後ろの評価式がTrueとなる場合に/*IF*//*END*/で囲まれた部分が出力されます。
  • /*deptNo*/はバインドパラメータで、実行時に?に変換され、SqlQueryに設定したパラメータがSQLへバインドされます。
  • /*deptNo*/の後ろの1はテスト用データです。このようにテスト用データをSQL文に記述しておくことで、このSQLを -SQLクライアントツールで実行する際にエラーにならずに文法の確認を行うことができます。

SQLで使用できる構文については2WaySQLを参照してください。
-また、検索のより詳しい説明はSQLによる検索を参照してください。

# SQLファイルを使用した行挿入

テーブルに対して行挿入を行うことも出来ます。 -行挿入を行う際は、SqlAgent#update("[SQL名]")メソッドを使用してSqlUpdateを取得し、続けてバインドパラメータの設定やSQLの実行を行います。

agent.update("department/insert_department")
-    .param("deptName", "production")
-    .count();
-
1
2
3

ここで実行されるSQLは以下のようになっています。

  • department/insert_department.sql
insert /* _SQL_ID_ */
-into
-    department
-(
-    dept_name
-,   lock_version
-) values (
-    /*deptName*/'sample'
-,   0
-)
-
1
2
3
4
5
6
7
8
9
10

SqlAgent#update("[SQL名]")では実行するSQLの内容によって行挿入の他に行更新や行削除を行うことが出来ます。より詳しい説明はSQLによる更新を参照してください。

- - - diff --git a/docs/getting_started/sql-repl.html b/docs/getting_started/sql-repl.html deleted file mode 100644 index 7037097..0000000 --- a/docs/getting_started/sql-repl.html +++ /dev/null @@ -1,374 +0,0 @@ - - - - - - SQL-REPL | uroboroSQL - - - - - - - - - - - - - -

# SQL-REPL

ここまではJavaアプリケーションからuroboroSQLを利用する場合の説明でした。 -uroboroSQLにはもう一つ特徴的な機能として、SQLを対話しながら実行するための REPL(Read-Eval-Print Loop) 機能を提供しています。

今度はこのREPL機能を利用してみましょう。

# REPLの利用

REPLを起動するためにはjp.co.future.uroborosql.client.SqlREPLクラスを実行する必要があります。 -サンプルアプリケーションでSqlREPLクラスを実行するためには以下のコマンドを実行します。

mvn -PREPL
-
1

実行すると以下のようにタイトル表示とコマンド説明、設定値の情報が表示され、そのあとコマンド入力状態になります。

===========================================================
-                 _                    ____   ___  _
- _   _ _ __ ___ | |__   ___  _ __ ___/ ___| / _ \| |
-| | | | '__/ _ \| '_ \ / _ \| '__/ _ \___ \| | | | |
-| |_| | | | (_) | |_) | (_) | | | (_) |__) | |_| | |___
- \__,_|_|  \___/|_.__/ \___/|_|  \___/____/ \__\_\_____|
-
-uroboroSQL SQL REPL ver.0.20.2
-===========================================================
-
-Commands :
-        query   : execute query from loaded sql file.
-                ex1) query [sql file name]<Enter> : Execute SQL without parameter.
-                ex2) query [sql file name] param1=val1 param2=val2 ...<Enter> : Execute SQL with the specified parameters.
-        update  : execute update from loaded sql file.
-                ex1) update [sql file name]<Enter> : Execute SQL without parameter.
-                ex2) update [sql file name] param1=val1 param2=val2 ...<Enter> : Execute SQL with the specified parameters.
-        view    : view sql file.
-                ex) view [sql file name]<Enter> : Show sql file contents.
-        list    : list loaded sql files.
-                ex1) list<Enter> : Show all loaded sql file(s).
-                ex2) list keyword<Enter> : Show loaded sql file(s) filter by keyword.
-        history : list command history.
-                ex1) history<Enter> : Show all command history.
-                ex2) history keyword<Enter> : Show command history filter by keyword.
-        driver  : list loaded drivers.
-        desc    : describe table.
-                ex) desc [table name]<Enter> : Show table description.
-        generate: generate sql to access the table.
-                ex) generate [select/insert/update/delete] [table name]<Enter> : Show sql to access tables according to keywords.
-        parse   : parse sql file.
-                ex) parse [sql file name]<Enter> : Parse sql file.
-        cls     : clear screen.
-        exit    : exit SQL REPL. `CTRL+C` is an alias.
-Properties file path:REPL\repl.properties
-[Properties]
-db.password=
-sql.additionalClassPath=src/test/resources;target/test-classes;${user.home}/.m2/repository/com/h2database/h2/1.4.199/h2-1.4.199.jar
-sql.encoding=UTF-8
-db.user=sa
-sql.versionColumnName=lock_no
-sql.optimisticLockSupplier=jp.co.future.uroborosql.mapping.FieldIncrementOptimisticLockSupplier
-db.url=jdbc:h2:mem:repldb;DB_CLOSE_DELAY=-1;
-sqlContextFactory.enumConstantPackageNames=jp.co.future.uroborosql.context.test
-sqlContextFactory.constantClassNames=jp.co.future.uroborosql.context.test.TestConsts
-initialize.
-
-uroborosql >
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47

REPLを立ち上げた状態では接続したDB(H2DB メモリDB)には何もない状態なので、まずはテーブルを作成します。 -サンプルアプリケーションで利用できるSQLファイルを確認しましょう。

uroborosql > list[Enter]
-
1

と入力してください。

uroborosql > list
-LIST:
-ddl/create_tables
-department/insert_department
-department/select_department
-employee/insert_employee
-employee/select_employee
-employee/update_employee
-relation/insert_dept_emp
-relation/select_dept_emp
-setup/insert_data
-uroborosql >
1
2
3
4
5
6
7
8
9
10
11

ロード済みのSQLファイルのSQL名がわかります。 -テーブルを作成するためにddl/create_tablesを実行します。 -ddl/create_tablesはDDLなので実行するためにはupdateコマンドを使用します。

uroborosql > u[Tab]
-
1

と入力してください。

uroborosql > update
-
1

という風にuに一致するコマンドがコード補完されます。

TIP

REPLでは[Tab]を押下することでコマンドやSQL名、バインドパラメータなどが必要に応じでコード補完されます。

続いて

uroborosql > update d[Tab]
-
1

と入力してください。
-今度はddlに一致するSQL名の候補が表示されます。

uroborosql > update d
-ddl/create_tables   department/insert_department   department/select_department
-
1
2

この状態で[Tab]を入力することで候補を選択することが出来ます。
ddl/create_tablesを選択して[Enter]を入力すると以下のようになります。

uroborosql > update ddl/create_tables
-
1

もう一度[Enter]を入力するとSQLが実行されます。

uroborosql > update ddl/create_tables
-[DEBUG] Executed SQL[
--- employee
-drop table if exists employee cascade;
-create table employee (
-  emp_no number(6) auto_increment
-  , first_name varchar(20) not null
-  , last_name varchar(20) not null
-  , birth_date date not null
-  , gender char(1) not null
-  , lock_version number(10) not null default 0
-  , constraint employee_PKC primary key (emp_no)
-) ;
--- dept_emp
-drop table if exists dept_emp cascade;
-create table dept_emp (
-  emp_no number(6) not null
-  , dept_no number(4) not null
-  , constraint dept_emp_PKC primary key (emp_no,dept_no)
-) ;
--- department
-drop table if exists department cascade;
-create table department (
-  dept_no number(4) auto_increment
-  , dept_name varchar(100) not null
-  , lock_version number(10) not null default 0
-  , constraint department_PKC primary key (dept_no)
-) ;
-comment on table employee is 'employee';
-comment on column employee.emp_no is 'emp_no';
-comment on column employee.first_name is 'first_name';
-comment on column employee.last_name is 'last_name';
-comment on column employee.birth_date is 'birth_date';
-comment on column employee.gender is 'gender     ''F''emale/''M''ale/''O''ther';
-comment on column employee.lock_version is 'lock_version';
-comment on table dept_emp is 'dept_emp';
-comment on column dept_emp.emp_no is 'emp_no';
-comment on column dept_emp.dept_no is 'dept_no';
-comment on table department is 'department';
-comment on column department.dept_no is 'dept_no';
-comment on column department.dept_name is 'dept_name';
-comment on column department.lock_version is 'lock_version'
-]
-[DEBUG] Execute update SQL.
-[DEBUG] SQL execution time [ddl/create_tables] : [00:00:00.030]
-update sql[ddl/create_tables] end. row count=0
-uroborosql >
-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47

ddl/create_tablesが実行され、DBにテーブルが作成されました。

では次に作成されたテーブルの定義情報を確認します。
-テーブル定義情報の確認にはdescコマンドを使用します。 -ここではEMPLOYEEテーブルの定義情報を確認してみましょう。

uroborosql > desc EMPLOYEE[Enter]
-
1
uroborosql > desc EMPLOYEE
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-|TABLE_NAME|COLUMN_NAME |TYPE_NAME|COLUMN_SIZE|DECIMAL_DIGITS|IS_NULLABLE|COLUMN_DEF                                                                      |REMARKS                        |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-|EMPLOYEE  |EMP_NO      |DECIMAL  |          6|             0|NO         |(NEXT VALUE FOR "PUBLIC"."SYSTEM_SEQUENCE_D06A5524_EC18_4835_A536_1F5A372BFC73")|emp_no                         |
-|EMPLOYEE  |FIRST_NAME  |VARCHAR  |         20|             0|NO         |                                                                                |first_name                     |
-|EMPLOYEE  |LAST_NAME   |VARCHAR  |         20|             0|NO         |                                                                                |last_name                      |
-|EMPLOYEE  |BIRTH_DATE  |DATE     |         10|             0|NO         |                                                                                |birth_date                     |
-|EMPLOYEE  |GENDER      |CHAR     |          1|             0|NO         |                                                                                |gender        'F'emale/'M'ale/'O'ther|
-|EMPLOYEE  |LOCK_VERSION|DECIMAL  |         10|             0|NO         |                                                                               0|lock_version                   |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-uroborosql >
1
2
3
4
5
6
7
8
9
10
11

EMPLOYEEテーブルの定義情報が表形式で表示されました。

続いて初期データを投入しましょう。

setup/insert_dataを実行します。

uroborosql > update setup/insert_data[Enter]
-
1
uroborosql > update setup/insert_data
-[DEBUG] Executed SQL[
-insert into department (dept_name) values ('sales');
-insert into department (dept_name) values ('export');
-insert into department (dept_name) values ('accounting');
-insert into department (dept_name) values ('personnel');
-insert into employee (first_name, last_name, birth_date, gender) values ('Bob', 'Smith', '1970-01-02', 'M');
-insert into employee (first_name, last_name, birth_date, gender) values ('Susan', 'Davis', '1969-02-10', 'F');
-insert into employee (first_name, last_name, birth_date, gender) values ('John', 'Wilson', '1982-05-08', 'M');
-insert into employee (first_name, last_name, birth_date, gender) values ('Sharon', 'Johnson', '1990-01-20', 'F');
-insert into employee (first_name, last_name, birth_date, gender) values ('Stephen', 'Taylor', '2003-12-31', 'M');
-insert into dept_emp (emp_no, dept_no) values (1, 1);
-insert into dept_emp (emp_no, dept_no) values (2, 1);
-insert into dept_emp (emp_no, dept_no) values (3, 2);
-insert into dept_emp (emp_no, dept_no) values (4, 3);
-insert into dept_emp (emp_no, dept_no) values (5, 4)
-]
-[DEBUG] Execute update SQL.
-[DEBUG] SQL execution time [setup/insert_data] : [00:00:00.017]
-update sql[setup/insert_data] end. row count=1
-uroborosql >
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

これでテーブルに初期データが挿入されました。 -では、挿入したデータを検索してみましょう。

検索を行う前に、検索を行うSQLの内容を確認してみましょう。
-SQLの内容を確認するにはviewコマンドを使用します。

uroborosql > view department/select_department[Enter]
-
1
uroborosql > view department/select_department
-select /* _SQL_ID_ */
-        dept.dept_no            as      dept_no
-,       dept.dept_name          as      dept_name
-,       dept.lock_version       as      lock_version
-from
-        department      dept
-/*BEGIN*/
-where
-/*IF SF.isNotEmpty(deptNo)*/
-and     dept.dept_no    =       /*deptNo*/1
-/*END*/
-/*IF SF.isNotEmpty(deptName)*/
-and     dept.dept_name  =       /*deptName*/'sample'
-/*END*/
-/*END*/
-uroborosql >
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

検索を行う場合はqueryコマンドを使用します。 -queryの後に実行するSQL名を指定します。

uroborosql > query department/select_department[Enter]
-
1
uroborosql > query department/select_department
-[DEBUG] Evaluation Expression:[SF.isNotEmpty(deptNo)], Result:[false], Parameter:[deptNo:[null]]
-[DEBUG] Evaluation Expression:[SF.isNotEmpty(deptName)], Result:[false], Parameter:[deptName:[null]]
-[DEBUG] Executed SQL[
-select /* department/select_department */
-        dept.dept_no            as      dept_no
-,       dept.dept_name          as      dept_name
-,       dept.lock_version       as      lock_version
-from
-        department      dept
-
-]
-[DEBUG] Execute search SQL.
-[INFO ]
-+-------+----------+------------+
-|DEPT_NO|DEPT_NAME |LOCK_VERSION|
-+-------+----------+------------+
-|      1|sales     |           0|
-|      2|export    |           0|
-|      3|accounting|           0|
-|      4|personnel |           0|
-+-------+----------+------------+
-[DEBUG] SQL execution time [department/select_department] : [00:00:00.078]
-query sql[department/select_department] end.
-uroborosql >
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

ここではバインドパラメータを指定しなかったため、絞込み条件のないSQLが実行され検索結果として4件のデータが取得できました。

REPLでは上の結果のように、

  • 実行するSQL
  • バインドパラメータ
  • SQL文の中の評価式とその評価結果
  • 検索結果
  • 実行時間

が表示されるので、SQLがどういう風に実行され、どういう値が取得できるのかが良く分かるようになっています。

次にバインドパラメータを指定して検索してみましょう。

検索するSQLにどのようなバインドパラメータや条件分岐があるかを確認するにはparseコマンドを使用します。

uroborosql > parse department/select_department[Enter]
-
1
uroborosql > parse department/select_department
-PARSE:
-
-SQL :
-select /* _SQL_ID_ */
-        dept.dept_no            as      dept_no
-,       dept.dept_name          as      dept_name
-,       dept.lock_version       as      lock_version
-from
-        department      dept
-/*BEGIN*/
-where
-/*IF SF.isNotEmpty(deptNo)*/
-and     dept.dept_no    =       /*deptNo*/1
-/*END*/
-/*IF SF.isNotEmpty(deptName)*/
-and     dept.dept_name  =       /*deptName*/'sample'
-/*END*/
-/*END*/
-
-BRANCHES :
-        BEGIN {
-                IF ( SF.isNotEmpty(deptNo) ) {
-                }
-                IF ( SF.isNotEmpty(deptName) ) {
-                }
-        }
-
-BIND_PARAMS :
-        deptName
-        deptNo
-uroborosql >
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

parseコマンドの結果は以下のようになります。

  • SQL : 解析対象のSQL
  • BRANCHES : 条件分岐
  • BIND_PARAMS : バインドパラメータ

条件分岐では BEGINのスコープ({}で囲まれた中)に2つのIF分岐が並んでいることがわかります。
-また、バインドパラメータでは deptNodeptNameがあることがわかります。

parseコマンドで確認したバインドパラメータを指定して検索を行います。

uroborosql > query department/select_department deptNo=1[Enter]
-
1
uroborosql > query department/select_department deptNo=1
-[DEBUG] Evaluation Expression:[SF.isNotEmpty(deptNo)], Result:[true], Parameter:[deptNo:[1]]
-[DEBUG] Evaluation Expression:[SF.isNotEmpty(deptName)], Result:[false], Parameter:[deptName:[null]]
-[DEBUG] Executed SQL[
-select /* department/select_department */
-        dept.dept_no            as      dept_no
-,       dept.dept_name          as      dept_name
-,       dept.lock_version       as      lock_version
-from
-        department      dept
-where
-dept.dept_no    =       ?/*deptNo*/
-
-]
-[DEBUG] Set the parameter.[INDEX[1], Parameter name[deptNo], Value[1], Class[Integer]]
-[DEBUG] Execute search SQL.
-[INFO ]
-+-------+---------+------------+
-|DEPT_NO|DEPT_NAME|LOCK_VERSION|
-+-------+---------+------------+
-|      1|sales    |           0|
-+-------+---------+------------+
-[DEBUG] SQL execution time [department/select_department] : [00:00:00.005]
-query sql[department/select_department] end.
-uroborosql >
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

deptNo1を指定して検索しています。 -この時、SQL文の評価式である/*IF SF.isNotEmpty(deptNo)*/がtrueとなりSQLのwhere句にdept_noの条件が追加されバインドパラメータがバインドされます。
-その結果、検索結果は1件になっています。

このようにSQL名の後ろにバインドパラメータ名=という形でバインドパラメータを記述することでバインドパラメータを指定してSQLを実行することができます。

バインドパラメータが複数ある場合はバインドパラメータ名1=値1 バインドパラメータ名2=値2 ... という風に各パラメータの間を空白で区切って指定してください。

  • バインドパラメータを複数指定する例
uroborosql > query department/select_department deptNo=1 deptName=sales[Enter]
-
1
uroborosql > query department/select_department deptNo=1 deptName=sales
-[DEBUG] Evaluation Expression:[SF.isNotEmpty(deptNo)], Result:[true], Parameter:[deptNo:[1]]
-[DEBUG] Evaluation Expression:[SF.isNotEmpty(deptName)], Result:[true], Parameter:[deptName:[{115,97,108,101,115},0,0]]
-[DEBUG] Executed SQL[
-select /* department/select_department */
-        dept.dept_no            as      dept_no
-,       dept.dept_name          as      dept_name
-,       dept.lock_version       as      lock_version
-from
-        department      dept
-where
-dept.dept_no    =       ?/*deptNo*/
-and     dept.dept_name  =       ?/*deptName*/
-
-]
-[DEBUG] Set the parameter.[INDEX[1], Parameter name[deptNo], Value[1], Class[Integer]]
-[DEBUG] Set the parameter.[INDEX[2], Parameter name[deptName], Value[sales], Class[String]]
-[DEBUG] Execute search SQL.
-[INFO ]
-+-------+---------+------------+
-|DEPT_NO|DEPT_NAME|LOCK_VERSION|
-+-------+---------+------------+
-|      1|sales    |           0|
-+-------+---------+------------+
-[DEBUG] SQL execution time [department/select_department] : [00:00:00.006]
-query sql[department/select_department] end.
-uroborosql >
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

REPLを終了する場合はコマンドquit,もしくはexitを入力してください。

uroborosql > quit[Enter]
-SQL REPL end.
-
1
2

終了メッセージが表示されてREPLが終了します。

REPLには他にも以下のコマンドがあります。

コマンド 説明
query 検索SQLを実行します
update 更新SQL(insert/update/delete)やDDLを実行します
view SQL名で指定したSQLの内容を表示します
list 使用可能なSQL名の一覧を表示します
history 実行したコマンドの履歴を表示します
driver 使用可能なJDBCドライバーの一覧を表示します
desc 指定したテーブルの定義情報を表示します
generate 指定したテーブルに対するselect/insert/update/deleteを行うSQLを生成します
parse 指定したSQLで使用されているバインドパラメータやIF分岐条件を抽出して表示します
cls コンソール画面のクリア
exit REPLを終了します
help 利用できるコマンドの説明を表示します

# REPLの設定

さて、ここまでREPLの操作を説明してきましたが、DB接続情報やSQLファイルの場所はどこで指定していたのでしょうか。 -実はjp.co.future.uroborosql.client.SqlREPLを実行する際、引数としてプロパティファイルを指定します。このプロパティファイルにDB接続情報やSQLファイルの場所などREPLを実行するのに必要な情報が記載されています。

pom.xmlのREPL実行部分

<plugin>
-  <groupId>org.codehaus.mojo</groupId>
-  <artifactId>exec-maven-plugin</artifactId>
-  <executions>
-    <execution>
-      <id>repl</id>
-      <goals>
-        <goal>java</goal>
-      </goals>
-      <configuration>
-        <workingDirectory>${basedir}</workingDirectory>
-        <mainClass>jp.co.future.uroborosql.client.SqlREPL</mainClass>
-        <arguments>
-          <argument>REPL/repl.properties</argument>
-        </arguments>
-      </configuration>
-      <phase>process-test-classes</phase>
-    </execution>
-  </executions>
-</plugin>
-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

初期設定ではプロパティファイルの場所はREPL/repl.propertiesになっています。

  • REPL/repl.properties
db.url=jdbc:h2:file:./target/db/repldb;
-db.user=sa
-db.password=
-
-sql.additionalClassPath=${user.home}/.m2/repository/com/h2database/h2/1.4.192/h2-1.4.192.jar
-
1
2
3
4
5
プロパティ名 説明
db.url DB接続URL
db.schema DB接続スキーマ
db.user DB接続ユーザ
db.password DB接続パスワード
sql.loadPath SQLをロードするパス。初期値はsql
sql.encoding SQLファイルのエンコーディング。初期値はUTF-8
sql.fileExtension ロードするSQLファイルの拡張子。初期値は.sql
sql.detectChanges SQLファイルの変更検知を行うかどうか。初期値はtrue
sql.additionalClassPath REPL起動時に起動時クラスパス以外でクラスパスに追加する場所。;で区切ることで複数指定可。SQLファイルのルート(sqlフォルダの親フォルダ)をクラスパスに追加することで、自動的にSQLファイルがロードされます。合わせて接続するDBのJDBCドライバを含むJarを指定することで動的にJDBCドライバを読み込みます。
sqlContextFactory.constantClassNames SqlContextFactoryに登録する定数クラスを指定。,で区切ることで複数指定可。 ex) jp.co.future.uroborosql.context.test.TestConsts
sqlContextFactory.enumConstantPackageNames SqlContextFactoryに登録するEnum定数パッケージ名を指定。,で区切ることで複数指定可。ex) jp.co.future.uroborosql.context.test

このプロパティファイルを変更することでいろいろなDBに接続することができるようになります。

これまで見てきたようにREPLを利用することで簡単にSQL実行や動作確認ができるので、SQL開発には欠かせないツールになります。 -色々なSQLを記述してREPLで試してみてください。

これで Getting Started は終了です。

uroboroSQLで使用するSQLの文法や基本的な操作については基本操作を参照してください。

- - - diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index 4ff946f..0000000 --- a/docs/index.html +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - uroboroSQL - - - - - - - - - - - - - -
hero

- uroboroSQL -

- uroboroSQLはJava製のシンプルなSQL実行ライブラリです -

- Why uroboroSQL -

2Way-SQL with Coverage

ORマッパー、クエリビルダならJavaコードでカバレッジが取れるのに、2Way-SQLで分岐を使った場合にはカバレッジが取れず本番環境で意図しないSQLが・・・。uroboroSQLではテスト実行時にカバレッジ取得用のログを出力・解析することにより、カバレッジレポートを出力することが可能です。

REPL搭載

SQLファイルを修正するたびにコンパイルしてテスト実行するのに時間がかかる・・・。他のORマッパーやSQLフレームワークでイライラしていた経験はありませんか?uroboroSQLではREPLを搭載。SQLを修正してすぐにIDE等のコンソールからコマンドでコンパイルなしで実行、即デバッグができます。

区分値サポート

2Way-SQLのライブラリを使用していると、それぞれのSQLで区分値や定数などをいちいちパラメータに指定するのがわずらわしいと思ったことはありませんか?エンタープライズで使われてOSS化したuroboroSQLでは、SQLファイルの中で定数クラスや列挙体を指定することにより、呼び出し時の実装をシンプルにします。

- - - diff --git a/docs/license/index.html b/docs/license/index.html deleted file mode 100644 index aeadf8c..0000000 --- a/docs/license/index.html +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - License | uroboroSQL - - - - - - - - - - - - - -

# License

MIT License

Copyright (c) 2018

Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE.

- - - diff --git a/docs/why_uroborosql/index.html b/docs/why_uroborosql/index.html deleted file mode 100644 index 940db7a..0000000 --- a/docs/why_uroborosql/index.html +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - uroboroSQLとは | uroboroSQL - - - - - - - - - - - - - -

# uroboroSQLとは

uroboroSQLは2Way-SQLが利用可能なJava製のシンプルなSQL実行ライブラリです。

フューチャーアーキテクト (opens new window)社内にて、2006-2007年頃にS2Dao (opens new window)を参考に開発され、プロジェクトで実際に利用されて現在まで改善が続けられてきました。社内ではWebアプリケーションフレームワークや各種設計開発支援ツールと連携・統合される形で利用されています。

とはいえ、社内で秘伝のタレ化していることは否めず、開発フェーズでは開発パートナーさんからも「ググれない」から使い方がわからないいう声もちらほら。だったらOSS化してしまえということのが公開のきっかけです。

# uroboroSQLを使う理由

JavaからRDBにアクセスするとき、Java標準のJPA(Java Persistence API)の実装であるEclipseLink (opens new window)OpenJPA (opens new window)はもとより、歴史のあるORMとしてHibernate (opens new window)MyBatis (opens new window)Spring Data JDBC (opens new window)といったグローバルで使われているものもありますし、日本でよく使われてきたS2Dao (opens new window)S2JDBC (opens new window)DBflute (opens new window)Doma (opens new window)といったものもあります。

こういった数多のDB系ライブラリ・フレームワークの中で解決したい領域もそれぞれですが、uroboroSQLは主にSQL中心の設計コンセプトを採用しています。Javaを中心に考えてSQLを組み立てるという思想ではなく、SQLに足りないところをJavaで補うという思想です。

これはエンタープライズシステムにおいて、ORマッパーやクエリビルダでは実装しきれない、hint句による実行計画の指定や分析関数の利用など複雑かつDBプロダクト依存のSQLを使う場合に有効と考えています。

そのため、uroboroSQLはSQLは2Way-SQL方式で記述ができるものの、ORMでよくあるエンティティクラスとリレーションをたどって遅延ロードして子エンティティを取得するなどの機能は有していません。(単純なエンティティクラスへのマッピングは提供しています)

その分、エンタープライズで培われたノウハウとして、区分値サポート、リトライ、フィルターによるカスタマイズなどの機能を充実させています。また、2Way-SQLのIF分岐に対してカバレッジを取れるようにするという、品質視点での機能があるのも特徴です。

SQLの能力を最大限活かしつつ、生産性と品質を高めたい

それがuroboroSQLの最大の関心事なのです。

# Further Reading

- - - diff --git a/package.json b/package.json index 61d2b44..70bf2de 100644 --- a/package.json +++ b/package.json @@ -5,18 +5,17 @@ "author": "Future Corporation", "main": "index.js", "scripts": { - "watch": "cross-env DEBUG=true NODE_OPTIONS='--openssl-legacy-provider' vuepress dev src --debug", - "build": "cross-env NODE_OPTIONS='--openssl-legacy-provider' vuepress build src --dest docs", - "update:auto": "node ./scripts/update.js" + "watch": "vitepress dev src --open", + "build": "vitepress build src", + "lint": "npm run lint:format", + "lint:format": "prettier src --list-different", + "format": "prettier src --write" }, "license": "MIT", "dependencies": { - "cross-env": "^7.0.0", "markdown-it-task-lists": "^2.1.1", - "vuepress": "^1.5.4", - "vuepress-plugin-mermaidjs": "^1.9.1", - "vuepress-plugin-fulltext-search": "https://github.com/shout-star/vuepress-plugin-fulltext-search.git#v2.1.0-fix", - "serialize-javascript": ">=3.1.0", - "@vuepress/plugin-google-analytics": "^1.9.9" + "prettier": "^3.4.2", + "vitepress": "^1.5.0", + "vitepress-plugin-mermaid": "^2.0.17" } } diff --git a/src/.vitepress/config.mjs b/src/.vitepress/config.mjs new file mode 100644 index 0000000..982930a --- /dev/null +++ b/src/.vitepress/config.mjs @@ -0,0 +1,201 @@ +import fs from "fs"; +import path from "path"; +import { fileURLToPath } from "url"; +import { defineConfig as defineConfigBase } from "vitepress"; +import { withMermaid } from "vitepress-plugin-mermaid"; +import markdownItTaskLists from "markdown-it-task-lists"; +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); + +function getLinkItem(link) { + let filePath = path.join(__dirname, "..", link).replace(/\.html$/, ".md"); + if (filePath.endsWith("/")) { + filePath = path.join(filePath, "index.md"); + } + const text = parseMarkdown(filePath).title; + return { text, link }; +} + +/** @type {import("vitepress").DefaultTheme.Sidebar} */ +const links = { + "/": [ + { + text: "Why uroboroSQL", + collapsed: true, + items: [getLinkItem("/why_uroborosql/")], + }, + { + text: "Getting Started", + collapsed: true, + items: [ + getLinkItem("/getting_started/"), + getLinkItem("/getting_started/sql-file-access.html"), + getLinkItem("/getting_started/entity-access.html"), + getLinkItem("/getting_started/sql-repl.html"), + ], + }, + { + text: "前提知識", + collapsed: true, + items: [getLinkItem("/background/"), getLinkItem("/background/el.html")], + }, + { + text: "基本操作", + collapsed: true, + items: [ + getLinkItem("/basics/"), + getLinkItem("/basics/sql-file-api.html"), + getLinkItem("/basics/entity-api.html"), + getLinkItem("/basics/transaction.html"), + ], + }, + { + text: "設定", + collapsed: true, + items: [ + getLinkItem("/configuration/"), + getLinkItem("/configuration/connection-supplier.html"), + getLinkItem("/configuration/sql-context-factory.html"), + getLinkItem("/configuration/sql-agent-factory.html"), + getLinkItem("/configuration/sql-manager.html"), + getLinkItem("/configuration/sql-filter-manager.html"), + getLinkItem("/configuration/entity-handler.html"), + getLinkItem("/configuration/dialect.html"), + ], + }, + { + text: "高度な操作", + collapsed: true, + items: [getLinkItem("/advanced/")], + }, + getLinkItem("/developer_tools/"), + getLinkItem("/developer_guide/"), + getLinkItem("/license/"), + getLinkItem("/about/"), + ], +}; + +/** + * @typedef {import('vitepress').UserConfig} VitepressConfig + */ +/** + * @param {VitepressConfig} config config + * @returns {VitepressConfig} config + */ +function defineConfig(config) { + return withMermaid(defineConfigBase(config)); +} + +export default defineConfig({ + title: "uroboroSQL", + description: "uroboroSQLはJava製のシンプルなSQL実行ライブラリです", + outDir: path.join(__dirname, "../../docs"), + ignoreDeadLinks: "localhostLinks", + markdown: { + lineNumbers: true, + config(md) { + md.use(markdownItTaskLists); + }, + }, + locales: { + root: { + lang: "ja", + }, + }, + head: [ + ["link", { rel: "icon", href: "/uroborosql-doc/favicon.ico" }], + ["meta", { name: "og:type", content: "website" }], + [ + "meta", + { + name: "og:description", + content: + "uroboroSQLDeveloper-oriented and SQL centric database access library.", + }, + ], + [ + "meta", + { + name: "og:image", + content: + "https://future-architect.github.io/uroborosql-doc/images/logo.png", + }, + ], + ], + srcExclude: ["./README.md"], + base: "/uroborosql-doc/", + themeConfig: { + siteTitle: "", // ロゴがタイトルなのでテキストのタイトルは必要ありません。 + logo: "images/logo.png", + footer: { + copyright: `MIT Licensed | ©2018-${new Date().getFullYear()} Future Corporation. All rights reserved.`, + }, + search: { + provider: "local", + options: { + detailedView: true, + }, + }, + editLink: { + pattern: + "https://github.com/future-architect/uroborosql-doc/edit/master/src/:path", + }, + outline: { + level: "deep", + }, + nav: [ + { text: "Home", link: "/" }, + { text: "Getting Started", link: "/getting_started/" }, + { text: "基本操作", link: "/basics/" }, + { text: "設定", link: "/configuration/" }, + { text: "高度な操作", link: "/advanced/" }, + { text: "Developer Tools", link: "/developer_tools/" }, + ], + + sidebar: links, + + socialLinks: [ + { + icon: "github", + link: "https://github.com/future-architect/uroborosql", + }, + ], + }, +}); + +function parseMarkdown(filePath) { + const result = { + title: "", + }; + const contents = fs.readFileSync(filePath, "utf8"); + let markdownContents = contents; + const frontmatterMatch = /^---([\s\S]+?)---/u.exec(contents); + if (frontmatterMatch) { + // eslint-disable-next-line prefer-destructuring + const frontmatter = frontmatterMatch[1]; + const title = /(?:^|\n)title\s*:\s*([^\n]+)\s*\n/u.exec(frontmatter); + if (title) { + // eslint-disable-next-line prefer-destructuring + result.title = title[1]; + } + markdownContents = contents.slice(frontmatterMatch[0].length); + } + if (!result.title) { + const h1Match = /(?:^|\n)#\s+([^\n]+)\n/u.exec(markdownContents); + if (h1Match) { + // eslint-disable-next-line prefer-destructuring + const title = h1Match[1]; + result.title = title + .replace(/`[^`]*`|\\.|<[^>]+>/gu, (m) => { + if (m.startsWith("<")) return ""; + const base = m.startsWith("\\") // escape + ? m.slice(1) + : m.slice(1, -1); + return base.replace(//gu, ">"); + }) + .trim(); + } + } + + return result; +} diff --git a/src/.vitepress/theme/index.mjs b/src/.vitepress/theme/index.mjs new file mode 100644 index 0000000..8b1abdf --- /dev/null +++ b/src/.vitepress/theme/index.mjs @@ -0,0 +1,7 @@ +import DefaultTheme from "vitepress/theme"; +import "./style.css"; + +/** + * @typedef {import('vitepress').EnhanceAppContext} EnhanceAppContext + */ +export default DefaultTheme; diff --git a/src/.vitepress/theme/style.css b/src/.vitepress/theme/style.css new file mode 100644 index 0000000..6f56279 --- /dev/null +++ b/src/.vitepress/theme/style.css @@ -0,0 +1,68 @@ +:root { + --uroborosql-text-color: #031634; + --uroborosql-text-outline-color: #d2e9ff; + --uroborosql-red: #e00213; + --uroborosql-blue: #2c79e0; + --uroborosql-yellow: #c0ff16; + + --vp-home-hero-name-color: var(--uroborosql-blue); + /*--vp-home-hero-name-color: transparent; + --vp-home-hero-name-background: -webkit-linear-gradient( + 120deg, + var(--uroborosql-blue) 30%, + var(--uroborosql-red) + ); */ + --vp-home-hero-image-background-image: linear-gradient( + -45deg, + var(--uroborosql-yellow) 50%, + var(--uroborosql-blue) 50% + ); + --vp-home-hero-image-filter: blur(120px); +} + +/* コンテンツの画像を横並びに戻します */ +.vp-doc img { + display: inline-block; +} + +/* メインコンテンツの幅を広げます。最大1920pxまでを許可します。 */ +#app .VPDoc.has-aside .content-container { + max-width: 1280px; +} + +@media (min-width: 1440px) and (max-width: 1920px) { + /* 左上タイトル領域 */ + #app .VPNavBar.has-sidebar .container > .title { + padding-left: 32px; + width: var(--vp-sidebar-width); + } + + /* 左メニュー領域 */ + #app .VPSidebar { + padding-left: 32px; + width: var(--vp-sidebar-width); + } + + /* コンテンツ領域 */ + #app .VPContent.has-sidebar { + padding-right: 0; + padding-left: var(--vp-sidebar-width); + } + + /* ヘッダー領域 */ + #app .VPNavBar.has-sidebar .content { + padding-right: 32px; + padding-left: var(--vp-sidebar-width); + } + + /* ヘッダーの下線 */ + #app .VPNavBar.has-sidebar .divider { + padding-left: var(--vp-sidebar-width); + } +} + +@media (min-width: 1920px) { + :root { + --vp-layout-max-width: 1920px; + } +} diff --git a/src/.vuepress/config.js b/src/.vuepress/config.js deleted file mode 100644 index e655ef9..0000000 --- a/src/.vuepress/config.js +++ /dev/null @@ -1,115 +0,0 @@ -'use strict' - -module.exports = { - base: process.env.VUEPRESS_BASE || '/uroborosql-doc/', - title: 'uroboroSQL', - description: 'uroboroSQLはJava製のシンプルなSQL実行ライブラリです', - serviceWorker: false, - markdown: { - // 行番号。表示すると狭いので削除したほうがいいならこの記述を削除 - lineNumbers: true, - extendMarkdown: md => { - md.use(require('markdown-it-task-lists')) - } - }, - head: [ - ['link', { rel: 'icon', href: '/favicon.ico' }], - ['meta', { name: 'og:type', content: 'website' }], - ['meta', { name: 'og:description', content: 'uroboroSQLDeveloper-oriented and SQL centric database access library.' }], - ['meta', { name: 'og:image', content: 'https://future-architect.github.io/uroborosql-doc/images/logo.png' }] - ], - plugins: [ - ['@vuepress/google-analytics', { - ga: 'UA-93486523-1' - }], - 'vuepress-plugin-mermaidjs', - 'fulltext-search', - 'mermaidjs' - ], - locales: { - '/': { - lang: 'ja' - } - }, - evergreen: true, - themeConfig: { - logo: '/images/logo.png', - repo: 'https://github.com/future-architect/uroborosql', - docsRepo: 'https://github.com/future-architect/uroborosql-doc', - docsDir: 'src', - editLinks: true, - lastUpdated: true, - searchMaxSuggestions: 15, - sidebarDepth: 2, - nav: [ - { text: 'Home', link: '/' }, - { text: 'Getting Started', link: '/getting_started/' }, - { text: '基本操作', link: '/basics/' }, - { text: '設定', link: '/configuration/' }, - { text: '高度な操作', link: '/advanced/' }, - { text: 'Developer Tools', link: '/developer_tools/' } - ], - sidebar: [ - { - title: 'Why uroboroSQL', - collapsable: true, - children: [ - '/why_uroborosql/', - ] - }, - { - title: 'Getting Started', - collapsable: true, - children: [ - '/getting_started/', - '/getting_started/sql-file-access', - '/getting_started/entity-access', - '/getting_started/sql-repl', - ] - }, - { - title: '前提知識', - collapsable: true, - children: [ - '/background/', - '/background/el', - ] - }, - { - title: '基本操作', - collapsable: true, - children: [ - '/basics/', - '/basics/sql-file-api', - '/basics/entity-api', - '/basics/transaction', - ] - }, - { - title: '設定', - collapsable: true, - children: [ - '/configuration/', - '/configuration/connection-supplier', - '/configuration/sql-context-factory', - '/configuration/sql-agent-factory', - '/configuration/sql-manager', - '/configuration/sql-filter-manager', - '/configuration/entity-handler', - '/configuration/dialect', - ] - }, - { - title: '高度な操作', - collapsable: true, - children: [ - '/advanced/', - ] - }, - '/developer_tools/', - '/developer_guide/', - '/license/', - '/about/', - ] - } -} \ No newline at end of file diff --git a/src/.vuepress/public/favicon.ico b/src/.vuepress/public/favicon.ico deleted file mode 100644 index de57b34c6f6c9e31d790b3c9df486ea0427a64ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1150 zcmb7@O-vI}5XT=MM>QOX9Eb@XBpy7N_z^j9HPHjncrh{F(7-_rF-F0NXe2Qt22rDc zBvnMIP#_Qvn5qi`wOG5fKwC+vz_u1BwtSR!+uhQ?vrD%TqX%a*J1>*@{ol^Md5mSy zlas^fUBJq+8QaYm+fPm@%53E+s8*N7nBspk02u&B3foQgO%%yKzDUbbU8c6yB2bgg zkwz{OdvdM7 zk;V?^uydI)AI6QYO{~~pm(6&%@)_4`R)k{~;Kx)lU~GrvdN0xc%iH3ho&;bm);9`x zUhhsIY(rPr42F+jNluNKn}Z0ECiN|0tPS|-s7>vwo)y5C=o%ILoSj3@C{hEC+|mx)jfA&DAk7%9_kBoV{)kB4B{?hugZ6H zWNEXMT%71}eDXr_SfqH^g_boAx4mz04rcHou?sf%o?eK@UR3}=*Hx9LSp{iqtv!Wd z`w;l58;G0R<@MKhv1&0OE|?*W=poddmb_&Q5xzG>dn#9h&JF4ere`2%FNH}5Z#jdz zoXNt?!}9E9CQYAZ@={ekq%R#nOgOHxGN`4C=$3-AeoUZvNo9ZPvxd;C7QUu+*G)9Zm?>}z7 IR`LJw7p3|(2mk;8 diff --git a/src/.vuepress/public/fonts/FontAwesome.otf b/src/.vuepress/public/fonts/FontAwesome.otf deleted file mode 100644 index 3ed7f8b48ad9bfab52eb03822fefcd6b77d2e680..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109688 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%0D}#zSrRb8FuaocFSDv)#ldj3 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 diff --git a/src/.vuepress/public/fonts/fontawesome-webfont.svg b/src/.vuepress/public/fonts/fontawesome-webfont.svg deleted file mode 100644 index d05688e..0000000 --- a/src/.vuepress/public/fonts/fontawesome-webfont.svg +++ /dev/null @@ -1,655 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/.vuepress/public/fonts/fontawesome-webfont.ttf b/src/.vuepress/public/fonts/fontawesome-webfont.ttf deleted file mode 100644 index 26dea7951a73079223b50653c455c5adf46a4648..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 142072 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 +|+&Vdls@0SAya!8#E9iVniRwHu0GY;H*n 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�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%0D0!#Bo^>xe$Z4SmykflG_VnkLvLv4@e#4_y4Q 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�>=olG4!T4BYNCc4f{&*Kgc`m= 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

8d=mW%59z6 z^Wf|k(#**fuiJ^`16@<#ttN|~rLfdF-v)d}vJKt(?>$mYT&30W?`T^V_r@Xm;`@D` zKe3w^B7pt#%m*=cV!bWm7qP~?V7ExN=gbo0cQ7t-N7)6p6c>Pz`}a}rIm4Qds6dvm zA!i8?3GS=2V|s5D9b6$0jxj0u!Vt$&h2gIoPj8zrk26D*MDp zeOg#zI~LLd4W>Re>Kfhxyw61Zv!(Y)HqI(`u8GM`-bwu^*IGGmaZMA>B@o9)Z8r9n zfQ7rv?###p?Z2$ka|!g32?s5#xs~&mKh}tQZ`Thpud8Pnh}w1UL9Tr4&xA0iKyT$l2Yg*kkEUWb0k>4|Mhb~DnP2U+@%!$|1mwPFqC$A+qeZ|pVse5}LRY?= zI^T!ar2N5~vj${clvCMlEPyXUe^fYR{=?XAgfFh9oH3GLPQK4(OwV%db}>^6Pl@iG z)3f)YKOcswI>mb)oH8SYBwrR|58wo)2dfxiJC17NIw z!Xq#*7VfIMK1?-=fq^bf(+g;d6At`M4^A**Rcxbgh8kp?<307=OYV{7eurfSBVM5l zO%H;2&)(@dcz4zi03L|XtYlLBH{7JpVj~#;*YY?dEI8Nu+n~r|=WRyu#McK4Lt-Nj z)}MdyjiFt-I*pa}7s z)}>A|a|lvd5gn%Kj2Zepq8xKxl(ZlTUHD_T#;Z%b~uWLf946wDMs1U~E{)2OH8!aI4s|fmv-c%kR|gE~ z|4C0DIB(P+BwjpT;0{iCinwE%j{k0idu=HG`x9PZL z=k2?gQH_?v4BoCT;Qa;p|HPjT@2xP)F>52ZRBZL!$NQIU9iDZkjh=HwKQA0onLvnp z`Kw{3d%stWH$O09-P+?>wx$CSoz3KIC5f(M;JMH|p4+#YZ+bT?ejsNgszlZ6t$YxU zI^R47ooTA>zrp5F;=Ei6lG% zcVdypcRg|J(@x&f-3Kf@l&}9UTKJHhqbQpH9V%Ii641zSqwwst0#}Sl@cE|OdGXbOogCB(E#{GtPZ6NDRNXcR&*i&gVn%$0sLeNBp>N zZf;(pTW-kA0uNcJ*EKkKwpI7kh@~Tr?KOGu5z_mBI+J*3qz?e!z!r1^HaE%t) zs&6!mJz&J65Uq_7rc-!QZnNGBzC0TxDn$@lNd1^u(v%?YiM}UJJ_c?=i^;-`DL?u=F4V$YAVg)eePafFv;&T*h{Cp zmQT0Kp^(<;{L#GCS5!u(cE5eMeVbdw1g%G6CxNJo?Gza1d#Q@V7O$o v4t*yn8A zGB1+4$soUYO}e<4q_~p1u(&bHhFZE9N?las%1R;0%;bck z&02=6&3m>5>8`V&rcI!Xv@1}!bxz@19VIhS)uCPF@{wFo%{4E%wAL*$ zkKg6CXMon`I6;@raX;I1EANr9l(>Oyi)oY!E4kLaRJp1vGO00je6h8&$0O z^3jT6P2_bI6(EzO#Nxt2necFOs1vBDxTM6Cu4IOKjppER!Qtl2J-$BPZTG)TG-3B4 zc%wEvIGVCd10l~LC>fz>G?Idkta}JtQqjXdumNEXc(z{nN^8<7{EpN{XXnHdtd$O{8@{==jx39UN4+!6 zV{QIJ7LODE1Q+NuuiChDADIgOXe>TAA@ z4UVME7eAhs_PnqlAz~0z?g8~wL>(f)pt0!hBjR13wvJOrLdkR|XXxZfD6KQC$`98z zh*I{Ru+}11eSw(!WL;$Nm%^)h{j{g&wV#SYb^rh2OJm zZGFv@j(saPKi}pDJp#T{9{?X3zq7E!eaIt*%AG%5Zqmd3TF$vU>D7$^>!)+|RH1R7 zR%i3($`>GYhr^bwc*xwG`A7vULSUOOM2w`*3wlWp%WKVYfl!#I2Xc!}Y~0p|Ufk!E zU#kk+(8IAC;3JhJ>o@zK;zlO5W>jkfEy&lXulcIfSzA|k{qk7i=lOPPxr1WT_gW_t zzR6|Kj@7{@4dBVI3Tn^qdSs86yZHt@)-kynK^7Lzq_gbekSdf5=)6&k97sH;0bDgV z-0YAl0JV-IFSn2CGo28HfQ#i#T@}ZS15koqP1?*d=Y?)1%q%Y{qHbc-)~j?1oHL

pvB0PTTFo8LBd{2^^Qm+XNLx4l!6@WOlU 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¼h}oDan8V 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 Htt0;rK@K}I diff --git a/src/.vuepress/public/images/logo.svg b/src/.vuepress/public/images/logo.svg deleted file mode 100644 index 6e64e41..0000000 --- a/src/.vuepress/public/images/logo.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - diff --git a/src/.vuepress/public/images/white_blank.png b/src/.vuepress/public/images/white_blank.png deleted file mode 100644 index fc5cdad9a2202e6decb233524b9308901ec63efd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1537 zcmeAS@N?(olHy`uVBq!ia0y~yU_1oE985rw&sA|kK#H+A$lZxy-8q?;Kn_c~qpu?a z!^VE@KZ&eBK4*bPWHAE+-(e7DJf6QIg@J)}nx~6nNJZS+D~5~=3_OPy{4~GYd4gMM z2ctlSh{8n;hed%6E{hpD-57;>nN*}$JxsVJj7p3K$!KC2%?6_-1Fg!$8*+2l11sNq StC#?bZ3a(QKbLh*2~7a7POHZN diff --git a/src/.vuepress/public/images/wp-index.jpg b/src/.vuepress/public/images/wp-index.jpg deleted file mode 100644 index f62fdf26f92ad0008509039dfa523b17f0e2ebaf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 136476 zcmbTdWmFqc7d9GPTS^PX-GdY;?(XgcDa8r_ic7KJP>MUWNU+W>$X8rA=4>!Gp#uRiDiK(r$O^MCaLq4xhN zsG0vW`hV>)3ef)Vj0NcbyEhh~0ONnR(I@^h?CB67qT}G|PG*ThZi6sr>cqh zpV?96zipQPHebxp#4RKO>M(ah@UjkWsHCi-s-|yX zXk=_+3bL`av;W}W2=?^y_VM-m(*E9!ZO7rDXAC)BPQFZu zW(otk{hMd1cGo?y-=5ErD8-?l(&~PxHPfY+m6cE*#wb34;l@F3oxhn6lBbZ|MYCV@ zD~SM^H_TG-sU}|9J^>D(?MAk?L6u#wF-7wxs|hG|xMD~Z9?kAAWg1+%NMVwu0-KSu z24NxhJ$9bad7KlH369@TSk$`o16U{^e=HA61RoF^v|#>&IPT0dHVDy?k699YOPmM+ zn?-iLyH->$ZBnHmGTJayWaCy%otDcrogO5sjXTj6xVsCg-YWR}aC{2m&bQrJOQrvr@IS-e3Kx`; zu}ziK>&a{KPGyV=VBf@vUX{q?x1TbjLY%7bx_2+`*B z@7}B3ao&5tCMvfe4pq2#L72OdzrZn){~ z(9a}VS{TVXiu?1|6QIlY36KDZw}_e=(+b-O@-gymSe1H@oa_Cbn3xL@o0O#xt&=S> zBUz>lgmgM3pRy#?%?t6YRpYCa{6y>|AvFo!WMwnWHNT;eZMf6&rdB14(Qcxj^R`O+ z7_C<1@q>R(M|`Hx3fn_kY$QWvKJlv$+7)bMIDEe3U45;2rX+r!2Cxy~)gUbfHz&NC zr+d%yK5qL)(RD$y9)2OoSu0*N0w?|{@w2)9q&dLpvsLOLar~*MQD2baCxw=+Y6(q} zMZ|q_Q#aFctr2a6Z?(ov_@}KKefwodu@VGyraRSEAqW1xV`bf*Q4TxE2boVhj9UA? zW=sqW_$=u@m%l-zkDRVF7V3Ng)Pt?k3qcf(@OK06AY+*a`;YV6MsoTQUI*HIm?|ef zZ|pMI`h=O1+%GE?=MmmIg_kiH)CH_%xVyi^O1x`ds+koIJGIo}JaBE(Et5`m`=u&m zrJG)b{T3YhWI0P(+0&pekwi+^jl-G8X=3Q^pEVX|TR*X%r`A8mh78*-d;*A-JXHHb zVx{lap8(Z{A8k_(QaL@ef^}ozbD9nc>>{l{#N@wbNFN&Y#k4N2KVle2^<|HlNrM_c zy#0-g5`4C0Bi>$~&aKrfux<-(^VYNdJ56Qq?Fld}@&o`?v)osRDwMlWu-A!ZR_Z4i zrl*&3H=!k}Md_OUaM=BB2(P~)>ExHWtjMmz2X0?^J^{vMk$O)6`;Pkyx^yWcZHa)4 zHvT1VBk7BtCjg%Xb%K_v;F#k?d*t9(hOT8)|p*HOO%~MZ+U#caL@r)v5?-QU` zM?$fL4(T}qIU{=lkecV6YnkH01vV`bDiMe5?9#R~T3Wmk)sMj1K=n@_ysXq6j)38o3E#r-7JwYU@_r0}ApiYT2uDu6es-U_-r^Wh8) zOmf_Raq|6Q1>c~KCUa~m7t1#wZ!P^j#}mNz%j2i&O`{%zQyO%o0FdGnKw|z3_Bc#; zfBtT$evt>rL?_9Crm_UR#$r!&==^I~M2BEV2;sb6d8<2w7a6)6Zq(M|)SqT0mK-Xp z#3Mp+JmEiAm0$EJLer18UBR;B-3k2QzzXrO5l8#(nD&oa!V^FjNoaI<-NeNaqiL*X z$|O`1!YDsTGjIU(JF;o~Od#aZw4T!?aUzCaD=~~|b?HNmFJtMVD1iJqQ~vW`T2{B0 zo*(7|*84%O)RC#7Emi6x`;Wy_;y-dnJhUqX^z7*S1vW`S3}T5&R26Dq){Zoc;C?fn@_nw%itjRLml1}SfA0Dl&p7wf9@Yw+C}PL=OTi^Zoy z+B$L>(uNG|fa|~~z$b{<=Z63896$L9Q{y&K4yyxC1=v{)k49dDwJ{#5W>H z1}#S2wLRZ%u4G@2C2qwK**Co3_{_@-C=&+7Y;X)-m0}H#DljHdVa(MDj|VZRkgT`T z{?XU#`oJ=b$AhPEAfD4ORZNW3ff>?7G9_<(=qKgs{7g=C z-usr?@JoTj76wdWmVsXcSGV3hA*>`Bql!G}nK2Xfc8N+OCN+PU_*^W=G-(o}Pv`HW z*Q~wLG8DT~XwE!5z3d=MY9^V+QaGSw*>RL9WO-OTT`VCm zQl(v3zWK!%`SLOFzCj=NpvVol;Bb6Q&l~ai7bA zZjz?{k(=0i#zIkG206*1PIyaJ=tNlINt`w?GpoOPR zV5HJn{}(|IvOpNU7_DywYu0~vAnn5{A<#p8w7NVb2w(WqB7jRh>l7^7-%FeNBzF+v z@@&_dPS5*1C>oz7Y5{Foi_)w;A16jtzEL8Yxf-8YhSR3Y(ISHJ7g^s5RMyaFi4m)= zH^od}AUnr~bBk}W^%Y2^V>=-K9L?aLQ?v)B%c@_AeVirkTt;h$tiVEsLyz^%A5Je| zsmJi^D&gkU261kn`C|9u-^x2x9BO0k64fsz4^f;Ri_SJV7giU_nTFuLo6VV<4*){s zDat3G)6VWl@n`x*qaZ@*;Qju1`54M^kQ{ZD>mws63S+m#M%772bMmhiD`Iv9nywvT z?oR-2%Bl*ssm6r9SN?T1v3ZQ;>Sz~mqvcz=A=sC+9;ums&n(S69~P6$^5r$YreO+Z z>2FDcb`@(c1fw_aNBcch9Mga4M|fK)9%>T@=)PaBU@GRD?IJ>8(}B4-({yQazEqC@qYpo*GPor0@r0JHj6NWfbAip3v>rLlWu@3(n^75jWX49iend?`%~>9 zm_>zq9Z;!E^?*|sDOypUx@BoIO*d9ps7k5l@ES-WyWE#zu{>zfoXgSp+0S-rs*DyivfT-SfZLh6=B3=l(g#zRm;9%y z32tIJ8lkIICQGleeW)Qs9qmj;2a21{8no?uc-WkB27Rh!{DdhE4vc->nM-6RQG-?C z^6$Av_8(^6Z8>41HG1ZkxZIeUESrly3X)!Swmym%j_(Hnr#L(8nDSzoh)Se zmc+D%lLmNd(aDe!BfIe61B)6gHUmzV#;U~@%7xn7X0p#lI;}?8MQB@< zq30DlaY83lPUdOS`^*vo(Azf!aBB*w`fQcm%-)vbd~cT*0Ww7AaDCI65268~PXM%d z<%1c;e9aUHz&%r|2l{Gf<{0RV{`)6$3%r^00U`Q^oR2Z7AV0HBo;VggU zwS4?7KyRYNQwdNdYn%9ZL+U(e8}85;x%AK#YNB+SI0PlQ-|Kn#fxLL)$f>WPBG}1+ z=-~(H`@{O1e~xyIjS9LM_KE=fo|f54fv@_WzU+!LI7T)*IG*N0?Q7zPpTg8M+mobO znxq3(+O-?i%p0lFBBb;UDl@5zS@6{9N`S^Z*FC`fSSt!AZMzW; zRYr%cFmzr(B`Vp5I)MKE6PSfwAxId5dy0;Qr11~1 za+HdENQgl4N^*-0d|GB~KDaTai845XWoxUr_k-`iwBJ1b$QszsQp45l&X^=sq{V}@ zZ*(pwXZ(KD*CDIP)!BE^Y4eZib~W<#^PJHd1T0B)+zQK;2~+9Pto(CkYkxE}^h_rm z-_xJptU-;8VyYcWSKqzQ%37E1d3X$KsI1`TBJ+qJUsmcH-V-e%OO(=K=E=8 zMLqzj1jw6&{ISk;U9-?z#S9ZqH&k5g zXp--JbI+1923fzOyE>-3FDKZa@TL-B~n zQ~UaUr*|8)xI!pT5h-Q&+lXHUs>s-*>R^*bJb7oh^u?j-dqAtml`|Ezks1j(tS&=6 ztbKP4a694X`d-l`xlOki+Gbe;{R`j6Cua3!O5EOXo#r*1gkK0e0Yu4CU7t&(Ynlk- zRN^o-mp6SG_N2SN>q6@PoWU_O^N?N<%ur&-OxQjz8F?*6knu&Y=1u`vyA0}iy+*R5 z=qPiT-(9LSG>b2jG4(=cB_Y8QMZ=s*)o+pcsV$WEDyDD8Pfh zudm9#0~@mVrvlK7ujWpE51A#qK(U~QC{Uyl>L@q;YxJq&7N8TH=Q_a5=SBDV&f0(@bFejUG2wG#|CkR`PQl%4s+a z0Uxd6yO49!Ny=sduS)BYVrR4DUR7ARcHv5=8GX;Pp_%W7A;-Pksl>!XvZ=>l?xjbH zx;}ZI7Kpl4#TLK6C0s^?{#GxGQ0+@@w=2$ED$Z2f-L)j0+yP~74{@YS7Hwfg{~FZ{ zQ%vpSZbf{LPceV;y>un0Y+hej>&^F~awlKoE69h`;e{q)g79RMbb*v(@}YD3%M|QDk!5_`mlM+9 zWT|NL{6oO2pcZ<+sSDJqbxypQp4a*E7%Jxba4WrTpt7O&_jcy2u*yQL7!27UDn%_! zjl`QdoD7t5NE&Qywe~m5Quq3d(Fy4l_k%bX4TWN*1Z@`ne3f=KiAMjM2b=v(hH)i(nS=NfG#5+oge8lpGr zFwk)PdplL}$>5V$q(?`l;qj~2o^)554hQ3w!1jAvlkxr&N;F9=pSgvqZQ^Q-aynTH zF1Ht7C_ezK@VgLAIb-~civ%7$akIs9uIKe?U-A{UA}Sok8^43ML>Be&kPQ#Vl}gUs z4H>q7JwBDnh+bco%#@xThGCqm_WuK!f)2)xt~3VIU<0xU)%D+~plqaxD$GKu!$TyA zXk=dO08e6G`LEpy%n~xs{Agd(JT>3q?LSETY1kY>oW<~v(b!aa#h6giuC`*opL;m(F(DFn(qTi1kMwnDV5 z`nX%l#HrH~0KcYv5j1;2Y7q1n1>l9Y2EJpP2RZoHWyG|+&U8`1GDXw|RF0{t=pPS| zv7x-P+OKBN+~`rUOEI&4$M6CuzuI1{GFlYo zCe!{nT=Mtr^wi1|pjB3dQLP=*b{)N9_m*XJ`n}JaR?0oDKzfhTfD(dbrMCQ@8DZ``qWKTM(D)+liiaUZzZ}5r*FCxzz1lzez^RwO~D%qbK|5lNY4;7+yk|^9u&KFaMBg@GPh{u8GF@m zV$t=04U!JVgjfeR9!Y7-tIc*!kyglg1-tk9aRIdlz>d#>9~?i9+Z6P_KJjTEf&qUH z?*-i&6SwCMw`SOj+S{aP!z)wxU2B8a&ek3`RxF0>QVR}Xk|aK5)62ov4w69Dd>Y^n zsV(L+O(8X&lCkNOneC3`nX;GV%h!VWIX=PKm9N=QnJAu*eZ?d$^nKBBpk0@{oH=_5|1V?Q{lKp3;9*jA}ypKkwQ^0IK{ z*Td)fa^)Cgt;;GJ)%h<}WaqKvhv04hV`Ups`sW|7ARPbFsbRM;_6bGwi+KNFsnXJ@ z1pxA=jcUUcH_J@;^}HS#bF-vrJScYZRVH$LSMM228~|)XgZ z(&UUZKN|rT|Fo;2_~J?Y?Nw)){-~!o`hv}*%wt%H^wZR73(%{P-|N{8zI$!v9SWNS z&i=-qG3c9}uioQ`dQH;{;D^da(5c1r-0bSFlhgi+KtT{35?lZ27xneowDrxj^_{v} z#hCt6VUmixg!&=H1D7Nx#xpt$r&Sipck;;DuQR>N9mhFQj9~^WQ5b~h$NCoIgqeCZ z$tpZO#Fyot`8ko^0v<|VqLkQvPZLijU|{HBZq=)NNk8IaIx?iU`7T;E(o}v(M{Phv zqyAYnJ*K=t*yvP=F=Nu!Dj1nn1pxqS)!tjqiW4qmf6w4zNl^+4+;ZJD$<)b8(Bjns zUgmbw8$hzPY1fKp7zoR7m;|*rDzSXB<1p<$EmKKHidrqZ5m~0y$?50K)Py%#J(8xk z@b_1y+R_$Hmx2$jU^Z`;Qce=vh*o26c^{Qa#CUyXxZPPwevK2jxc9@DCKA@_jTFS| ze)P%0hGxGmxRe^CEDLCO{^TixKBVp*E|#6|fvFTZW0csT!Sz-KaW24byiyl`Iph-6 ztSsV78q?WAM?4sYY7QTnmfFSE$d7CSzMAwnhkIS^Pf9Oo8(h+LUzFL1>_Nn`Ssd(* z;zvA`JQBphK^FY@#X0~cn!ST$zeZhbc}^t8>tlPd7QXCV_=q+Ap|%PQy?zDAEJJ_JiluCtUAyh9s8^sj-eVv2Y#I zUQ#Bml_gvn4cD!1`W2G=)pw^fxMi0g$Not))HjQS$>%<3XfO0P!Y*J{+$9a!h3PWh z`w6laOsK19Q6?6k|4f|&+tE{1JywR*0qX2}lq1pjxLc&VBNXeK&UXEb*6a!3HffLH z0R80p(030z`*RnM)V0Stq_-=*eREmKh{!F$pc?Mj93UTc{HT3gy>0R0Mg!V3QGZfj z0KJ|+hr+dw-)tM%3$UoY&V%c5dG+wJh$tWGb9poNYbY>EgZ=yUE4&$d4>bt6U3>)L zPXLEm4nJ?fk~P}}(pE_QY_{lKY092dZ=@(~-&Z=hpJ~6xbSTl5_$~zDuep?X-{v&G zpicm&xrB!sGm0uoeKV@%PcCx(mf(cH{T1G^Uu3k>ykW%LEv!$xDz9&53ly(oO$=19 zN#B5gs%$E8=P_w77U&n3pA#`QA9yW~+g`!4Ic2|J!DxY*#HG4+uz_+{8kv35dXTMP zC6p26Kjzdj)O5Wr-efdb*D7I8)6RDRPxqDGI3Mu zU>AV3YWm`-!ev%x?Q_;yOhzG=|#QncJn zHc14Q@;U{Qu8NU><-GWNNakTW*f1@xbl6&?vb}5w6krthTC)?VJXfu36~xKL*lZft z5Ij>lzSx3UbM@f(1Xx)1qRZ75K~fBA+I6kfRaN5R#2(pCClHY)`<6E25T{<0>nVuT zyZQ2FZR#iL8kUF~vtXNkPc;UnWaGI1(7E#hc>|9mrI9w? zfpWgGCL{!iNjvio4~MCeo@`)X!(FF6L;^}X>mg+KuTQzs)MU2LILDZPT=S#B->PQ< z-G^r5&Q-j_Ipy46*f`IL=DvI`V(vZEv1H{c9oLLPXb2kXMnAG#(_M~CzZB^c-HM4G z&q*>19aAmQ;|n#kG0U{7I8=fN`E>mY)_nkPf8CTDUw+QXC_l~y)pPhd)uko2tcaBb zgxgyKbVQji&>NkrOHc0jP3!G9qj;D(o6yA=AH?&v;7bhCYp;aKJgRIkJ@M&Kgv#&g zf<%_s7fs)d#&g2Rk#g{>?oH#nr0qju;B5?9PU_>!b{B)%HkqP1(z2H%u@cP~(=_`$ zpK|nfiV8}n6j(Q0q~isDEtu6~tYU3tKLPMc+aQ}q(sw6_$jibX4zpB6eW2rjrYFGh zuSwL=s0PU97Sj{pm)VtwU)co|!ROuNw$9Ihqr zO%?>Z2=A4oL9;o2&Wu>i&VexTSs3@i*SrR$3R>EZ=FfH!OD()ZHL0*NvAM_qsEN9} zhm}faU*H&Y!aoPa`S6Ttl5h)KOc-TD>-dtSN^7eToTI9i|UpNiydm3UvCr7SPCh;9}@=WWo$xp4RaJN6GBxpE2-)8|!^g{^n3;^mY=2 z;n*YlwDzBw`*ngNkCz!I zr)U)gKa>9C)!O>x;qLNPrTziV*N}z5avYtR?KSmrDx^m9R)j5h%XTM`gU$3-9On!lANh-v*k;wKjb?;x<4fEZQoe5q2e9q?@0W% zu6qdQ=9Uhf-wtgPy}4TrUpl|20&Q02w35o`N9o97Impyx z$6+??c_jZ&%}rUO`loOwd(4cXN&*q8- zu4ug!-H3Z6xg~&8Ep!tz7hqnX7jO<54oda>HOlS5s-oZvY1j7D{UJ|Xj-K3fMe`FO z1l&}hHTnB8NK^0&Umx(MVf8ol18^B+YlAh>7G1cN6*pjYq%8Q6lY(V95|8p>m-?Tg zx%3AFGw(Sw-P!1Kz-|5xP&oN0OQ16ST}v!)`2|UpKqw7^2*TnFGVV(wy+ZS|-BFLY z=|{@JC+4X*_6t&~l|r`;J~;QM*L{EkEQRY@D8YGSqgp9tK;!R_#+qH@_tQe}OT-he zm1Wg7P2gOaufpUqXwuv`g#uiZJP}Dsd7dcMAw|t_iZ8Cvm>4QNn?LPh zrV?$36ilHzz>DI>qc#0-WKMiVoYR(Of*1>LZAQbixs>e?$2PNvliJ+WB3e3TqYqQ6 z9q$0`}&f`esIM}@?xvGhC!?*Etm-) zO8<9uPQ#nzSNhk_#_YU6H&5iu&8kORoWa}tKfD)frS$!-Np3O~Q^0kTI2(aQYrCve z?Oui`4u_In0E;+@btXwCpL(nghfDz`!J#&K2!gSa53eT6jBb_W=A#---I-(%P^PKD z=J7XOiNfR&?In2M+B6W$dw_oX`z6da5xY$B?NWodFLpIvQSv7dsmn63l8b<$-8d;h zDR3$D_cVSKxpc0&yoL+>i%0ab&$lG8~#ax5;IgYg^xbj$+i-)j|h<*@)m73EP2Vlx*xEe)T>6k4j{xA~AG;SPCI z*5z*Tz8w_Ssmm+4H5dd7Xhh=~R3&)E)*Yde&Phjt+&cn%j_z`?KAij!CFp6W@Cfe< zd^eCAC|M7d9O_rxMD>x{pKjMkA&{;_9#%Rk=Y8S2!x2j8%FJIe(X9Gn)5II+{?Qw( zvi|dPl}i$HjIbv9)&B-xSppZ1jOq5FLu%2$Ur8^TI!iG?uPTfijy=&U^a@5Mo&%l$ zjzR6p;PGB{N@hJ-Olo4IB6r@dyY5Oo%!Fs6CgteQad*Il2dq`5etX!Ml+A=+#QvVF z!!BXaL{~u<3yYWea)gu};N4I7rUSooMH+o1A-ma9d3ou|v}wypU?KMGiMTLaR1%d} z_CoOWAMgZ^H@ikB5kf)QALkySdoTa+{m)z(>8Rz#Y7drU9B#P?MOUfDSDl{YM^Vq@~08?Wj(w>EPpIb9OC!rh5YSNRBvIdNaO9$alC}$_bM$vW2Cp<5Ix*NPO9kt z+vhSl`jl=g|1B9%xJ}*LF2IH8_s5LC94?y%Rm%xtb6nGJ(!RxadT^Z9dZ$RK+6~;s z7QMxGj@A7AvN;$psfT}$sMK+sDi|lPoe^16SCb`E>j}gT#)AwNH+q7m3 zFesHAjz@60Z&ff`&N8tJb|7R~IuOoCY6Cs9I~_7nq}6})Ua_k=e-?jyh^AO8DV&Le zs_h0ogM5JgS&`fvG1{95DOFm;8(ga?(J(Y7X9`6cC~3XaQ&a;Mo4?aUWV zKQ4Qk+P+SY+06(2@D+06tBP>$+?G@nN23U7ed{4*GqILfH@K)OeY_5dHxK2b4Bs_E z$2X!G`SIb+{YB>Eqwvi%<4ZoXf42KCeE@0lr_PNpW^IcLrJ zevrVTNpKLm_2WX!*uuKa#WD~vx#HEm1Kj!+Sa(i5aj0GGY2wP{bBHlR=<|u~PVP@? zUc8E8?Bxvoef*~-i&sy8eOON5^#iy$aD>ZWG+)cIB|%RLXgj&Yup)gJ2zS(=n{Ys0( z*3HBlq9=f5dXmSFDV9_0cyR2zSQx!cNMPyqMQP&8o1iEqSVVxr6X2hvtK{YETG>cv zq$rgVP#}BaK2H0rzeLNQ=;G}=RSd{H>NMex&3FfqR+Pqji(I$7DCp~ab=m9T zJ_0>{Ni{79IA=zel+5KMw3cfa3}Em4S%F!005uaqz3HW$hKv zOJ&SPeu`3?O!4eQBSDucMuavufJ^-O9}tv#x^XC<{qk5RwspxyT)3GlMWC{IOjBVv z&$06g>M|;;QWcz*RZc74j6`!SfL4BeZhpSQVN#ydjWM*Ot4=u^_KUsdgZR>2Q2|O| z39c^-rI*18Dk{Nq^7_-oAP8doxKPSUK>Irl9fx9vll4-fa%$X-X1q~4Qj4ovTg6^F z(x`RH)j~asMdY&oX3C|ukAq^%KI@i!2L%V}t3yL@^!(8@5>{1ymlt8|#!km#)pU=P z&0FZPZYb`I?ge2n>j%ZRlW9%=1K!5Z=qT|n(bSAzUR8BTn0`mW!Tx~Pv*ZNiY;@_L z3S36UkjcL{vlE$T2Kwtl)j$zmk}q!lsL^?EL9VR@U)`+D)3qXUe>Rc!(A%umJJ;`4 z_1VN{VGLpjQp2XRzaFkr*oj-$ZCnr{9}QAgmiLIUT2yA`KjJq(I3_vFzuwLNk$%Y~ zBS<<@Cnp56SbZou0y{1e{*|ZsA+XGjGE@vhWQ`@E*ls4-`FkvL` zE3N(Jxg?F|przHGbmA`lV11;{x2LHj3AB|daz`e*qQLsHp=|t=?VI<@QyYV!@i5$9 ziLfF^`$19G3Pm(YRQ9ug$G?XXRN=TqNRL*V*ygUY+Ql64mvY}q(aEF^4T*DBoHE8i zh9;M9ZY<0=B6YiaiTTXf{LYFYgO3i0L z3Jo>d-bq=Cx+$92MxTWuCHzl~545NPnV&(3)SBjEi}ExXmcJ-8_SO&K+}G0$RY{24&a{}D zz5f~)*o`z8r=n}&JJ!4AaQ>hX`(lY_gy7XsNkUn{#Nh@TvJZ=+ zKjy2s4U`$kcoUHyIL4&nXN-Cghfzh5QQAQLCjeIo{i_SfXa2-+3hFT)7Ca`}bc>1b zWV2Twem=rt;@`1wX7X_ok+9^kpxsYL%a7h37m+b&%d?7GD7OH)oo$zO`}}z6Q62eJ za?*&_HwdT}%XCgxqOPY?U!cP=1JDaqL!~vX0QzB5Wizq$J&Yx4a4m&$JTe3?qt}wH zc11yOx`mV08h4A)v00Mz>CgyJcCFG`9*^-QkMb&v$&0u+y)tDRFxS^!MUF_6Ou3DqxW^S>2o}yWU zK?Z%52nJfT;S+#ZchA+8S)IGBb>5FKvFG!FG6c3(JRNoKB5`Zv>M_?FF#MK`*-l%D z=9#@nS5@8`KRqOqi8_2@Ufiuf#f=wrr$)tOQg5aOX>lx|f?f|7Kqm{Ovq4jr4`;Ju zCeB9V+r}=4)>M9~?BN1wUgB!T62eg|>7N~0a1xB=VDF#axqLVDs8|*;#-Ws*HSJO4L{8z9dL&n9i`~|EBk6H*5tn`2)r=$D?%% zJ41p9#>Pu!oZ1Q(wRJ9;GIt}^gI>acPB?u+R3$}*AFecK7{4UA`EJH0Ct{JKJds^y zUpFU7N|7(xpB#^*P8K-)D$PsOh$h~miG%r_Q=`s{Z|dYvfD8@DmHyIM8Kyx)BexUJ z-|w?g^GZ8={^6?Pcm@0%2aa_^wDj#=`}!73xUs{p$iggbZ01+Ao60IR8}OKd9ZnNV zWc2D;<-gIocb1KOn`?MWkJ4A^ML;78I~ACqxO?6Sd5l+Oqyv~@Sye_R z?Pc0*D1}&k%}n8QA{rQRKk!J8BMbh1U!Evy&Szro%2qB-cQq3MpyBxSHOG9K7%0_m z{J1-6+^m`TJU4XU)*xh3WVu%LKIAm?ncZG({ryfG7OCK$_208Kgo^f6_rXu4zE0U{>t99ttVWjtut5K zIA{tx<>ti)H{2RlD6z6I>L&T0g5VW>MGxwa)<0b6mmG2X73hXa{7ww~a}HuBX#)|? zQ_;q%TPhi3RAc-qo#lFPrb^p|0<$LVJMSM1YhUSyo8oTgG?BbZ;wNeeZ_R$h&CxcW zEdhOf=}I(mlig<1*5+J^PWq9CuuJuZy;o-yziqC{Px=o{Jm30~UvYD94tp<3&>a)9_K|W)+61*an5J@;>F=yEh6KrG>(_eBY)e1KE~fzeC>V17SS~oGS=88)|ij{ z5?;Y{&Ld14^Y&)e<9DSxdt0kck5$JA1f?&m+d3p3*AeCd`j#EeOQjdb71|5gwgwfk z`O<+V*_jmMwQ>0_B}WZwGzPi0Z?wqvjWlg&x6XsG5lW8RCB$j^&4c6bHB*3c0hi@` zW*-oIAKzP!A`QO4dZ6fRtnqk(y`1&EOR&SlO%*15sgFO??asNX=`C6lK9#;skO~h7 zPBRHy!Tt4``s8PN07^@>rD|j_Hi3U0ThjjZ*z-Wluu^LM;9TXOXIlUIVp8q_PdQCx z<558j9udor2_xeigtE=llp%cby{4bLAA&e6 zHw7kUQ3N&Is7TLP5-!IXM>kfYlFdXxfq4Q>nHkfgA^p*`2e>Xr?Yu8L>DcJ>*7jBpng-qKy3J{4Paza=7tT#g!dk<60<6W{ zN9u*mZhe$BpwZ-XDqt%u-sNA%fYw0!iE^7ipRLJeCbzJoG$ds+WApW|fa5lZ7Uh%Ho&?ZmZbwneIhR8e!NOv$GiZo;1$X(8v zIfF}7gXNVRYCc0E9$AwX*(F}nsZH?(=%WHP99(wKWhMOQ;u~7wrr%Xq6!pg>YQPwD z2!Vc;V)N9V+qNR7aSGZ=vavsyWnSkyEtzcwsq@AfpP7_RCsHgN6&>u&lvLdP@OqSPW^X^VhNCE8~2iLHu2(8;6QVr0O3fDrKh@sW&Xy+iuZSp>rsMX z@Xyj5R(^&Aj12|<=DXuZbofBVj*8I-sphrRpjh?hiog$R)FCYu14SX;sR~N7+M7gLwCt3AD$7;=b&i6bCW6 zhXu07C%_zQ#|PK<)+`A3wgIx^qqXL4F|T-oyY*O^)~}u(jwZfrWMupbFNV6LTb^T~ z^O8IOO}IC5ulkDD;RnDoM~}odlw{6YY?#8iur5T^6F-@9gN!x}=}p6}Or~4=1o)7% zZizN=S`aGqo`~0f|IA4UF;RaZ#D?RzQ?yve=GOdc<8JodjfP9{Uy$Y#APB$6 zv$~s2{S(PuP09Nef=?dnOg^Zr73uOuYKr!{z6F@p@t?|V&QP8=SFm%wtk$olLAumX z-9(V)<~U$FWG##CY4(hxAY-LrD3Yi{{$?5nx@+<63J!cBSC`kH)6+JYj^?K-CmnGn zeLFi1)O5CodWh3_?9D28SZ@)d5aOmJ3N!{InqA$Yd+J|4-NRL+oAUwrMP7o#Bo1RV zC@p4&#P}qQyAxR+}e4 z(x~TjSD#E}Vf8BtNsVz%LE3YSL;58D*tW^Et+Ew%{y2!wXNM}{*>v1-Srr?b#R{(A zS^6)FwSquq52k2K+#T6n4JXsUaejXJSE;G1^%<1OR##9f{?W?r!S;p>$*xK&>=(Rm zX~OA09_D;AyVHNeuwZXScQ&brhx;dQ;b+g73{xB(XybSdT|NPLm{95dfoNg)Q$zow zY2(Qgpd}y(NF&qBd(J3|)97x{6Bnl!t0!83Kl0u8L%5POvF7_xv>FFAm8)WuGE!Ft zmtQ=`&&n@Yxt%{2Fmoqo*_Ui7weZ54vuF(G`rT~MZEU$@ea2b6-gjloqT58>V;yA% z`8`QaB`TO*qnT5CAL$do7)aPg7wvudZg_EeNByk|{Y-5GcyuK#qsde#soO)0y5h^j zrX(u0VM{7Xa`^tELstOvi>#}P7=LVOl)|p+BjIsMY_Y!%8`F(r3U9E_--*?bWLgf~ zUI`s#QY_*LO^NAe0HLpHioya>7Kl6n`DbJ6u5VWR4Va1&-EU)K*H#LeiG_&h%b&*; zpD5SDe5uj$qDobZ)4B*6^n|If#cUI#@@Bri6x)XhwGzo2*PgMf(2?<)Tr-*4QUm59L>4J z()9Ty9f!Il9ZNCF6sgv{j^n%cfb^bv3cWOD)EJ|B%n0508p#j1=(g2uF zoxP09ZD;>xcviD2iDchBm(<c3)?-{>@;D8(0~(lEPgzf?-4d3aMukOI{npsG=;cJQAe3uiAC2 zOOckEK~eIo6)Kn)l@U4!@_?#M!-G+xpDmQo98-6udkM+d{Bz;LVjKxOV`L-Gr6W_$tGgAzA}K?ANoiKOow zNLu^kP*hU{qgl}LV*mF|%CAlGxPOK86Gpu<*&-Os7o;xVU!UBs_}7*%`sD0HZFvFx z8EZBIW}j(}FG^JZ1JG46y82qz*YaK5?|n;ZEPM2>=JF#|GJrcY4UF;8Zr}qJJ=+YX z@T-3P_#o%|#%!drTP5Vd$!OI{yn9aB`nz|pLdQ2fIY~+B zUzjg`Oc%Wl?5j?|9CV=_K8!7{J2t4R#4_`0#7MxRVaJ0^qW1Ch`q5w`a#oJZ1moem z+5cebtD~a+zGy)d6bb1DX&Abc9znW>?vkOA4hdmIM4F+cyI}}nND+|kt|6tnyL_MT z@2$7i`)_7GF|+1#?>*=2v-iGS4&B#@ePh{_4`m3+6J0&29&21b+#R zFUE8;0lozXW9O?t9Pkm{hE}7imw=-)bJFSJo6^eEAT+NbUm|Ir)nB{a{5+1wqAEc1 z`**N!WBpziOMg9-0}zkhNKWON1HuMimfIwk3Xs^=nod#49w?L%<7ju#nA(>%C9G(=;fh6b z-SU}CX*B9KbV?IY{@)BpiUgoP_YUzg!1q5Mzw-pbupdhYp~n6JqcWxZn`$o z>o$G9Mt7jV&X+>oS43DWvWi&PzD?lP;EGIs6k?TgaDRa zYJbCTpD;8|ySZ29u#4>{>-BaN;y3VpZ(vl;xT)|SodWDj7f>Tqg&WIIH8QzZvbNiQ z(Yy2jTp%-EeWYMDm7(ofytE$U1s~2174RTl$+je9N1L`ua8s3eg@^Q78ut70x%LM3 z%bTRYIZr0p2j;t!QCxLsIgf(4x#C#Dk329=5Pl{EWSCxO_*e2zYGa>#0aCOlg)-J_ z1)8B1uz%BA1vTEodJLsXh+az)l!;xwB}utMGg^M69#WKxnxHtPN7ZqXpi3ie#;%{{ z_hMObLoEvOq{gNm1L>xeGFqrJYBVsNb0&v5Ll;H@>vAb~oeNy3KP~Trwih2BvNnVZ zCRw|ZdO5AbyK9iSV@7@aal8ZrbRyQ8VC-jloO288dv7GK?;S9tUD#K&2!inN>~`$} zL0tM#0;r_f{hBz{oRp2{jT9?5sbNd%it4ROW!M|nxvbS?mzV2n8{kBDOoP!=V}J5- z#Qng%TL2-Y9>ynUp8pY_9oy~hj_2Ay52shDvq zpvhI+##cL`36d=`C}XEcnSBDD>vD@nQB&)QIaJzvorXatSrP)j#`jtR`fsB9vizzO z%&g*7jzm&DtiXoNw~|Bi+YW`1YfifEI+2wg>TwH!<28jLSL=S*drlv*(@DBMEEujH zd>6xR8mpC6(z7C88L_WQ>I6y>gZO9;X&Ui#SL5Oxe!|hrsSlj+0_XPy@%KW$Tr}|G ziI>#jWL>we_2cwRP|sevoE))cA})fh4W;u!5itl< zk0~^I%3vJPnb6N&j^`UrP}9Dr`@Fq4Kh%F?Wm=87Q0|6!T$SB@G+Zf35LA7nHY7hf zzJ>XPPTpQu8uM@e?X8yY#H{p0Y(I67#w$C1J7Zi2jpyR{31ib#e zqNnwT7YxFwFThiSdFU;n`yCDCzoyE>Zn!?t>m*Ttr=_^-Gce&^#aTbGGgCn6;!EY1#3W0@y=ncJ;ec?Fv{Iv=oQvqXau3f~X`u zQFJYoyC>O$huOn(ZLI8UYE6u3X9PuIJa)jzfq}Ed&0W!H1p|%rPJ=^p`t8lZ$ew0e zbJoo*P*k)IJqk6&#)r*Dus-hGm+VmE)2_m+b0SnNCO_W#`rptQC&z(A+1btZt8 zeR1UBADZ(?-oaJgqnT6dF%Yb~e+bZlB))R6fZLW6jY-uQ+^deionKZGie}tq@*IKx zcMkl(8h(ojv)Jt-mRf(F3FUkUg@!M87PGhTTu2K5{cE zYDe}P3p=}isREkKtm|1M#x@|~i!K(kbPJK=dC5JgNo8LMKe z@0I_dl%h5n#|oUX#9_DOIbZn%RINz};&R`r8j%S*xmWr$>Zc{I6JYrwGDT&2>H~G3Z;&&D~ z^`Q$q@kD6XeJs`K75hDvlEzbcmv(SkIW!|wxXJXPhj3{=0(3<)}+f8;~S7vj>$aVpS^xKjB63OsAEt>$SbwVOsp{3ruXhW!b zwh0+?dE>$EO!F<*m-)5qyUzNH zWS(+#td#|yZgIqFz40{~|Dl~TnmS+zLP0JL4Hb;45b(Uw(ucHB&63pcOiPRk4r4D%TcHZ`F8*MKy7t{*Ki(H z^%+7t?-wA#Pq$%GTbI$c+Gs}6wSh9CGk}~HCLcgEs^D*RAFlwUU|YK7^E)8%ihzK3 zNb`ZUVbbTn)XOiheoMF{tva7%&@1TaiAF8$R3&q(1c)>UmAi480>MX0kNN4AwX2Iu zP9AblM3Et7#&jb(Gz3j2J8fz`6U+C*7b)5qVN%QC%ieqVoh1=Z!RMnoT%DI9H{7(Q zcqH<&G|vQyRG(ymdWkJF?IuU)1sq1Mc+jO2`@89zPnbT-ZhU1ZAU1XLB zCRQ{0gTw5+4BV#Q%`e`R&xY()1#8@P;U$Net}>z%bFe+>qN@ueer2q!zx#Z)NWs znYyRWeY7}-)-$U>sYmwyf2LP*!DOTVLckqMASgl#ghT$NT02NsTu=NyO-pe%NmG zA0l;v@CPLmnKXQ{y@)IcfQXqFk#rKvw6^Wv zOvm_d)|+hEa)Xc&TF-{|d-Z>4(hk|tcPi7lgtNx^9n@a}tZt)`YpsmDjHhK@^=^hL z%C=YwjPNyZhVz+|ytCzW!U$~3A(cM^|W(I_a zPr8M*zaHRO-K@|LZT%@ERZ-Aap6n$g?WbAXLlY&lWOIKW|9B_(hy21CtYsh?b}p!m z+O-UdK0jCtLl98rYzi^%C@{Rg$2hI z-Bm^KmR8JCQ~BcwU9#)0s7|qo@ed9GA|~w!mt9_$j?t;BdimYPD-w)Zy1&qKhWKwu z?SoM?9Gx?wE(Cxv8em<*!c+{T&46XXfzb}kp=8s6{As;#Uu~*0S1;WnBYoNTII@VN z658`AFKO&LUN_0#wNr9GIA(u53$SXOf&DS$VzS*BRcdnSzp^B_ptAS4{#FhDAuV;$ z%zCSfBf7gFQ+NA|&M``k)OgkQF=~0+Hcg&LW=7O_^^#;GQH~k@u>P2vSb6-j5z#o& zb@Hy~9~v(?WP1A_+KG@GIHEl3jK?V8Er3^c&ZNc2YbdCJUP=gmhQ`1KTL7kbAQy08 z+6#GtM@J}&i`Yz0;*;5w;v}Sy{0NPCx0X58?v&?}BPNz3vB@zG5eAu?NW?lE6Z+7#uu6mB*(E(tb?RNQQyVIO zUj@0_%=QQUhj$V^-jt&nbG?Lf<%{pPab8eI|3=Q#r9I!l#=pju`Iv|G0J!%o3yBB1 zqtS$jzw(6}hD|y#`|8O}hy7u>CF8>A_&6qVN4%$2*hHX)Ct|d6WLSJ@MjNxx6P;H z@X~dCv@o}X!2Mm=WTd)6Q8@)M0MQF2E3ut6fm>DI>Ws>VoVBv?qNt(n^>)z?L=Hz7K&(!v{6QRUxmL?p z5X{uEpebDF86Dy^C!W-fmQpCQ>$W`uyF@#Y>?bA_{bv@7?wT+=)ra2Q;ymKX^`@Y3 ze=Jo22+JiJH8k7`GyF#xx$f|f%DOD*rP)uWY=vR+UhT7JQ9s=`cI`FusdjTgliRI- zLEv*d$lW9C5Byr`AKET$*3~^g?K1B<6AfAnIU^ZenEO-j&K8V@|K-gc_Sl=-l-eIs zSP_s1j0vEHkab)HC!@Q?Vtsr{cU&BtZg$oO2Kmmt2cB~LX=x3^$-dfe-VeY;nEi)# z%mmz5zSuiq*YI;vVc+YgdCo+n;=B^P?7H1_H>+8R3Y@^D^z( zMxN9s{rTTv>)jJ(WG5(;SkT}#&ZnHOpXjx;vP+BS$~3fy1V8!`92s7&oEYdb#v6H! zotM5w62^!7KeSa%tfxP$@CHr6m8u;vUAru zUO&+|>asJI4AMJ1Q#jy&NoPyXmg-Mji7SujB z+grX=oX_3bQNHA;yjfpPbleI5LE5dEy)lcik84T_AU`hJr`evAHY|=?SkImdQI*Nf zn*~LGZ>G1x|IZX7;~~pQO@$!q8kbw@PAhx?Z5=)g7+1);Qq`;<2(Qd&3+|cST*4o3 zh%Y7%+E$?W&Y6+PYp<$zpsEZrft{q2PKseG{^9QPFcJI-8#6Ju+pd2dRfN zJCg&Q@*blcKb-+<8yTsxY8HFgPdQP!)s}l|+lbB=O9q zvW3M%s@b@NeZ80(+k@l#(DSr~`0;`;T7$0)>zPxSGvi&`1o`yDR&Xg3?x;08aj?1I zoxdbir=HE3sYME>;%hW~>Wd1?MR{WD=V~hf_d(YWA@yg4SgiS$6JC}a84s;pRJrX` zvh~=05#NRXq4n4=-*fuKxd?hg9_qn=P5sDH!C&zI)N)3K5L5xNCSEy7BCsz*bp-A- zrjjQcWWM(p=l$PhKkhkwfFa*Y3Xm+F|F^PxTu%6STfE8S+tX&MF|sCq`h8n$VqIG6 z(BtI#)DCMX?@#OH>GHiQ^g6`!aW0(gcXv$aa==DHop-mWu1E17flT3@9YadB$Qg4* z_v94`EIC+F_EqVIf|_c=K3B%KPiO?hL>$eItT|X{c=>AuzHaw2W9xL>S*8EbRv2Ny z9~inEDZ2aq# zx9Mfdh1llF@OR&r%lDXq_@q084^z$e<_rznoZrzu#2dbFq}K3>tCGDCQc9&CsU8FD z45SKMA+@mOcmvVL0;^A!)$a~12{DlI)VktVAHo#K>;bLM1^BN{TTy>ZV;ZqmNnS;iL}<<|40G(|d+XG?`!e?4B|<-w=`|KCUNX3he;hWh@Y)rSBa%)q|+i{c&3Z*j(|JcOzoaJksz z0GUaj+_+fj&8*2u|J?=B!8O+#`Mq}p=5fSN{GXZpoLEad`y?Qp8QPo-EOLs(9CVB1 zk}bPd#QNMGx0q@9L(lpY1_m2h5${Xp4PS$js){eAbbm4A8`(4AHx>{FRlLM4&9Bz+Y{ zZ+~#{y-R7s7DeAt2-{}w&79&8)ZO{5r>(ItrJojW)TwHqjs2Dn`*;3oO}vh-*|~@C z;~DTPbsa(yuaq`IFAfx|^BqQt{{&reY|?4{`G8j?P~O-qm0gXG@OSMcfn7q3cw9VPk@0xja?!24Rh}W(h&tRSng57YM(wH*7g$A^@!xFa>=ywt& zh2m}?4|di?@moqJWAux{r?yB&`6d?H>~L+vs_G5by};X1tQ?0VvlCTimgO7h&OXQR zVK(2*XM)%r6VsYce#{#~CCv$K~* zR7E?%dAXfMCQ-=J@0E0I&IzwnjdM2+R?;YLuS@l;8k5hhr$82GO`>aLCGyO7hMr_I z&yFqWWnTyWtu18RTd3J;wbx40v;eak2wbC;XJ*HU5;eYYIUOi#DYHMq zeNL_nCwr(SF)D9Q9EsXKahp6jcOcdxR$DaKT+oKv zeDue4^bS&}tN%s1!)`#(>YeSs5Dof8$yFBEbSevYZ0b=@Xe^QC4k%gKw&wO$R$Yu58;ZldlUrTKz?JO*T| zlLG~43)Lp6>Vv@O-)5S10=n$G@!>t2)^Rt!uUbOiZlPG0%B1gE{z3j}q% zVO;L?;Ay=A{3IBxq5ktrz-d+v$-eSmrk;D>qK9MlIB!ECx|2P+hhq+w2ywp?x(pVF zslwxZ00QC$rrBrgvxsZrB}lC!gC04JFv|~)mr0I7TLk3JQ$>;77(sWPx3p`sGe2>0 zgMYzTkMTE5v3q;T3FdFZZ%?W8Eo&n@ppu4w^h?drwllY0K1DU3;9f}DQ84lzxvMA2 zsrf{!vfzW6ZNZBh`-Jwq5$5V1`y#GPF+Cgi!h?|k1NXWAVvOQoT7alW15|QgmhyS*B&^408ve0&iKR&u z+X~-BOj-4!QVi6jw7%jRG`AQ{MWJ|W&Nlgvf5MQ_Ju^u8OA!g(AN%}k^goE>prhfb za`ycw<L;}T_E+{mmYL%W(77~z;TnT*KFRGMotjPk3(plZ-gCTOVm zVPw_TD2N!r7px}BmsFmX7+R9E%U+IT;uuj4h+@O=xsOLtxz_lZm5DSSsa z!P292`NOY+r&$F&vq!C4k*!$(@&DVhxoxJ@T@er@r>I@E1ohNEY)1XD!TR)Gqqms~ zZQT=VQvKp7DC1C>Ruya!6m-Aq$iT;4L~Qxwc>w;;)RuK_tX@%H9a)nX%@o|FqFP|e zxjRuHn+niAu`jwNJ1y$vhT_8wRp9p9x?}kFHD>(FEI@i2k*H3 zLu+|>X8gRQIuq!Zmti4|fquD1{UriNN!j^8i@6?Y%Up@nS5~>qU9m<~BHc|vW*nOJ zX1AXJy>D5oGT46Yvx60*gZfhx-$&7`%Tgn5N(nXJH=7lI=87#QxZ&^Vwg5GqlN_Gb zSz+L8tJPJP2Wil2T^!Og`N-0&90WNtdo4e$0ySlxK#rX(GRGyrjW=(pac+f`=@g>1 zXY>+JTU%@1bv%wp#G%18lY_;w1CH>xn!X+(3G}2TcU?-JppU@4Yt_2dG+AY%Xj#9JkG;J7xn$ig!e`6 zRmvHPLj6lo0F=u~J8Aqi`FkdP8SsCIOC8Am=|aas3co+l>!h7LVnii&LBT-RP*B*a z?Z_}d9tri%$*&#%R;@5rpPJ{EPOD1xv|?zU%KGEyqEp1Y1LnuiA*YpOj?P+U%_WPK z;}+~erqj(1hF@-tV>J(l@>FThQ;i6&fO&6o!aa0w(W`*9`Nb6;fE+U1y}jt{Blexn zH-OXasP?p&O`&{r7g-upHv&=PgB!^JWAk})xR)U#3D=f$TEAoKaIzWBK(zMCbkxCU zUHzYj%fJ3Dd!R`x1GunId99aB_o<#Ge+g5y;1szPM#aW|BLl+Ltyt7UQAaf!@X*r_ z-b%i>%^Lq{zuA{LoDNDv{(ruRctCWT%fB!H0pb78r{fF5cv$j-0nLfpqmwQF% z_pbv;Kz1FBjN#pm&gud2Ab>HGTqNP$buRpX{4dk;SWfz7%2i>(@(&n$2SX-(f+!> zKq>(luPR?_Ai}_uNj_-PIP}9FP16pa=9Fbmvfv%b3oS+l%t!+V(}zqXcq5092s?fg8#tle7CJ#z3a9ZRq`>Q zpfoBeNf8(P-!sUcA)SUgNtp}F?m>Pua+^eUd{{4*&`;Mso{#*xC^nTwe&pFAzh9U1 z2!%2TZaFv8{%N6;KE`>YP_v6yPevn+e#&~C<*S(vZCHDu3=Kt&I#*<$Sp;i97Wt_$ zlrr&JGUh4|+t5CLC3qCtMdU}%7Dva3FzK42HkZ14Qeb~b$mvc_Tp(5IpxQ?w+t?H< z_rR>=@bjzjb$6uJlTuT=zGwNJ6>1%Qw;Bf+bD5e=8t%c?*5?=n@}5QhsYEQNov-kz zb?4Hes*80n3aoaWhF&b(v{QQ_R3d-6um^|bM7Z+?{=D>HWzm`iwc~_e3&77x zdhcs^)6a=fvp@czQbiW%@9F-bAq*fddpNr9`3Z|?Yw!YkYX47LjFGRa)Gf91O5CGEs5Go$T=sn}BYsjH@#) zy*Wv+;)Our#AgG{=pP!)c?%CY(uX+2+yWyKzSD-xmX`5`@K4Uq+g*mXYhxkRc0>|8 zBZ8!B{K8lhEtW$i3Tw~3c%>5sFj? z1bOuVzB*!Mqn4**zoG5UkOFOx*@jg5Rl#77B@FPgn{AyAAdyg+=6G(ipf<&t`n?wU z#if9FOpO@FH#JsO4#_Y@PnaVlY;BG~y_&6*B0BM;)1pE;1tehrOD?U(ZgrCM{LgJT zIUBEHb$HnCE=Qub-tnG~0)Sb|Bg$mIYksvYq{$SBaVR;F{DyLZdm?W7cgr??{1o(dqOgFLlW> z1;2R!T-zM%o!Ydg$a>xRvsi;hT!yHS@8-c$$?n@6hGH-Ezmt;O%j)OWIQ|TM9KpXo zh4kn7y)?iY!hU>GuAzYA*NQi<@q}vtSHq4w+kN`Xl+IaZy?I~pBB`-+ zLt@D4`iv^ckUJ=@y6?tbpEJwjXVCeAfSE?eDi`htsfS9dKkyr;-&uw?bw*(O0_J2I z0`O6wS^>)+0r^SraojfSoct%yP2PJH>=T#DR%&oG?EHr|4?KU$8&d@n{O9?w2KKO4 zFCA#_zK#Q}vVPY2sSv=HbaheET2LR^y|6Ck%oFiB2T+mG36{6ottV_LB~$U4IJ1b2cB zzZ${pQ8TmMmkS-K`~<%f6)9qa*ijDFyEu%lsOq-OpQ+X5CIe3#?+Jnw?0E&$o<_Gw z*ke<(@47zN0d7h;!Ga7b&>|%zl92a`nRcOC8udy6RO6{ochnblph_>NI}A@9gT!B_ zM*mg#@zg!gWI5=b;!Wk>ZRe>M1~feoIfeo!z4x)F$>*3c^No*`=NrdFuWw>Tm+%#O z*mZI!Gfh9Pga6pua%O=&X0nz4_O3mmYj2FlNrr>sq`cgvmtXc4TS|wZ>TQtosG6-1 zRIwi6)F->Be`sc`|IpqMPf(P-sY;w6kIu3K-=bx+93h_AmNT*d{<<6_N>z6N{p9@t zSVr}@_M>M{8L>-8vA8b( zbriI^;BVJrB`Uhn0CsMqTOS{6Du$i&H@W>pB6Fl+kDc!7prImY{{|!aPbrOJmh>0k zD{K#HP!$FBNTcr)5@qlCzj>t`=t6&v*iV1&%$&->Ow0P4yJF52$mD7YE0N#W)l+w)It z<x$4$6L3|yP)J&S3;>Yb|E_QnLIR+1GWci}0AhUjjh4L{BOb3y;&A1W z3uae`87ZQ)&6Ftgcuyy+l0;Z{1B~)Ub(QTtg;17s;EWNIqVJF+Bks@bCL?jZ20v|f z&vd!b+(Rmx`HiAXJBSxwkgc{IY0*h=qL&*HZuQGpHL*AG8x=p6~+|Lz50@Hr;UPl}v#hW9ZV&f2*fIB~*;I95OipH?8fMuC~z>`-g@l z-~29e?a>f?RuTOAvOEi;tGOeV8a5ygWSC_|$}sye2|NQHpF~1@`$Y50vJ#-QC}>5J zk%Yf=KG1v#95ynuPjvJz^$F>>ig31fsk=mcuscvA&75ouis`v~3)CGF5d+7!S-0Ns zn;E}Li2b@GbNj}%9sYxO&;8CB9^VwLwwf(*@{mD2VLOvnIn_#c{_9pwri-7%T{ZeEWK+_WY z^{jOUhs1;DTcx%^M(;z(p=H`UPh%St87-ls{3}z<-k%$;`mO{32M^!OW0fylEl`I4evrPayiz3;CUE`Y>P>OhexqP{{fjLjB_%KF z>b^ic8?_@#J!}AA#DMI!e5T0!VS(dM?lD@a(;vm&>SFuqQYr`fI`R9V8P^NR)?Qsr zg+D5%U2w_5BwR|%y&=*jsx492q`B0;o-Tm zaKD?Ir+#KScXeM%WkkKwur-13ec>g(dC+Jo%$)ULxc*5Z*v?>9_7$OWi1TF=c1;85 z`JWQTpONU0ucS6O9bOU+GLZ|>@olGvC)&@+Hcl-8^TnO6R~H&LdKuo_Pku9gmu`5N zhmY#z&5$y#iMcGJ_0by;*^xgcro4&CiQs`uBa6$4Y`5(MVjIWXm`VeXHH#kQfM*I0U>2I#!RHEo2EE0(3g!P29Ph8#+)8~}c z=A98S%y*Cb(Ayc-)pO72*~HoAd5q&6v9P=hk&CX^Xd2{pc*IV(I=vq;+!>*>I{Ik| zZ3`~wtmBCGq9InU(4IX*ULz*xl`U3_Vf2%IGJuM!Rn-{oqW_*wcxeeSWEM`?>3TC2 zWNA+K3sp2BBE$rGsYTM4`^^ypp>SgL-FvlOuvs>4knddpbW%GW)kDF>(y6gU^Z?J%*=r{!%2jiLdp=-~p+;(oHpakNkFtL9NQPkI z$ybdd|He;k*E6NqVv_?Y#3w)t9RuNNlBbEKej&w(H|Ucq_6%yaPj5$`1q(5xmXhC2 z1kq`!ye#!8nLyZ-y}gPu2sb`f!$%24PIK;MB%$0bhrk4qLyRE zhUH(B)6W?zPg(rjC^@ z*N`Xx%;O-uh@KPi||C=bvs z{(SoTexlRx)8kVvwv(P<$o-(`f3MwWiN=4iuO3J`%!4s!jpT8<3F~p=6wu<^#NCaS zk1KzH0dh=t>@CoaphVC9?D?11<+E&I(2-l~nj+wTw*0Mi8#)0#W(HD$McB%MC}Iy% zl!nWP4Jy~@97Lz++ZA08(1``sf7-jpATP7)=dkNiN@)qE>!UyV|IlLL0NbK15tyuh z#r5*%le2%ljp(O zKDl07)a7YN8}3`_;yJvJOB#%xQZwSbtQgRr$e$pgJY>3wChvrp8PiTBJ2GZU95?l5 z=G9;8QVwfs|nQehnuHgSXlH?&6I zb`aw~Q~?~i+Jid*+gkc6sS7Nm2g*5|{?`*4vyJ%dX4$Pr6x-h8@n$1KzWRS|f7oi= z+nV8VlSe%JN>ZCoDyb?oWyBJDiY4|^jo6nHBV*5tIfa@RMJX(TJEZr{{;UD{UJrCc z!%WF86L0ijKW8Xhj963oY?wn)N7Y`&d_vM2uH57vNEDz0v|2y+JYm^F{f>(0K*?}5 zNl2o>7R#i&$9#=sz$;H`E+eXq%WrzU->aMB$KBuQB!4FI9Y~6VBmD8#Wxt5$16y2J z>X3UxN!or=ws~1YsL00elZWDN@AuZcmXmQ#54@gS>)_+&-@BQqHn}!}d`_qddb}oy z@cdgQ!}@>+q?c%=S}H$Cedb0HIzCqSyQC9b&=C%kg3VxC;-9E)iFc-n@o!?C1RmjZ z4`;e5Z^S1I71pLQNWL#{i&TEPmKf|JpF{2%zME$HQjF)y) zCp3^?#iY_pFIM*-O|^SnmJ3Fnt4)4sQNmkf)5}-qx;leN^1{tufC5oUH-(FsYo$BM z`ybkmcmT!@56l6%JyY~ApSPQ)m-f&3Jl@mq+1raz^w+@bI0;2}xN;vkdO z?5?XxXTQ}G@v*(PrtyB}-hMDZsG8=ZQ`qJFqo8}Xi}kHk=9K8XpPpo<=)?>nc6g<$1vVb<#~f<4}J6d%$R%X#!Dx_`!!s zevy0ObCK{`i|Yh8lMud%a&#(X0BJ)w{wtJ3XBoBf=KY`xI-9(iyNTO~?YncCf8RL&24h)wIodZ;B?U-gk!q)aeT6IEFT5<=_> zHy?b*x-=E?MVLMKpcr9fbnp}!P;DVugMD*v3RI9I*7qUT+F{}#{^@P^M<7EDRy`Cf z_h-gL{7pW|uF zSXj|(8fGwG6_0n`A`Re>5w9{Ceuecim!8evM<2C5OrRewXE+$nK2LboH-Zq0Bb|Pn zD!^@}0V(^L*^hspiB80gVkk8_8PA@6HNRaSU-4f4r7&Y9hENMlB@L)3lnei!(f0@4 zDIj3!FG~Jgl!#BUx4qt83ZbNpsKx^;#Xk})lc0CkyZ%E9SOX;I4lndJw057dD^WYy zW<>djJFof#Jk|*KL*al{sg$f~y38L#{?q3(xqJRZjjUcB$A$yV9?Ar25B>krAeHrDUDUhF6l{t|Lz;za}ey^ z&4JGuO+36Frv~reW{!hjbk>+iQTdF!oT3GsRP=KU@xlhBCt>q|X$ock?ThYHC=?0s zQfP{h$|RSG%bK-71v&62m~sL^BT6~N{+UP3Wy$yes>sAh*6b$CAnVSl zbxjl3S%F4~1AKSix~4HWL`;A^OLsW&yA9T?2^e_VfzOHlyB&bI!2Z8CLgIs;V;SCH z-68+n8`tq(E4^W)+i`_YHy<4gu|9tFf?YiTamYC$H7e@pTV6Eka><6wHKV$hd`)sn z!|9SJ+%Qw5aL&JJ&7rQBk!llmSb3e=$~A+sS%~;4gbtM&)Ak_IIn<Yl5GJG$V%XL2GIkwP;+e&~kcTgHo=q=RmdOKhQfN6AvHJ2I&uXf=j(Aq* z*{H4xJZYf~kGE8m?YyGLG}e+&iFYn?uLE5h(6}A}YXMVp)G&&H4@aG4ioEo&YnV*I2AWS0#(9Nr^%gR^lyIZjW(?Pv$kQ-vpYcPNH`zUNCIk44rWF`e zdH3vnt1yD3CC~X2I=Asi7-(Qlxv>=)0$rq1p;#l%nge>^e5SOY%_=GfNUJ|@-3`5d zz~rbsMh+_J?wOtRW!y#pmSH*o{QKo;)`!50oQXK2FzpBlK1@c9ZT6`!ATRpy{l~`R z{7;~fQuGG%0Ct$UTGzQv-8d4r${C2oYqVV&V5_hO zIHpOQJ=O(O4^%?=c5fRK%9yLSf7)LX`0oLpu^BUAf>Yn$u`nG7w_R3pHcS(~KQ(r` zwJz@aBv^z!?A}9CnjL9MA1h#NGISZyx8wuYbC19F#V;_3X890IP9o6~YayxWpz28f zm4|;-I}A&+yV(&MekHK-bKzZ=qk)~uEVGM*Ds=HWnoWQ<#fhc~Am8J+eJcO)>sMn; zpSvGpFAUX2_oX=Dj#4hoFEhiu%1#q8e7=;uLWpIU38ToT;9}0EJu=m;J7QxcRJ_UB zQX>UK=dU91QW(Rx5=1iQCMZrh0Cma9S*XE^vYoyMg_DEOBlE8LiXG7EJ!$>Z_$*w` zF{d6{sTE#Bj0HoB-wQ7ugKMjlDd&lC(9zg`s@FZH67#;_A$j?^#|dJ1xC-Is&EKNg z>lZAhyHlEq_D;dyGp*6r`x>G9Hs>wVA@M6*Vm*;jDXs>P7ut(m2g=n3!P z4G6QoPS-u*jU8%|gV$*j9PAKA26$YkZ_$&;kEgx1$$(e7Yjuzf=dY(nV@=m9Y&mNH zTILKqQwn0g65?}Q3iAG{qot;>IERI2I9ue;(^n&4FBS$rsSRM?;u$8+Xw0=lJ2F}` zrQgLlNRN-pclQqXtvzY-7MF1ND5-x{f0Y)mYdHG;nVzqYtElY= zY4dO5)Q9KFrTWpjRP2YyYy9jI!&f52v*vc|r<0K}zSF5KXrJ@&;UDfx@(`k$Du@{L z?RS@jqZlQ!f?C07;@Tw|TuKR}q>N?LYq8pSB)$vo+L(ykEs|X@?h5A8c9z*T$6$Gg z(zfC1Auc5|vN08(-{wrb2&C^w{xrORjMY+RKlf0zaz58|FNAT!rbqHmLBg&heYz5xu23uvR9Fvb%A#Q0+rvvai4^nCP^&WoVQFs;Ag?{w22ojL$TxkUX!( zSkw{#K{z&iEE?;DIwv12T>)>loNP00&ZTB^cz|UUA7QpB1K@boBP@^_450 zd%eGM;~4RPQ#zp7U*fJQ1ANgee%8I-`@P2T02bS;UB)RyYWMq|)GTp-zbm@XO1VrB zF0-IdBHL7uqkZ^Eje@X41K zB;<_6!kE-!R$)EOaOqrjZ@FgU`};C}&!6?YQnrHXFIN@vxTVt`PjZfavpMz5ii~tZ zj7Zf40Fg9#bHmv%l1>Wa>g!y8Rt_TK!%uN7#5hBd`FDMZ!D15PG%YtMo#@A{co4 zo2Y|~52iC1h`zCIgOF8|9yg!odEPMiyv9%botN|IIZuhO<5Kg{g6MC5G~T%ZnD17` z`uvxOc~yr4;qY6On9uXOyPx?$cQhprnY>~$A9=ez#;$cp5T({b;%Ud$4yX3SYEie< z=p*NA&8bv`{~=iBUZ38#7`e)W{zI$5j$ZpasR>W(^!2%YcMn^e8jw_jpNTRQOrE`s zR%nWruooEe{Rqav$$PmfMsyMQ5AC{i^_OanWDo-KVXMb=ZLOW-T4)ADsqCSb!VITDh}d%w!H z`(4BE`A3PFlSdD9E-6>r_@LRzb9F2czk)>8@Xp36fOC5?W@*gZTi(1V?Dnn~!N^ao zM(QB$RjO&|r)S`9_0_w4?&Hml5sUTMutX(NX8QNk@5{_7g4)X>SN#=ns68pi8xWpJ z2%|*J14nxJ7)_Oh+1;zDFXsMJz{dj z{ocfgYLB ztAfS2Mk*V+tguI6xJ&kveB5LjiFV?}{PQA)R}1Ijl=;ffzi_B<)WN0`6*Xl!Xmwif zaMA3yU2bLuv4kVDrkiAbN+xElD8K(yyku_4#Bp0)vEvc{fEwr0?^j&dBJ4pSWT6K} zCp!Q<*Oi}jIN`>cnCxNzy>?J~$+@JI4FQo_b6Pr@Q{AxT~SMe!2&6 z2+=V7%s6^jkVZhi>3eBPEJ;|;VzJOX?r)k&Me3J8UQ4+nU3&hc=9iqn-ysEG6u`C1 zPL2NLc0&UH5vTA?W24&(e?!SC;%+rBn#6XE$x{|^vVcB+N1He`c;HT&*!Q{jj<+~% z)6FhhYo_S0($!1-iLWyrw(gU7Q}Lp!nt2rp4-O?YK^_EjIwT`~w9ZuUCLs5>mzS|p zGpx?kHg=K~USoDw-01pG0q}T3@}}cqLRE-V?uVr;FgG%RV71Hu2db4Cz#;h=m_h>N z%;l<_$h&DJf9hMkz(Aq)v}5>Euj>-3G}7@RI22bj zU-m+(NaR#0n`-m+y|%zW-8iVnB|yO>85C%Q%IIG-dQa0NK%z^oF~Ov(ZK$(ffnFag zwcCjSpU#rvdj2}JSB;n0ZP1skge8XHCtsbANc%3Niv*IlOX zwAEBWSNR1zn~4t2WHAL7?A`xtz#o!9ihsK z+lE1%!lx1apKy*Nrdr!{@@*LY)TuYRQY*K+?*SVw>9GDElD;}Ds_*+61t|$ZKtN!W zLApzN=#=hOx{+>1kdW>gN;-#bknZm8?(Ue+d%wT;&v~Bdd(Sz0ueJ7C&FlpUq{$nj zu6tj`N+|wAQizWeh^t^}R}NHSCGf>GtG2d6^+u^K(1S=ocWTBNKohxNS)8L(HIXo&ArTl zI2!|v*(neOWRM_wq?&l}jjcS!9=H>xx7(ij+NSbU61DB9E%Re?W16Zdd^5V{Rb$>d zZ_ldO!U_xjNP13}6c{vNfNN4F8nKEx3Ual8?3V;j^I*;^NU)9RqOXNWk?(=!n(^qy zl-&p1FS%og(XOc8Jj7^2a$+KhvKMW5n$H{0;9D7Tf+=0OPtG~%Z&G$a<}j8-1`L@S zm%MjYj?6-1%!04iHM8aNqZfJ@bsWZIy*Dd&6()O6-baMvV8-}kOO_F2vLS=u`WN`@ z?r}=t$d`j?2)^312{xn*NV*cRAWSjZ#Zg>|3rMn!ck)f*s(Kr#OZPL#l9VE-lePn{ z1(y!=IYfSBi{gKY{0c76v?@udahjdwXvM00_;hQW_#9}7e!`fu#>RWyM{{0WeTYxQ zPfYD;9H-o6V@9pLoaPid{u_Qi5_UA}G(`Nw8mY+Si2T0SNp;zq?Q4}s66wfReUbXs zK3k8aH!r>O(n|W9KExnHMHy+WN$$kHN*)@@7@uK4G;-#NS7y(LXL_wxf~D>SfHrC^ ztlcNj@SQbl9VCyG5I`ePK9=iyR&r97Uw5Tf(~CI;qs*C0e9@4$i`U*;I}hNbs%UnE z9wirFx?8Sm*w=7;H%};+rYHU$KEtp?oUy2aiqrL6B4HqD7ohM_v39`?nVVym?!|iI zXu#~kAk#=4Ug>x!g5CVKukBvFTMocw0NukCe2_g?j01!U{bMGu(6lL88}M68Q>AxT5}&Gp7yc|eO6(e)E% z@eCAxN2*CR3-3YZEs?Pwd434T^cLn+g{x(#%rSZ^7dCe4h~_@UspQ?(|KxQJRQ#Ec zRF$c!XsuW|k*qmcWMvg*O6mWV8wkeUyTMjiQ-~U#0UT>^nsbq_2_siILZK`BI`XrB z?*S%B)9S_1bH+xcOcLpKUUke)X2Ok9r%~ruO2ipN~~5{nt$ex9-==U z2Z~0G@s@g=)Viu^+w5WWF1zMds=+UIF zcUkUKiF+>T8oKu;uN&&QXbw3&A>_1n@t4SYCFxr1Xr*iKP?$HKzR4l2pN8baH#LhM zZBphlKdZKwwWAqdXHKY^>Bk5ldPgI&!K)#-|#{O6vX>DZ^4k zC_nlpkKh$$wfPxnv{draJcQVnOW(@9k4yUP?d3=>bsXXm9wwC`q2{qek0Z?Npmnnk8gTk>@n+Jdb#q}>jHujz-fLqhqap_|O(Hl&Kr9}H@ zC(vwFe$~<(@{xW`d>V74Y=jf%pf1y?|2pYq-CEV zD-qLTF}o{xZI|$GMgwpSKseO{Fu4$sV?8P7h56eS&+>b9v^x3~%!+69vLlmWf@Li| z(T_QSgPG^~t--+LuQg-lIcBF){;gTDs%}nLRZHs>&DF7;X?@(&1o!fbl-PafQB7OO zU4?C!W{q6;8KZlo;!qZ6)H=DV3zKb*e!oyy)bz~9s9*}_AC2CE&aeGt*d-zGA8v|T zRcT<=O{r{4q0i$2Vo%Mw+uD_gY-r5YF|J`}{=bP(w9a+BenD*afLk~|E}LvjhbAbP zusP>`$#9}Qgax~&P3+CsXq(?5Lq2h1&!Y5J1~%NXdf6M*sJ5c9md4sAD;fFpjZ5vi zD}w(kOY7=6(CS2Vy0^>|UvC6q-X3X``F;j)Wv1?`k8~%02A4a~Qb~x9q8C7a%J_z0 zcFGIsHQVuOra6Lxp%3@o78iyWiY92~3+xcV>5Ge`o?KJ2iXSId0P!=F09&DWk?=J!~$6UD@DM@MfiSdvl zLQ*eE&0$lml{Oi)AkWksT|hrys+-FDiRyd8DZ|W(b3=eCEeX~FV9la-e*dY8S;CdB zQ=yN(aI#q-PUlyjF=wGetR(^3|O zpE3{WIU~lY=Y|HB1Lt_Ox6y^?)omE{;}YnijHlH-+WaMJHhCZ_#Y1&jt;u0ulY?LJ zUJt>#w>LHV3UYDmh4nbsxbHOJlC_{GAH}YPw}y;NWimJD$b*!9r$Ghqaq>Q@8yiu$ zmR*SS96$>r@q;sti66$PEFmHyf)q|l`xoZV%W_ZlbQkmwddwx=qBim{9dPU2tFJrIgVOD88mR!ROA5E@&= z5g+Eq_xMeQy%{2<1|sVR@-upD7xIN8X+*n_wv7p^glOG=L5IjW5YKJ*bDRg4F-qti zMHZInKko}RKTndgAf6%j(_t6p-6fMu48X!#d$taJn=!o}JU&^e$scgvwV8WB1dvd_ z&JbLm?#DJaCY%9&)ed;nMa8)C>bcnc1miG2%G|+e{sgk&bl?2cWcYFqy~sg)fP?{( z6yV5Q2Sig5j&er0=b3}KL>LE}$1y_FhrzvuAL1hZ|C0;Pd>QY{b|<~GgHm>eNTe3t z?xB3&%BUTdF)0r4>o2ayJBcb#Rb0re`%r6BzLy|e%!h<(85o8nv+G|I@bis~=w7HN z(AWP_3!4l8S5IZHSYrUZqb7f#cHR(H%EyN}<=m~~Xs74b^>Fz27{AM{|A{AEc~-!F ziV4+YzVg9X7=3W{%cJSqB@`&O0o6N6Q`*-*g!hDMJ6nGjotm-Ik^pPYzsh2fV|)N_ zt5$#-jow;RAOBfcKf9BK(JeAT+`q4!Jdj!W3JH@R)1BU9 zx)*eP)6!i|P?15>t@_{Zt6R;J*S2utE0v^e*xE%tFIXx#9p9?RwP|S;2}Q1^ z4B=DMKY}gVr;uRp8L4jY&{~SXPqi1 zWAdjntl5s2WK1WSNiM#IS5g)B+HZjCud^*c1P%rKkMbk6zh%zLu*n1cg3pB84Ho(V z8N7Oc!AQY~xnMRjC+<5Mq>4kUX8bip*&2l{?dtYCajK~q4vinbs*#F;2y|N6O~;D) zETIHz8zph-#%KwUad_gb^6KA)HveIQaK@|1e-pTEcTu&b@&ff7BxbI$V!eu&6#l_f zb#Ks^v>l(+6ZeU;3@MR2lzagp7(l{`^e8Kbd#ZM`yS3k*X)xIg7YG13#IClf`V!dw zD|vQk$VDfbvu`4qig^!UwS?8jm@(@(GiD#r#>V`Pd5d@0oNPuzmru#u%5Bc&YYfkW zExn@OZ)09bb8Zuxt%U>e-Gm3Lgw55zySQ2Z4NDJDOqQ+V-4F)4SnNCh(BD0^NtISS z$28Uwh6WR~Epi)PJpjEIR06a}1iiXLdwC}8bM+*WkZ}$)?xE6=&GA<=D)VU_L-?)( ztc8EvlVl$P$^>-Y`^CFP+ac>292ABTE`O%i-$tXNy>Q45`{AX&NuR$(_Pd|Wj4;97 z@-f|{-@ii&HUJ_NoVgS_v?qT4jyupF*OcBUK3*udEY|P%K_1a|>i-(+ccK6yzJk_B z2CF+WWniZWUkG)EVvpSFn2iwR?5hrsl%gbt&#Wc%@(yrudymDaq6%oTqiPJ`}KHa+fo6J+Su&hre!C@S7s=a;kBUyvMa00ztc zp|qtDo&U>{&uJj3i}%bzsDEL%`{95XK&ZXC(s{>Si2P|Q!)qolV#d*=*N2rpTJ#G& zq_y4nWlNLv0}7qt@LaA(xd^vZS~T%f+H^={t*nJT zO#cQLMuao^vF){2c4!tM0j?e_b{88W6Ff4*MQl3`_3+<&oF%CDWuI+`-DRR&{txL* z)6NCr0%#^wbnd0({SAfo2fQ3sW#%hitOaGqD`_I&uh=X|<$JFFM|2x9K{y6Vmr|b9 zOUzGnay^}atIAk9#{vkRK<8x<-y@W$EP$PnhoI|w4DIqp)ZhH<4|RQzf_q*0pdb95 za~#ky-6Zy}NBTiAb|sF*e_z#vzlxmEK}YI+V{e(rFYflSDV8mC6duc+leYj z=|$TOwZFu@@^YxDuU%C3UUD?;qQkNU1L>LU3A4s%iU3pQJ`j_&J3TJH0n`HbiZJ?= zdrt9u6ZflbBhTnO1nx3XUmNk1GV7YZFn9>M#0O5)va{#IRtcRMO7~j+z!)9wE4`DS zYFiFB#im*=D87VY%Qe^J4J!6MUymd?RM-v|iimPV`ec9daJHvdb-SqRd4^_uHB^3> z`3&RU1G)oje};@86SO45(c03}Y!wcA-1~RM$dfhbZ)OwxUv3?J6AphMH7ShkJ^sS0)SltrtS?B2l}rq%X4HHK`W~0BQlYx_iuZ5wY5|W1 zEbD7w1{S~^G2>&i9ux`TQmrjSYuifE3^|V4Wrz_}cmlIXP8h>h#Q&5Acy|Pe6z!bn zYFs|lVb^+f_xW9OnTxe3R%gEt4_(Y(`etg49?sn%-Em4UmwA7i^wRZQv@f!9Y?)+u zam4Zz@mwr?UXspcAQ;zOmh1cj*42Do!<1O(3aClkiV^Dj)s{?^Zm&@xn0d@`pSH0= z@A5=B1PV2+%{+WYBYdm}MBAbGPX8gz6*94$)hxIz=*eJ=3F&?Z6<9zvRci~WJDbd!0zWum`S?Vl7RwvT z%e!9tks|u9nR^?&Bv8I?NlD+gOUwmdu4m6vT*!~UpV}$G%R|qxM^XP1oAP&mYpcL2 zPWAT(X`n)623ENaj25AKUDA}$YNxb?(2|6R=}c*wxsb;M-g<|YGZHo>=60VPsDG)a zskPfQ$}0+{^7f&x#0sW&&}G+UCeE12o|}f@lA>k; zMg0U|L`KjM&u26vXcVX;o?HI-`)xeLA7I8PV6yv9jCWw2!az@mwkC#%=JQFo3s$}k2- z@>g&#TeM!561ZcK0deU_51=5)Yh}2~$l9RbT+c^tfMX&`#@$A6<|?d&KL{S|VCYmO z4z}ZEc4l%FO25V03-vDR+?^hywVY@aRthgV+4r&B#+yy<{F^OSVrBdf3_+a>55^iS+tJx$l6ZnbP5cWDaS z0sJe$MxTxtH=HXhSs728yRiMi+G?!(1Ifn}=oxIc)V8PlEBiz86CZ;y$cqY?NH<;~ z85QZPwaPzs8pJzx1*CGZdJCLbB3P2XhMr&1R4|V8TE3npKZtaUSacQ1ZhMD4&g3^G z53*$CxpSD(qTS0I>xyIHG{2|%9XDHNjIS>~aLK#@1oLQH1RBx()1~31>n|YbVdELd ziJoN&aP{gHG9w`_jiMPw*FB9?yw|v`cV;G)lZKmO#o8=Op`n#eR+)!vMOjE;<`jY8 zbTz9%@l$dtaon4du2DM14CdG|3REhk$qyuMGzA5dRc8Be%4c|#?9t+Im{t|!7nFXF zs_tc|#lsZS%aLJ*YGUrVGSM(zvMq`rPCBK4s?=lqwwa)RYX^b%vV|Z_rN{4v9o~3J zvL}L(ej*(+WHtm838-rYJdzypmL&H4j>vR(q~{8#+dcj#uV_`^^^T7Ty+{zJpxsC} z!uM#zXnWC(w{JxMaRDT|*-F$sb>FEKn#Pq%0bM0LMwWZj;7CZ3O^t0F^7-?qD(`n) zR%2;At>m01*rQk@c8j&O*tMAD1+qF$m7z!}q?+uEy79;_#^2`{5-_*l(O&Wz0;Ebs zc*gBC`wWx5pB9PXjQ*XdW{^jWG92B)6L&Qa6Y}an)w84PvL?HW#u1)H4bsG3p63Cm z8|d!O(J`85iHpGH=TN+DQO})Lx5t?0Kz7TWMku?c(-PG>?hoalZ|8bXu>2+T9wzCn z8r8c@BvLv_kx?;1`tx%tQUA~iC!fI2Id zw&N9hTac4P>PMIb93uDAH7dl4Z%5y<68GQ za-|pPqwsNUeSrvNJE5C7jnGVTOx5!|#q#WJgx#5KGxlACo*PFIjj`zLqG-d%Hu`2V z`S7$yOrKJA6WV1C9p!Gf4JW^LIHQwZ=;F#BWKfmhz+2;AdgFY~Vt&T_pI%<7 zX{X#{oy9xcwiv2F0%@MJeW@TI@xENBu9iH?7z=Qd2v(NA zGDbWioIOHbZk~_c|8*f)$13WbEA%=GmhU!M{#Dp?SKzYy^C3p##+m&&RG<`h{Q`ma?9X0xo)5CGO z8Xxr_k;_!Hw>j5T`KGKfTuUQbl7k+jZ&bL`D-Z&1G3Z=fZR;P2vg696uU^r@c>s zfiEgSugN-nf$(%{&;XTzwVC4vZfiCoibrhPe$+74cdL+Y6T3EIk2}b2@+0nEshB~J z1~ny>;G2}HDmn%@PTR8}oHHTqCB!5}xNnfV2ohn6OFTpsj*dt314MJh<$X8@j;XGV z0RKS-(?@CWlt9m8EN?4ve`Khnd)M}ZB0TnU&yO%FSgM9xNv?YjdIuB** zJJ4&b+#oj;3)!9KJopi!ATTaQQxAS-H~>+Zkmm^1_C9Otx8a@%ZvTO9ZC1h}%3}7F zd(@qj6AS!JgC)U>FtwYal~=ApyUE6-xLRQZ@wX~(xFi+V6%V9Q^2pMVAoSPCzU1=; z`?pDWa-8@BnAJ{=GT`z5ecKV8IVQUaJ-?T!$~G{9Yy7-crAd=_D?l#8QX()zyL6O!uzc;B2hWb0`m+E{tg-LHOO7i?joB8;{gJM%K5}Dns5?=FdU7d@E{|`3+uE%ha43q`y zz_10?3zomemee|pe3vQG;da<{LUferq!lexS7mZ&O1o_Hdkg3y0Hu*mJ6@CofYrXS zU$shfvIv@laE#JLD)~Lk(jZrsS+&4(Jl$lL1EV8Fi$JHCX2&jS{{wclnVZo&M(G>% zUaT=BoVmXxi^~441d3}D)oYNhIALVb=q`6c%{qq>eu9*1`7_kj>^eM8_p`-`Zfy=XG2I zPE9;)oV2w7Hny(+N-Hj}=VqXIWPJrg1X(^Dc`i1rM6zFgiIK_Y}cDZI&mLDpGRmdImH z-dT41)G}&ym@}p6ZmJx6Zu{4D0^zI4p)KGPWxP;hmT3*^LdbUOPct;j3Jh7(eOoVHoBY07lkq}0)=|n{>(5jn`hIz`CI~Uf&o&pG^t;J1r*`5_BL+p0(^HC7c(j8;Obw2#u(W%4ZK4l3AOJ`!Rnz5^Mmo7nW&LZ>WrvJZc>0GHM=1MBo@ zFq19yD+pb=@Wo5B2-GCT?@IiE=Z>)JP`R)szW=!I$A+~#e@=$%WM!WK<8LOQ7(3$m zR!_Y0s7m2zj9L6)`i@H|{UcY$z#jRN*OXV%_(TTnR(*5|D~dS}#msS(U96Va^zN72 zV}@>*w9vgL&b zkdgf)lu!-5GiuOZu;W7(uYZ>+DgR&`74K4v{h5k(-4oNsdia_pAaZ2OA1h$DSF9d% zf_Z!Rkke%VZa8l(<6_|1OjLd^uAw4&LPe3&MhJLWAI<`pUbJcO%QF-~T~S1|8Z5y} z6=j*-qV;S$i}u`k48+_6TsUXjd9%w;-pOO34D0{dRA+)Y_oQl+4OrVgy10HX$(^qh zL`qadP}jg)>8(|;??_Dp82&@j*UQ`yEuf}T4|n4dVq)ez;YabGs(6rkqHd|^!P3`y zKkxX)IfMS98}TKS!L>G&XWi#;zmHKGoJEFXos3=v4fm~GlVuX2_P8<0;~oz*iD^}V zAghYme%|rxdupTxj4i^`d$szHF?y{HCI`~C+2fW=A{k8IXQ<=TiP-2O^=A37>D;=a z3z-27U;6y(5}DG4g*XD0FT?9w77n$Fjm4^KGTyFZj4HUNpI=Fho0Usc#;GKhi|L$o zS7_78v!PT0jx0x)EaOl@Q~t1nfV(6~59mJ{`+^_$s)#Ove!O|=TjcGZ@|HUH3UsJv zwTga+Ik4UwYbRN6xP@kY=qxK)puI4zPMW?1h>FXiz~B2+qC5BLl@7PTJ0iIjF{)VH zEnkOg!i0$e2KLXfmhE&nGl;7)dWJ?_OJUTBeKy!ZL1km4fQ?N?BPh?vKzrnOvdA;7 zhEZ(g=(m21VfQ=KVm#vS3#MbpU`T}JvbOBmZww@tj?$$D64pypB?Y8D*(^#_aqKRH zQGzkbI^o`GK)pvK_@NC;Bce6zv;JhmLqliAjE4OWeWu}j4NLB9qGP18g09<1_#d3` z0*}p{uy60m=GT`p3dm;RDUrRPHK9>=GGLs()Y$f$xsWZRrEcdC$UB2UWsx0qa~?=< z^3(G^)VgS`28i#OzqJuf=pTojZtT_)jC58w;eKXtzji$6O^F#s?1GRS z3hqivj^3=y@`213V+!sTO^#)@^pF93e!TlDjj=ym4DNrzwLAYIX+a-vTp2D|ybqWN z{Q(sgnXj6B=^$IZVxZRr24phKgCK9$6xu0K%=S=jWO(`l9dNmCtID4_yg6Pr+*BkM67(vc106p!sX0oIP81nW z$BekvH!g*nRj^ zJK0E=&b(0uuEXHO;8IHAnlY~8Wa%=8o~=?r))trVuQ728rrOHA6U8Y6fF&MC)L z_g|bgLDNG|+oc``0=>-JCJoD#bnY4jWZhLbiC?MEY9ctPc0cXG+kU(%RwLBbsRBW(fBsoybv4R^Ja>Ry)w zb)qZ%$&$Vpr{Ao;z1UaH`O^5`902xn^*KCftOa`;m$;keapR)DH})K&SpUg(1RIV; zkzAsT7mCEpoK3c!gWC=cSjuQ;WEOZ^{s^3Q{?!g8uW8A=f2*ll;H`WPm>LQmE%Zyu zF88Y8_T{f)4t_hJ>a~;S!}5w{FGm zW`^-w`wJkr_+2LMjSXj_>Ot)LU&^xoo3C}Gk5^rI*%K|{x)3{^-bnu)PB)ONZc3E^ z-huQ3WuHIi(9BxS(fBB&nHuA{$3*|0U$<&o_o3uv-w=Gsxq_MauXQuQLXg>u!ms3j zFF5%4epy;*;Xr+&ID z#_3MKrRNz|R}k`3!(u)0)!_zsF(|oO_Fb8nE0`;(@E%RN`Ac3E`riHK1MY!dWa@>J zlHc^|g04Q2XBHbbgbYyN{f88aAa5aV)(r!vnMvQVyj(ZJGpIS1cM{0tzq%vPIB2^5 zG3+XHjo+<8I;&WG$(Ot3v<#>+!aglR*#I+>Xgy0!i;l#w!`F zblI7Vj9?N*AHBR z%DY_fDI@3NNFU!_tot5xK|THP<;WiK&-4(cP?9^ev$m*c*W+fSbg>5?bcOHVi_T`3Sa9|X@8}!~nLLwi|`-d#q zT*wh*=K=C7ax?A43#}6RyD0cZW%^`Rj#q?4Llpg)VaQoA@^3(t?quUSN$HZn9skG7 ze%R^t8M(W8H}@HNWC=z>Oq&zkY~QlvZ?u}=?GNKZ6xgdfs<}_DXGVN_;aed zBlP>{HegU{?TdCn{Yz`jvYJsAIwvkLKepKt)vej;&OE)eUp&le(DeEhG5FJMNjw}Z z2cj&8Nvax0sqdzJiHE)diNGE;b?>1YaF6gL9UBKAx1$Br3>|hUd#`!V<%Mb})fRc; z1+=P=ms_6a9xkdLN(1 zLIcwBpa=@ldSrs#fdysf(TA`}ao`8hs{=-02kg+brqKmyO~S9nl@+bDGpe}&L%5cO z;QE*IEYnhx0{Fg|@KuEINs8)eW^ zcW@JUSl2&8yGzIIwsyduk7oS_%r*UmZ4Azg$QjOX`4Las4I`Al2njb(8P}@+#{U+& z9j%L+E>kqRXG+T>A`w%+QaDh;7jA9qdQL~hj83y!L{yp)*&C+BIWbiJ)b%hf&!{&> zeB**J$~9ZQwWd6AMy)#K8~{J$4B?8+HZ9l+iS=1!-#$B+9ZY`PiO?nc`?RF>&S}Iz zj%SS5sIaBj4q%v{L=mJ0@l<|(gVvDeQGVXC3W-Wql; z+Hjq>a*22h$WO6sX`XXDi~1V?2gv|@md#k0cnKzj^u z8rU}$r-n%=%ziBlTpV>#VwX{Pqd6koEkMd4lAFuc0a*1u6rFvOSU$uRwc4)^$ZUf0 zaE9j7U%QQF);{rG=(AKe-+TUzNN&NNnutl?IenQ#&!(IdmbtbjS_snkr4G z8Ta;d6jL5&}UQ>%-0e9^+5jXpgknn9a=cVCRyq zIhh8$Ht5*92IkXx?4YlZSzw10CTa2GgL=W%`)5Q`@4g*Bu=5%+*cwju<#F%(fa{|@(F2NJVq}|Qq-D}M0Hf(y)*?Wi4v+5zJm7Tx$EB2 zG!kWbkWU4P|9ri*OPIFjWLA^+2R->}vdDwRg36^dKh+b~kz4aQS5QKBB4#n`$0!50 zMXlib^=WICP<^%`?SZ&!2L#utj3s_#O8KjM?b3M*gU=se@tbd*Y^l8ZX?7WNafE{Y zeScOuw@M?oV}>l)pa1V&Nmc9W`D!H$LfF_GZP3EI_?O1+GztKXLN)BQs?hBXl;GtJi2uI&-&Pk?Gnxsh4sL#aUFChA9{QmIwnf>pR8 zr8LqiW@tz@VEyBo<3#ZhP=a!MS=!!Wytn4*r|@s0jOC>|?LASFMsYfjq253V7gERc z&D|{3S$d6OhAb#^OlSAHiBTUf*JgNHBtx+3__(vDLB?-{0KD&|ijY&sE=?C9z|?j&Ui@3h zU|a2c?eCBNBFhNbFCo`q7@wSpqUlU~cfw6nZEJM-osp!PDQYbg$wE4gR5jdU$CnbB zR=bFZ$A1_rUlTmz%F-4wcM@nE{(X@U`w~%_v*(Aqp*o>(EKk#zN)vp&ATm-xa$P3X zNAa&7$Uj=g!|9I|h?hE|K=xw{FYdfzCEWb%sk>K5&Omegl- z)@aJxHRB+)Z`Pb}Znm84k*Ouc&08vw*q>(CiL6TX9T;SUId!@ntNi{(1EM3WG|#tv z__NPHN9S`vIl1u7QzAY|flr3*a_aIBO22ah!oQEx`N(X)N}Gw$S}cliIF+KgDol{P zmW=T`UP11d_7^>Q-+JfuJe-I-F0{~2WpgaElWGsp8blM)1&a95_-<;uC z^$00UWYTTto#pEpEeUU$hAz{*B`1QPESvO>Hjiew!!AX6VH&Hi0)r$Qy0>kZ%Y%lz&%COx`BEkJqo|o!Zi!pF;?o2!#PD zF_No-Z6cY+Pd2#P(ujn~Ol*r`R_A@_tI%?m-_E>}Lfs|T)H$$BV*{O)Q8UF5%|f0j zc=98L?lV2DFZih5@xir;?0wrE*vGuD z>8Le>k(685SXjZU)0)(`oRGDY^#71PLEuiX{4k0v59TcPwoKkPgLNPLBHwt*4}K2c z#_VpGQZL<%`(%Psvq4p>^G54yj+;QqcYOBs=iJbVDaJP^;{maMi+Bm&c7+uM@kw{x za5Zk!NKAL}cK%rc7}S%5G4?yxFG3$LmGFcVpK8@hp9?y8%kno5KXFSD#Der20M*#P zwAj|$2X@a_nX~cQ3WA|{VpE|9-u&p&b{NFlE=4uu>e4oK4-`jZL2~%)_o$n%m zE67Y@W#x<<=Auetpo=l*6=Ih<+Psj=*Ci)kdu5?}J=ePB_mDX#!NMm)z!(kj$TYiW5;Ro0T(oXfXBnG~$;BXMTXFN;d!4`i3&$V)0VV4PV&{jDO3D=u@XDSR6&^d=@ z&EH8a@nJa%N3EyX=!ArDddbB)!$7IzX5n5hSex3$H`bDbF~Lz72t(x(62IPp z0UMTh&P$9QicEjGaMUU8-@K500T$)y1yrRMy6HK{=SNMF`LX}TWB24kmBeGfQIbm5 zsArvv#&L*Hu)WrR;f{Vuam9&tJ>3-rpXN-1X#W1i4;4AHpO^QNNPVW$gM#R2pge~; zya!GEUJQQyB$`%i&*>sPipsxMifqnx8cM^GeQ3Nw!Gt?otjk4?;PD)lyIpgB2}P!e zX-4t7OKL%-t*b(|5f59g#%Y2=jGwQ-G_};UyT1f+CGMf91vxr~|E~A1dOd;Jn%qNmEbk0o?RV%t{5H@hDk>Bs?IV9#qztFeJ^t(ShX2V}1#*S=4_LNAWeu7E znqB2Z1N2-b2$uGnlxHycwva-WKoZ?Fc^0}*qfS@Ly)E8Ab!&_ukvbNn@1_jPnzX=H z_U^pVYI;&Y)$4mCkhX4a)^E(qLwqn|RY|b>avyVSEu{_yD^)dAG{s_!7ipTli7vDu zGcm7~!w$D8?vz3aKesM5B-59npso&eK^))jT@a2wq^_jVDjjRl?l?ohrhQEXt~*J`P1=Cj1@@Gv+_TUW-p)?{+dscpqYr*)oB=_<`^R+Yr>$F zC3_;hF;xh-6WHG(J#=@O3%s!w)`pX+gL*JlA!0Bs*hUAZowb@+MN?=(p z*E%Z~_Vrq|5ek;ET$eYO`abce9M7xgvi{`~kTMFU{+?dt33WX5#QmM^ZsVF{)UYA5 zt|?>SR^T3FOE=4qZ1U^6J5<7T(X0d~k7&PtWm!{T^UNuW^Oi+ff-t#vfK)b+O2S1@ zJxHWHNkE^#!M#~Cl1fedUo?GTJ96k_Vyn)D9EN~yY5fai7((5n_w_y7g@{fZ0iI5* zs79(vMLugTTm0WiQag*c@6VP65C2z{%LI7#=iC&hln`lKA9-UTZk!&b6qPx3=Ne{q zLC58nrKgI<51N1VExG4%-UCW?y8vIVV2=$;;~^cn2B^b5B;9$sYxE>1gD}UMBZcab z)TjQdGLT@@Hmo+sUEM*G#HkPw8Q@Yjx6#-21R?J7zH_VR?w$Xuj9<;uxdV9pm6TTP`%xn}2tSoT!4m^7@&gc6nxFBDPTZk-fz-US5V zs=I3s=NPWmyyWqLEoOJ=inIZ{HLOJ($68sfj`eU-uh0=2kAO97#vC-#h>cHfO9;ZfYB4J2E~;PM=KH{r zcum-ij27A3LVf(80vSr{2kIrf5@q@Kt`fQUF1p`tp2Q6wiOaKGeyT6U8A2?*6e`U` zPez8dfluo3!7f2Mwj$c{BJ0jeX@dRf)Tt2&ua`|{@;lL49_@w951h!oB!lX33*q<2 z^%M!dYjTWILvpb8?4OUVi5C`0W8s1IPLG+;>n+Gh1@(A2}@;(aCb|hB!qX8OOz>%ppjoB0sYDEE)Dxha8s>ZOWCLim)9v~|CJ>rpY z6H1tGc&{j=f#MUyECPfFmW&`~zCK?=p8)r_XLYuf9oymIzLgM!S=tAN2Kg%naw<(E z+!hF5RXrHw?(5PYXnZ8A9*hRQ;A-P%-R3*1p#w8Q_(q<@KMtPq4xDJY3$?+mboy)s z#!D5swJXF534g}fgoscnGIWnOplpZZ(0?XIMt0lLkYh9bvF)lnNgVdjiruqYI}mGCt;m z4erb*j}8kxA@QY6+X@8V&%YWsgY|{uAmx(evUxAyUexbt*v4w>A?fY?y(xtMwcLwj zb=Z|I#JHgW&Hj7awTegQ#wWwaS@EjY-^5W`0F= zn4ZfSI^X$!RDE?=RBzNRhyoHK0+Ip((jh55AkrN}htl0$LrBLE5|SbeJs{oP-67rG z9m9Cf@B8lktlt`|+WsyWB z849_iZo=Dxi}Vx2dCt;jkKoVPls41So&4Hchs0F3`=HJ&QM`7@4ku7$^G`%DQ%wAh z60RZUmip!9Mpan0s8R#2iU(_*m}a=~j&pSEy$&TC85JLU$O9t6A_T2Es-`>?vx8C@ zAe@KrC-Tc4dCrG`Q6YnA-2{OF7)IX=fl)OaHY22=h95PNp;5@&9=;gylm;52+{`yQ z?1dLzbW5Ilf>@Fu7Dv2yhZEOEAvX)|=}ulxIjmUXDi(xftW_k0YJj%RK?_9dD|)|^y-1bCaALA|6*1c`f#{q6A1R==z$RvPw+3R(fVegS zY;ne|Wwgz~ed?E3=RP*BY2surVUUwwCI&>UfgW4YdbX>J9{eS$&hx#B67JrKhmvgO zo)(hvCdOfo{M1hRJch#OUA^#|M}ILOGX&P=M)CL7cMb9)9bl4r5>on1n{_`q=V$$^ zwFyQsT1w{pYhQKgq_K*VtoeBZg4O>T6&@e~ndw@Pz z>H2=0&e*Y&`64m}nys?VRtKw9&F^mAg=~7tyfM_nxdNF1m&oIFa}Wz)IUEmh-iy@$ zHHGmK`EDedB7<^}Rk=m;aK~qXwLfvodTpj|Mh(`t`sqpvJYx)^2I+3w!>@5ai_yhekz8KZp*?7p zMXg1}s4i39u(*(5kYisXB&{s_G@>aA)R%vhZ%KM>Jelu5*F1gq-PAN(Y8MFU&^t{Y z%{I%HSosLLq`!YmlZN<2^PA>d-!4@VlXYv0w2lH}=?xfNIyr8TV@#bNTLk#P1B2Qq zmvGF3jc_0wmjeAqzrJ-_N;gKPAKm;`z#I>7isL7mkzVup@pZ%p8?wlagJA7P*zk$yJvY1Bx{cT&V=T&fNZGx^I9n;)ldFXBNP=HMI!y?pKXq(Rg#HyIqDO{ z;>zkHE=~YFkbfviem$mB$D4`X?=|0bk)?6gq?*R}a=EC=LhSGt%wDuLwsAhO5PZjraIAy|4kQ>E+Awa6x+sRdlehGW&eK8#F)67zy#R>a1O8v-k)O%dqz4S zFrWxVl}m!c6p6;d9W(KkOqEwhjw~UU2ys%Onth`~EW9n|=yL-F5B-&zA;^@N@_q)m zH^tpVSh6-^;vj93_DAF~gTqNTcjWJdnc>=rPFm~=rvw-6)qTv5@Yj@C0QfchVPGH) z=+EdKgduE-IrC#lHA)zA=yVnAXoZ-JyAu-+b!RolY%xQIzcq%uvmt-fJ;%Ub%)SGr zg2_D3KOjuP;ccghNZyhRZ;}gzeYF+o?Vr%u0zI=$;f)6IjS*#jJs&my7$on+osU|& zdUdk=_ZUL~KIAEXFZW8tkH7kre6DxhK4%}5n6JS#fJjHzQ@mzLto?=N^}N&m%Avie(LJ@^Wc<1w7z~H>5F>v-Ex?8;daJc=Aj~m?o98!93c5OuJw6- z>xWlXK^`c|wSS(~(6kTK4kWI8%I|=&6=jahI)tO zm6<5Y-5RVE&H~}DQ0epy^t4>7+J=D}3jdlEP)zkcmnL?C-?N3y`Ygo7JVL1pCl(Bh|JdIL9m=*bcLnNMW^DDxTDWJIkkzkr&HBBSxo+|lEf z15^5%7@o}GZSa7$x4?0aC4G@kto;_^kRPqFRFYCk(QYtn_Y=1s@svuV$w+q?@`a|F zRcg#+!)`OckQQ*WS}DC?`Ql(Ia&@$M$>5kgw=AaY=;IeWYwz}g8s_Ojn-JRk_GIhj;^Wpt!st)z z(z8Eb!dc8ah^*evPfqy?zy_dvGe!rB_RDwJQW>-zXp7lQ0ulYY6d7P#K?Qun>^z+w zr-IK%4fLFd5?%fHl;*Nn1^s0~4}&qnbLr60Fe}1|<>nIBEWZAFTA0qh0hLmVkjt6vTn)w3$+T`L1O9@ev1K{D@nlQmKjAeaTRD$>Y%R=aoUs zH5~@WNYl6wjHS&2qRB%|B;#4$OD7*#`|Q#B^9g->gT7z;S^huxBJA{UGFh}@4?f0r zd6;PSqszx1Lbr`X7Z56KH63~+c(YPK065@*#L}>JsZIP0>>G3VNCza`dPM04fh8rB z33lnvL-yxtq_i1U+aKa}G$}>TfQ~9%(B#av>~L`}OSs(mwJ_OXOlAeu`6*y~!D3|l zkUQiB7%uE)k;^J+=le-$*yR6;Hy~%ph(9#om_H6fGy!1J7poI0{ibOEtJ<{bUH`Vv zgDd=7xPxLe^BPQ+MQC*h`O=M+ghW^)koni-H6hi9Nj@RDW~A}2`h=5Naf-8sO`#mS zu8TwUyv)S+ovxcBjC+Rlb+X0)t+ME-i>85%K@&N4&NdUtRr+zLnz|k3HQqH`xsXe-O&b z?}7#8CSp1u@ma-1&^mVHPkeJnBmL0UTV`d5H{r_3I0;V!d`qcAHOVWcTI?p&7JYss z=#hN7;g-%!@%RdvGcj~3zpK(byA9u}d$cXLrjh#le&G3T4uWOgJY4QO*;#g!=8AH7 znMh99ecD21W`A`cEyReoQWV#cz$J&}(>3sm_~a!mFOe;=kDsUQz#0B#2IlQ^=Pa zP7QI(1nRrHr_CID^@VXN88*m$j!?7@B6|b4&xS ztBZls9}L~&P%|wNXbK!t9l5MrqU^qjmMiIy7v^_hIV$)=;`^~@HY>d>>KHe@-H*3 zJj(}-k}Fvc@0xAgu)i4CM=)ddI@P7Ey~o;nmJz_ItEQ_R86B9IR<`$vY}~Scqh#nM zhBMNz#yNsnq81<9k6Xp-mm9CJ+KHyrdPQH0<(>0icKZ5P0c-4B+=q$>Gl4?(W~_%# z>-WAvPJjunkjunqcHvS)x*l7TON!!*y8#+uJd! z^IeRmN1|Svl$T~3Lru@c$?}{ULrBo5ckk8I)Z8)1-<4(a^Y8pYeyo7J&?OSa-n)F5 z7PK!4B3e8z6s28;_XU047m9{OqxP_&!59fq*YfB+V5C5W7c*K@AzrvW5eL0YhEtSH9M3#1$RQ2G|Xzy6!0ES z11n?z?;TioUWl>4a1pTbipyS+!R7)6z1(y93hx_nrbZ7R_5CKC-hxgm3@6sLn~yzI z6ZHvyH(I_MYc)0 zTyp0o5or!c>uZ$Q2El$O%^!t&$?nT#(q#SnQ6MiV8s4 z+MJ#bhJ($`_>-gA%U*FGWTvd3NhS3f$`B@R`QpT$pZ(J^8 zF?{^%LW?=qC#Jud!<9Fo?8=+-Kn<_ZGh2N|CrMvdF9GC%zZD$|M-s8ChBG@SH__^; z&bYQPI4gQlBtq{^2%bTxlzSVNCAzgdOa@{-;WWZYvgn&Yd??R>yV`wR=vEA=_&}Jr zjVJeGFHJ{4(61J97+1z*oWAGHa~2=lRJDDrXSQ7s167YeA-pzqsT43ln;?M*KG^OF z0>!HoY{=skQ_T7kx3CTnSXOgXk5f#fC9{F|*Nj$=Zpg{ri&=g6KJc0skgl72z4K&G zZ+lMhhS8{dm-kf7)48uEsR4M^jsFO%{?^m;^uN(Q{uVRK9f}_ysbNijWX7+=R69!F zdnggWs$z9p!L*6BkK~2DEivQ0(yVo#Y8w13O)i+sroZIAg>IV|73hn zd@P6khdIUPH_2;W-oAT~!x(Ej^?7v# z86T}|!LrhT~~f*otKQ9nZU}39H4M3Y-p-= z9@iDN3btXF7O&RKf-+WQS($}`Uj;a3UTO{Vi!dcfe5Y^|C`q#TU~YmV_`M;1Vt?+X zn{8!ZlhuCx*O|ut3Db+?89WmDa`{5tt}eN}2aaKg+*X3e_*Kq_A@?C3O@)Q2SJbs8 zC%aSyx?>6dP*gMfxl-pQdHW8v$Oz)2&wu33?n<+si#5UGRlF;DEJn(8em%|Jk3FJ6 zhi9?d4Q@qsTC}&2HT-n~Xh3SwCF!fMl`N{fE?HEQ-cYeEO+hP6a7lGm7?`#Bb0q()_+YGrXLVdzRnf2n_`tgf_CAscU^hGDpq z8>TjM{Jr+UZ!VrZZus-FzkSBmR#MhC!MTz}!l&E=HJIe8wZVPfF#EiLza*=c(>ba7 zO9xsCE~DnOpb%Mx@ExNT2qW;4_91NGE#tO!w(ow|igi(Ol0$cFh>u>siUW-88SPme z?Q)+P5siu-9}oF``1WL7;#rBvPWA%Y=+^FKh1%jP0HAG^6tG=eK?xOxG&1WM#N@uc zwcvCpu_iv!SQ#KeV=!?m(R}c08Z@srd4DiQYdUAxh~uJnAK(6cvodn`TK;X=$0Mra zul_$I^EDPDlw>zOy77w{*C<>flZi%D`P!+PB5kO{gGXK3(E(xgFR@yr@|q)iy)(DR zYF0<5!Z0X|kFzNeY}TBN?ohSFM_DQ|@AR#u3}`a1fRr}eT$TvqQQ?L2T*8Xd z@R%Q;vOyllMQOy*3=)w5tZBO{#NH0ak7K&?S4sAZh7W8jksef&B}1DAqWIynvY-!C za3@9c024L^zNn|2+{~Z?$^tM4bj#@Owk||uKAAV&XS2mz6tls z+>!yA0x}H%ap4Sq{xm}F=pF4|p2b1+$vHuqz3(3iCGSv7;r5Wrc)Q}j;HG%d>uJ=v z*{sT6$oKj$vtUCNHHLNmlBTe3z!9Ug$M0E|X|aNbpbu&7X4(xDyRS*MhHjS=Z`%me zQK~B?YE{vfQ*M3+jcMkwWwT4yt&RmpGwIM_y2NHoIVj?=z&;S|m>}$-<`MaLdbR&h zChQCu4?eL=`dIWvmDr3B%ks_PE8tFDl7|AreRlhXoWcqPbgpXFZwm{>C3Psv*QvrD z(5u$5v74H-h`FTXEpmqYMTmuxr)M**e z`IONYeAPi_WAp%x(3*<7DR!;SYZKnHzyGGD|i0?7)LkP2$FV3`9gsF!IbhTU|K29z~Av z{3t){SwO*LMqy7FQN)V-%Cl(r#m7BdKU5Rv#KnBfC6xa1XJ-)?m?k~mQrU2l^RNQO zrB@Fne^F|GWpNEd)OBWcubcxa@vq_JG-M-qCW#MegR}Ue*T^%(q2QD7KnF^8N+JAR z$-Wdyadd;hM2xrS0!2(l_o1CLR+U3XAC{s;ZRR$`qB5)DAURc%Tce46r8;s7vL^+f zJtX)51G=|8cJyEO1b?Vl4LCTP5zu}#x70=(*oE0hLu_b|bf&!a^47B3XCnJ%$C6VB zaO`8}|7_-v@`m-$wzOH`Nf@{KoSP@nT5G)t0SS+;rjy;20|sImQyc6MpFeN>Y+}wS zVR`$NUV_Of{s#P9Um_2dt|@kk$%M$b2Z-e}0PT+=^ms=|z?>IxWb@mwov9jQKX};P zY+3dO6}HiR&`{UH$UuaLAiTbxvVIH{Vg-3mY0P62j6hF$e6#x)c2O>$-Y5F9$}vTd zz5pQYyX&bHT=0zDX(OLeU1I;&`m3aq1gb9R%oA81eLJQ?y z8!foc5Z6lDV^2~kEc5$)8`(aO->X%%FdMyIBZ1{V<`vH&%^=;AW^&@w7uM*na@HzYoO4QWn3jf%jA_WrLz-j^e(kkCg$xie>1gynPm8}Ok5k#=~~XI zZQhAJ*^J>!{{+LTiB$(M8DI*vouzsmO}|Qt%$+9FB)BKvh#V|w4nF;{UeI|2F9OJd z@MRBIq*cSNowg!>h_E|ou#sE{MQo#5DY^AaOdW|7C?{_#V%s80*7lt^1s_PT80Qa& z0$Gin1)=6)NB1b1Xa?Lh_x1!rm#{fCZJyQ*YvnShHc83!+8Oz ztFhBTsIZSIj$p7})|=?`s2t>A_O8yG_$G#{vXu67?4PGPsGZ*_pm2H3Z{vHvg0qqe z9L!0A&~arQOq~J0RU0nO9{P^=waGm){hPD3@Lwbp>UQw+h4SJT6izyFQiZOn=Z2uo zB1CyOV8=!i4ruF`%R@N?c-L27mj|4$MdnpVI-s&{VQKqFH5}Fi&e4N-H+qSb>?0u4J zM)#ySfL@pyMD9Au5!Z_&DBU7_19Ua;4+Z88tKN*PKeAvODRIT1(9FO`Td1_NfZJGw z5xrrihgCC|WPsBmF>tAf*j$EO-2SLa5{438dPKnyr(}m9eiaTX0gU{a@;sZ}a-z?W zb+*}90iRw_=nTB@#0Ie+lW{O2n&O5fFp<4 z|ND@xyr;7yZt}jDCffc~8*BH$cyn9L(L3#Gl~kTi^wo^n_v3grgSdy+{N;G*nltP< zoJ$4?(E?aGE_ZYG@Rtx*5d*)R}?J?1NUe$04 zMue3v>sNwXX^`&0kM!~FXqp;k%!oCtq}S3-Xf9tNoNAlVuU;^ql3O0D#M>=X$?HP; z@<7)kkR(NwzmUEkRKQ_eQOS^qDWR$)3Q^SNbKG?UF~}6H9yoCWw!9uA=G|$%kFXrA zJKNp^u+>YF%~Kc6W>Gu@-NQG4^pu2@O3=Q1e?)brbrDL8oa!pgY%w%Bszkh zHm;?C$4RtF_2s``&$*%bj=8k9b;do?s#-qMoTv6~jOcmXIaG6(fBhrBn{E>+2fzn)1_Paoy#1M(c=_^@fV%R*)38S->MPp9=fK;!JR`UToui+!d`UQorAu{(WRGo2Mm(C!$CM!zS z)*5c<$dT!)iWwa4AB2&r>LAjJN=$CJnI5h(U~?Ll;}X6DT(NFz%2PPFpAE9Mpx!g zQ@ddwtov>xa)LYacS2XSgNP4UwvWEXLg7_XCbQ`bEnnoTq{%z>7YQs&*KYveh@rdh zOVI7n^;C`2$bXvLmy~liFN2wfPK^1ppu#H_8k>4n(O1OoTNZlhe{i)1q!w zgXui?nDJPDqQI@b_Iei526zRg|AN~apSXG}_^@i=&lcK{@whw#hA(F-{-HoM3Jjt< zZL&^NkG7TG0(=h5{N;Yhfu|S7axodTvSt5J)T(4(ZZs^yMZ|1h&CHNeaK(fKedcW6 zCHlODIKJj}rVKtS9V+6aeNuGQ(4&|(1muX|s&S9giNhk+dC~t+mhB;bdE+OXNTzU6 zWNGa*jQxMi;uPTIQNhsa>x&!1d+I^QSXGTB)^y~`xmf5w0iU8nD6Y-huG=)X{s+mX zd-Eb$8{USeD+fx?`#3v+DF^C%HDT+LpXvNTmD4BIH|n*5KJmaxP2cCXbAA-P1cN%P0Rz5{Vc_c z!8dlFXV(Dxq8O?R`g&Y>h5E@F(j)uN_v4~{3(nlp=l657#2?Z6i7vHb!w{N{Z8Z}B z@RsCogPA1!DE5&iwRH)RyB4vQnaM`E5W%B~50xoNJ`doslsTvnsY%ODEe<|HL4rLV zMJO3C8nd@mzqErZ*x$$9&O?%PB`J^B=erFlE5#>_(XL8%MU%9?EIx% z%9CeeZ9|lgw}GbkEaYvv&$D326UDL!EXw2Eat^7P=7h|^N zbz1ZvGwMI+#dDh9R!ei%v4f<^UNE7FG=D7CK(r?Z&>vGyyuj0w&7y4)#^sQ(`g)(M0u4AeSmjttwMk+?9 z8Vo8_D+OO!?=q+FocEq_1G5Q&7pC8K$*yqSpG+rq6|NT%ha<@jD?8<;%Id|FGx`BG zc|pB=3LEuL%!f9wY>I29QN&01UUV4$++(&p##fdrddkbKFJRAWIAE+IZLlo-?xYLL z$D> zhBmO&YaU(}%;U1>UqkPS8cpD;k0kM2xfmig65#1ldwY)_U?!ch{{bxTmGtBLS4V5L zsH6z1Jax|%?ut+rmrnl=wP*W{kCJ&+_dPNff2BT(j7ZWs4W_ykyXf|2l)0Q(CW&^C z-U=1AGVe3Z$u)v*CP2OLzH^AQ^8I%Mpfn0l0(+bDZN54W%uSXMb!=(z{GQzz$oKhp zHZDY>pWYCbdh^Eq;zAWB z`>TobD>k%wXGnd^cNOlIrdiM+X5KHXNf4&t@G{+11(TK*Milr*EA%dOerN-(Q!%^W z7FX_E{%*GHYOh(ci1oJiylp{``2_VHi#K@{)+23}4J%rY)+7B6c5HsF=`>GF0a;Sf ze?5}IAxM6y(vTl2!#0W2-5hvg!~|PY5ok@@w?Al_ere*{9M?=PaC2b&D#0v(!LOb+ z{C!Q}CQo<1&N#gc{s**O4YWn6h>lnA^gXN8Z2b-aV$=9Svs|xf%sRs25IwJp>$%Oo_{CxD%_4A}N@)HYxe~Qd zl9V_`pc~o$-*MdG#PQfWCutU9VX3>JYz%9_Ic%^KANS$cs4DF^%M3Ch=Tg6BF7t)Y==2R<+AdY@=mJb(L9 zsj(IkCSgheTrTfYK(h8^0c7KJksfG4vR&5Z}On`PN ztVucW?o|y`#VE#`NqFBIC~gLn-%S?u!tqDZQ-BAu3XoaIcB@ZAy_@=4ZM5U{aqJwG zSnR3LdW=Kzrqa|<@AKSfFY=4Tuep=F`f@oW&pqTbgL?9;WBdMuLt>PDHudbZ6zXdX zL=Vv8G0}n1i+J84Ni;F}5U}dJ+AI9@CJHSD$3MCm&b=DRndosSOUsJd6EkgfS39&Q z`sGxan#?W<)+?#*hq_)2+12?V!Igr}Q8@^OpVp4|2%)Os`>PyDLKW2iJ_-pUU4bK_ zktqH3b*mmis0fLBtRj(GRQ_YlGPh-NrIxG}06Eswro69}r&bT*2jvt>wf!VxB=#_Q~4NkUGm(# zcyTa3XUQp1jl90^7P_uIz&9orBO{fj7(ug9;!2t$%`t0P}EniE%;z1+2)qu zPGpUD{keFT1}+A1WwxkjrP`oub5Bmo_BiJ`=s&?KcfzEl21nx2629kkd288H{30x< zw}$DxTIOi_!0rw&D+@qjDg8Z{YdXg96CT=O z@yx`QQ8Y?T|1%anhPZlf3-jM}KV8g_=5$2gRUUAZ-BxyJH@?CK{J$~B?k*q-&Zw=_*^ntfr z<+0Z*2*yTjUvalqu-N!3?ZAEpg!N`gMWz?8oRZM|&83F`m9Iaz`w)a%t!Rk!+1EW_ zI-zKeq3FiRwojVQ6=L6h+IYw(zt`Y0pg(Q?Rj$$U#+{aI--B)G@>bnz&B? z<>OUY{=~v(^qs6)?4GQrx;1c}2@&J{bvlLrz4F9?xc_&*sXKhd@e3vsPVDk6&#P5j zVLfy?cxk)qMM1}tr1{7?2Z>lI-Q-E_)u62}w0*AOsYV1?-wC9XYGRv&nQvn>O?2$z zH*Z?`&u8ONf@DnpzFv6In>CN(6Io|>o~{*b*EDtX!D;T*1XX{qVdbLC?sK0RSv%Lq zzzF!SM9@k!S+@BDr?BmZbFp=}KiA^m&xQ#L+|~Y{6cA2bcVI8{72*p0>0meJcr)yD zZ(hT2<`Bvr!DTrs3012I0l`!qLPg)Wvpr=<`LLc~T;}J}$rptr@Bbb)6g_Jh45qBI zZ#aHG57C_sQ=2N=L}zL85~u2-<{brf;bFhHw=wm zhC;9*fwNa@sist{0dt{unzsWH{o z?P471=AhK}=(jzccd|fhG{wsq+%OhVbhIx(b|iJv@!UMkS{Mo=Z#m5Qa(@dbi__|` zU56wHU`4nzSL}T(K-i2WN>43(e(_W!u)h;|lOCZ;`{5kwpVWW&(b6N__l_0VG(DN% zCbAWzEDw7n!9)fuFIHpl07sk)UPLR(CBii-ZhALO5<#^1Y3Qf%6F!*PlMW z&!&?RF|kD^Ny(Ug-_Woe%MAi$^1o+Oj@&Lo7xnejcvP@5ItG)jA4~0YeTwMOC zsRVGi7(?}gTb%*-JT&jETPAz-g7 zdz}gM|J#Lwza5(-G!GD{T&{~R{(i=fdB=(8O7vR~9}LpB58Y zr>bRM7Zb=hSa8^*@>OH)8b&wH!ig2Q5cm89m-P16Ywxt-oK1@snb40e3Cz?OaDFy5 zf-mskeu1KAF~5I-`y|v0eevSMuTf@xlaVvyu@x6VvtBVTWjn@(jh`#VT6R1gi5hQ` zj56zLJzx0px-I1+Lo|51(dZO!v_${@P2g6$ai3ATK;fH7FYfJ}uPsgs`Nx(uEYc;s z8`HwI{c&j5aCt>*E-^16<+;eM$z{DzTPm0iR6!QBT?Sg?nTE|Paa#CUm43z?-v3W+ z`M{QU$kbHA?e&7deV^_{6zEkKH{zCGh0BQqp013#Xn>-nDh#x0h=4^&o?>iAG=0m) zZS*G@rQFXR^ZEz)AIh;EKcIc{RQL2`bY4zWd#C<<3(`Fel;@@@srGe{oOcka5LVWc zVCABrAib>_cd(A0ZD*UCM!!l$L#WK60g zzHal5?XlYFe<3WEI^{|Lo)|jwrXpPC#}xJAn0Pi!E{;?dyP6p<6(A?Q>H9MxrPWYE zzugJ`q^_ikKo78GtIXEn@bM_Gxvs{tJ^F)XE{%+)vj=0{jWrsWWjlTeXTJ2Vj|JAFpd;Hfa{pxn)V5obDa!SbJ=$gRD z7w6-K`HE`>o_p0#=3RG@cfAv$IWF!b--6dQkUvWY%Iz(LTgQDk2oLqXISykVV{s{Q zYtj6fy3m!sC*%;8%(6Z@&PjJtR_9@|QUm#dCv1QALFA?;ubxoLe#<(XSR_j?L~I}F zKZ%tsOvzW*=!-j$`GoA$!ld>(Yuw&C)~-;sG|~>$el57myO*@C`~DnNa-^T1qEw=7 zdd`@pV@b+AdPcyn!~6=~60JIXIB=wT)*E5U+dp+Qs5NAgavv)tVl#bI%9a~$%6L;Q zFj-((Qy78b3w>f~sI2EIH)M%ztS*fm7A}9M6eBjzIYj|x`#i0P?K?7l#cNM>&6F)J zPd#jlkyA!^G$y6G69Z*Qf5z}YmajC4&i%*b8m{A-Y03S3f<2Fvp%}#rNV+O_#u3^* z(cTnA**5_F@Mz}n(UQF&dN9k=bxg%n_=UjEOeS_n(z^wd9; z-G@aa67IWeSD@2e9EIETRzx^w#PU-RM_C@p)Fdd+@&%|w{#R?=i-yze|8IeTYFz)J z+#>;ELt6=wcYVT_tu@`=yfVOJ_3h<@ajmUCzEy*|4}@-YMf=wmjH|Ijl|5PP!|JB2 zil?FiAeLXZJw53vAKM8PEFJ@Y{~Wf}*=8pn8iRtY-w8$CWyv5Ce_Z9544e?#1bz!O zwz$4)3(=o$nB?)3*Gxm&u=o_ofOQNc95KZ2)0!wgE*5GV$5LZ_QDI3*+~5fP<|b3F zyS9s>*F6gQ$oVCU|IHgV*FKZK`9EJnxNMX(s|E6Q`Ig}>#bYAYK9;iz$?sT#L>cES zR{!k3P2E#~Ga*`aWosU2#$jEMZco<;D5U6Sc3|8|cA-AttFlK})yr(_T;4(%E=x52a#h(aU6nv7 z@9bA;9~J3otFcT$F!LpZ;#AzmLg$6QU=k)sUH`kFTU{z@oXMf4Zxo&1@PU*!8n{2i zGTmZBDwngTHVNnJ6_<=QQVdKgY_(AmT&*wtEO?SJ;7Q4<$fKZFYDQI6{~-C}sqsPU z4`=qS9h+}qJ(SEA_&vo6Kl#yupO~*>b2o0=pvR3p3u0VG+u}gl5&YC-oKVu!sHOS* zh5n@`!@2*jt<>?~qnk%mQCNQWAR1C;i-e#CS-kK|= zF-dOD&Wi323itJ3&!EuO){`0eX8?2}8l;GuA|a~D=V zKy6lEC5a*A`+IdZul_D&1CthI%-GD{>Bi&&`gl-(w^LmQ9gRByb+)*if|YU|nk&?X zm6QoH`N^bUk~O1U$hTpUviGKcXpt=dfj6>9eM32l0(y5zyD$Ur@;6g}{VvOWbX6Hy z1A3HJ^?(1zp$I*tD&MHK)P2HN{9L{s_eQK`>@NWP$BW(1%fs_YxE2Ecq38qZmt8>X z_a)BJTOqg4O6X!#vw7(X=Q4CcL^nEw5Vq|YSWCI5&q_x8;t}*49&6g2g!V!w<&+} zMfBClyB8D;9MB;3d2=*Kf?4X2ZJ&>YkvidVjx2OMU(n*jNlR`@vrGCKRzJn^q$0OG z)bXF@&k=`GeH;1Nc4jvoM>!P4Nzd>CGb6%ql{n^f_eyT%oVrUE6=(zZ=~%N9@<0hwoG1IT$kdlV+cSOiE!$UQ7M zUsc8VX@kAkpU-y^AzZY7D=M~b*Hft~zdpo6$YqC@Xdao*rGfs<%)g3kAGr0o{BqI$ z)h^)Up7_3@tthqPMD+wzl?mASe){_1>x=wo3l27tsvz;WX+!q{feXFmASMc7qm@-Z zh-r zkr5FbNS9f)QcURxFUsQQjjl4K*KKMO;No6xr&m8gGUYekY2qrvhY3je?3a^hNlU#i z4`-l4s&aifO0O1bm4!78bsmMQh>zZh5fQ2u(p5KM?uRhkt6R+sFE5YS>IMVDHT<=$ zS@?&9Ct>$9{mruFlDE7*+4{{*V+SnE8H|bruHEazjh~JYRvV1o2l5? z`E_Pj&PlDr2kG{^T)hGBrQ}oMg6li$+wR&beXChzE^&qwYW8A@uar-oH02+s=bp?{ zT)(?@h9bYrLOS06LwUodk$wLJuzuddyxGw=v|t}1)AnMm*7g~4I{j)bN9lq#ggrbd z@V1r7hM5AUdhwc!n_vrqe-H=c;m6yLL*#y9yf(xhr3$d`L0S!c?{w*FedS91B+w%B z*@p%~&9S7s=Zx4BVZ)qkF;!2-L~6>od(oiHUY>s_jzIUnHk29rDAk9gtbl_x;OQ^k zrba>Lk2g9pMAHN7Y#&YxVtm=a^dqL{m#pcKq zTiBB@+5_1-AwhtEXi$s921m%0)Wq=#<$*lRCNA*Z=e0Pm{&K5j>8kp*a09cP8Z`KfR%!I;rEPct^~wkrhTuF}tuFj{xtEAJqN9k=hf@=m)+wBz}=F6KU#REGdp^A zl%#m~MW%0OciM{~S!}AE9*%kQOw%ufWxttGxh%=ZE5TBT%!`tM7AF*tox{SnhJT)gbR(DiN`Ke<=VMfn&c3FupN(Fv<^I41qi)SOf z(&)x_WlX=3_DdZf8+|Dcx>}!xY*zn8yenX94s-Y-(o*E|g>|sPO3?2l#XiNI@3JUF z{LPnFo~2D~VU&c;0)lE{T{(fnkp4Mwb51jqs~AX zX%6cCbtBsVe-jYgODmiw_}Af_x1JIM-zf1gcAdKhWoF~tC4kPjpeqIE zcqdq+PVy!b9arSo@mXnr!)?l3HJzAlTWEt;6S!S%m_<9ap&A`AM$`Cda618hgI^{s zdIb23pcwD;+z}6j{`#|>^iMQ+Of4ot5V_&{vs{jk`nwB~$lr}&KlRFW!|O|7Qg}Ie z)+25L+6Wf^&QIUSddGskWURTh_ZT#sO&6~2RsPgMrlI8dgD1j9s%`d0o|w{0;$d$m z1*e>4t5QTMrvY98&=kskvbH+A0YIeiYoJ~vcZi0s#x%kby`}zTmf%DRqaqQ|4pcPg zC0pSr1o(?^18B0fY5iY#h+-6(q#_jTD}BWn8e@ zqKR}S9@bq-HBgUO?LZRI+$r~9So^pVwk770KEFHrKb5jl^?Xi zD_s8PB>I$flXecq&jhFaZTLIxi=Rsu+1IHPT96I09r{ts7Q85LCO3_ehjR=)`qFQpXa`>`wH~Guc>$maCp>w zQ508nRy5*_2U;VrUi0?J;&IuH<39kIJqMmkPLFCu^F7(uLDowKw%@JFb0)M98Sbk7 zTED7vN~IsLc0Z#S)we83L%t+?`9+nKC%tjBN$K;{Y!IZPcubzbtdc97Bq>)-pc)^~~Vk?Zvy@38izP zFMkX(CpS>45XAx8|^7MTGWOk@%sj1SgEvSsYL*=e4I#e=*r5mF@ zmGBP5Vy$2UYsbL|`#AOt>ul=E5(U$o*SDBQq=o2S1x_d+Ic8d=;QVJhiQHbZ~qfZ>!h!@Gk%>zo%5+RcrWzHu&-El0@KmJvqw{l>IAigg&)M!R;z^&(gei%!k6DtUNXy-5VDlz7K)u6$8d z7T&M9OXqI)Mu4K?yX_vHKGioVY4I72**If|JTb|-4vP%yE0Jy5s)sw+)h-}`3$~mq zs`awb`w?Dx8!`R>REdK)ZndxrdZ4*m7z#bdHEC98Y0M57OHc+?|Jr~q{g-$cx2W%lN6l-!ZB1$zF2ws|YS1)f3L zAm3|US(I(g9qB#)4qs7=`n2DVPSTCPO^(zDN;T*Bw92D5~&z|Xp#`5 zG`8~g#by$VjE zOU?m)@`eAtmRQKoiy7_!pf-PVUw#whFyTTkOlKh;nbf5;DaZH7B-dr3zpYfgBQF_x zo#oMsOqmzi^z?d5yJIPOF8no!sJA-NDzRymRpccE>e#9wH!LK`E8jlqgXd=A`Qa+QMz50 z+d5FF{9fz(XiBB@*%kn(!m?bso4Wa(R_3|w7t+}t54uORi^n$?_J{E5_TicHf}Zq^ zF2$Hi>PiDhaRZn;&T^dZn)HzcG|QvB#waA*FT3YK+M?bYhYGeAt4zjLDC`E3GZa?U zySja)wov-v>?q8c4n^vw1aY!-dRInyA!W)IiRLI(Z3obcQP<|$EjmDqIj0m?BwxOU zA!9D#8+-}>$c}*I$>3*&54|zFCoI$ueWvgunEiErd2-RN8tfN`2e-L4!kh z^Q_Cq7bf7M5F6%DRWOj?wzpp>F?&#b?yU;`s?*?5!7N;U03O8*Y}Nv zMC3jXu&rJ~}_OL|>sEZDoL0ze$NU~fRlOl9c(B0HevEVv*BSw#4-WBrk& zs@!R*@>*uM&Y zzQj|~e;R*yFuMWG)fS?(am$rGNv$kBtFoOHFAlib3(F0+T-YbXV-;dan_hR>9n-V% zz4g^9TV?PmFJL+SGgs@OIhh50`CRbDR%s> z*IBB)AqDU1CL9p%JU7{Pp9%xcJ9VzKO%Tnzk>&9kPB81Py+^wp3S&{MDop{VkE7*k2^OGHcg~^N3seIK@rSR9K zBwS)u5}k}_`Q>raG7^(N%2fwce>b{Q-)dd9IL)%c_)o#i90e4njT zeP^e9)ced7pM^}dUzcE5{5xrR>pcLsDZ!o~PE(ihuoh_Ednyw9ak(iU_Tq7C3<2sr z2;H7glG2q-2*zRFcLE997n$>hKg2WMyF?2#A~aJ<1^~YX{p!a9SZtoMKBbBK2=?Do z9)}SP<)Tk~$ogw~leL(Ni-pmj?I7QFv3GTw36Zmfx=Nqm~6EWd$=x%cpTqGuM@W7{mxKTVxbDWrX)NumeW*tz|)PF4Fs*zRt|C=!=UX zPG7U_d+cgS*#=;v`m0L2;MSUM`wz^Ooct)lcN*HuPfIdWBZ*!;ptcy}X2j(@1Qf)h z*$V2&M;~D4mDR|=+r=$SsA7E$WaetMzxVJY^-Hpjo#M&B6d%;G)D?ZoXXoBtO55_T zFF8!E6{%~N7P@??;P_Fx(96dWIfxO>$o|G}T^W^F^+C;f0^d!@PhY;n$xaA%90Al) zO35kSGT!CWM~fmRB5f0mmJ~}oHRK$h(yar zxC3Vt$}bc$9NRe&cv6>eh-rf{7RfBlG)!$~kCLsm#~dU&ZaDXFNMa zrg1v+6v4EGibwJ1CYCh{FDaLsUj@o>^4TkFttE8AtqJgcgj9WNnO=^9hdx5mjuX+D z@Ss&`ey^Q_VI7Ld0uCA-JI7}KNAvVgBJ;lw?V7z&p~~k`ow8f-#a_1-fLBN9{E%VH z+8rTm{wOO@io5yK%J`L&HdD}j6$`Ak;p!{WIC1+^WP6?aC&pZIYn}A?-3ZIE%F2ZX zZ>>uJ9<)Po@`~EQ`$Uxn-XncA?zL?;!)(l-H#GtNG6Td7R5b1`G!sVPp0Ko2HF|w4 z$hT8wtkjj)CkxKZ^`0B;SXSY7M`(^M!B+ zKDqArec4rLD|}K?#fHGKW2hmc@$u@^ z3G98xY>QU^@~O6h@ZHkNaW>!492e`eb}l2wKuO;R0iU4sxzK)ca_2bKYFmR1l+~e% zFCBvU`5>-)Wx;-^91CGT36=S@i3q97Zn)-$_cj)x72C9V&0NagU1K>MHo@nNqFaKb z=MXg6Tbo9BjwNh&4*Thro{%uGu!0J)7`}U_tT)S_hd+0{`1+Dh>1zr=0d^Y zTdHbtebcc;CCLtP1c?5Lru+Fk2FT!~O_*@E)6Ir_Ejpa{`;^^lgBJARH zvYbJNnb6c8N9vSEO@@x#cR8Zl!a<_3DONrO4=Shy1J~M zxm$by{j9Q$WG4>_e{XrN3N>ArWdpiIu(P)r@}uVZz1*`T5V-)C1}ac&1Z}cQ zrVWjvafb^;(x@$hAWOx370V-o*EnX zNCtHj&ll*@j%N=#)IB4)K5}nJx~QhNqP?_i*p(t3X$Ykg>X=PEmKv9BO70;EZ@N>6 zC!VIMlL;NvzktZbPE*Ak>$fR*|6QNq-)>2}XN`JFwqV?}mns|6fH=McPi*9zM={PStAEMVfo$)!;$ zjB~uwpn*5$q73w;dCYbL3oBILB*$DUwG5}Pa+yPi!k64QloBU77Or9%QRHYm1R1IM>E2S*3Y50IN@g% zeijH{t#J8Or1HYodPA*(gWQ9FpQJ;JO`2i&EizhU3pV1dwoRor*Ln* zW|KHkcTNS~1NIYbS2#^o0Xh-&bW}a^U{!k$VSxNXFPoRL1gaoWpk-q1KIHBLA~9y7xp2|P`KF9K&bhvCTBx)7DMAOJX2 zV}tmw$uu&C2iv%oiO3UI<@^*UXRkGx)lw5a3*Vd2mfr}h@B4HHU$7LuKjD&JxaL1D zW(d7LG4LxDIz$__Gh8JBh~Wf(j#xsdYx=yjo4#M=<3eDtv7%^hV`6TCwEdDZ{bc#B zB@XX!R&{YP1xJi?K8?tDlwJR4#-)Bx$vy=u{T^+emvwAd?rLBssbyyct3uA-z$&SbQ`mV}&tVJ2j(f#Z42Cqh zpQ!2y9+)PE$d_Y}=0&z*R=>AKpj;rYbewYSs26Q}Zh@X#Z}3xGf`J4_G+;q}NW(H> z^Qno&S_Pgx|7T4fOG#$0dRE_ZIN?kyIZtlNV!&J`pi-g{3BCDk35h99d0cqq+r26Y z-U5`=mVZOl3K${F2_Suvo6H1=FRMKyZ%b`kVQ{ z4IhdczC$tHXl{z5Bz?cs7)&MR66EmZo+v_hs47KirrufOI+L>`>e<}7Q0`RNI%Ri+ z52WbC8$Fn#KBG4XSZ>K5+q#DV6G4|(`B_C%mYH$ZpLC%`ell=tf}pfP0;BYF(r+%Z zpB9#6Jc2kuDAJUH@%-sE#Ef`x2|vrmoY$j1`5T-e$a|)B4PV40!{CY9zSia&r%ZRS zEGJhf^#F$nt8+*pW1X6|rKWYM#MMG3FFJdI zI#-#D##8z9`daN)+vOIrFh7=Wuu=+D`-}Vef2?ZgiICR&)&?TZCIMjOGCk?FZ%Q0TW49S zYsiqV(pcyeIT6UiOcD7ZV^zr%b5JHE(G|E z;tjsPF}eeY8DbFA*7_>n)S*{@ZQ}+I0yb1zNc%4Uddu`;lf{W?17E-}Uo2DjeUc4C zkhLFePlNK?8`3pME*T;{qkgE%@* zfAruwD#(U_#~QFht}|$^T!*UZ+71M!g9luus_OTKVC#C)tzlG4q1|-Wd+mp;cKQNs zcS?g{T8gt5uzXcC!t5743EDNtbVM&j9due#{xI;9LzViOQ_s$*YZCuUKZXj>m|Vh6`}t&l^cPy8LN9xRkCPW&7qz&8yJ@zFnAW;FEB_ zm9-!k?fDs2tL?bq>!f{_=i~4O%<~&wi(@kbRgt_F>>ud#dEfp$IB()enj%KgRTNrRr#oHV zCHx#2F2!2E6{$)v0z$tW;0=14r#cqV{PT(gx%;MB1zPFUs3m=x{GvPu3{x$8C6M6~ ziYDHwAjc#KuFy2FQWErcKLYKt2k;Ws=Nj2)55?$XIjpDwsUBdPLU_YlG8G2Dg{6w$&vQj@PF!Y z(O3q{=83fa`sv2PFlN{Wia?#N({}Z{h}znRo9C z0D|SJ3d9D+al!5;s>!=d;5m*GHmHd!anZAT;o2Z$*E@i|d(DpD87Ozxx;OBqjCG*l z*)*Q}9FbW{+5G6W^9uD|uOsdQDrtC8yEi>Jtk`^>DQR`=h-;SKIbp0&SHl$pWrBnVYc-?Vet z`c3VOJ#i(*8&8ru$Y7S&tOvIvlJMb=l7!#xwId@CnQv655BW%Wt~4~zw9P_B^*x(? z@3>Q=ipT2Z(C0x7v{V-6y zD67RByHd~FP()6qt_9t5JV`Tu?j)aw8x3t^N99_ul6>Tps~RiK^^eu^T|R1|qEHmn zhErftLXf1jN*;kH`33jY9FkPv7YVx-a4?6Uw=_#@^(OTV^CBc^nA_4&5c@P@6tT78 zXW4KK9kMIZ4q3!Q4cHehbg8+I5mRal0^iLV1@?KpvC2|gM?B>oq2?Vn_q|P~Vs`dx z^lW_5a9u^d{M#MNKmJfIE>?sGLf!Rol4W5)sN4=eb!^_ZsNQvHHV>eb6Pe$Ks42g% z{|^*BX9%BQ{p~deIg7X!E&s!K)bzKQ*upkCDa~!`U-UHEP~l_Xy6g(}f>+Fik~9S(;NgpnPZ-;9+;s$;?OxSAU?8+lfCQvW zLf3R*$Q?NN?%YudrDDJOiLz7ca;dK&BaemU*V|g+Fkhjh?Z-qJH&3#+j1M*+J2VG0 zoyl*xX}UGkTW8F_+Vpj{>N>xSh^ch%BCT)ocIsNA9X$Ou3w!(JV;fQQORxk|uu}?Q;%NB*h012jTc^bHR@pDf_Oo*W3=Yjw2j-2yJ-nNWKY}sh-TD#q zvoWJn4Tb(R#3tjFo<*S*K-pl$^Qse1xl4Wl8HxKV!6?t-O2etCM}|DIShph&;VDe+ z+|}`e7?zOebNN9v9x!&UEd}_L6*-Tut26RLHWmjcLd1zBQJT(q2&O}mqxUqm`n%GY z1eA34F~g_D`^*mM%$2~q{Ev7idZm;wUl^bBioEHLn>}AXX&C(G`Dn$N?rt8~;3+}pc@ELYaw4`-^um>}y-+{M%Hf8VvW{t!Tf`N!?@MGsNq zI!P$B6=^qnoKr0C8#w!ypHkNR76o}M2Ju7?8HKYABb?&C2q#pLsZ#*o<7wwGZ5mkp zpllzHaG`sq6^E9BO=EI_jFscjC6i=Oc2S$@-?#*A+Z%qSlN!l!N$_x9TeoSk*@=}8 z@(rX15uc1U^?Ec2Y1S!=BX;aq=_K_5qOt^4Qfg#dj zZAM1S(*Z2_H7oyYa0@6Juv(?Ox1T0?QXGI^3-^Sa-;`aqwgT@e^j@>Dh4@&O=I4N( zh~=LGi8`qW7vZr@Wvbj~#zzmW)yEYB;BygwW~>|SR%tT0Nz~T2P3yy4z-=8-K0lW4 zij{S|vmO43oe?dJ?gK+_AUwVue?mapnwnOlndF$>g6P8g72P1R*&f}m1%#yK$Dh$` zz?-!G3!ed3ZtWswG*mftT=H4c!7BBk{d?`a^0xtJ$aC%$`sw=VV z37?_c#H@dBm~`yY9nGVn7j{fCaSm*Ds>^6uiYx*`8F(&f^=*1ZPKqP_m-dzVvt{#P7j%fLH)F-ECA zN`!FIR}Ou&08qM`KTSXNUX`3EnT$UvK9ABZ*a`11fuA-shRebUL^R1jWQ=lz;q*U{ zI_|c)tl2^;G>5>4!%~9o>DP=`>yb)CV$=QzrgeB+xtz_V#Q3Iw>IsrFO~O?g8!bQ2KkCx)xv;!v|WMe`tq_a-aC>vKP>7*F-~sE-g2A{ zQaEYZ$0oW{$BR;D-{g?H=nO5UOB%it6~{^wER+9)@fC@UCgTmPP&0JIaR^D4%50B4 z*A}}c$2?)c+hI?V^4m6lz6qScfY((h=^W~C?w2@F+GMn=uQ_&4xJ7ra6yGliKG^Pb zc({O#Yy7)WT>flXNeJN!gMul9jNXDsM-HS4AEfcrTy;#zUL%tT;ks!fPho8 zz|Yq}p346_6(97-knL*pKlh?^7SZ!H@PAZLX@mmJT$}_h4OXc-s&tsXTz}z4U;P_J?du>+oR}x&FLSV1r=<}haVluE^H>|`$oa;rCqlHaobne-8n3n z{=6!UiGf=i#zu7)7&BFuqB+2Ne|u`yGqk|#ruwHEN@<+=W42cn(DOIbd>fLPH+neqs@RNCXOwMe$6b?0OXAn# zg#n{dNv_H@F>U92wGY>=7kC-^z(;MVM(^a7%k4eAh5i6irLwo)t?`%RkT5`CbLB_c9_}l?nY+<7Zha)XfhF*w6+h(nnn`!!4oE z%p;t?%5JWAYN&1?|7gZHld_`LI)*d$1qDBt1!SZP*)n@;N)ASeFep`>kEfBc$gXQ; z$i#NMW?f_@7o77YpecdHNdWve9s1p2KpY!>p_`caP`L7Wj4aA&%U98hOZX0`0zPL7 zXqRKf0RH6w9yC(+Q5UY?Q< zlg0fvd3D^Wv?oLTW@A_8(BJ@4$iGMTkN9Edwne=&I~ZPbzM&qJKQY5)+4_f>d003U zLeT+e7n0r7xzh6fe&y!!^%LYc+=HspyJ7@LS3&g=cpb>iN(!)!#sQEbKgbQzz%&!k zpo<%j&`z7Y(cXT7>_RwDqy#OxcRuQ(h+7rMuK&1Wbsy|Z9piQ6gUk@2mG%vMgtiYq zs^HkG#2>7D{^X@`DRJzN>xS4UdG~hxvX2vSP_lFo*N?ivDBQ@0ebeb#U7#YLyGuRL z0KV=MK8sV~;yK2Jty9L!-%_2$`!%Y`55>Gs^<`*^%Tw6(am}!=I1lHDneYzZt?Rv) zhF^US^>ncFI+}N6?&Ep?q{+Zl`O%r>!@yLB&AqNh$zJxp9bY)RY^I7O0-*A)Q>J_s z#0R?(%tJ!5dGvXdXQ4T>TOlkW6{?i1zj|Cpoi%!g)7vd4(`^fZrp@SSNArZ#zkD$h z`~E)S2N0dD$@+>tPB|)^ufw4+F#t^vtpb*U!K0G&WeHfdD{)W$sTsiV-64zbX131$xcD1C)h|{-bZKJiTgDGHm(>R@ zBH_@1sM%gDds<=L_s`ZL+Jc7Tv*Y*k()004G!=}eUeD$4`UBr&Y|J zzL*_!Z)zHbHj3%E4pyWWKX<3)?Vak`@hik2%zz5zTR0Ha`c@8iN!2mKrJLv1by0h@ zC4mHzYz6JqB$dp1Yg-pK| zc;-^Q7p5egtN)HWFS8BDz|3?M*PN}XdG<|iu?>^Odn$=Bc`J(Wg1BTsCaGlwPe-xo za9_|u-Tcd-t=XDov)4Y}O~E!sJ({uKKe6V~7HTxqRyFwd=Z$ViX2O_88lj%_7?H zIO!8TJs-0Zm5XQ75~&5A%J-Tuot2F?SDy|~pB)*bV zTWz=0U;>GInR=$J=Ey(s>Njp8MW7*VROOKU@m2bk);`(MZ|y=QaW$I_uk6|~Y41%z znE+&Xypo`w-bKKs55tG?F97J7@?^5C*cJ-IMvm^99Z&{jx4&^*>P7z_X2PYFH}rPeDdX7oBs-MKYcmm#_Sz%@*xC`itC9X z+~^l&S+4dt^0CSwXbImX`b*GB8g_266IowZ?T5{toT;k9duMF99m-a!&d=fJ-*_wS z%_nCI4+ivf*?5i(Ee^}6x{oi`4oaO4DQQmWh%pg14w}o0PN;w13M7o;TzbNkPaW@ZBJmvG_mKOKWX5DzQ$Mxi0`0J9E`ZMH;UIZT(9|5-J?3 zrR7js6p>rPRgUu?h;``SR>|u6N4S32Z!B$Lz4t`tYpL72T{b#ksWa4TStmGJY7B{U zfi%^+R+Z0>9zKNI;QC6AHP!B37;xq#aOGFYCjC6}Jz8z}DaX!SIiSu29<;1WB^3B5 za81CHmm_@UKVW7^+OHN-+hp!eaz*`beYMHVQ|3vI*CaV(ikXIRxyYrWmH7_6oZ)8v ztI_t6Ka_gfc9b^lV2!v{^4vY!J;aRUPtB0PtoL%?8$Z>YLg~$({9m_#p`*Kp>Y46i z@bBF3(Hz~P-Azc6qX4y>{ke1n zUnvYiIXV*$6rQfJ|13NCYVrgDai81HNtXmiD-z*FMW6mrQH{#-Rn|Ma zZtwhUzB8YFc*oGs-F?7RJ;e%+Wc{U1jpLP7I8qLeavb}mX-1tefqv2J8bS5bzsaj~ZBwz(KAG>nKkxr`1ZE2}x0C#3tVuCT(slR2-GKKeb(#W@h2 zGkr7JT6#6Yp&PhMfjQ>+0Y%``-J!vK z&bPxJ7~YO+gQ}z>c`D$|3;OraWJ=tbU8;8GC;%uqLti|$4{+oKD%7qCvwhHD&TnOM)0=a+*CPR;cl7w%{N|~{FUfKh;;C_0%3di5t;(g0)6|}m4-&5EsA`5TP$BS zqPD}b#75X-1^a|n1=6&S_1eO&xV&qRk%8eFZGCAQcYcN8cn)5_AFan^bSErX1vba# zggD{x=>6S&4W1GH$3DJ*1Y?YwL8r}On4ULeZwQD-5k{-qdk?i#1fZoup>Fs#n)8ND5jxl z!;g=z=jXnt%;h1x!#w+mXvDi8!xhrkRh|uY))5Lxfx=wp)%)js6*?pN$*8m06Yg1r zc^L^WEPAo;ZNt^ZE3o8k%Gv!SXs0zd2s zZwSM^eta-p7H2S9bXMMB9Jc13dQ({0`yZ$sIp6 z%nPW@HsA^11V_;g-E?mneOjzA1K-SsArifLyMms)U?WatJ5DoRY8yDQ!i=Z$n-*h2 zcAsa3SEDi>XIq4bmMFm1bA~Z+&Sur;E3Fa@-`5`LhT}XKhof{bz3cINZ9We6QTP>X zoe{WgW01bEH=iZzYPdrKIQ5umv?q*o{rAw#rB*U#9=};DOkG>+U)WsVo{tAtdJx9$ zPw6_t)HQWGsJ^U-7c*fS;4&ggsXGs8uCVR1hqB%FU|zt=?Q5BYJamW5{ZyuWT`lVC z-Fp$U3h9#mvNe85fN@`}3_jY*>R$a8bEtM8>cFMlknlu@-_)!)HMiLn2T^DC`)*PDAw8EZe07D{eOR9K#oj3$;$c)in4qH@skP`4pJvLz zXGIiB5kqEafhrs<@yPPPYaZrTtp{YzjB$$=jQzY`bfAL$1@@`;{Y20og`R> zn%~fgJKd+|FZ+8_Rw0COJ2B{-{^|9EF&O#KJ*QS_>O8!*Ag1CWJ_ijY` zO;^~Hhhg6*C>tRk%7%C^H{TkTVec^Inj8t{-bXACv|?qIj#sW^n7s4|=hz;4nXsH* zSoUR}aVJ&oKTv0%+uHl-hLiUy@$&2x)*l%Ac3Aptn!nRvjX+=j>R006E~cSh+3cY` zHj3L~t2lgrM}>qrl5@A)-BV)d5uwnJ;`r6u8~ zy}U0h-XekLrME7pLT(E!kb`i(06+_x^wiZTc`7@d%?voSJWLV)Afr-MWc+4K-$z=( z8>bSl$g3qjsi^z%%{d6)^8%}m{`rdv!Qj+u*?r_A8;hXm>IZa__8`|d7@u_;>gmwi z$C~2PTs?(4N@W+NrHC=m<17^u_j9L|P&A5^CN}LR_VXL?v3wTAj=8o1=1h?5xJ?XY z<^cvNUz3-KKUcOcnUYXr$lrMrPATgJ)s>v7bgwB;9stJ-6^e(viua%U##~VFwRFnm zSOfW;hgTt`9@pH)<1}K*7s@u;$Ch(bwnxNJY2_3phMWx;s?^qZAC7viaKERM=G~YZ zc{gGmc?N6*HVHIEUKSyFJbP`cU=@^5;m^?i6CXtf5)xbl8Z@`&qCW?@K>CD)`V}SB zTw+oWOa2l;Ake11O0MI|k~AdzWY69Qou|^W68j1i(6K!o(_3%+9DW;NuvGwi>xa)N zpA|1WEyyV*_d+~b)|jlnCvygLbKI2|6ERSSWysnXg~HK~UE^dl?ekOXBERKVZySyVo9%TT%M^U1yjmcwAI#>h%iAS7-hNJx0|p zN_OOj|KBq?3FCJ-8$>!WnThtK>^R8_%OHVoKI2dK6+HY3 zo{7;Jm8MC3s8U~&g)hbXD$=7CZJzqtO!rZL(KLyzJzB;-?9(t8)cGi^S4(JmIbYv; z(~n}aB>#aT$T)um#PkYazDj(@&Ueu=>wNv^qeIz+Rsn7Fx>7QG)DHXg6;sWWm2o}> zZgp)nO{h^e?i;nAsRw>W7nNuN(6Sz>Kg*)0NAH25bkR!g`x20#^#2QCH-tFmG+>( zoVh%9AREo@S`e&qA6O_!5$(Ym_;HY238uH}qqybEtvO}Y+#EI~ON2hf%7m)Q=Uz%F zPgrjEp7CUv$?e%i!$`8rd=;tJH7otKxK?I)F43u49L_k$k6WbFD12Od3U2a{qL!MD zMrs2+WkSBw$n7f<0^JbrsV`qyF*OO?zr)V58DFzbnYMfjj2p6@RcoLXFBx}IStg4+ z)O-0$;JvW~C@VDcY3@_8FYDE}Uh*nv-uY~4!q0Sz}b|3rnUU5a`8X?o3_ia4Wz&vA5? zsUx2Uk8jk~e>vlI`6VX2mabj2zPsAM{R5|59dh*9FX>ZP}f_>ZXKhQ5|!E}eJ z2^M!63~i{=)rwzD;rgM-+DFjOzZGf)LJ;iWEvzpwhPKn8qq677oqo6|3ZqSN!TbE6 zbiolEhrY8_s&}jvUxM)!&uOBO&#`l;{8MG&7`mYz)bkU`$-+|%qLUYrw)+!4g#6Ta z@N{Bjlub;7I;$}&AB888nVcZk$n5=K{BAnlkR-hvt7JQWX63wx{eG*ma6I)}XhhC! zxzv6yACX1_J8Yg;7nWpm@3Q$hZtJ~lmA>i>OGm3uP23=w0CKjd;F0+*il?msKBJIM z<~5Xw^jqk`Rwwqa&$QEAz$i5tp&jiYB)wFdyphePsd*1Bs9v3SGr5ivzE4l{!_@il zARt*DQw~hV7NI1wL9=O-@9+XU^!R|@{8>op<<)IPs z=aH}E5_~lduLJxaP{K&yXYh0Am^N@Xhd}TcaB9WFTE!(}+3J!`1Hz!M_{)7AycvA$RW- zn)O*^a;$ryqC|y1y zUmwPfWaa}jr%>E4|A}ws#T*erD$B{ycsY25c)OCr)8|BJ!#`%V2F_q32&uh%=6x%f zJ;(%8P*~{q>mIAo4pu!7u5@kV2$?p0%-R1O$t{q+Y>=(lBh?+nu0-9Zm!|E3lHz}? zvGc*6hl*4yg|{;IBd^(1kw}np84SH7nlsi$Gl9T5P_i%td5(B|RuXA!6me5QhX65h zrM{4hpPq7W=8&oD3KCXOp&`F-c1pS(FA&gbW8tVhtu>=5Qe0ubj1zbJTV;5|hMVV=9v zAD&di>p#3pnkfaVcxh;WGBTb9t_l?%B5v?alRS)l>5-Rwz)9y-nQAC>L!=un`hK?g zC93!HY?~2H%9soNI^SxlK$WPSpLcTlyTX&+|FWJqFB5I8*BPh#N_@(x0R6@%e5`Zg z(`b0}#+B!;vNK-4mQkU#3JP9K*SISy(h76N<3UZ|dA~*aSBXW;8-7&36(v4;elz0T zY!C8l>;cINyt`s|vp~yb4x1}MO!Fl%LUXHW%TmC{4vqQONvM}aues*cXzjFAq^0BZFGsDu z<=+qNsZvBLreOytiz^Jj(SUpyGXu7~aRsrK#I zJ@Fr3ENfcH{_c3P!RwjGJ%-w#Evr^(^+*tHcg32F6Cp-iSruQ$!Rty}8>z`^aU9in z#h=^U^Kyy&4z)9(%1+6g{3I^cH>Jv!-=jM;YISRNew9w?Ql6k~Yn2q%NXKzi+SNK` zHAu@$zZ~V#Kw^B198}W|g^nn`&T^_z$X4uepsXiSA#9bd9pURDJ?9CRGyHBtm|=D1 z5VuNmh{#-QH~m!hp>`QE_`VosiB@O5n?V{|`Gtgz5NVB8_@P|qefVBXq&3SWDfJYKpTE%wu?Kv5GrSJ})PafEf_i2bj;Z6z^b%m`cAq1H;p_Pp-W$)kk42 zNbB2toCB*od;s%;c8+(N{W72Oqef_@X;M}(ww zd&*3n4E%K|0_RSglqSaij6;Tp#xl^3i7V=->bHDf{FdP_%!U@zCQ(*@LiT8cXQ3Y_ z_q&Lhm`>YY>tRWL1UG#DOl?5fun}Mqf37d;Wd?*u5W&~B;4atG-rKiDsI&rMYy#6x zQd&B3KPvcs7@xC%F{8p*klS+M8?fRJm^&;Ohlw0mutW=R*6cZ*Ldg10Be5n!HRx^H36zt%33!Ym66gAbA zFAY@|AnBwNF83V~l(Ss}@fP%d2u(oq(yw~^K;apY>9Yb}P6a0U$Fod^WWPLAmxjkG zA_)|C9AIzTqp7X#p4&h*St6HD1DEo?I~RJXl=)62{jOCUeQ%f{ujTok2d6sb+K;z? zifq1aq-(hG^0=@ljcd+$Gk&;^&lPS@Dc@k={OawPb7L2AJKt_#g1*VGccWH4#?%pM z4X=@~Uj*>9mSbg{gl&~qCHjFL;!VanA~0UAkQQcn(76W$+-~tI^tk=EY}U^R4Cd## z(aB8m_YSZFm6BUL3zorFyl_eq`mPsV){ZhK9il$gw+j#1iZ$6kuG`z(Or($}6Lx@G z+);F5StSs8Hsm@FyCiTzfXbS7e|ekl*3gk8$OU#B!C^h@iD~h9-Gs&1oJf z1OpGXwuX*r8;f-2X~r;UBC=y^sWXMf%ve$NhBDT1c23cw?TUT=RKbAo9ok%)$rtuG zpTy7{CO(54t_X0T1UFqQJMX)x2=FwAr46N;uB>3gPMHgg-p+-ruq77%NDL)<1>j6d zA@j6nckkww#G1cx$&~>a6a>H3DRLvOX*UEghdEcIMpmS^SL(nYq_GTO&@4l&{bry76etX~G8FHT@MZG#{;`CQhAnr2f|m1LR-YlMwwHP6~c z;pAZ1DH`43q9yP;01{xPSn%5)8rlGQpgN2(bgEt5jx6$CviUe(H!-NG=!i@SYl!lz z@K!V3RdIqAy%dN3NrwpB%ckpm3aE7H?&LE6Aqc-)zuyJ-R7@%;sy{OVQKXyy@5=>0 zBy(qlqGocrQr*Y3W`7g}wPo20l}(hkhmk%p`AQ_MN;Lnslyf+)wPxemt-*x+uVV`_ z*}UC#rC8-hN3S7)+kVf%zI5c)X&YY^6zm9I&}tRFH@~-U09w>QTRw~1%8pk}Vi;~r zHKYu0An#3HYv!1*=%KPa_QcDM=~EN~ioNW&Yi7ZKCIt-Y4x8VYLasM4K5qG8b1y5Db7 z5s4}5hh#b8>Zz|W@$RJvJ2vHUt3q!JrZ!u6qAt1o#C5lK2Z@JnZ!5i6J6y9d$?W>D z*pHEWZwNCo6UXq|_#G~^Zsc0Qv^Wf8cf}LGcnL-F|ND1E1VF2){cD5!S~CZd}`aU?Nc^m6zR^?Wl`s2c(BR z7?)N5y(D11trvl*+PQ(h%(k-{I)IidShiVA`2u5Z4)3E2T~rCzVeVtVq-FV0k)bZG z&Nz}-Z0%DlnIq~gN#UPw@H~-wiL0VH@myKAN%#e7rWk@dYd<58-5X6N69gOWs^^~O z-CDNMfa%LcQ5BmfPFQ|gOUB)fnvRv?1K>lIIYR2`%+0l}cuBie0>L@@& z;6lUrf)M;St>fiBRBh>6p*fC~W}%>JKoqpClkfFyuFvQ-Gqz>h7xVNSn58_9rLvVU zW8-J~SFza5i`{~F%1W!Vkk?2xf+D1h_lUOmB=h zvD2A%`y5D!-E(f2zn7Pf(C#Ua*v+A%WO1gdv z5;kEF-(B&}eT%Ji=^FXnN)I_OC=)tb%_vR99i(XCR>}%S$QIS5zvZK@EZ2-X#EK)I zD%`GGeIN0QP`p6zO=p5`=-+olN~z#LD`~7Lp1Ofb^l=U`gRsfp*Z9xaYOw%ksWJC# zVl%Z8U64p^JH-(YvD=JfU%q2mhg}{)B8SdLSjuL8=q#jnEb6{|V)rQ(049kC++VCT zy*wRApm+A5bD*EZ+!1@}b&1LDR>?MxlW$+lj};nflQ7ACeV!_%%kwI~WNi>sh_;2Y zjrVZVs0^_4a(tQ|>_`jq-!^Y$8e7#PwJqs)%vy>Q860%xShyLaim%`452!n_;B+)Y z|5zrDm(Xk~9hEgbH#lzpXrg=h>Vu_1Gi?NN!F<8UthgX`<*Z!{RMRPI7=*`jp9AJ?0&StbY|#s=%ipp+L)E|63Fq z-QifVMH6@@g`7Izql6<53ayCN=k_T}E99-!<)ivHb9shAM{!UznrjxTVEC_3FNG<6ESz^$=YfIN9gnGd$w zaaUJ5|8n*Xu|eWJkc=*jGCSinrCBwn3@0q>RfDU2nhi`U`W(jo_eotc3w2i4FO(VA z!{@TAr_c`3>VrJgghOOM-|SK8sloJ4!&Bqe=lcC5W`6WUIYI=es8anH%;_VXuXK7z zSK_MeJDWg_W$ENFO!+tbXugJsn;`0EyiKy+5j)Hl2%RjQ(tG*{7o7e1g&zWtbc!=~ zg#n|1{)m5992w|%;*Ax*r_F8;7eWGqsqIk(=07*b4|7xA8DDdPN@z21+_^11rF4!1 z+*LzWwhGjW5sUmalQh(z;PC>*Q`NsEszaqDK7;AUz<5ZW9eiNac326KeZS&J(dLH6iqB^>Z~5zfjw?rj+$8tye8!Y3<7xhkBpYC9q&+BJiSPr-U)Dut~}lJEV5 zEW?Mk;|jf>RDSO8Z?4MmzjhRJ;Sa(@>Gk-+OG5GYz>?E`Z1hL(tP^kq>(#AE5k%1M z=N{m&)n|GQO<&Rxv_N*baA1Kv8Eh0OKl4Acix`u6*lx@cC4-+vGCtoY^1oPO7)Q#F zagyJRJ1Ff9#iCc`M`sPmS_YHjPy40r=od^CUhuS_OR~w3-&M4>8$N_&vQ#ck za?eb@o6W)j%7JB|t&;l`^Dpkl(76Pab(32rAAc@)bUZ-3ItO--W9pQnJ0gy|7qXtG z#Scd~uL2Oo=Lcm<_GR$2F*s1h^@u%ijH}Ho=wsnk{PQ6E!S3Quy(J!r$OS6!SOH{W<@tWb(hy#VRwCyXjbKDI*MJ*{xlPnh|vO>Q|+PzJlb>GsCn36I5Sm3w9kV6M-ZjEQjWQk#@w4oTauLNmRH|ko8YiakP-nH+GPfBTBcsm(0Xx%?wJ_^pBLvIBBm5OVL(#*GG_E%8p{=!- znaJh0=qFhC<2=-6=EZ6T{vIX;sIQy5)6DhH$L?M?$zG6L`=Z#tg7Ya9;ZTpnclE}$ zJ33(~jO1z3Mg&UJ7NR*{r;}3U^%5rD{&B^;VMPEv#E$^9%ToKLHkR(aFW^lI{jvVv zI?)eW&hO8d$E=okx6}6XQgCm5uyTAkDLc?AzI~H0HsuIJ$oN^M4ni$V0`bTr<3=0+>DOV*gEgY z{nm5J-c62B;j^DVdr@V6|SS~JtvFn%U1jtr6gBagTt zbaeJj*0Nx2*Q_sr`^0uq04}5ocF=0gG=je*V?Ml3oJdw2S@$>{Ii3wdOvyGK=Kh}U zy3?+IKTB0F^R`qF%p($>^$F`;+SLTOEE;V#NcJ1oMDuV$@Bk{&Z&mG`?T4;Jj%2nO zDNJ!WuaoS13!V?W`1^3AABE3d%1w49- zqdfxz{=Z*;dNp69PTs_?2wDWN&n));uDR$s;KUL%2IgU6Qeu)raOnS@_ekKK1waAW z_d_M0a?s&Wy#K{eDLuXcL%IHYD6quLES3m%4P;ZPS}kmbae!;NaA!#+^hWW%4eN*uOK++(*R^B2l-_t5wTi>3lGFvdT+?JCyaU^`q%{)fqe z$g-KitAqz|&P(c`C4|>9dqi^D#E{!6UJXbw@(pq261ycGjwT&rTrgb~)mm=Sz|?kf zpy;h0jx>Qsn!PFzh-d6+Z8}z%VDusRy(_StiDOyj&0|ulJTso6tf%Czj@gCa3@_C z4Kht}niV#DQsR=uLS)1l%wt=!@ceZ9)x~r&)3s|$ajQaZ>Pp+RQN|5IfPc1vf%c^8 z{gp9%*@gZs`n`XQ2xd>z@D9q3sTg^Ty!3QOTQd)KV__V(;x+w%PhwuJngrK5y>3jZ zQSC~s@6^rkLD!4NpOdMUUq(_#1E~Z}AuZIg2i>GW!=RT zcO^p4s?D+iad-{dt38>c)SnNm)Rtu~5|@9|R(WFF#Jc(vT52;>r66&C>?8BzVC-sm z0O#mpFCQxpXP-fWpHycatcvJFY}yRZ)L{&Kv9bb`t}&&4eb|U;1?R5~#DvWKg(asQl~^DI&c;_)6O z3NvnTk_uQ}Ad!C4o^-fW%VK&>_w&AT{MkFvH+;nK>Xcla*EljIIRxKhM@?m((~+lw zo9sKJ(D=%Du0i;(-G`x-mK(0ff-+E&;X{QLWE^bqmbNgG(#`ERKtlj(*E8jOsL1J+B<&5{fqwtHe^?TmFr5Oyy6AbAc@ZQ-OTN!5V=1pJ%t(4i~i|=g?YV>BrPC@K?XFBeq~)mAfZGC0=5CEojCE zjkz~pGjD2y zu`%FQir*hK%LV^5k$$$G?@ci0wf1pJUZ(uzO;=Be&Tx)hQkm?he*WdYEYc`Vxk7ud z+7unCS7h_QRakDP$jCaAKmJkldEM?ll12k?{Qp47 z3sbNU^xVoN;o;MMw6$ui78x9X6BMAG{^^UHY=8 zTC1aGw_dTFv$zJCXj-3kzcUE6Cx@+#fuCRRQ*@oT2TjNI+q&^~br2>Tl!ySWCgmI}2Tq~jo zze!Ggqw%b>13uo5b!&<%Q{W!HEs`Nld1QoJ)E}`Ah%c5Juy>#a0N86$2P>tJkWH4=7=e-{ zQyWVBP?zQI?OJmLlkVT%4f%SeK`PL{;^a$?%O3qCk**XSeo|<%6$zA|%d=~fMC0yR z>=+}HIm~YkQ(35Z8>}B65tUd)v2%|*#&q_p#t5-{m^yo3gAFkwKCFvk#=(X9g;AsJ zLz&Q+&H%AjPW;OmIP*vCZ~X1uaw!*_9fBVQzqrD^S-KGsycsQ(rD_=%D{zuqyL-JL z9??e(ZCzwB$=^;Kg&Q&{^M6?Z=}W#^ zYnX4lG2 zOb6!*(D>_au`vW8UyM;)ocwtZK%A3!rl`h2_Z7mkt>}_0j_}f&(2WSDp}Q^<#353i~JlJf6i%`fck=~p@acbogoKBjrkECd0DI&(2{;WZDr-__5hC( z)CwSl9+frP9=&9Xt>tLQJD4!_CwS>>8_5|u@4ql}xw^`ZAQ0!F>M4?T<)Ufq%;Ff_ zC7jsEJWD041$(&NQF0YEYF!-)HcQj^hwx^*st{xajIi)_7-B~qw~?`*6!%>AGGoe_ zcdn#JP?~TzqHrAV@7|2OH&y7gadpH>%8uZBZORBtJA$H3;C3bC}UA;L8z5 z`84=Y3!qVy)|j7Bg9Xr^L)HYY*ILo7H5FcU^-9$$amG@ld@Ny-Lm=d;tfmhneh1i{ zA_THUPt^-UwEDh+D-8YCS1D&BS%($~J}hL94SG0^ovVbW3HHiuaV2e29J!s`w`q8dKBx4Ny2^T*PxvP1?KOM%?QKpIF*%-e z61#wsQXpLpZN^8Z2?Zo4rRZk*P7OHiV08)VSdNX67}p2Ht%mvzC#9(ka~ot)k|q#4 z#{PBrZL;My*_WGR(L^ao5G5cmR;fB@9K;W3_27)r{E;wz^WLX{p z3u#zlxR~r?w>OCnRhc(TI@^Rmjjb3t{1!qSEqI;~_c1QXboE{z9v%k(nxteGe)|`) zP@w27k%vP%lyK0#$KHdD7lAJ3?RSg{Pkjt?&Ww?K&Chdh6jqxU<^?T;=^g@cf3!LX zAIQU@sxH}}WB$`H&9#Pb@i+{EkG{WfQ%Bx}-S=OBgXYf;T#?`l%xHh%WOQ`js-Z9T zT8Z2aSJ}KQ6(v0E%$;Zkv0EKvn;W{~e|Nf?8q>s5iiMSKPNzB;;cq~=QE4>MFArM1 zGGw|Ued;lbf63qY1xS!?imS(mO=ohOggBTVzMs5-(%{{>6axic79*UH^-erZWDjKZ zKfRs7(;?)wr%K}Q66I$)xqk@RSo+UbU7MPnAE%j=dp+W55?iYqV*EbpL?=9}otnA% z!^KX&!8;0oa0yu~2chWXcTi_@uNJ(a4uU5ovM(ZjKsNwL!yZEAG+TNCn5pF?gIICi zWvxSdduAyw2`J1##J6bis&c=a<~uy(a*GlvHIT68ql!B0`2*W3b9u?^K`nQL_|Zmr z&uOGiMgy#cChOOLD9~Jw7egnpu+<7T?9(A0cj_ z_n&yz!P7ptp$-f8D0&G1kgYFTH%D7Z`_cfOSMYz+c69Ee&8+m1kDAaC&2v}~4A?RQ|(wwDU@_DwWBC7msVd9pE zESlbO|4DV|WL4Wt9I2?bp;ZD+cy-)YywBfEVX6oZ884dmn40$471Skg%d~50^2@k?i-sMmiIQX zoO^$kr408wo8B6D&iKw*%59$`c=u~c)lI+&bb|3W1XYOMg|jgQFh1RJm9Wtvt3Vui z_rl{#*}umvLloko_`|HmqvX@EZO%}qpVSg(TXjFEZ3eH}Zq?A@i_%9a4xKA4PGU)B z^jf`tzLJ1ntcXar<*ux{fz^Z6rnNAB`tnSyb6l}G@^UADgbsf8yj?NQ?o+8x&1)4R zgTE_^bQnmt1)uhK{DLu^lhy7rRY=rXTmv>LPl{&LHDRvr7zB zI^X+664~6e=AW5i;fq@$t1%b|{Ze$P=Iqo;;$sv1iO_v@u6+*8Rh&hJqN=Hq0p{0* zG`VBY9R2r@5gT60U6F4prqeFyE#CY}LdGA04|U0YbYD-!lAC>!2C4GqPU{kTiaW9# z1mBlXo47he@5@J0*?w!yd>%2wq&%fmfG4K^nebF`V%N^K z4t*=!fuk3!+*VJ+d`>e=@%{Ao4WaA4)N~=4;X3K_by}n#DP4e!-RoEm3CM$>CuuT< z%QvNH$H)_Z)i^$Gglj>o1|2Cs6jd9_DbbX|G?AaZYB3iPCnvGXy6^OI9UUH(fdAKr z;;Pk#4nS4V%DdyyIx!XwWFv{%;<+;rvvpIJO~ar~b5VG`$+kE=$Za(EmuTKFAZ}Hg z?foaWTC&T^aQN%zbSy*yqJU}&ue#wgD~9-~p|uE>$E=|}?hz=5W0;#(Z$c6k@m4Fn z*N2K=CR*{QzFF!09*^y60V-ZlZz4RgfHbToU^*fFC;xC$by0a@5is@axIo~--zVSv zP0+i!JaZ6*)=XHM#^GRUzFP_19BpftM)g?kx+WaXBz+OtO#(|F!Vt0N^k~CmQeXva ztvj*9+piLKGKiHUOT`|u>NHzxb!2ge^30x89||>%@bOwbex}p(DYEQ2JkBHArXEA4 zv@=l43YQCuJ=?4j(=%7d)iWPbG+xp;Epg8|GvcQ@jQc#oWUzB6d1CcAD?ux)Ld5DO zb~f_DQuGHVdkLiB4!1dy5|*Y58KfRf9qRZ|Ks5aG^bgs$W!YLWe7B{?!$@=WhEtVh zG1Pcu><7fLY7x7pE%+_BB}(!h84pf+iiy+hoBt4g6rw$Dm5!N}Y60)0QqbNIfXm!LQvbX!@>Xj^`yx6x!jHd1KoW){$&HjzP90q#Y$6j7zP>nz4@z5= zcrFNwb*2y+q_p$~iHsNjDe}MmF0rj{IQ#Lu*@xg|fbNt?`QO~-mSf*`$r#{(|2;G7 ztF#RyA8{TIPK6l=ymtnL77Wv+Noyg{_oT}aU~8Q?zgx`t>U94n0iM@mi>DOSZh1DFOqVw)H?_DF~gfE4Wt<9a|Sru>I#|> zwTTHu|J+v>(>op4qm3 zATm&AxAScH1L3#R%uZV29^cVk0w-vT8_K_OG&=cp8TXm@Z07~#yOF&c1DbVO!dLz0 z!OIF}B@}&cau%~I$Sreywp!hr1(6${n)4h>kCko&;A}lgzPPkop4uPRP%nrdm zo4rFB&!r9kV@nf&m9=EuptE(i+*&HeNzvJgS_6^1;Y(6yM#pn=?}Apez8|-_?wL_% z2^}*@qJ0M`kLk~2Fr$K(%Kz#lTK}2i&%H=OuH@%g&nZcSosl$l&HKX%73COIg|icX zD)OR`AsZEHMe!jb>eG08R>)KrkN;x*NhtaAKCn<^8MB<@-I@}f!@X60b3)(>nd4K~ zt|0HTi<+H`CiqTz!81t>@^-q3ds23hWLP&|#$GzhLlvVkRaD2XYgLFrT-ZQ_HA&vM zn>*8<2cJ4t<;kUN4?k2hY@}qc`nsl5`GwJT^5HM?n;FtQvDtEuv^t39cN2>IPBDw# zEk#s-JL>^iMh_j2que>cUCfP8 zxNQ0=uiK`4z$uBAM5LpQ!6z@H$7U3BkXB$vO~=w9u{Zk8(qO^Z-(SqP`luqqw@ZRh z+{)nOx2aqQ@m7(A4C{CSKBP%deg0d6h;MbOvSBA|*%uSM z)-S;*=IlswRR}+Gtbh~Tp_OEeg+&%{8|efwOc_M=TedkZfFOmn;v}-4V$uvjH_+R{ zFHZ2v#O@4X6t2}%LF~E4%tGze#q!#o-O%@^jsmm07qCjmmp4{v0t z?HG*Y<|9rLrsKgBshtGIY3F8LYibj@TMfP~@fu=s+h1IX5&0mqGf4TFXYb~OvFRak z)0?wr`Y^O`km>6Yy_P(O(&BQ2%i&zJ%L1|Y^n=nDY=S0N5iM24ECd*;x!2i7(+0a- zq$4bPtRzH1@&s+RWb)OSJK6!KQUTu%0$MTP9{7iV`(Vi3h7~%VcehK+exlL)ju?&a zbS{N_bSmhPFbYl2pKD>>@uqSD_L=XIn+eZN3~jUggpHd`q8+f}F?DZql4cOCNEl9K zP%Dp5pq1=jRStQvwJ0_p(VqxLbyZ16c9O2&K6~lk|JU`%_3$2=G8Lc-0Q)%4lF0uO zJ^MeZr$R5_PrNJXLqiDJw-PX`shjDP4}G_!!S&EiZm=_is zX!Zc~1usBfkPW0ibLXmXPiCURK){lu9g7M;mg@Qu!X=4*!kFJM?Jv<~CxkXv>m2j@ zH8Mq6%Tz1{p=$)@ae56DNABxC1j!G=`-gh$Tf9H?-gn4$x$5}%b!N<*ZeI-$sE@(9 z9=&u+qMzJEo-k*eoIXy~an%1qh`ZE?@cNTpY&K?q_SH$TWOzSkFJ<4)qUmgbxdQ6+ zK!AR+Rumhtp8bMoHC;B^iPGrxxx}pD^8aZTTJ~E?7e4*>OAsjj&)12fFc&{IwHy81 zFLA{1BI<@1U}9pYzb|V`SFNQT?)D0|KLko;AajccuDV?(OW?qoNXiP~ z8?agcxYO-%yQjT%NW0uA$s31zNy14{TgNT3sR5hS={WaFXI=N;x3AVu84bIhZkzZy zf3_5iZ{Jo1=LQ(BG)_ow^IX?wpX_6cV3wZq^8PfEFrHC?n8)poQV(f$D>&*!C^MOR*EI|o8I3oB?W%J^*!uggY_yU;8 z)aEZ$?z9Vy^9?IWQFzW;g~aXhbmC0uDa3DngQUoq!Fq zZ~(pbnWOa?uu^fyo*1^HoqnJkNW0o1Li0ld7gtyiQlpTYypq^)(DVqb`$iso{(=1S z7DJV>q)h5!w)!%7uw4I)^{T{@QU2jN7~WEKRbmx#@?S#1|M&3$01ictQ{gV$U%}hA zVBjmGKRI|@4=HPE6^4hql3>+J&mXOfC`(U0vd$ue$#7bJO^WRp(5U(cGlssaAcLHq zN9a@ssr8}E@9keuWzr}SI)IYy{Vaq`Zq5QVY@dJqQVQCsNi4omlamw zjR{vPxIGQCb(D%t`li7jX#_f=U)B7{7^Yua9F(`Lb7DnHgSd0Dzp4;;73#sa$~V4w zt}7hsTv3EO=xJ{i#o^1IcEF|i?Jz|sv!uyMSY>h5P4#|d4crF0txReGA!n?tW5-_& zzF1XOF*IG0oNV3{{Fj{&*=M>^pr$(GHfE(N(08s9lGe)i98i8ZU16<5r!|_P24Dgl zyL$Fktm?p|t$Srz`eQ0Nfn(10MMY>bcWh;M-2&M!5^QmaZ8d;{HLeO1RCIC2A3vNdzxf=SX&5 zv&ljDyowK`n2t44%1o#pX=Z}YVixJwMtV;8P5#;x2gQmFnmpE?2Cj^U&Rm6y-ZXr%xhKH~v^F$I&bOlbS zY2BdGF&B}4^Oq~}5(GBTZ&FP&VG}5YMZIPY4$&VmOriI$(E#5UsZ2gK3MHfomx;B5Om=!EMcrx5}TI+oW)~W+z}%ew=gp-A_~d(_yjk z2ppf;2&WH!&8e+{>hQ-%I}fF>SE5r~D`f~8?9;R$e%XIk6#wL>N3{masVD78Q zmZAzMTR6zM&_OkAb>YCo%39$tf+UKobe1!JoL!B9f!)5jm|#%%}u>OvNJ z*i%@_B3!3Mhqnc5o(A6ZXx#f`(TEaC@>3ZV(XBZ?4a7xZ29g-I1!)TxgQOE8t4%4u z(by2tP_x#CZpBPTt)PZ-Qj8s=`@3BEF=PO|=oto@{_PgQzCdyw5`_3cqG4Z3B=w z*Ocu&cRo)nR6F9WpsLjO!jL2ddxyVUbsnU2jz@Us z991*3Aq7z^UOj6$&Ok-hgVa4nX*huJD#|c3Dv;?TTwOLC9{d@5#YNh=wP)LMNF!>9 zT_@lR+oLa)(6Qsd+?G8;xT8lCF_5~+%A-5XY8 zWk-@mPx3mi3B)4Sgah==cZ4O3DJD z9nJ<9@mCb1s&7Ukc+MWA>iE7>=axb&kBo}#>rz(RprhIk_4eB<7R9XM5Jzh~vl3sE zE!w%tfAShgA)PA~$NJH`z{=fK)W{y-bT&}UEJG>72jdA_t~Eh6@qdWd9Kt2rwiufW zoPPNZf0=8aLScT7B;woeAu$j7 zHnv62*-N}!(TAMn1=H4_o`@q-(M?a4EfEm!yo0N@8IsnJM_E!sYOwjgNjpW%_D?8O z693j3`b~gBa5Rz`HTb#s!9g~opUr^`%&=4c-2AaIfFvKEfaGy-WbnF5u`10AjBI!L zR$VEK=v44-+i12&wvC<36D9MudGP7G{{2E_RIftAvcC)73yg3x3#}<=TRT&YOTgxO zdaVPKf`vokEFS(y=;%ko+4*c!0#x)V;PZ|A)1e8A!J-PdHDaO;>YGd7Q@ncz|V#{b|)EzL<6pug*dxQ?uqFuTctT+LH z=!9B_oXs!Cm!s=bIl|W2%0Jz-Qc{N}D4&2ylWk#x8BH_F5#RlvICR0VgS`gX9fk;2 zq_7apVEbHgpG3X>_*2EhY~));G7&sWDJOSiCcDsAQm^88SOw<+8QsnTbn_OdV!KA* z+}FB&Z?N$gIO|Rt; zY&5b)KGAk6WuPdjQjvq9+`tU{hBZiytt%23Sge!=)g{Ee#@;r2nA1sGna+BqTz@Gv z{f8i;2wpczuzVL`-}ELsUm=O-fH%TNm7||DI+4H|MLh6G>~7ia@hm$NWYY*-v%vPJ zWpzMcwV})|d_NO>I=6nkD#9PMcZOk%L0&qlYmcVa;ADRD@~Qjg&#Or>f*>(K+5{N2 z|El91jw5N_2Z{RSLhU3=@*m5kG*WEn6kRA{~rF$&SF89&b6M z1}SHudJmc_^{t*J`?N$NLx3!7JDM~4z9%=f%Nz9E`#3dPyF5BEM%K@8D?v;Jdz!(1 zj1##JzAm<&WtPwLd6xkboa)G@y5*jmr?|*DdvN*V$%qGYn>W^pb}F<6;F%AB9Co*? z@I$!DlXcfo`T@Yrcy%xuNueK5JN!e4CJnPlKDk0A(JgvE{f9Tp5CB{M8+k01u7C&I zo8g<4mB!)m%132Ded_~bl_^SMp?oY$3H{z_MtsDWa{*hNPVtbmN->wvIib9r zbK@U^nlg4OeV|jGZ9YAfR#sFu8Ay+>6#%~qdKSBW^H<{n%zt8)dQmXhusXwz@Q!!- z_bvCddZv=jl=UsWL=px7MJSjPqD(-378ToqXQ#h<5;sxBYpNqvSn1rCmpso6?WBs% zGlvb%+8^{q_;&j=G_WrOwq>C>EiF?0$SC1Mq5^46k!75kGe;gyRr)O2BAP1kus_OK zj%HEUb?E?W89F^;{dIg>GM%m)@f78ys;!zNT1Fs~Ey9_b>40EBIlWYK{uA|amE%I$clfSITRAs==?p#Ju{fxOB#0#WVncgetRUJ#i*~4UZ>UNH$b~& zI0OB$s?_WNMy$lnc5_9GVhLr#w$Z}I^_w$g9-q;!xcS#cUM6POQ}Go;^Q6$8rE%=s zJpX2q&DAefvT_xhxFi%)QAJ=v3cS-g#tvmwlbNHbpEZSys19Wadyt0T{~D^&Y`s7W z`Zzwu0NmfdNg>&PpD@jAGeLV++=^+^803S=2A4>$WfzVr6hlPX{I&5PjKw43l0FqJ zhgB}=7Kj{8CId&4GMl|FNk%OpHRUV=FdQzhscU^=CuHKlS@D(VuuM%4b)mU0dou>r z%5M>xE70wY9n<=01Nt|yn|tvm8vW%k%?ZA|{iyn2?L4AqbMiq+B-~bh&nh{&|1)bW z_8Yof*Hu;8IlJ8<&nW;c#5Ta2>*y-q+`N#u_=mt5zNnJiH@>7jiT|?mMd(s9nRGYK z%zMjW(Z~1^bDKIw(uq1^|K$&DdIwS7obsU5Nq7_m^O%sGT2t4X0t~vLz9b*c!9o)= zuJYxY0d`p!j{7a`K4V=TyQ13HFhwc<1298d;UUpe|KQ>YGhK5Gc4FvfzT!$xDvC-+*V9TFqor(KLqKS(w=M7A679}Wp{!2w0w_8RT89(E33x(3sc{S zVRui#U6r_!kQulRy#Bn}f~|kIzeu$HmZgR6lDn)|C2js2w-)_@``;_4|GE;g z#rzS}WoOyBEOAvne8x2ab}@-OuSV3V?YTOqwl3Ar^+Ue}WeTb;{uCcy_#g_0T&q$$ zM-zW>(rDH$u?TA@%gNBy{d{lzU;S;EDr1j8IU?Ugq|~Bq$jGi+AQ2}iBsyq0zTM)n zXp(JWKQJXc;aa6*l+BfG5;MrI>T=XpE3qrq8SGWW`6H>+O<-pyIuAIZ<+wWdm(S~y z(SSPB>Jir}mm%)p=ZfNwqbO|?>Aoz40TH?SOPf+%oY78c&{oVTXj=`wO4yp%B)J8; z8T;~LnXr^4_sitzmW#LWQc~T{?gx6nR0aS|Uczx*TuSkjDi?_#!+p-aeeMJ~lSaDQY0cZ_P86=NlOW z9)bmeH*IUHb&|Ck;LKcVvF1~p18jNpW#Je@`g^HwCBEH$qQoB)Kf239cyEOmD_SPG zYRr{*(k!mfY(KwOkDis6uV6K!X;Ca8!I}OLM)=bd_ir<``Zq)R z%sxqRdFh>n5t8l%JX5}so9B|LQz^$UXeFgu=H_YqSQVt^_L`kPhY^^6jv!mQu8a~L zwZL`e($~fuNXtgYes@EqM>@VZN}zSHC+s!;W}B4RyN;IrxhMD6;ede_nLNV(RF;OoqGIFvS#(d7LCX~L4c$4H?0JUjZ+FwS z7kmAO*W81doe9B|2_5+qtvpevr_>6*r>n~NH^rNxm&hJqr1;*CXhs9e1}(w$jzGkcH4u~+u_TZ zyd5#fV*^(nQ>x-qPXMB>$E}g9VyH2w8;H;}|8BgL4-vVaWh1?`jBjyVk4q&AEo6@j`qZHTe^n)hERn}oyyfM*BkLg0b5P@ zmPUYw#?fP5f1Ad*V9A}Hy5F|&*hAug|YsJ`Jx6_HaWDIUS` z{_wTPIr&^-`}sm3&~zBpZZ-t`zQSyyD9`}W9hs9f*nFVImwKAp4W;o#NZXlP;vIx0 z0s$!O(Ce+7Su^u`tNFm4&^S~EC2?eOmvKw2*V#k`Sikb(gBXz)prVlZbipddGwTfH zGgjO4SKO;J_bB3T#}hhNZU;P6$i{i9q=(IEWx9kczWrA4^S0>CHe8u*E|=Le`<-?y zNc3yxn=`@H6m}B~S)E*R01fGJCRXw=Gmak&q(3ke+#)S;J#PZRpNI1~v149mEPJBa z_2a^EO%F4%mY+@iDo%katMPpB_}dJNx27G($m{nz_a$Y!>AJ3xBlSyx8~PiHF03LC zw~P;Ao1s+7ogkSK033xbK1S`&G+aX?oqx@Exm55&l!@G)TcAUUU;1WI5q<1weWRNxtrrufeQtyNVktIrxz>E`?&vYPUTAHhSh$z$HYF)MNiu3Z<{x1O z8gDgbF*7lwfmDuJG#J%z?hA-JsHR4zOrs7NcF0#+Wn^tB^f3inP;hFcIbZ2ojM&Bw zU42=6d|kuf;fz+OLfcYKFS@idItX%uyI3%1@ix7COur!*;(A^*)xRNYR2=??AQlgB zfMs(c5Q_YRFH00*8Af#14mbml}p{%+ST2h~o z{eoHsH7${XF0cY!_IyDXOx9>oN~R|I7q)}=`hdN=5aX0E+1TF0vJ6FF1i-a_sl@aK zsU!kQ@y~TnaGngHOU>I|bk04AkS=oFsk0Th)|Objch-sN7@`cS$!5-s3MtXmxySr; zD&|Ci`2Sm#g{&@edCdA8{HP9QokdebUFpB?=8cjn)=#^}7~W!7F9jJauOxo8S~rJ=W?{o~AmWW8Yq zkiD&9FQff-E;?58#a!;nJmY?t22r?fe`o_0my6W*@iJj%^{L!Hz3k5LG)}Jy^}XwU z6dl*(oIyR3m@6z8Bb*y-fl=A4<2s)k14!!Nm}}zISYwqF_E!PV=VApg@-JLpAB5k^ z6t=MFM=X6nebtZq&ySy;@2$+NB9nWIwkhV-%pIv&7YR(^DQetV{~-{{+E{7mKZYNP z=r>9MD}f;2?uwt1xfap?4^Lki6~zPg3xXi6NY_$=fON;QBGTOr(j_3>EQoXoNVhc0 z(%s!ihje#$u6O?Lz3=_N;T)C^yEC&h&-2TR#XZ}=JK57B4~gxTIJp#wrHD3btUBa1 zv(yvOLG-5!qoHb^=?l2~+SL@}A`kgmpVA7sZCQ#)MwyV4lKxz}tq@;+E(ZKsj;VBO z{^KS3(5mDfG^^J4GZG5Y7tHS$eN)PH-nPRYWi*b#(Gu9N9?0_fI>f3SL%u8h9D=F&|nONUW!8(-c1 z_RJ}%)U8i7aJ;8Y`>7a{o{hrnC)%41sUYBl!b%4Vsk(5{@4s7K`j~Ir{gUBp^dQK@ z09Fdhn)b6yk94yP`$NzPpw)P*G%wdEy298tVTcau!F#j2J8Lg}-32}8wM4ufbqvNW zcg|7)-fLLyeA`xwtO4nak7dI8luM!vmB_NdJMCf!%~d&PeN&30=7Ar&_3D#tUBfI| zCBARf_Q@=J%I8SjNl84L{u$9eT7}Ah#N&ROy@Ezl3+L&QyekgMA3v&#OuW+9QWIaX zp6HAZ?0sfiz$V6M2baF{X90m00zTzfiHc=2`Y&`I&)M1Cm8|#+%`=cC6MVBNDrR>=TJT_SK!A zD*N)@qQW&v9QtMDXdtF5f-Gz|tB{s)3$M7a7e@YSCkUZm!BU@ouH%&zLGPK0S1t24 zx^nP>0|4wYZSf6Mmcux|Jl4Jmw77$%#kN#9tBP8vgtkEDtSKx+)d;E3YF{yhiIXwhpg>h93 zP)AF6UdZk_MQiQZ+Klyi9moA3w&lW&;6mx2Hi0et+`G>(y3zdI`gQAx!+O}%2Um2M z4Z2+Vs1!zuWH`?OULYEHis7v_-?Ss!3b>iT0^b&ZRFTlel2a&Dei8nSr&CE;X)+m4_iFVA zz9-j#qW2FJ&`J0u?}AYJGfUf@tBc)ndD=;^D+RQPMOS4fH7vo^OH~TI8GI>X3~Lks z@&+H@mpRZ?JRMs0T->kFOq(ID`tLD&ii+S2;RSHi5VOpJ$SJE)G1E&~vfNSdt1)U2 zoP)CYJ2=X_6H$<@)g90^P`%*>!5vg3GS?anN#&} zUJtCgI{AJq5HUwH=yZ)WRtuaZLBI6Z?!wt}z^AaTmeSm7?TPDPZ@!bimpKS|)P$ZO9IF=_Jm3C^RP8HG| zS02&@VVfmHg5aFD1#*zHB6U7Gwv`*M8#noSzweP9-wwR^8{x{3RET9DjX`Q*7s3on z0EHc@fRExRniKowuRuWtlVuTxFIn2RMbw1}NrCk1fz29oq)sZogi%9*OMSqRe_0m3 zcK<%F*lsBZ;(b}>v_t)8-Xt&1tyRuaHZE@bPkcEq#zsM$AhDo$jNuH%f>0fFxws*8 ze(Duttw>`3Kvr1M(12HE9{ieOlWInl=?#Hp z`DDISxaGW=_8jSlZphCQTMb)#mL%iGU@6R)`2FyvQf?j19Tbo6FTWuPT8h-KFVqBd zmMCr$)7dnWn}TF>@SB~`(2LhJYOKaDpndPk&Kqbv2lMoH#D;1ZBTHWN!`4{*L>G8>j?|qe*qHrstU3hvS z2!~Osh$E+_P>V!ws%W$2i<48xF^VG=)i%ztRe+v=mXLG8Bp-Lf5pPex0Fpx%^i2pm zOHHR(II>raq!9y)7B{!b;Y~NathdK9NYH<_(or@v; zeDtyUmpgq$M@do}OY}*fw`*Oj&-`B$d=BoF#x8N3uvn7A%u-(k_FwwnJ`xzrvq{9w zQ_bfKsGO=|x$nJVXwp-{v#wg`yYP&m%Vxy=h9evC#VL1ss*w)zvup)~vCkeg%>Vqv zo9nRVi!X1l18kk=g#&$_^`gP)jaQHaujj082b|HU^CiUF)IC;FJP%o`dLFG5KnRmq zWS3pJ2H`w{GW+pmtMwt;m1G}~5jb~ZrWO}$e~?9%c|CXr3{NEck;7v?B2z<|9esLQ zUy5y+qR|3as5is`en;Mq{}X&$E($K-G!dm3SkmpRDmXVN5^sy5v^Vi zLK8ev>a$G!cI?%GL(6dWpjEJVfHtNWl#-Hn5j+i&bwibdI?+zst0*yuH#~T&WjFVG zZMSu9Jf`TX70Bz%$46ytYEh5-eEo-XaHW^{1n?UhB{e8D)op#aM_Nkx2Oe}gPlqFP z<1HRpmncn78^G%@$vMUIqp!J-%q~=g!Q*EmVBad)e11u7oqp}pV& z(1W+bGttZeDd9GVqKrs^Tro%vYO`6y(GWGKmO;1)tY9{p8CMp)?`wl*Jt*#B<@o{e8-`Fz+LxR z<(zU>)`M&O6HCsyHqN?%GQYSr1C;r`P4KgF|8^homZ4YX_u9gj?~2oRhrC1Yn%6eC zZ|*w|<87%yLxms$5oTq9)?^rV;Eg-Lt=!*iSPI(pXSR&jJKx)g>~>Jq{>~>q5KnKS zx@PY^MeBMrn`TfuwPn0hgRDDwFe1LILDxQHtsCOK8;=85H7*}!+Q0-wV0EGe`I9nx zs%Zz_Ppc#?1ZPb+l3%NSLMF_BYbXG|gWLZycd!%jZjdp?DF34YFiWkb6p*Rt=h|=Y z3@9In)43Rr1KqL*;L_DDD05c#0Z@6SS^Z*Me^~+>meo@F4GQwQjk!~610+0IdgV`8 zfUnuPk{Nw$6fi}&WOeQG`gCKgC<+6LT(_O? zHIh^GO&k(ip*=vlB!9k#rAphB9b4O9AVN9@yviOeYWNRH_9CaiDDnO(<0JM>EpUpg z6u6l>GqcXBdmgA_)*DN&aTHf(O+A6eOi>I~58nOX7x-KvV~;nh>qY{;soSh3p;otx zxzyk5s!)D9j}e}T5}jvcg;GmrPF^ZCA)&ln`T*PyTthn%t_j+CCs8yExBP8?@$#~6 z_uIQ->VTb80dhJ84N}s_>jB{(2(cAgI#{~WbB>}2lXNAba**B!P#(}xS(*vTCFma` z7V(||QmtJ9LD+5N!xf@A%~s1W%XS>K1gD8I)o1fK0mI_r`wW>d%_0mEt@>3f3f8a5 zoi&IzaNCwL9MhpqS?jtbss{4DrAFeV&>v^OW*D1zi+Gko5GpGDsI$KpI-d28#e@c# zb#B_JZhx;U6$8s)Aqew9p|u#4Z+L0DMY58fm_*G~9WCD#>n>UAX7pvDuJ~wos<9`b1RoYgbnydQM#&^Q9dNd6v#ZAKH^(ia zvKzJH-G>GfuS%EQCy0vNEmIb)9J-YlXVji-b0#+G>e_4O!`s^<&8{IFaILeI0@~-k zET`jBDhS+}f6%$$;7p=8rlP58xK0zvA6MMIIKM?tIslwYr4b3U0fY zavH;V!==fKRh@r&x!#r?jYU^VL)gy?n}2-juQk;-igzYq++JZW-8mVw6VskbJ*P$* ziq45f?l`=k!8#?d_Oh!+dsc;d85@C(OA5Q}+^~_h( z@H9@F*Zqi%Dj>XQZYuxWEds0CysV#0*#3(#woIQ;R=z9$8&eTYmxjK(uMc(pCLeDon72Lug`6QVLF%s29&Z7-v_ryLCR>b}0V`2_pLz+>SFG>ht>S-< z>WuebaR-SlSbsMz>u9dgXc3!d+R(21?H6dhWKHviHdl^79&jTp{aw@WS(!dE71-JlM0Q2=f`O3*=`uh8}7% zE%Mz~szCcXGbZcZE7IC$`dd>vYer4YCGTKgZB59y#RTa$Nq=V>D~Zi95{#rexfh^j z7aeE8*)F`#kL3vtvMF#x$V{$#rAy@OP#7muNomQBYOH(wh^t5sra(`jwu!+bXJ*2_ zA-aqB@Vcmio^+;YV4N5Te6qFilHrswz?rtklH3GKn7_a%TvkdDnK8EzxuPlzccq+{ z`YZ-T)N=0G5Qxmi5vU{%gN(!faJ`|kLk1v9B0jw!z2Xk4YlmCf71h7c*tS!Yd<(kE zI47IV_-86HL^pt*bHk@=8R};&!}%}?7!})HGz47(V^S6U8cV!JREA+of6S@dM#_YY zKbDfRkyIi#pcB^DSkti?$mAzCR}&q`JljC{V*^%;i?CC&zayEvA}vktH~r*!>zMkL z%fv$|uLyd+t}b8N4;SJyrls=u0@Y1oi5zeIMIM$6C5V)HvS}VvaAP|TNROA_1c%)M zy>OqkJxn!AcN13}X|aLQR;HhS6*%r4KI8yjgJ>~?hB*&;uyC6CRNDNX)h7kpz$ER{mu$fnJg2({p|I+kYTqlMAyy;KfPK z0~|DcRok&xuh0FV%t=S}coS03*NTYIW(=$cgze8R?HPPVkuU(?RuZ{lpN zj(Bu*u--Jp`5w6X*_3>fwE6N8Mrv(dEIRewv&f{*9eHs}No}QgX^1W%L8jxn0IhIQ zplIP19j;QFfeA^owifs!uFoKSLogg%<@~FvUhN>P#!tPhV zK|D)s>Y_|ACn$!d{WMom&(?Gr@_b{}jFmD4;&L}#PDT`@Dz3u6zKaSwB!{kAiCcKrXQo69n83+qQCw&dYdOz()J+$> zqmC}HJjJ_P=l;603uo-0U!W{dY5Jq%rP;%*Qw$el@(BZ=g8GMalC^EbRMQTn@0M>pD$wer{I9mDWjq^HNHBs zmnMmUoC(zu#d~!-h5(wSvcPx)e(D3sY(oC(7my%lU_RBvPK}K5!IBQ_5WI1ueuQlo~BcsC6qI)%>&!a_UI zVywc24+8bnCj0U@6?N8zI*8@~Y;Jsigo8cf}0oX0h?{o}t1=$MxMz&8v`a-wiG(9)bSr zr#$^`J`OiF2$|B+9(haF?Tmr6^B)D-N+hsf?PRf3WnkI~a3?eCKKO@pJ0nW25y(U( zW4bgO_Q^UJoRim27xXaWO+GyPh*1AU&Ww+E?*8q|5n^IJGXi{*TO%_9OB5Z)eUQe=r;Y9^8W$TyvbWEU@QEyz!mH#$)#G2d$uT z;ztoBe1jMC`1&ILvE%Du{p)(eAHH%?e9^RXdp~sU+5f}U6o@2sg6{ENQu|iYFrt`T z-eEq7_qm@zyWYVh;fb~~Nd1#-cCOD|fzLCDPfb>ZLnDO^kz4q$if(^$h9jfAsqBEb zWUj2r@~!>!pe>CpbvNZ%L6@Jp30w)p=qKc(9EhSJxJW*XRiK`(ifBS7L!|q%e}UZH zm6slFwbInt%tk|lH-N!4Cj6n8mqioh_IFjPd4cZl-+D!$lcB=%Vic6|o$B|xfPaA+ zxN>5g5f}fEIMrsnSMP2hr|g%6CjOZH=N5S`4misPpCB9yMM)Np&8Uutgh#JhL0#6uu$7!rm#7S~sU=7+r(SUVZ}m+Mw5`iI-{>DHKA_ z8D~RIcq2^ocN!ad@830~J}SitB&7T6Qy^!u1d(NwhUbpVb9S(Ca35!~l(CWLCaNTk zG|YWxBHl5#&k3=S$^U*Jak)OsPxbX9`jeDo2{HD&g}uFQlJ$V!7?D_U;%`qUYZsk` z$rK8Xe$?PH8f|#=(;c)*NMSDP<;C@^`|D#yv!pk~@tgg0M@OsiTZpoYXlQiX(N01? zHw-x|G#hA%O?TDFC4Uzg(-Tgt_EGd4q}wtZ#v`en!VuBSF7ObYdtSPKHGR;ic05__ z(oDvjG0aljy&M30W28$sJb(uVX<%b8|{ z=gWn%y%>lj#k`@*DO(i3E7D>r=`ym1_#$mR15v{Rh6}rbd>8CbXz5XoAXHh%8bi>l zYg}s=(e#NHseIdt`$XbOc`0?AV56c#U4XyK=pAnj8BCc}U1KR`-po=N_40m_n{mPN zSU6Y_zN-%s&NAI>!~5h{%auF(PO`2p_TW0+Id@+uy6{8NEYaNCml~Rh96jtJX0t{i zZFE3MpD=Cs=~0qAWOLzg%jeMz5@ajiVWavQ8U%$~#5d-pR*cg3T0>v0{vGnmX--PjA~yaPz;-t)DX= zSn2WJlb?hK)O-ZaFFdoAG&?Iv1YvlZW`&jn)CZ2I4vksHqxUI-1n z|J{JQQG0+EBT(jbF33Bj*!-I}z$?R6o0}}OqtUQ7Nq}OucYJGBeG~3Nmyo_v^GF}F z1lm={UyHuB?TLKd;T(BF7#{CE_n9gfKk9EyJjyJ*wole_vLX&JNY*C@MYT#;J2SpD zFxMmzi4h-wr7{M)fZg@NR{)A?W+sg3mmtctCaSyWHQ>4OU16y)(uluTpRT84jFby;^7~Q`}&F5i`Du(+bs6(Gm#Fz zA^+81OoySyOnd_?$dUcNKvOC%mOIxi3LvSMc?D5JKBD7Lqc>9FSgk0TOIi_j2cL+*Tq z+^;qWf2W9{`<`|yW4_n7pE}YjK0NcnV@_$Z?`-=^JPn@HMsZ7iQ~I+_bH#2UZx(A) zs&~Am3(A%*T8w>KJI99pKY!8xV zJ*L^-vJJk9*;aZyECxdB^w4RGzN!Z+EjL`NJ(Z9b;s`Q_k@RB*BB={HsHu4iko zdMM@yjsZ&N?C`~T7{7dF?2nM6QgYG@rl(^1 zcUs1x2|AnRV0T{}ft)dHyiG;zEyU@zig!W@%hvQyS(OVgvolKlia4P4n@+sJVEIWu z|M5hiAlD67#$LhP_3?D&y+hHc4a@!s+MR5c2EFE2H~d~cw7GldPFRJ`(9%G31mcu& zU)PC{)X3zBh_7B1wZ7pCbfFXFP}lmml-(s(k!5_H2g)7`$1uU0Bh>exu9j37?>*{0 zl(EgTWZSmbo#*7(flKb?;sH4%|BHT@#vl<8;MvVfP=Cqo$g+8uKF#m|oDf!wBKuEG z9~S%Re=2Z0P#KkE+7Km8&%hKcw7XX?m++tqPv+h3W zSylDSY2+B+lCvyEnOAjP^GjIB&kr$k1kx*A9*K?_*QOiI$S6K_)46=Ik*JNo3um8! zHIT7oF{ONi8*n*C)uW5Xk@>`-1QAu1ucnC(F&{ZCc12Xm2pk-zp5&b2CNc1{ zc0ByC)tp<;{ITg0d=?{-(wILqUOs>6ShAdzD7b_t(eWan*Z@G*VjB6~g<*572!cB= z!(yN8n@2flloej!3UNQMl>oI-3qkMR@ci9$Tgcc5 zLERIa>23oFyT z|61<;>gB5)v3!gZu4pj*Rp#^(THH>p_)l)`5&{Xw zKD%3z+fvzwS`+s3-xuj9(e(1o`Er>M+$w2vh-*=6%z=Fx%=SaJkcpRi(Ih(;XOf@@NzYSGb~J& z$lQOvZOjypdudIk(5jMNLSKVV;}x;v$r|5v0TIeCS~LLXwglvA2XBt8+`yODV^C1C zsb+A0H(w1WTu09S`CiSXVQ^$2sa>>nRqSuPgm9@lw-0+II25QBTDi)bXPTWxgL(83 z^-?L8i?5tUU<{yfz~N?NVB#km%53+-9DZgQ(l26^9xy{(v_;jHs0NnTsD2Eo%O8u6 zq+(0QXd^L&B!KZeM}BhHBN$S&*Ns{5)m>zJ#u9t@M}EquKIoday#*>g-hcamkH zlINW1r9-0h(=DUS=UBdb$<9~hObLAbfs06U&gCOGQ3KaeFn^tH?Oztp8%6Wb7BGve z6^!(>7^e$yD*8*WJu5WkVZm`5|AlVxdg#r4`_E*Qb*E`ag@SUNi&#koNEXcc z?v%ktN60ncq1x0q{-RW!vTMC@ivIydd+07@J)pTD_7LgBGU3B|{$flU%ev@Sbz48F zK(vu7IHnSq4ucHV+vQIG9%&JscyNG0{XU+KlO+fz z&J$KEC10y2kUA|x4?}q=_3Omv%Qq#jR&8!|Lc_BSLPmraBjN{huc=49ijY>&={2et zoo@fm4@U9|=g9Gdd2kfVHjXLR&sXoo&|57FgG5B=lzHTkkdTn=f!^z$eSo-FYv9s5 zB!ZZRCE1Ko1WTYl=lFlTEtjs#WJ$By`L3SGudFe?_2#ezoszb8x5+!?I3 zcW1&xT+3?a7ZnN@;z$HTiD;Tqx3Wp&MH8kL^-rq&ck{kzsVnNxrq{9BzE54)k#nfh6mD=&w#ZsQ-|It}rSrQY!=0XGF#^F+<5rF{ZErwO?SY_!7h zqPrysUaX~2E}tqc(+l1V!jZ&!EP8w%dueR-=k+})@w++Cbr8DFUDLrCZ%>oA9xCHe z=eO$$KaUGL$nNB574DSG==AnNW7EzFhy+Mtk>ykTJX-%iE*M(+Nsrn3eDI zZmOm*c1peZR|Cq37uK8s|LhV*e5e>lg z4#Z=A9&IEgia%GAp4Kp(HnkHn?Yj})V0>PmI`4Ji(wA~1NhHOWo;Ty-6Dw7^QzdhA z;)PZC`TzvPU8-+;SI+OYM-aZv8_SXshAALZ7v?Mz9C{PE8wi-;K3{9etalOdDdkaVT?U$QnRK z-ogMIUl&y9@4Lq6y6X9`Yq>`4(~K}mNzRy}g4&+QZ^!9czYi7&gLC4+RY}LRPXIrs zKYIIPSGs+IUZ+BI^K3QC3obL>7rs~SbrbU=-gAW@rIno?G}IyiXEXiP3&b`DO!RTz z%~d~7MrC1Ath%3 zXrS(9wNP2abxKkHcSRxK%=~}HWS+0BRIF@Wj#c;6D8Z%+lTL1GOC-KWugOxMFr69c!$!zFzA>d1Ih*OsDYs#jLIfFWrVSi9Iu;5Ryn)FiA$H+}PxW|t= z*E{d>BnbtdZj?4hwA_|i_4Ui=JO7)$P@xDcA^QY+EGWg7GWz8`g&i)0v#NWrWiZgp zlDutCh;dt#%BOaTSu@G)D&nQiMUenNyy3Nd$xEAs1j`&il31kFo@3xxq9Ch!QUKQ6`W3;z0BK(Z*XFa`+cepB9z#Q#j3M<^B^fuB+L|C~}+4!jWYtv#H_0>;6}I9%E-+ ze7gr;sYsUdq=HQe0Fe0iaqJ#9fwr}Uq7%u2l0It(;=jk-K%b60H&^Emx91AN@Ua1Ud}ud&U8F`X8qt;)Z)kPh5&_yhBZ)MLa<>H zI!UQl;tO#1=^NEN*}y{4+Sl};CIyiZsk1jqAF28YvD$f>Bhp>+Jvg|VAwdkNID>h= znNXM8Y%nsV{5qbOtk zw&NzBr>~&H{(xUu{Xx}^mlluXCT~nIf8J^_{NsCG+O`E7hMm5Tw>%p;dhs2F#>BZg zgiaQioT-(@;H{}NZ~DtT$4sqk%0C_`OVgUO>^z?iPQ)E-vl7C$^KK+gulJaeykakO z|4c%vb$53@{vuD9M>RVZYq6-X^#FL)}fTFDO=LkV$2lF8BL_kmxVNJYXzwSR+JsPX##$C@? zCOoI>gMt4KX~YhCh6Oy|6a>K`m7zDfj*#YAI^g;#ywh;6h`4iQ(R`AI-<+8@QBc}m z07UEI42DY-7bCN)XBav<5n6<_J9m;|%G{e_l*pU7RF_3So$_J)nV!(~YMBQch<6^2 zQ8Tf@V0F2IynBi|v3r%P+-UU3bzA%c`EZB*Zro+DS9wJe#l_?h;G(>-1P0tPb^H&$ zgHxWoHM}E=+03x-x+0llnsUeSWaZgh$TTB-S%2B1Qd2zd1GVv`x-UCH;NB)^M_6eF z!*;wLt5m!4+B++{TH>GB!bi1dKAEaXJ z+YcilgRo#N>KM2?hy>XIWPl8)tBer}`X3E`xUk0FY5vrGHFJqsW)$beem5hyWnm&S z$ZH&1A#=EtT4qYWQ*Wh3-I-VX6ld-CM{2g9Lu?Gr4CCxL)Ks0x_+B)~OH<#m(DIO_ z`+>H2%}%Y~`A|NNIL(HQOUbK+_0@r3QP~%(E-FbGg!;XAXp&;Bt&1a#e&rZ?tyMNv zZ4{X_G^|~yo&w;JeA|Wg3wa66BJ3c9Ku*UhB)ycH7oq@mbU z*HgmYXr$6t%!k<%=;2<-*G$~oL`4MV+kZ$`6duu#-Y>VHio}cbb5k9d7|WwCdob6%NV_lovm!Hwh~D}hboP+X8gZ4a;p;4iLoURQ)-v3q>&N#!_w+&Q zGgF^|d_G_FSg#@5*;U<5AEoYsZxuzTktc=wi$<&%eCz1Ecbx#A^WUKM1&hK(8GRcd&GEhv3& z5%Ahq&MJfUCHN4p_wMI)-jh*E*B1R^sAI9p*B2-Ga|<|s`dUADs46{5#>dKj`1RQduK@!0TJ0hk@tSST z+R(<^v+YYgFcC$d*LtmXYO=y@gTm-L?L7faj+5UZ&krLm%d!ax!V#DMAC;!kCNgs{ z(&`hhLD|b1Lv@!wdcmF-4n3bOqa8AJ@J3zr9*WhYYT%uJlFM{1C&7Plo@Y(tDkyj# z%&D)c-}_TO6tZTE;GHdvYaE&qcHSff!RrwamB9`Eq*z-344PwbFb33Cm4Ily6Tx$L zI!^JS#4nn8$^iRbXBud=)H7rl4!y~`>66;kYXhBAAgHRm4Zy}1TR#UnI~|fAytObW z&lX3rQV8N!KX=>8fu3)WL2$l!O%p98@u|fP+^XRqJqi1sK52xjP8*#^Fkers4)T2H zeBi@eV$In#TGUcSCCuQ3jbQFPv;bGVbS;x_-ryfTK$Prq~C?>)7(}+&0E|&o`|G6{t2oBNTCHwJ1v)x-$3^5GURd_cZkOU3$ z_ih70c)8dbHSO`!U~T?PFaK|jGujpz@q`Q9B9+sQSH&OAQE=t}dZM-YvZBXV`TU+t z+>{2?m?+pv@C3gn)33v|jit}`JA1NKl5EhJ{{77h4frl8mVeHAY!OXTA;`-h}=`y5f|_@&fSFLW3;5V#pPpI+prF zWZG#NIG{g07`+{3rOt`AyMB6h>~RXQU-DPkaTqjI5Vnj#hsn9{qffVaEXlUv z7-Wf_Ra_D@PIY{}rn*EFe{?t4g9%ZS!Ksf zg-#Q5WV|lteyqgk(pm)&@2^ae)!T&ERd_i|z+^|ZSbSKW=m4Wq(4zB>_v?LAIF!CD zOY;xO^i=RkSe;*zWb=igk*={gSzJxN#TH#vwZ11(xK9e!|TiX zRA1?VC;8NqP5eh??TBRgfI4#TnO` zK-%F-XVvu{aRj4kDsixWIXfw(7T28{FZbRI>Z~m9y8L7O0Op!)#&{a zr`k^+XVc8jb7QQ+d0T939PQkTETtx;CN}&{NIehjPx^e#N9GH#rS*F1UnEMQ%&ziW zT4)_q3DIg_M;Q_OqFdx8;(T9oGezxLdk}Gs_+FhT>3m562(GK&z$%Wc`nJ;J(`WAV zP?l!R=>36!Z-$a?UifOht!}$)Z~b7e&BAvM8+zf~oT_+KEh%$`y-NMs-#^8^?oQU1 z<}pip+?3gbrsejuvA$RlZ9zeJbY~61LNN*F8V3-rD?X|*&=~eGIx2bab84e7xxj7< z@|HpICI1!N*j`=S>=a9|-&j$O%UiR@Q8#9Taj({%r(XXJdA#28%cn@*sj*wn;lOq~a-E5Q1o4$Ex-EFk;2(P9&? zLFW6Krr%8g1kY!}g)F^fuMGNQhSf;cLly7m(;umQ!yv-+<0XVf?8c(Caeb9=vV{dH zu!WQ94}Yl^DB`)<+}^2Wtr^Xh-p@LTF+$WDR@TK^xj9$(6;9Ss2TOJf;}tN~1zDI% z8*3kryGl8mzZTxg zFP!=P<|!xA9qIq-4%)lG_vT-I2BOKU=EhXna?{HaiqR=xzR`-Wwm{8?hQ~QZ8A_jP zT0B++--QxOsg}Z*UVBl@5iu|yNFV09ln!61NH~#4#c_W48Yw{A^4Oc|kWdpFIT(H= zwBz$FoTtHjugjJ6=}=d-ru6g7LCH)aFt{O)>-~X~ZN={U=b!N%WqLhc zG*#(_eGS2CAt-lxPk5JQ^U@<88)5ME=K8o5*Gqhfg|1-qic0HV7n2}RC;E>%_}?EfjDJWn4OEfs1M1g?cz2JDKu8;)nymat{X6_U z(tkhYY4+QV5eCz`f--8JqFbg34lDc)2Q2%{XLwb5W4kLoE zB$^}u;3%Nzv3tqc0G}f);e&ijw8Urb+1mV?MArO{_fL7DPSM~f%cZYT2u0`Vn^H2q z&t{IJUZ|17kN;+F6_(&uO(X7V$7&fV z3vdwt$~l3Eg~e{N^|B4^vI76IEg4cRcM%lbcTNM~b%JP<~w>@4?_+g9%K4m^zoA!>8s9;AELp~}`B7HKt;kAn(j6i0ZBbStGx^GqB3EYbd#>V_C5B4tuVI}zb??0I)0 zoJQN4>rmbqa(j}1=8966c-nj!%=GVKFjbn41JPd3*IiXZnJL&1I^{IEZykeH;}wF- z82tz#kNmR>95Du+!dOEtzGE;jXOS%mscmkxj8(%mrk4JUl5kmXDBazrfS!Zz$*uYQWH z?4#AXUDm2Y0+d_JbP~R?<2e%YSc#4IxHnr_$n-VLNqPWN2BmS2dBHk~ftxNn?BgFZ zfwA@3nx2V8Y`vbJk43|vo*C;xHh7#2U9li5l6_k2sgt!v)f?Fk*aYHTcg(*mn zx#uEN*%>MkA~JOUhpD%YimH9XMnM!5k?tB0kOoQVA*6+&V<>3>>5veH?oR3M?(P=Zh<+^>{`eEBU z8~rKk=};#%gkCV;VXwi%6V0+RWvuia?kRoo7~2zi7`OkVeH5ET-juT3I%=%%w>)Hs zsMa)xMme>G>t_~e7TGT4Lj}IlYEE{>b_ZcbgbG$$2^ddQ3 zmijPlH`d$N2iPLVDK34+zu7nXIV{#E0%fYD0X%HBKqd$1Ag%7zWGqd1zP;rrLGD4X z_3+sU5k-Ra{bqkAv@D@~1#yRMrobNG0MB(!1n!;IC{h+ioD{7q-rM~TejB9%i}bM5;I zv@NxCZ&B@W{EKvEW$t$>Jjm9DgU>$;xeLW+f{E*bfUN`X$;t#(EHXvOU1RWxW^vl7 zIy}li_#+sqyixuwJd7Lm_}v>Oz=Fy-*mTAP5rMiad!otBz%Y)+x~qtMfO$GiH1c9h@*r@0sGE(Sko+ zP(4|0t1ecEIIM|jeY_Awiu=nfzM=+7-K8l)^SS2kSy^bcb;j8-7L?X7_JMv}Gk%4m z26MfBV$Re)_ZIo?G$^KF_^W!DpNEx7mV$-o0?*t2ilEZMX_?UYeva9iU2e7^ZPuE= z#I3NO7i-I-0em??^T1Uy2obQKQl7rRxeLZW8OV)*GiN84x*`SBpA|ei4Z5;`(`{| zNl}_3yD%h-W@{;9Hu@R&BNB?YFta$hoh(7v%U=|tr6EowBDdTF)cnal*@31y;gM>nqlZd_2zuu`%4WS7bD_)j-0U z1|oeU9ls{2D!8%3wS49b7UVrNmGu-MU#wu0ECOJ1J6>;CGT7%He7{KF&y`rjrjKOK zHnCTA=lztNqplAz49RYER-Q2Vbf>9Zxa`0`X3FlSM_Az;Zym`Xetl;g27CenP;GJ5LX%Yu_d@ zqYPk#6^Q@I_D*-DnV+q^DFBXJa05VkKhvZ*7ddBZquV){vu__<%%PH`T8UUjBsfj) zL2(2fYTwId4L;O?0=`yclP|Wfq@0}_PGBCoBY+Pu8y`hugw9wYuj$uq?Oe%yjx)UgB<1J(3<}NFvUjj>y#Nr7{Hl zyU9B2!0Cn>0^e*Ep@$w(Jp~$PftrPjy8z4);gZnvL~Xr_VGN|f$HDfcT1zhX%90ld zOuy!YGNJ#!PWJ!(WCqGk&=0UWLfxnoC?`OTU^Rrg8DMq~968ET(&g07Xs^7pUR7q| z8dA1b>eRklTjb)b{7G1u)d(=lJ6zA5>v%h;I$a!+u$*c7)Sgc~t=!qhlGSJMxNYf? z9k8HdaLGEHJ-Z)hCy{H=$R%iNTg36U0m}fY+?kfgj9^T(w6Pv(eQ~HPPFOQOXOYBP z&pTpMvO{6detD~nqjuNd-16EL`uLZ0jYBJ>dn7NPHy&o)=oGp1qt0aZ`WAzp-PjR< zR{X6rGNrX68J|KHD73Y;N|`aRrIn81^(~U`LDK=XXb~=Rv*gH2pDk{gMUQ zjc=SuFFezn40Y#v4KNNxFwc35ZA%8K`{`O|I^-Szj;SUgZq zn{Fw>n`NM?Qr6ZKXwNk#vdet@#K%XLG3m+NGO8x-2or6tZ20|MT*+B} z!EuwS90=4P^mktBa|Z%DiG@U|<_@uu>!4(>+@cCw1b#gK(A*vxqJ8>_iTBQsE$L$- z2uF`4Y;u+s?Xq9o&i#E#;+{3nfM&Uwo2VD3onPfy}M8P~v?JCiH zNj9wI^i;oYILPaMI$iA99K6MH$E$)e3TOk!=n-LRnedfm4W z{5vB_V|*|L`4;Vo`2d6}@e=WNa>v!!%!6;34w-(3;D>Tu1CG5dHZYShYHrWZH_o5d zXug!I^GwZDR_$hxjR`v=#?v2$StHS71Bd@l^u3Dpu*{Xh=L=?M=CosS!8M&&n0sgX zXPYeW#iUhUv#*GkUJVKHS7%+ z(ibHvblvHtqcZEexse++QVNa@9gK}}VZn=d%hv{f>W)thll>%_szk13lbh!M&0V&Z zHo9RRyfvOJZUaCyoFdxzShphiz4jl!vqK|7Qgm;NMiWRZzr<Pb)OdfQW8|czRhg5 z(pHH<_=S-)8wCaND`hZ3>x!TVbq&L$@wYSYI&6+cBfTDvVOS8%(%(@}sojDx!LQea zBn;spae$~;$;TKegd#7mH|AV^VM2qC$c0N0vST>K~y2m;|iVK&eXqfOpt$!>NQ?ja}sBO6Vsd$Ld%K30Iate-5 zI7Kbi;ck>U8QG~>W87Ua3SSDc_55NN{vrK%vQ$q3*^573^T_(x&>GL73quHa4wN?< zkQ-rrV_XB^odi`)+U>MV_iC4}JL}HBw4D!3X_+mklv`I1s`BnCc=IY6nm9t{q2I%q zga@iMU@nfwAD0r)A_z55cHsd=izftYsGt%}%xuKk#hT&Km${O!4 zX!x~^jSrQO)lmrf>FHPVC3HS?O=`=pr+I$lxK|IpF)<}N3LOurvbF2A`^ zzC)j>_wo)M@V|@cQP6nOyM6Y^wp@n6O{>~za{R6e!7b^h5TJyd`)e>dC*YFM=f>hb7F*zOnBn6F zhDP57j(O=0mF{ED@ehc;NTsGLEld>`NLSORou0eP2Z%go75$smLZ2@|pG;gae%8XT zDyU^CLWI3fRSzNCgA^%MKxhIZ#kMevx}TnvjmX>?Eu4FfM8cuV{$i;bk>G_ztYyqh za6p+eGk#TpC(+EYSoQMxQm5fI8|zP>`JEW>bOgLrQ~&Mtq0v-$F93_hM|hda z3#{9B-{^)#u5B3aM##Om?g15;4R-xPT)E)< zcEvTzz=g}A4*fL2+P6i;ES9WTG4ihi`4UZ6M?U&CDeBv^@5QS(Ht*F_D=D5!>-_W# zt+Cf)v0uQ@*W*oEC}LtgDDumjy?1rs^v}@>7FtKl-W6R@_gW6ZOwu276KKf5~*wd5!7W%UAxEIStURR|&l~r% zq5^IIkaT7v3fkRXcP(x;R#gCVuj@+MIXWV*kF!}wHjU|M>&B`Go|yp6^zc%_&pZ)d zm%m*u4dKj+B4cFjrR-!d6Vmdupd6MkJ8X_Pw|Pfx@c7-RXwnpxyITqs;?+e)&MzGj ze(T?2;rrT!DT%Aijn16(?KLsU)8TI|5Tgm6Tr&xuW2nuS@%hpf!g^*N4+}AU zmo($q<`6vI^_WZJm+qvq$pyM4zek0&G<4@Eb;HX^8^Gv2nr1P6pH~UtGPoACp!l85 z8{xt0rz3IK?&!xkcAmMIkFgBDWeS-V_N}rN^vOz{(!bjNa^RY{CE(t?DI_eK~N%L?G zC->1~{;7Kw`wRqfUDv_RDqkm_Y&;A}*PN?ox*ci(&p*FP$O4Ic@ik#m<)RhT2^yFd zr>paYGcwEZ4lmlXWNvW{@$&>s2XtFNy0I6ZEyiKNZ-icp-V!pk?Y+^S_dg_w2?W|~ zhqnre#EaK7RFT(X3>USg#c^eKDI=oOOG@y~X5R&3Mi{%x8$R+E5NJ2>*fwr}?@xaK z-Dwnp0INTd>rUhwcGUGbY~QHOcM2_#?y^RCIZqLy0qVUjFIEljpkajD&)?ABb+6z3 zp*%c*wC4ghky#`B$&kur?;L_JfMdC5cTKJte3 z90bp%2*G)MW6)o=@{_ElA1TUIAB$+nM6Ykk@y^lzTqwlotlCgTqx(EtdZyWk{FuMe z87G3y%i6pDpld?caqV9Jnlh5P`BRoz>U%{@Qp4o^btON%4PsS%a7%bVFvOW{kSz6z zKInrs9IBf;{5|Nq!xk&@l}PbZM><7udB0nG!hLQ%isH@EK!!{-POEP=fdImC^Yc& zk+Ob!F?CR+vP_Kg&HG2k^uh*FezfY_avYi^BdxUDLZ;qw#|WV*{pFP}VxO?ut2q9A zge6!IJGADISJczEQUZftkO2ADY7l3X6tIL|yd93^t0I*`=Q_05b&*;l`}zR1!jY)q zD}y{WFPlPopELQiIi7o;nWc-#@Y$_R8`85gIAa;NK?jF`sUg)M0=IMre7Oz264-GD zLce8HJh<1>um_o7O#33(22cxqrk2=;6K2#P%Dw0gIoK^}wJZ==eJv`IzdXPU)=%)^w^X`cYk(YwunzuZ5a zFSkK=8>JD;G3>^JpDMuc{{MdsV2@WLPZh_=! zOxg@KwMAJ7%GXJG-?vq-GN06}kb29Bbwk!!@2U6Iv2Y2bm2|K9TZKUjIQ{H9V=7DP zdehk^{vl1jM2I(++E_!3X7H7@QvS!vQGsV&(k#Ey%X7xehqzlTgp{W7T`4z$UUnd&ENfTtasmL+a72Q=QhwR>Qe~>0u>1{Se4n%$`sTZGk zVD2&(L7BvQ=9hjd*)4QvS`^g4^1G(<>w>a;yW2STdXVlPK z_~D|H%R~Qhm17IZ$|s;sK&xQrC}k*DCTy!{WVM(^h-DJbMtvvV$=wn8w$Fi>_|YfH+^#v3C}b82yQ{Mn2C7i@&i zHU{$eMd0}r&1yh!w*_cnQ;6e_N!;@;!Z(;zUpceIuLBJ18?n3=bWQe6d*n<-UCR4t zmQF6lWcjvtuZ!PAB1is1DlS@?f8JDrIeBgY9$K->!mpvU!A}<^4-5tJ^uHd1yRHiH zIU5MXx2pCod8o8DNERs`ZT7+F5jXQD3_4&Y^Rv>Mi9m(v1d{!dwkaL)QO+3#S(^`! z!Ywx6O`}9}XQB+nC8(1(G~QyoZAyC~rNGzwE*RIKGFildRl?~uIx?eGnmbls!Z4xM zp0$h5s?1LK^Vh4ZWw)|fqrO^PS^mA|yaj<8**&X}Rg2dcdtipH2js=vW#khWshNeP z4M+d*R^i0-mq=AZ<3|1gk12EfDMz_=d`t*EzH+FjY%~7P&UEQe#$n$zupE*#N#RIc zOfB)Cr704D*-Xf?Fo$|cf8na(u_C(?YjJUGj(YI~>C8v^@R_D49w_ZFG5MqV{#WMP zKf*yD%0IH{bRtn&X)JO!u`HowAHvYbypK0|mQLZb`DG?sE|wJ^{(jdU!uJmGJ9MAj ziF?({W%4-t68Cjg>2SHA_8Y2{KMF5e1)h2LFa*(ey?8!7DJ#WHtoA=!sr>$Kj9TTz zuCRMYiG1Jzx-O&Kp=5kP_-csS9VIl)V$R{y$ua#;z)O_V(u3i$pmD=Kd)k@TMowXFU3&Awe1&91#z)k~`|J2Ih_o6LzYEIme{ zAp!@_Ap%FQtt&41RY_N8KCeI7vEt&$6Yd%gYYD+$uLx|K>#UfGrWa2bd0R;(oa zN#WJ3KGFxB^%z(r#-`rEhjFXlA@L1W_z0mjmTyZVR)X&4csA0t4X3O{Y+~3iD#jsm z-AWZ=1j9`A8lyAQe)}5#ko+lWBBquagsp?_;9=`Sns?=$XT-1wr;mD)cFj^GSH-1h z&_WG%Q_MkLAsS)?v+WZqXiJU9nv)gp?=1`KiuS1KXTC$Oqhq~v`%FBukNXWanBXb6 zS70zaJ}=H#Z8Lp}&QEhXG-B2Tz>WJQHWefkM2O&HZEwgsP2-FUUn%kd2G4dJhu^bs zX9x>R+fwwVY&LQXA2j~NF4smj&akK8n{~F*`o!H73xiinSBc>HQGE`%a@rNs7Uo8M zH5dFs8C+Vt$B+IGDq;?^?*2by6b+-n6kS4y^ut_(z&qLb+#oMjo30P8{60z^B6k=4#Fxsy} z$(0KDvlVb(dx&MMv&!1~DD~?%Ws<#U6vrX(q zvUy1!ND(aDUBPdhUM4hUM(Pu3f#RGx zTNyE`hH7+gHCj_?@P;Z0!IzlE8Y5oieXC^OYpqwmkYH^B8p{`MkygJ9Yot^JaKTVb ztFJYtkH2UyZoB=~Y%8Z~^}l+ZF-h;k@}Z4Qu9)~Ikdu^J)_8$fqQ+=xK9F;eLFL`V z^RbUb^JhJ2*ABhq4&AMQ=D~OSv?%|O#7l0mM{GF)oqCbe$g!o1t|_nat7Tsn@MGsz zDtTx^)>(P6a9jhIKEp{Cr$kS98%Q~G?;ziA3Bp{KCu#5$8i+nwkc7OZ&y03@D(z@! z4rfrV7Y|2{@j!;P2@;jt{PAnQ3v#*?x-9sm!Ru2xKtS~JY+i6ol>XbutR@- z%R1j}Ip`(Gh@W8MPGWPkA)lq~^O%q@;kERr-*c5f)J@PPbAHkWTHr2iT}u%7>S~7Q zi81q?OQtgD=EBlc1$ScVqrG6NPOHb!w-al#NLLf3VOr~EEq6bCi}UVLcbmwq`VoNW zgj&b`Q>61<8^34CzUJ+BYK4K>ou?tKy$S)p@$Z_cuC4tKgQ4Ze8*t+~9GxM3-o|&s zG~|2tYU1x&`-)|uqkA~(O(d+<)k*^E>)48dlyw9Cdnnfh!M`ZMa{Jc5@`C!%g;XMa z20WX~nG>1%{L~G7wXx5zVCB*uqtgV*uePV5)WT97Bqq!AB09!V#s+E!^e!=Go?ju` z%sV7BuDz%y5##GthvhHhvgYyNOVa;2H0+jGzj*$?Rr-It`O3bq+=4rSBPA{W2o&l? zMXpQax${a8rErUs;P<#l@GRgATRMwisyGdT7F|h#@6IYSh@XzHc_!tcS_66NC(aJ8 z9TpeEhM*>GOc;x%p!282iu@)f{GkP!sjNtqAgawWw-EY={_#f%Kb;d}D}tLTUyZWo z_@+_mQA)p}CnhjmJ45Z;FfzaHb@+L-OvwP@R;W6sl)H&K{jvgOcGe-KW}wr4qvwb- zRQnoZFJ+ti*@C9p7ZoEF8zUpZv>vIKx<f+GDsq^{^ zRVdsK3z6o=DXF*mNh_Z{J1+>18#N!Jpy#Zvf#)9zJZ)s3Us=2|`f#EqH7KEZmHO7& zK)bfO<)ySe+kg|F^Lm=!oyND#x;8L-(k3haGn?ka?0~db`4iO)t8(F#d6aUn<4yxj zJnV1bRR!shLQ_@KN4;L2vaBtW(z?t-<2$pCsJeDCI|XCcOo%UHrLiy8mtRv!tSlB@ z_yGnO^7lvlI>Xvgr7H!s_j8R!!^o8PFciGEYy4DP#d%+l=_qF8F+IihiNEVA zXAXNte9hVM#9|nuhIa-SNHEpgSd)VUWU*1aaX4R>20z#lKPvP@ePfD^(qNT~(SGkp zy}X)UVubHfd|8muIA?H&$$$cUmdvBdCscx*c*34q=I>~6T}37-v>T{fN1FPqtcaUz z=O{?6%3D1U0#*S#Bg}^X<-uc2^&k|sw9;WbrM=jQvL~+=dPSLcQ#y_sg*iv`N%iZ6 zFH$lvv2rPy`!u!unRQa*t?6UcV9&Fn*ZD2aTP2eW)5J8iSlp9s*oYLUB^>a*0|!55 zFx8Z=7CQ93vH4&a>z)P+_>7I0`2Cp?VJs0CTtk_RA@+pWoq+m;*l3wsX&lsm`sfZEoQ4 z(65uu?;YtPCU0>5Gh{C60DO@%Lpo27fHPFs)&}y_Huet*mic7y;Z@=^4{NKcVl#k} z>vld|>FnS3C|qjkZ6TUr*9XP_WsN2QSi|Wh@J^_&MHrh6{ULa#6}VFAR1V`5V7#3C zYdx`%q4vC$`B{H&E#FMT#(HhwpJL8pR=lb$$lF$#O{y+pZZO zW$&Q}x=c?XKUqiJ6pA{acsMNFcT{0%2)3Id6bbE|t^I^I;Ce;yK4s>!CQt0mD`H82 zFk(hFRKwf1cTNz4Jx=eV;a`k>dsQlnyEDJ)i+D-G@d;j4%2?LriroZK)*brQJS^m{ z{woh9J7>t^hrp7x3fx&1ZJimqq*lwf1AN^nn}%@|M^cL_GH=u1P47>BG_<5=NYUCp z?pAd$7>I%WX+9g-yOA7Rmn7c4_IHbj+pkaG3X8MfND%YR*%d+CQaY&caZIRgsfm&g z0gal|K9zJJ>emhg`kT;8QPz>WsWj6pu+iq-nEbbv=L`y;n)+1=%8NcIoU^N3Ug-(3 zh`H#-4UeCZUb+?}gjmlXcU6oJeld`%r9e!;uJClfTh)tF6f>|HnGD%rjSUyosw@L| z`V$jVvds&>$U2i0IjlmtXd)_)DO?3Qd?4<)6!~!$CKg&6x-#h`A9e&0U^G(F3g>m~ z*8_(s3oGq!50*ni%}USiqo9lJ?J5lKLqt$t@0l z0XrwOk@4Bmqp@@jrHW7E#DEMez~$g$M)EJ^^6@4T+FNYS%NYq|Rme96mYrC_S1bR!mPa8$6Hi+uufS5M>zaIc z#A1HU79u5d4?*i%3xU_^Xk~W>y2$4{R5ux+V(}G)^P42kI!J8?9I3Oj4L2k>&L}8b zLtlJ+3tQvS(CJUmdf`Ty&>BlyiT}I0B!M2Ko_mO7xV!sU@w4LAbK8TE^DG`% z-Ylr?8(Q;veX)zpjdq%RgA(^f4LfK2j+u?UnGbuwJgzL$XEyPcRKLh9fVOXP%WnJ( z{TlSQ6zl#f2ysV{GoTh)|Hs0x;v{(w?~Wke{84TV0YE}Wvuw2+m4BB=Y*KDeweG1f z%&#jA5x)UpN+uupbUsf&D$RXPlt2?w?Yz?Y=uv}ZR> zK?nr<-P{yxzQy1fr5twp8vx=#|Njdt;>?971$8oK5i>U&UppyuTX&%!6GvB@XOT#hsk0S zu@7r)MEodo2iiA^Mr|bPADJwdbY*P?bVZj;B%mxVp=fcFT(Zwlys^Ge%U&c?az%B7fgv0K|S1?=qx%&!X|=wl|L zX6Q$npqpXM-NQ&TZlkfoO@5KRQ|&B2NoRl}pTqbck{1XN7vE^7Vr&w((AY_szljop6!Vf~WpMM>Ni} zRl(E~fm=RtUf=_WmnM2u8==mXM%#$1^5riOmy~BgBk~m)er(;&Da-`j{`4OMj6W)b zxpm{F_V~NP&zmHymw!~PUJN?${jRztxRUOp&P1{@Mx;}AI5>|q&bE9rP-XHzMQRyM zq-*p^thdqiC`M2}%z!xJZ;lRB2&jDDyd?LP*00=I+HJO$ppww9j~u8RzoYB!x0-vY3nL)<#sX>M#+9ZA(^%8*TODFy zQmm3qL(0ow53ef|M$3MS4ZQAm((nSGOP1HUOjDlr?Er2~--HN_Yt!}I$>0+z81bRz#(_NQUS2Sz5C-kwg<$ zf=ZOw3!U$QbPzXlb8oe-5L0g`wWHrWROX&0N?E2t+I>Rf-NfEvZtN64KP0A8ZZ4^s z=tL5KM~1)qy8QJi!TFwa8)#FX46r)TR*|5k-_sYCmebl{oIv0+>e%xwFBA5duz%k) zC67iW@yab1HAJgd3*1K27?!3WCdav(EzvLQC9=N{LU>4fZygHoSTv_;ze=-^%uSHi0#loW7aYE&oVho8h-no>pTACHk!5Lf0RJ>QsLpRfAudn;r+g~;v z-@J+sf2yfMZLku*4NFzkjd33)Ae46nPS>O%81ggDdXdC`1i46ByUf3sz(TZ(ND&dg z(`qtWv@SEQiv{hdr%%}Be#o`Zi&1I>@&!cNEr|zhWFCHwJr#$K?!~1zDa&&CM*u@R zB$JdTR_kN%)Vz6<;+kJ3XO?E%~MrIPgc5J_n4vj5I!?c#@2jYqWqUa*0zwq<;`o;#TOR> z>IJXb^|?M|=2SwiFfI{iWmdsce2}qNMZWTK$uQ{tJ|%wZawA`uWlZIGab-1YaB0)6n_0Beqnbn$)a z6N7AfkSQD}qic953Z!e&F#jG!?J3pQX6-U!OO|=EB0K={+GkTK0mNO!M zrBD}S?+s~=6gZYCivT*d#rwFfm(NV5Q6Nv>M`!Nm6r6}{K$<0#dXcZA6SytDw?@#^ zinj746F`{JRhxrofkM%16odV}*bLc4p@hxUm!iJUg{4g!(&bh)Gj4DKTsHWCxJa$B7At~&CAIssjDy_;3mxEgydZO66gI+4VcuJ zsS^oXq+aK(24fl~(Pg$yT83BMYa%$pncKy%c^gZ`jsc!m_Im3`!_dq)fFw^|#~E>% zS@BA-VZZCeSd^$eL?t9QM)j0;YrhkaR|6qlKTG%PUut}$1gzXV)%Ts2TxgO2@#~>? zELr%Ek`DT&l`QLV5qF%28FuWp6l)+UPj0^w$ptOLG4eXh4d!f*?W-MDAYt8gB>VS6 zUp;(vmgjSTjDg0H=Ek{XpB`&2SQEUV^($X}Os=WI$}(kpu?$C&_6>2wt#6s4Yrm4R zEcutcs6S;n?=dpdqHMqq*JVcXrt+!U7}ky#!QF4h9X!wrr|Rl0lA(e?>t8|wQy6@D zWtOs6Y-4VeTeYn>rutebLoBb6SjE%Qj?*%m!20t%T^=hO^ru|1V6jo%_HlpONEHZ5 zmKY?MLAUqB*!d6;Bw6iM-3&DDDGO6up~IA~H7%LX-i#Y6Lq$)#)E_c>3Z=1iM~Qa7 zZtV)Aq2ya=q#2XtDKLIwCcCMuLXF;3TiUG+~a2*Z!Xud%Hp`x zWR{j)K4|oi*=_M~^Pdbv%eda-b@#2{uLy(8isSfcDbfg}T%Lyg3CZ6dqwa}NkOkk2 z9W^w>AbKLA$~kMDuZ>THMkb=9veybtgqVjut0WBq>UWw=e5TU{=C&CcAzJ!y-_ zuWU&Vk7#ipKuLItAaK=Vf4XP_icTy9LAm*-%t=gRnbv&l=cnq8n^~j>%Nx4+4emHYzLY2QlfmO z2ESg2D9_=~(p4uYiFS9P@L10NmY;6G&QHKkOLHk$(GkuAwD4$MLgeQ<3?qrpm|>;! zr41RS@-a~8hY+{Tx0j}c!J|D~A80*uk=CcG@@W$mG8Fkv)t62)%U!I`M*2eCBL53G z&OEE|(3!BUV;-+vEn$wwKz|s&c0!6x?wQnk zl*%`$sinD?WwLa=b)=J+!kcS`I&!B&S(S-kYM46-g*NgF_wDTuGw17@*Xz~=80I$#zfQfbg4 z5?>c`OSI2u6%Gf|R*@KT{HDBx#`{5dwrw1nWMiBZAKnIUeeKbvXV787`a+oy-$~{y z{n$a-V4DvVRhw3+cL@&EcR?kRO!v`^@p9(G_X2+Nvz+tLHt}!fG0|zL`(jrjfvq%( zxU%#8!v*e0cXP$X_fI^S!j<4h(jQN3k1=z-et@P4Kx$KU6McFDmtP-R;_!`+HdD^% z|DgyNr)fXO>OZ({fAJ_UfbFl>Gf5&cMP}x)MLw4y{l59ORGd5B6w|X6&Th0*3j#Q| zy-6E%zaL{?qSe!g3aU~y;eZnyS|Q~IZ%N20JFaVLxqe78tQ=3~zNQQ4xMByKSr7-e z__NiKJES@v%-@Xk0VN>KL*&-7`kX&bKj}{~p42xSfjUKQlmT7ubChbB*#7oD&jU^i z#Q?1+K*o2W$)YDy_uN3+Gj<8#xe4sjuRtaZ!1{OXJoVAdm~j!{$BI{|lLoYxFj9*U zB}eYhuyzBj|L?Ea7g#&@R@oodRd1^QvPm!BCyAd`RBjTm=Xc|u=UT@+T?0y^AYBh{ zE6EPfUEtdw-`!O*GZpDmx<9A(K0}pR?A9Bh*poe>OWwbWPzzgYeJ}7R`o!iMfDSFM zD+2{3|Ysx-n)F{zw8VH-1_X;eagoL}A`gw#2e5-Y4 z*)k->b%|a}(A`DWh;>p=1hK2tA-R;`DgB$m8Pwno$}a46IH%;N46L8spoK6=VicBu zuS#kU(AV2@jSsyl<7_ z980wD9^Y_2wB8oRV!-x;J-eXLlQ>NvS6quNTV;<32ealgKS=!$42_Wc-7Ni5J=JPx zhpIF_?#NGv6fMa5r+j6vpM)iDz!9xb)cYa15L?x!|C6QMF~c-bwF5BQ^)0DY1+7X)Po!jrwwtcYJ-5T$vof zdyNEa$%d50COamKLJGd_zF1#Ey~L(=U5jxRu+Ywm*_<9rxgO_-_5ZY$i}G));s6fr z6O7+b;FE*-TCa$60oOW5(YO6<_7f_~qNuW`a*T`?K4!fLabDo0$~XsFXmy^0vFAzQ zy*OY#$b*>%+cdWT63TJ@_sZ7pA?)EVKvKpj2~I}cIAmDv$jMEw@jFs77A|S-H~NvT z=`&memGUY)%SVBSDyg}QNyHgfQ|JdN_E`wSGroN1%q96j+53=Ergcp9)sx9;`0a{} zSLTpX>>)<-sRrMuM)9_k*STsEtQ01uHWK;!6?ckayA1vkuK0Gwl@jk2hU|lCxGP$Q zv}G#CvNit7>I@ULGpc`O)w}$D@Gy84f9j)Mq5aLV`tJ$d6lz3>(`qXCimAx5DvyY9|3>TG3IR zJL{Y924s+Hz{3>x`TH2(?Z_u}JTA&Kr8kB4gfGj(%~2-oAsQv!V=^@!)8ft6qIlsFel=D-&u$W(;luiot|TytfGw|Pf~N?AV26!$z0 zUJ+>F(!9>K%-Cxe`mUc>eY39N@l8c@*-O5W|3kjk`RzP=qpH$>MT4vK7dhMQ1KwIs zIeDVFm7_4Za9sDRt70W({P*f~O~S%xasgO`)`4WtePBK`TXJ?B6@2#(>Dx7MRB1%Si+{QF7M#9HGsj68 zv{joihpP`&oUb+$%$lHxhyv$VsT^5yvf73i4c~5)@#%NxX1eAXi6Y~63!TGO`!V}T zS$+g9C|xIf88-g;DZ=8f*#qA3*Ov5^h9*rAk9MXCVzOmACRIdj6o6v3u#R*;%euHL z5CaHI%IwtVbA8&H-(>`fNG}~MHv%#_T{udinD0I~-_phr&anE*cHLCC@2*E-|3M=L z^o+HyZqQaMekdi4p3{x&)nHAP)IlSX2mKKALst;Y<@@OG^!3(rpp7Np0Jn-R^6=1$ zg0gWfra)l)MFl`C4>!PGB*p`Tt9M=?cLI=$1^5b232n540(|}v*jGDWWR8HgbfA%b zgt-niZWaD)Yw?&cf$p=%4r}u6nbMfp_*@IuO1hE5((0pRF#+6 z#uLol<42*P%nY4LzD8S;R4Zfmoe3%)> z`C@j4707dazg?3E{utQ?yY4Ep>Q;@@xa5joo`RS=-+gm0oABk*H$FFp{6mte=|DND z6<>Ctp}7W?yXVo5H%6-Om?-t06O8^8n}YsB>b~8;PYe*+8Kh@&d}eTHg9@dwEHjlR zXTB&?{uRqz7@*73~@Yf}z7Zfop_R?%P2(u2i;b8sMwka|8(#NkH#Y2a7XeL%X3a4S~v z6wB48`4tVIAdEATu)6ml60#NnNapVlJeh3uKa+69s~0;HrKzg^NYWAByiJ8`@`Hmb zsU=0!tCyGT6NwAbZIzt=jMxc>sopre&CNAeBQbiV+6<5VD4sdcHV4$PxToB#CKlty zFI#hP-8$@*IAywtZ;o_3a4BNr*%Jt2<{bD%M^4mEbd0AmX=G5O#MH_T2qcBDc4fKLM!%R{cpyN2;Ic*0SP6 zOY2rqf-Yh2{{T%EzKGQ{s~u*=?C{yo3oLag?xdciBD zTr!dfLO~sl4Serw@fXDju+6Pr$gHC{WdwaVtBiSxZpJ>ffvsN-KjY?MkNarVcf;DX z+*goTnM>Qq+d{WHI46VsDtRs~uN9_Uj$D>vM>!`aKKV71E+e_#pCb-IUI?zW9$Of< zbF#WEf*53a*FCEz?!3hrD07O=Yn#vc`MA#fJgLvPsIpY^!Ku{`MrubTmD7IweUd}gME?L*$J~Dp*QH$^ z7u985_SQF737#G(ODXyhSsyHj8BW$C^{;;TSt85eh#7N_K4JLpG^Z|AaExy3c);-Q zh-2XBdV`Pp_cbc$`r@w|KBXVCTCo-MmME;fyXxLiWUqyI^EzpMcuQ=704Arb<%#7r@S>?d8oDe|=1bQ0nz82lc-a4>} zn<`_MuV1<=pVfRne`&hxMdw?}OYe+iu6;-Kt#5^_2gEHm-DMy6?I|{*#}u1BhV5MD zwEqA*S42)1HOgxe<(j$RwKbl{Gkn~d!n$rvYhOvptSgt~*IGH5&3L5dJAe1j@->HP zd2?eon`<*f{mAHkqrGl;fbNbT_s{aIKP^sq#YC2+r=ihV_@)V$W}y$1-Q|d7Pt|)= y^J$h>spnfdjolt2l|O}Y!r7Q*9Z$A-rGc)kW!(d`PJ4rZe!YzfO>Pb=q5s)CNxG{5 diff --git a/src/.vuepress/public/images/wp01.jpg b/src/.vuepress/public/images/wp01.jpg deleted file mode 100644 index 037fe965817f37d43d97f03e96a73f215253a5f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 79395 zcmb5UbzD@z*FU}pNOvhncZ(8A3KG&%OM`TGEi9oRt)%2iH_HOjunR~_OUJULba&%# z{XC!N`~3YocVBbobzd`c=Y95^_c?cF{?7hg29T;KDk}moFaUse=nL?71@J`y1{v z{HMRRN4)gCE4kpmod7aij5CZgObjx>BQgw3GK|0707mpIurdB4 z|LFz*U_Qdazy>_V!NtQTKsV?j1z=#JpJ8G>#=?1wh5OhG;}HOp42zr@TZn>%^s%hg z3rY(QR-8{viE>nV+An{wSw5%k@Em)aBpiynqVtB`ibmup*(?9Od`;LfhpwpgH}B35 zq7-$_~l9DrHF$u|1 zU_WPhp+))T@k>?|f*!#;=q53b~IDgOhlpzy!oYHI8Li?6fm ze-TdnFT~Zg|AIXEe<+cFw`dG#!T48TqJNl=vCxPxaj>zm9^>NR;o{=pqUS|KfQL_r zkBdt{LO@7FOiV(IM?gwON=$~X6aPgIf`RV%uNM{;4ly1s9{TD3Px(6!AjJHS`pD46 zb%i^DoncKKB}=ICoQK((OPi2_NnV~ggX+UfNPhuBq!KCZXQk7ok6J)2@k-&;@s6Kv z#lR-S?|e31OeFF5ZPgN&5Sc3f+Cvn4H6?>_FT5#kP7JN(V#tMBK7A}M_7>u8*b?hC z0t>jl$1KVD-F#jK`JUW)`n#C>ar7JRRQc&I_!!Dj9bNL;V+ILxQmP~K`~KNIbUw>d zJsSK|E?E(p9yNf?{!JK#n##Nd^t*7ybYn9o+hjP)_T zBBe$&PxH6Vxl~%)K?O+7@FH`qp+^-@m)4lC*X2R#6B(K8X$SL;8|ry6asAJM+H$&I z635>blJ?2Az_kqNDhAC;IF#~|{{rkrn%3RdOY%HL9A&8TuODlw#l0l1l06gf-F+=? zKj(O%4D`zywFk9j2V_zC1e9On(-yPWky`2vpj>HvUb)pu$^f6?D7vt0MQT*#NWf@* zA5GuBhHmz}E->tp6V$+D6F7VSk*moggl5iR^r?#TQGg<)6z;Bd5abeUb?{>8_^@C6 zSc2i0S3_O$NG5Xco2vlI<(FkqvBoY3E|Z13da;X{cF}b6w+}6)%mJGwJrQbDJYQQF zx@h)}#+Z(8*Sow~gDY;u1}pj@D>W#_jLw*irhG%&(Nobk<3I9d#Mqc>47^DXt{c9H ztOf`@4jrT}_V|4xsc!;4HHtL|2qt1~vUL^ddlQ+rzLXJ3Qe$8*1r7_|OmlTe8vuK( zv(|+s=TShcTwP-W8eC2N@hZ$VZxD*=z(IxqylRN<(#RTAG%}qVfl}O(&mLXYDdjnpRGC!W2mSq zSUhsbDV$V)W&oLLM(f@$AIV@o^`{A$y_O6%bKyyBYE=Sk^%!W;DPT7Cw{pf7E!ssa zN#j6iP36=!s|1#&PVeEP-bZKG4Y`Ocv3KXRf-j5J>+}zvk`1lHfUdftszzl5_$7(6 zS))HT^+5N52jZ>n>#Ek?9sGVPt;oTxZOYiJyQ(~pjB#?+(5G-(v*6yZg?uprPQ^b=rnkajEVDm6)A^j*CABxOex8N}#!~QpcXH#B(Q5dnYj~pK`1WeA{**1` z(RSBJL{0do3XJpYpddSlLfNs#ULeF|$4VGTWBLj?GcKe42b}inW=SIN`Via@Ch2o} z!9UE=MzrYFI{$LPIA+1bv8{RIY&Lw;eW|-uLq=w=C+Mkh%}o^>q4%jvcxHV|y{v{o z!|x#a^)uh^nI}?som-OdDq^2Mx-pKX0fKLHs%99WuhX^|C0drGUMIB)wMk=(MYYOh z{;U?2J2QbyUY~J=@a^;sH7F8_Yig!VU3Rsc-Z;G$xvbJm%RRY~cGw>5_vUjC_%of7 z*F}IyRjxoG=~UR0qm%#i((^*kuWRfr-8W$ee?LWCFZuq*-2LV{U1ozByO{;R)5Y)p zC?Kww+(q^!WFMN=6u6W(Ady~@Z&5(Qz*>GyqZs7Jfmkx)p|pQ+itFl+Cty-h@DIzs zCCTf#AmK<0L`nO%Nz2D?e+PRnfKeFh3%7S^XJ#RJzNa_DR_QuF*V-9n3By^)acib9 zGYqA(BcU5pkg69mTt~OB_cOQ>w~i-qe?^0Fqnso8m_Le+F+WEj%H`bk3iv_VF z8_1t6IMKe#J%wbCMd!|LPw(;8&;1XYz3B~Zed#Ts$dcf9d=OAdow7$R3y9qKglB-S@@9>!R%BV5+ky6i zNS(;|SDzT{g{-;)2Zau~P655@TP!O3R;AjmGw{i|G-pT@wK+$dT~WUfE3dV;e(CqN zt?MPNzW|MAYl8i45z>s+q%V!?$@=V;1}@A?nn|X<2ZbUTGwzAa<2{kz*0(dy=snMh znzHvmo<>LBqEWg_V95{#cflynv-d`PHCVqBr)|J3L9fRmUk+FCmtSANn$`QH8iVRnx)cy9&BFSJlJjbCFz}@7}NOieH2)-o*#J8gIcnKB)8gA&#lEX zjR{8I<}3zWOT&*PBpoI;Dhqd>Pkfwo54;ETp9P4tb)1ObC-6tanvx8g|2UOWElC@b zyuYu_E+wX|R}Z`>1(F=&{o{a(r$N{~wQeNiS609KzVowTV;^matHF%$!{R#Jt^>#<_*aZv5kSU8N|4d2xCr$f)OPw4$6(&K(ESGRh}) z)0|-t|1H8-iQhOp_B5uug_H|}LM+rlhbx*~?GP$xe0euoLmYg3@(?-r)a9hNZ+L2_ z)}A%(c9qW1DyV^jo>6%Xlw&4M4)^*F z|LH>99@sYiS{R^Y%fPtqdwtqaI8GD}*fGZJM5Sys zD_De;8yLD~7wx$R*+tzjcAQCLoV{-I?F*2b?Ba?}1~J7++)InbxE z&y4XcOAI|ru2Iz634@f>QqpK62gRl(8I7&3;pWC?v+$?$G zZ@07>pY=mC;1V%Tp6ygQkJE1{fe^V>X{zaIPVow1tHBCh%WCeTFtv8X07^HT4Ecp-p+=G2To5D9ub)~RMmM$hQIw|VX}Kz z^Akr(?hVcF)5t$QxB7Xb4n-%Q7j3#`sh)F{K}U*iNTBf>d*a5PyN?+>9UUDV^h(bK z+Ep))gA-OCz*`;<{(e>8?%Hd{A)yP(EDDcnJ!TzptRg}&bAClmZXC=8-fy0N)p)V( ztz!7{Nnw{f(uT{ZK;B1<)QW8UAV>A~8Kd4cZLsCW-G~$)W+B>`>rL$2^?k2Vhhj=0 z$ges2V$sk$kM#hPL+O?}ZxODz-S*THh?@<8&(6`^cE`dRM7{J~hV{j8=H%3P^#0HU z&YJi8rr%yg2a6#}31@aHgHW9SSKR)el_}bC9lcR%O1zB>iKxhFsle6;nxTat8R^ms zbK{(!i0t{rpk!rAU>Qu?q2R^M^wqVX^s)|BxzqD{n@f!cncv?>*EJe>H+*WM-r7sK zPpJ%_Yx+J@id*P&eRgyB&a}=)-QF?kXMQeK=xX?T=NfzOFplCRJ3gtmC5$lmi;Hv3 z@05XdU2~&0`M@)nt2$YN=R_!}Dwzmr4;59pBaf4A#u|y~&fv~vM{In&iT`2B!UDaP zQDr?tjQ$kJ*Kcs_w7pAm-l+uY*-If@CQ>9eEsCNhkkks+DpG$-VTzPc|w<#WmkY&qYod+Z^S{ z1y-#DyphA7f�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¨m;bP$KDhd)5k%a?ZRDu?uYCDMvMoS;PoA|1x@J*mYxqlFkDXPCt_`|Iwl* zwNWEgt(`CXMZ#@@i#xsZsHvQ;Zlz(*owX~4wgkuu?a#|hxW2a(DwSlf7CymaL{NaN zWn89b>5Il1Lq4DHS>7pPb)O&Z*7fVqVy}6*Ua`(B+q~$y5bdWB&$DWe+D`VcysAaJ zAl9f^B#ckc9d*^j_tVSz1u53DS9DMX7`TTu?j-XOcDNv0ui%ky%wRyGYs6-^t@^Vu&F|mh!Smn0Sd1ygA8c8lGGyna!aXVSz+;# zW;bUC+#A5BfK}m>L1ZH6++}{sL(SAUeWV*M-^nvxB`s?bTt~@(w$u>4;Xq8ahs_bm z&_c7Zzd>ib`E@WXSst6EvRgmjrf15YG(d^#;ekwKxT{5rVpXMzLx+uwKl(JKlH6@w zv8(W8Yr1OtK(|ZRb*4rfrrNO>VUc>sVyBNV^f6o{t8Twcz&fXKZSG}S;*XR)SEE?K zbHE|9`kxbNQK3Xi+nXC3_>=nhXKU=G=%{OuqrnYINv-@e-VM7}ycYtG@LOlOZvV zYK4HjsDqULjY1*d(OJ%|9KDO2rieq{cRy7j7@Sta;z=Uc=8aQ8D)yRs^reF!_oJRP z_-B!V1Zg{_ZU&C406l*VwEek(iFva7+m+-DXE)7zbEYL4<7dALc@rWL|6}u3%Y`)gD)RSv03b$)idnaRc6Y!Z{(bj zpl)fm0DB>F;;-iP;~l`4)~*5qlT#rRCBj;z!F={r@rr8wphak&LE@`ZfJ4mGe{JE5 zTr%0>U1q0%YFuf5?ny#Ca543PZXJaqCX_YUpNkn2TA7X$aQ#{nBlg9$;~S2gg_G26 zzGcxRJIU1jdnsKua6t(R3^Vu19dHJTd{a+Np8>zUCQ7hO@m!P-Pp#Km{wQ}WTjWMjtgixMJ`p8n@xr*)ufDyv{JKh2VdNB8K0yAnt~ zht}DcZi|KFB1%%-+YCdR2jZftdNQKuJftk;4T1=m1ao9o$H~n z-Z$bt$njeX^3ohu2z37)>b?-|w0j#HwqDFOZ!I57OAd1B>18_wAr(Yh>AeMQw)VQb5=T8C8R*(h~moj0)aAo%+0_=~wR>v5Ef+bBH3b0ZE z(zlGcAlsm8l;uPciix>I%Z}5`8oP#F+c;QnE3fyKt?IU2Ow2k3NUvjOaLV_Ph*EYO zXi;y^bPsWu=gBFecM6y)+CMml+(w{47FzAFm_rtoerM)&ombNS=3r{ZEDf?CyIH7M z+u_SFbsavH774ft%A}Y6gmpu? zGQEXx@yaR-0hiP;sjz>ifR?bWOIM%ic7@YkH~ZJ;2y#wf_e6ifd>|7NMc5d>&3mvr zc=Qu7;cS*pn${_xl1|)?!y^b;)~TlezPox{2j;T#lVbExe;d$^#ko5x5|SW@`9uc} z%`^*)KI_U&VZ6(ipHJS>2chr2ZnU{=b7+XOHs)=Cwk$}Qe>img&2F6noScrA?&WR) zP?NYv^|hBSISZS$n6bm+U@hg4qW+VQP7Al`f6${LrP;sRyFkM)3~1F-bY`FUD9_!L zUFHGR99-F&8qG$;-f}qh3+#g!2%Cr9=T(Ia(*KO+nLSv% zM1OV)@TL>p5g*YfE~gz zfi?x&vO5$|hPJV;2tn1S+Z7oC5;N6@UEhyV0 zifi-Ya604iF=X35Q)1u_bW4|pg#4A+Tw$H$0qw(DCRg%xgKtG@+pq23d*vR-@k{xP z5HxVoVj3iMTu8d6nUcb3T<{dLwj)QI>BZR`K>JVHItSS{s(&3R>F!xj2UaA*c2_5G zA|e)2T1BAeAH)?N;0J{~-E>dBQ$D2k=@jC2bU+w7mUfai^FSXe7lzMz;wEO7=&9#*t{({klu6Hn1ZI<$({-8ug&IN1)An&fC&ee9{wUgwXjm(S;RRqH@;Sa! zEy)vvpRfgU`>-(V+P=H2(PY4~^6mAXFHRy|)pfg|HLDsx4@d$sZ|J5>p|~`ERCMaS zt7b|ox0}*5?yI-D#@hrffLGO`ndmRAk-u=dZlj1|>Ad(@xrVB@4Thv?>G~OPOLJh! zt)IL_=5P6s0a&nCv;d?chx*j`IKnQRj}j(z;z@6c@Ig=Fm6V8@-DYp~rxE;1D>c95 z&5{xUMjORnj5;rMQrcbGIC`%?SLYD9Ic(U?Oq7^ z_R4qze|p5$aNYZD?oNWW%rsVeyu0mn&g|_7jzyvv7XYbL>D%tvP?P;rtF>BO$%*add*hrayD8t!+6c!Hpu-ZUvzE} z)hQ&e)xc~H_EhL9+aU7%KAk_BovR7-PtY8k?-Z~1zijc9rl5Or-D%BCnydTjt=GOX znQgkAQ5y+otI_LuL*2I)8K`{==AK}kFCqz>gLKhLLzfdFtCdGd!hC~D5>%E`z?|{M z4IIH8w6;vEAd8foIhsEa&SAY=r1aC{6CBOS)vUBel1n;|8coc^32c0`U+s=2# zL&JHg>#U>~-(nt=2O-Cxv4(jm;_Y2n(7lvBVJ!K73xiMdB|sD>%7H6Ul00ioLoahV zBHBvC>m`ceO3g|oP@9Vl4WJ))`TIQ;o|GsnV{u-9w%wKFwC6_vdARtK$whb&)XwOU zm^k>Ab`?hbf~UIqBZg3928F)+(12RHsZ_4AB*ErNl;c zWxtVm`O@zOE!DVU8WYbZ!k=gsL*U6mj~O=%s9?nU$f~Sa;arIYe_o$Gab{cMSClJq z3m6#fG%G+{+@uxK-o zl&tS{@k$h}vjHtO#adxVmA~Mwc&8vK!&68XA%}0-sAb%4WaY36|HG|9=v%_lOl5yQ z=Ht@|mqitjRkd{)-N<1zNfGnY1z3ZND47%GBC;^?Utl%Y3~4M%{fahKM5dk$5B#^nj~w{=o$U zH62Hb!@Qh<1_V=4i_$9;6A!S3RgoE%Kp=}Ev!<^-sLYR|a%NR;Ci_UU{U?9}@VtULNXNci23q3;=QRFA_A56sLgB)%6X zN-c^1X#XY!ha~lnt@LAKQns+{ZtwI(=I<@%z-m3!-QMAj<~Nu6v#j?0%&OXS!{+Pv zq39>j7T13Np-?CHX!hWToR#S zu3SHq`+^!K#vakGlJ#ZrQgx8fIG=?D$-%v>x+`$=9%9V1mh`6(cUZ5KT5#DW2qU82rEOCg)V@RlrTgR zm~jHSva?A;d~anx5ynv+;ZhT#3g%{UM?t+e%XfueRZd*b*t2g@8@xQZeE*4zs|tv1 z)7`%CnryV_A9fMRR4aPFnI}lB!J2+{ohfHgT+Q&%Gp+Ba_a^1s(fo_!A%)KMUge9= z#mQb;&)12Q;Uy|!@Tl}d*UUglHa$cC2&_u#H(qbDK2e@l;Q;yA4fGv#FyUZk(Vb3u zNV9~f=a|lyC~r29UU(D|H{|V2X_ie5tED;58<7wG6pS|1M_Y++QQvPJLY?#iG|#+< zgIZH=Bc|kMW-JP8RmZ*5cUr}@t*l^AnIve;i`BH^scrdZZp1`7%%J(76W0gd_KC`k zx4un!qcU{klET@wBV~B!p~VoW9`=7aEMufGLx;`qIABXnR?1>#0q&sX$T@CW0lglR zrr~SVhWD){S7iDu{~Pr!vih%WWB$s4#wdp?#rU_<9ss9Wv{Tpo-@5g^v)f!3N83&6 z?i5AdKXA`?n&g{Ap{{d|xxFD$vRkjRVrrXB#U`v`u%=s;g+{Lw>+65YXl5whDTYD} zM#WQfaY8}q1Z+`H^3@u?H7qTrFR7Yu)X2?OuBda?qEVdk=GZt)UUl2-F6)c9|7F$BRa&HhjN@Rpr5SN{Fhu8r{dG;tIOJ79 z%cOKgnz-1;*UE4h6cq~>OCgixlkT+20{gvKF!HP(bGw`iTBX`_?xZK;Qx||aVdfey zmC6{>(2u%lU66u>eBJ#J3e@35c;Xar>ytI>^B)t|XI@P|OaxDwMV{9+yUQ$OU_tyy zvvZrpdJQ2nC>d;h(8x1(ZC`xFl$@`=Q+MB{rRx`LNIJ%hDx1F&bVrq>yMzEepqGSf z_50Q9Z~MOd`2Z)`uIip`5Z*_O{i5_@Ql! z4LT!sT!p?kZCLaC@y{#S+{+l*Fz3-OP-cNa?J7T={h}mPEqUR|kgAA2S zfl(@iQgmOstZv3o0+ZQ(iO(&hjhtb|1aM8b&NxiAH1 zt1p+ig$EhsT(egW&}{vlU+OOW+3omTfoM&3db0@kgJw9jB84a~2y{jYh2@ zkhr?Zo;5+>zMu8u+@OT`E3+UY2?k42HKFL#hE$)yV}!z%ak=IF3i6U40MFwL8{)b@ zakxIVPWjX?vx8!q9$j9#Hj|)>5(?b%lXFfjokG0sJL6mOp3K5D0X)b^{|@rx6gx&9 z24bnAd5zKo$rohE1$?3ASJB=_>F0I+ipb)#CN9XFM18+nlg^#js%Qj3^;2hB4eVs9qZJS(7DEh_NQ$;V7S(wyk`)%eXI_ji5GNv=P2^N0QH zGnf+uH1nR~;&39;hqg%sT-iqKjw=d2{PU^7t9;{pX8oyc?|AlKYGR;m@ZgFy{LWP5 zMkyypBfjp;3`{tdb#~mmy?}@(g@x=*4rBcf4?V{`aPp(KcBI5{z+vC-JH7+P7nK%s zq|U})Tb@keAihs_O<-G@)LXDG%*yVac*Q+szAMAyp3Lj~`o^tgRmV~u)a(_VAB>x& z@IIatc67y#J6cM3c%{`b3RN2xI6#6~XABcBrH~tc+t)*D6OFm?Xlps(k;@`-O`?C) zTkh$Qe{Bl1z{yw5RLBM|QWG&|-%*TC2ZH}rq%2$(ZJ-pVo{1{YTO+Ae zo8&y0_vK-l1pwLI=&$k};jF&XLd-G^S+;ES^0(0Q0Z+SGsJ*eMl{m5OgJrK%fD2Bt z$oFkVp4S;U#PC<&8R%7c)e(Ud@5)l6Bn3q{P9X?dNN&_XBi4Idui{B4X$Q0tKGjpq z=R5J$z2=k%qYubSXC!k5xD>#J3M$TsM{*^_Gv}%{%Ir^|Wu$X`#zU?OT6e`)R&dc* z6;WFvWrN(&i(Uy9nS}Q+{mhYO4fEJ*k$DY?#6tmc7|!P^qp#JIx{{gudA-TGjyW*E z^w2P0D7NI)l$1Mm_=P}tYFLo#(XUGfO;Nz2+jv!hs8Wm3bqa1fW4V_V zrC?TKFT#BZ%(40mu<4#;efnuC>7amp&D5qQV$ZX zivDHr&S<#iOuJOB9H$!XW4yX!)}+7L{hlYp_bCd^#YtZngv&uYiqSaWh**dD3rY>U zftDIY#lvoa;aty{qh=WLSB9$_c%r30Ucjh&I?j@q7gv9UVPG8Exxyr-vh z@-fkG(?gW86~-eMTZPoAxbYXzM>hZUi`#2oGnDK8sBZQb{3nCI-sEN=hAD71cia81ZpqaEuKnucU=tji|AJm8qBl~7-mlpOTg!<9=o|F1RVXyuMUxnvC&8nSG0cz$l2!47< zq|;OtJ(RD>eiZ2p;j)P>L*80?e~xo{L`nG_>*ozZ$jGG1v8IlTSN-d#zMxZpTo`*g zEg3kFrww3^cCA$hTLD>qr#@ojH?2wh@l|LdCZ|-=_2jOnhH7|VWYWx?*}adJw|fB9Zb8>@Tv{eq=g==S@78g#3w^5B;*qX-6i$ znoTI0=L(gKbEWSss8@#sq`}n%F42Go4i8AF7sw(-5wI!_aukCI@I}M50?=1uUU&bH{#kh z2tpqoszDnt&2l8)x@rF>Bk5{NrWGz@ zplg!KOF$wQW`UtwFa#?(sZ1_H^&?Uaeh{^{A_a^PQtRxOy+jlGV0d4x_a4lt;9R2y z)6$D(qTxLRUxO=xBSBeD!1)bKJu!Z3id|rJ}@;V~*=~%d8;~1`UlHOg_nQ9ui z>Xfr`3TTH6EMl}sXT??;_nZZwEy}Zw7Nw*NHgX_NE%}_XGBL6oE^9R8%!&Ra9{vlx zXJ4vllefC()7Soy9hl3u8Bs<5?S3iaksNvp=<)CS-752?#m$J8)dWjJa?K{#fCcU; zH}EUpA{v|(F0hQ0veFAgcQ0>h_+>-W8`UFH8-ESdfAsyP$$@wBg4RHKeR+8JZpPu+ z{SaAUp0a*$T@b-adx}yVK_VACNh$4D(NPvwV4`9g=(@C3T-l%!wW?0$=;L4pPOb!= zTY`;O{-xLy4WPCwuXYDoc#|!WpM3aM{-@&JF_t_UHP^BPMGbQ8Yvj%U6cPF6Vtr;O z*WY0Zu+|%JpwtK9X+PpJ9>Z4jv_T%XF`Sq@=|vPZ7(>ZaX)hZTOqjmXWDnYLS;5KW zzd)u|gsNsrtktz;b10cOUIKP(6P-LXE43P^c^^C{x0kNEWKRF!sm6Wn7VQE6DF0XRspewbDW*mfkr(x&%T~&aUB5iDCb% zx|_5cVAk}`e7nKH@jA-#RXsg@90sm!XeXbo&vlHD%4_mV^kwwRss0xK6HSf!CU;Rk z@teP*qP6FDg1ce!?W?XMZvAQQn?V9R8w*^Fe;NWTK-u2k!lSI){)JK=%^s`8)uA_+ zK~g(^9C96NzOF~uaRgm0iPGaV(cZW_XiV>g?A|WkAi^tV;Gk#V7C7t=Sv@$9yYVCt zpY*1;>=dAb6Hy0&wqbK#@iHf%UC^3Y(k|K(_~APRu>zTg?1EO^Ge09V8B!V(9y8|h z8$5W}3j4zlmO|Ipc$(d{Gw5s%MauO z5u@)74l`5?q4#>Z{_BH6%IC9dmvCH*rc^9#b*+<;RK=xI&x3uL5g$8z&|H>(J4`3B z$Ad)BF1ml6fMa1|4=1Z!EzouFp%2^#Vj0@wQ^>qrG+2$kZvLcQ*^hAzd#SzC+@T0D zZs>iG&Dd2&!(l%7ONYA13QTE@=Fdutg&KIxw4*>rkbh+DYj@<@`;?LD)yCqd0EV2z zm~-?Bf3$~Yi{S_|0rMKKZA49Mc*5^G{+F<{j5@e~95s56|ATzpG&$sbOrz$i#gs_l zXYA-oD(kGuI*!$P9JGq_fypo)I-{l(vNsJ^6>2rml0X_6*^=GP$g~&btI$jH2R9xv zx;pEg`H#je!l<7M>99fCCxGxuVoGN7ON)R#?xi&JJcyMBFBLoH&{mkWn* z*D~=iOm`O_Ki!sp?pr_Gam6XfiVFJIxPL&C)1Dz#654j1hJ)DTR|4NtQJDSYySKcVeppmG^c$!_sZK50|B$$0e_+h zdUp;JOKMwjW5`BNVNa_k{Y|{Tjau?cM-`tir!94Yf>qmpTmOCWAyk;-8DtrUrSfW_ zj}R7nVS#SP)#za9HO1o&0%YnG;5d^V=y6%eC&J%{QBMUSNDRgEW%o(~V^rMvh%|@@ zLkc?EUbb#L-G(@XHt@I@_edr~tgqR+F89B5!~J$-U7=thM6w_2m-cz)eFZI7VCD4k z!&SJPYg7(3j~rX`5ze@Eb32i1pL`04QEQWPLpT31okdX}LpnjnXm8Q8FMv|=pYBqO zSaAxmOzB7kY1&UCMp*VSz6=X;N;nCxq|rgU>2#v&pQt?6eWhNf1<0<3#m|tcWw5#~ zwYU8*VR2J~v%pcVpsgFRh|f|t?0a6v@Q!5c;!uPD$gSWFvYKBGvnpt$Az(w8uTpOjlXEK8Yf+oy9fL6S6Y8$_1y}5moUkA zr$rvX{q25PE)4!iBPkch;Bl)P8sRQ0+I)Dq2T(BFF|*{iza$f6VT}e;To>b7G{679 zOuF!2l+YSo3PI_|4lnf_59ELba)VwpuWg4E{;!oqK(QJEEoOg)TI^HX zJG3EFZ8ve*a})WNDYC0pkZmBnOpu{sW9U?8bx;rGrUgZOSSX!neH70+N4lC&I-FMr z?HT;*8W%lhyY!D-HuJla-Wcct2l~P@B{?s}R`jo3n+s;=AoB3lW8mnqUSFgECyd}D*B68f7FJGpH8K81f@wBSgL)k|rg zN0>*LzX#8Ouad!k{%ie2ks?+93tT?9O|l9;3_ppNZ)a>~OP(67!E%4@-UZK{LnjXi zhE%wnl0f~Ey&>zHB-J_UwpqBd0*+!8xG^XPL1|}hd{k)&fPIRH!ct&+{*=Q6v$OSP zI}lR^+o!McegWte_z3js(?p(wcJ0->U|UKiRSd|QL)=?m+x&j8*NF7MjsIM_E~n&* zP|XXy8qtJmgVrktj?8^Vs#4eC<$9;u?s#-@Kcar#24dT zo#Sr`D;q|u@E2~f4EpSe;#l{8TR6xv>U8U@i75@WL&&ee!Gi-AQ3>7pYf)h*V3^{g zP#aXo6l9`-(4|F^QLraq;47&#Cu>l3Okl`;-g!uq(U6hPryN^79Rr~tqCkicEmH}0 z?~f~e0!7Mk-xP<$SulXZ{Qb3Rd#*!9m+^UD;2H*X62wXcJ-Ka-V577Ya#@b=qqhGC zC{oxI5wZJRHe&{tnN|up+y}6JW@<#bXqSN4lKYj^2~kLnb83@)>{hnok7xk{oo3T} zH)qv$-`>zR;JJHi>z`-8DD3@VR+!!pgE{G8!A{*?(F_`bxuOM&^L}a=7##Hu?Oy`l zfPD`z-n@32Sjh1@Y>bWYo-1XD%jLK*|ppY>X%Rn5z#$IL1)?|N*ib;v~f ziJ(Lzn)|5-gMSzk>NT93U|XywrlSYx-J!T0^x8q`=t7^L$L@unb?o3;HBG^(G9XG1=!3gBdN>$uc z>84HWQu!EcVheZ}#!hLQClF!A-Ef`Pj{=@vZm09*J7+tP=W zljLA2K=jE)*!qK0K%{HJ-bWc&oFJo9fI)oSP@%KG-g;#Y>7SIOwb{L}O!_RRllZaH z=I_%DiD1PaM3D4AI|@Ndiik#(Zn)a^M0e6IjXpg9{R^PjErACTs8mK=phLeTEG42C zkN5$zV><^4QKAygd;J=@w3 z9c4J9mWi}{+dzvwJqgaiPI1T}Y}+=!ax4k<-CZkpK?O}T!eV%T zJA_(xh)mF1(1-1F{uU$78(Y{tkn|Y6+lZ?*W&aK<_Qe^pwIX7@$Y+V2#4&3(Io!*z zR}{uBi*q%O2{T+1&h+|iJ7qRPm-KkWVx@oCBBxor#J*w;#A*l0rHG!8663+4DzGe9 zs}T*#8{O)ahuJ&rHPYlQ_w4BFGTMzAEw;tA4SN{AmmT-Xbyq=V@Ac7~YI?!{ii+!VP1v zMZElC2gR}x((}||jtu%#z$Mxzda|rE`-)n`mvFWA!k1yriQ&1H2T{_JqTn@2;-SIE zZrE)RwPpBlfu_4}BRiV)&Q)`vAW(qkUaMA%En}yGLWKRm0c#M#BUuOpK|`@K973-V z*;!zXJl+Hf=m@U(?u6P~nC5i2O#95Hy}xv>lUu?!+Tz^Wu(C**=!uRmGA49Ts}6&S zEs4L84Hf(oM%0@y*bFtEa#Qzw&A*715aAj0&NJk=lOYaRHVx|26Bj*tJ4|rE8pW5F z+>sLH#jiJMEt9f4VT}=9!V^+5u$a;!lD!jVK#I=rW*lckpph7=JwKg}K7J2=UW^dX z`$*?r`WIowfLTV(>~DO5Z@CP|n2AGhAfou@OXKmR?{C9L!X=p8dHTn3#FP}i!1EVN zbfCbLq_F}oljx;1Om9s;hs%m>WaBA-?IWpy;EG*FzWV5n>>C4iHG-oNv+I_bGW4=d z9qOIqszCzs*hC4n#Oa^JSPOjW<7m({L*Mx&1Ix!!_@_xNka){}x(H}jq=NlhVJU=Q zp?KWh>%J5;1)J$e5Gqs(Ta^U06JhW5uiU8A@EGJ!YE-LQ*>rD;V&UN)vEpIBeGu4Z zVBaY2d~3v5pS-T$mXx(|U&k*qKU}Jwt^FUvnF`P(3S&)2uh}}k?MD({uo6>%iOHac zmZ>cX6VoTgi~?mGRE{WPIB)Q%qh&e?W*I}c@bqN6RXTywQJUKxePNHNStwje4nQOR zJ%yz+#C&vCdzcc}mIW<XN}k^E*>8@6y9Fi z9DvtS?q?(E4YZu)&d~{X-&v)&b_6=ZWeE7qs%1?>W!KTw-=UtWkZVe*=L~Dg{)r`Q zBb33ZHwMLyRl;d-OI|+fQOp1XE|}}f5sU8_Qx=YE4EHcJKiGWPWKEBcq50<_xawC#meZ|two zVYS?BpYn6L3MvVV99MWEO>a_up+vQ8CxDJWNPO<0RUl6E#Vt{>GxxwS7o)~n%r&>7pjv+3@zJ$&=3=B9SdPGH9_;q4SwOD{!z!x)nNkZ};aM^gfI7k? zJ^3F{GN@=U%=yg3nAHci(c2GPkCw04hWyQ({WZ`&r6h4AAu8a3<#8*mP@w~%1AqHN zJq|LIJw>vx@+7`_Z@EQ<3Pw@HcOx8Rjkw?|jV~M7VyZuoTEYUC;vpR0dwpmF z*5#t~j(Y^0kM#(J*pj$Gt2)xO_#DvDZ1K@oa9TEz^ei0KvD7X0r3Gqzz~tg6i_5>U zq=j_NxAW_J^_aB+F$GL`7Kj@LuRt&5OY8-trlDTX56e8yb)7Jjm$1({D`e}A+{q9X zm+^jVRuJ9qo0bcHyd2L`^jp)^Z4cHGw86FW;*+uE2h5;TcBlB3D)z;eHPqH&R z?$jq71#Cef*~*9}xh7#WCY`JPuWpYq?V&Ab)m02(_uAkqFYn$*{;x+Tp6{(S16v_x zV*T5ByGPUhI)8E!_$O%vNadjfX^Ui7vRs>{@C91K=dYwHwvM|}8HekSp+gK^ z0l0#NbUoIvHdack&db~^t^>X49L4fQdO|D?F19VYW=Awvtz7mqGUY4V@L|1OzEffw zh}&aT>gdJ%rcUh{nj~%5-||6k^xyLilXa0zs8QG{)R+;qa>C!e8&Q} zk?lht1&sL6K4eknmrhEG;IA|R5kc;&$x4&6@=`z?4oLBYk1CcAZlfw2H7cNk1EL*_ z3uN90_?4GuOZTL6Uh+Mcpr;*Q({@-O8H{AV4;Mc45@Zx)#qyUF*2(do9E$hK1daZZ z-2@4#rGHV;kUfV9M)H{jWq4Rnra=FHPAd!K48xTh05#-m(J7C{F=?>&P%NgR96zK8 zH`rvFlWDZbK*|AU^$Y$_UYo4s*R`d-(L3>$1WW1V%rc$x__N=OJ|l2=$?j{ zT}yV{3N4kD_`%J_qLU&gr5K;Oar`E7W2R=_V)eyV^y;h4f5#!a*j;k|S{=OMd#{;{ z~3-!$NDDg-0&vInvZGYIIP`iwR{>et8b1B zF}z~>)j?Ttko0QWaO6EJvbUXeByAm%y>xP0eV)K9JzRPhy* z`*(MUb%2K(HKrL51zz$R(Y#Wc(Eyp`D$*c$?t~<_3BS5u9*xi;uY?#^6d8?y zEDu>C>^8V8S|1n~d9O+v$O0?)gyH%h>^6tdO*bP@A3a;e6U*P2fw5ah7p{9|2^3U( zNi1Z4gxVL1^ok5rh{^b8!jJ}1 z+Mk#BHSzv^%;MFR<^5>ncP+>G=+0l>Lyj}OuPcWs7KS~`ybo#!FK(1+yDFAh@9af6 zi7ZIk6eXGkq6bQH{6=?qsbN~KNwOfoV5Yik+UsAO2ot*EXI;Z`moI`xBX4b(GSCgY zaVxg=N!?m8VF6-$Zts4ay>ibnSxyMCwDIs+X{L#!S~=woy7=OQ`<^?1b~k0@rx=xK z!)>s3h9H~Hb+FGF6hbbVqXIA{p)UZ6)XP}c7xc_wdUo=iH%+7@b^P%UOP^tz2y~N7 zNB`!bMm4Xl^mmg>R$b#f$q<_x#idda!%K|0eT8cL+f8RSYn<92T!-gjPTIZyO;@y8 z+~j70YJmxIq7??pkgv(_RrFtvaSK3#b%ywqOig&x?y0q&1Kw@Wz96B2jui*LCuLo- z7RRj`1%eSw=TSt?YCY>C=#FB_-)gJ4VQ_JY-F>Otu_h@|Wz+lp$T!f`vQvP1#bLDW z&f?>Q%6$#FgwJ!Ob*a~Y58BgQ96A|!P*PbuHEI&mKlIk_W(2?4;PULX#}{q?34y9J z#s_qsJrGYtv}Q=CRsAw}D{A${#_TY@_Szk%$#dm)_xY_H0Oe1!$&T;tPId})?AbK^ zqoEsxxC_cnz^TU4g34gBOR9~@LicgTvgMZ4qBn0AY1A<0AgWfc_`d~V55`z!#A=)+ zSB`haw*4VFTtk;vf+?@)@_{?gdntHYv4~U!Cn!>KeIuRfWQF_qsm*7@qOp*PO?t~K zW8D&*Dz4U1`0(|Yk#f#g?&-f|EIP*xN}Gbb7IcZx`t%J&;Ih?V2iWB+Nr_x(puOYh zNwgX%Dp9k*raXArQDH7`b4b}6G+BClzc%QA7_Q&|LyCw6mVr`~&)$6#J?wsiyD7Zp zxG-MwoxH)TB=@1wSXt|TFvIebY98r@LF@9HQLudWx99Z8EIF0*WXR;c+%*}Nd>?|5 zo0LvgL^a22Mt)iU1pZ6u(SG2x3(^bFwE$m#2A}YNnx`(bTv~q%vO-Les(%T7ye+7>IsvIX}#r3rI-4RcG6%!-M+a65Eb-0O&;NP0W4qa zakia{k6!=akYB%hPw-76MERfArqlGXM4fSOY03o$cL!lHlh;rX>p*>-6y(a&rc|sb z5i%gY;5(8ycKy2W?Xkggv@lsoN#)kMZRsJK4EceiL-Q|5zJK0Ff$1NIA8Vz3cd95b z_RbI7A%JcwNp4({i}qGiP7G8fn!hT)0U`)CeK)2!OwNuz!Hc|;y*&KQ)H(TlEeWPF zQVst5V8HRe1{<(n(b)eI`qNLdw&dYYk&6Rq;rwu89p+fsl*bT@cA*WTyex9z^K-+4 ziXSu+klxrMFo&#?KcE=?3& z$zP0C=FWPkwe9xW;`MSVL3PTnImjfjau~O=mUPvB@11zk^^&(Hhmgp7nz{{qBT|K8 zME46z!gt^3a@$Br3<}%*lUQ}|cxOt1WskjFruOh&AL3#E`|FcwcS=&bXPm7!2Drxg~_8Rjt57bCvi$WFo%KN0l-K4>V zp7mRg_Er}D+YD+n{4w;vs@+Y?fLk)0rAX&nNPf~Y9Vc-vJ(Sh6=wp!?NKV0J?=unx z@645-;15d8xl+cob(c<#4G%i5bye%bU`yl|R6__+_VEwrt-ltlqBEj!+poyHH1A^In#mQz&yQUiYf>x* zvaEgi?Vc(BzRQI_xB2|ocbm7U+uc!JF(!K7uk0AOVcowpE|gw=fhCTchQg4N6AE1H zScl`!SRsd=Js!!?`wKQQ4w~722YhrEA^mY1)6UvY?9RBb6eEILJJ(+i-|W(! z`ui&gGE5yauhqxhWzNu%$#8tn)$Xr#)ZdbH;qynk0;kTBHqLsJ_6%K~o*Enha(tH$L!IpTJANA6}=g>lnHcAh}Hu3MjU3p*vcKdUvvF`BG_D2}fZw@OJ zU4nPUN|5E|H%KgtPA+a`llSq*AK*3L6{OdGzO^`_JTx*@>c+GlrrIa*|K2DLgYQtI z*MWNrLuTMz!3Krsw65b;?7YV*Aepd!fd*Qn0PAwW0@mf<^uP3rzkN^~sAzrcb zw#Lj=yddM8ljE0R-w^bPUR#Cw=>99G8K~t~h$?8c0PV||EjlWHSZlpuHyBnlKQc6;RAw*JXknV1f z?vh4o2x$bQy9S2we}8Me-(Eh=V%?d0?>=Ymv*X#%7Cd0k4nP^{DNZ3;*HxNZqTH66(#1`Z#Gd@d{1TS7oL%2(co8>Xc7^5QrAz3A7)KwfEreVjfeO*0GQn72Yft%x7^P zO>|(&F;@el8o}VI4`4(HwbxS%iD@FTukoGvF3a2629eZp1!#NnJd~oYU zj@}2~AYC+_MNW1hIRe%u)~nl;Mf6vXyioT>G}5^eZ+s$p_%}SBVWQL~cNK-=fJ|54Io)k;ptiDEz!5o(-i)ru>Pyy8Kk&VATs?b?D~nDfbj z)34lDT%w}Ihu9wUq`aQ}K@4A@jg|L1Uz3c0>%Y%*Z76DvwK*x?1BJ|{$J#!~rK(o< z+UuG`zv2&6P?S<9Jj^TZ*DHxdFOi9z()S%bzE2z6e>86(7~i)-JgZHKlIMR+wy9)l zBU1$oAHeI?TT#5Fw@<~57|W9NA<;GM&Kl6tz_B84I>1wG+V+A~;k@o-=$@CSbPa(AVMJlTA3#6y^Zh}XLyb$X?0z4^)x^Y_0J3+J0w zWD0Fspv5#dT#xdLEo9!!Z&i})#ht=S!vm>%ruHp<+<-0i5xmz}G~tIBmmTmWIc zP4qaD9hL4T{sLjL*=%@#I|HW|0jE2W87i<_u>1Yce310bw)?w;StSiZ$B&J5XePj^ zoao`zT&BG-F7|uhYz8HLVoXy4bjNCB}4pA?q*h*N3*J6G&c%0iTy>8$j2;E zTC6Bl<`Imj7L>Th=K`z>qU=UPdWCuTW<3K=JhFYhMNYNH|3Kd5&e}T3PRb&=H+D^F z4dG6W=is!_!_ua`F=@8X*)hqGNY1TJzmE(1{uLzF(6?0!cb{Z_J%VW; za(qOyn=YToXv!X`iHxO1plg;*&)(Tc9=}mB()rVB5{TF5XJkB#IsEIw-&A$7-SG5e z`eX91uJN%S)I$y8Ay+q#!Qba?o+@T$e70o|^MJZ#WB@MfI567o(EK?ugFHB6VNST} z&g*HrgNe9|oE@!%aEVd%1z~p8F3G>APT*rOS-4x z`V*BN1DeEykiNf+V;~4=rC9-QgBPw-TbEk6eU#yq(UoCbi9)Uiuj*st-~$ic9aduQ zi9pG+YHJdlb*9Fer#5W^8=E2ReXB(v5xs%3V){oAI+eq>tg%};N0IG5s%i(Etvg$+uwPoz7O)Y?Jt0u5S7- zj7p6=2?mT^bTg2~Aj@;(DgFM@bx?mVdL0iN`d%67TDKGOIl%FDS0a}1xsSj(4 zZC_`4Tt{}F_X-Z5mybDAx_7FIpK*(?1dDQ`o!eIrM%*rO4NTJmOimTPU~Vs<>W6) zx>A^|_-{NF(NI(_4b-kmXdw+??~|5FLV2DCfgF-+Z{n?dr~7tmh<+>cyhwj>-h)9+ zowZ`Bi9XB+$0X23z$=w;_^D_PzV=MbV47U>5bwoCh_CknT<1bXM)&-KGFzzEOgYb3 z(eSz9+McoLsB4cHm~6aVhw1)LWyS0)*#|18r<4r-3X+|qy)Z*PWsCajQXzelq)Ysm z&!xu!tar2ZgQN-GDLTSvo$q~m%M?-D99N{~PH#(7{<2-Gs%3`U0Tpxm&}W3wL{_ox zD(IpV83Oj)ra8*0I`k4}Zu`RR*+FMal(5&}>$diR2L~du!_YpHb4x{D(jXj57VVNS zjp1}uvMW`|AvAj!1>fl+d)#KV@h-7OZZ>3gc|?Lne@2=9@7-)NO}Sz)-V0YrS+ZmQ z)bHiNdVJQZj9a~+!0Jv(h`<)rp=_d=RFGS+hsJmcr6lH>zl0vH9tqx%T; zIfqnoNvEao(#I<1>qO2}DCd|vk}O#PH@F5J2R%zWVl+oC1>UIC2$w8s(R!pV4dklHBDGH3G#l}+F1f3Q#nBf)0@@zNg zMT$^XB}C;LjPJgbSZCHxWs9LD4Y*}nL}U!;cFkfauV%Ej)VhT3Iqta;8ey8apqlB)j!^T^V|*kl8&Z8VPEUDwti z;RI63o$rnCYMwwUf7CqkSBNaaoZ=n*R%V}^R}vJQn^fAtb?zTyqZyM&{0hc7SpJoM zzUlV~MrlYwy6Zc=3W?GuX$v8QrgvM!*2G8Gq>z3l!S(|YtHH3+hnpFG$K;@r24Z* zki^knpdNCdlUygM^f(*%njXi}^{t%FLj^XEWQZdf)k&BAlb}f4Aa^C_*utMp(w7Cg zni1CJwph>Rn+B`{5C6c$o-rM6Zta8&JgFaDS^i#AcTs%ME9T^RT%8cyqX`QWH zYhyJ`k5bDi(?=9_s*NCwB(7d+)>tk4@ov%VRn~!#{z5$^+hu#unYg>d(A~)$%T0TT zkv25fDZl&}9e}*e5P^4_iWbj1JSFfrMGIWjNZN54PgqCX5LrTo*v{V%@0tYrKi@AS!RT%*D9x2;Nuion+KqGDd<(=q~r zIRLMlp&O!iBm^_}J#y;JWDD5$U?hzncnk+4ow`Rp&bPA(nQLMD4dXZ;DX2N1XBE;w zdHTY>VwQVjqX*UefPMA$*83ipsoxZ}r@Yrg17oNdwU0WkbcDrvo-@Pdn`kL8%vgGd zo;WMWZbj(mak{iDrd`8vu65YRcNxi)Z=~(lIhYjTBwln8XL(T8!58}jbB6Ph7&YyX z7{giSi+5R~AaoPP>{k-8j4Xb0@OZHdDb+2hfxNjEoYd}AC5Ug>%b%J*zcOj-TvPbW zq`Zis|6U~l^^z63_#W}RH3FV+&he4^XZDX1nf;=0aHM^<9l1pQ>$;Sc+z{K}W=xu) z0|Je_aYmEIFIJREBpqM%ci~EZQ{nKyk5M5Oce+rQ>AZj?W)|g!t|lr+!buDJNah-J zl2eFg1jg7(h?1v$XsW<1@Eqf9Z#+qV>FS&VIS-ODIB1UZPU$Il(ETSt{JmrhM?M1y z0+%ht_P^xZH`5gAXcEV}Ozt|dKe|e(N2`kmEQKm3H3iv{qZS*R2OL=O0XkDYEGk{P zg-pNqlr-~UN$)v)pPdH`8c#&~7iz(MZ=*36mtPn2G9L$$?#Tzp9vvtqD%utZkHx4Z z;f(a6hW$vIXx9z)RAJP?jE7A0x#x~mo9Yz7B@GMA^R#Dltb@4rchCZG1#JD>>!s#6 z{;ZumX%h8w=9BwZT|7pc%o8Q-nQS(S_*bWJ8oxlC@&2}3sa+6Au1jeBG!Je3Kn-2> zI~A3(xUAkq7W5mGyC?(WRupgQD&OAQW8T^#ZNliBjdtM0NvDY1V={#KgHqgOlWm_b z@xZPEA+Jutp0wl3&>p_E4-*w2*u0$0vS#U(HMahBkQ(tAWOnSuZ6|H_SDlYUM-!MQ z-h0yl%ilJtgKFO>Yjb#73Hw(8vAxyV3xpr06pO@macewS?x6`SN53Z#I`2=jU8|k% zNcvb*!UJb|kbd~B+j=s+1{RR30&kkg|B`ewd?W=7fymNn>K$Y`UjLx>ib}M`Kbhcj zoM4ecg`9Z&A&}92Gu^~|;-yz1>E@bFoSWdq&h}_x(-N-3@&I^}uQVTw08*hr2Wr{V z3M}H+T;N@5b=@@;15K12Nf?Uk@0%-|HDBk?;ANdFNOj03H@Bd;JBsgQ3oWELPgNf@ z4{cWOK6&RZv*&xu^beOw`s=FG$Vgo|eL>e*b*HW=1pr)H+O)-nxIekLDXe~ku-wmC zw3ok&R|q-W`SCmDbHMYSRVUMEcI|D=hZeISSAOFSQ`vL1lH4$*RvlMeM1AGMTYct7 zrrOZqrI8dJ!_ClN?Qd1ty6JNJM-oiSpjOOJGS5Ib3?knofl1k;LCSd2a>H&rA;`jM z5k|Ds=TU>=+J?vR4+c*`H!oY0on(n$RVoxB3z=Iu(uSKW^4?Lt*FPNFF_1qbH~koQ zgRipLuainzgwFcN|51cE^p`sMY}LUXNX2Qk{Fw&bw}^)1F(T*Mhi|b?*E8R$U)d&; z1dVLZ5Qw#kzxq^D)%~hn^_J~M8Zrr*k(w*iT-}`i;2gNsakMJ3halup|<}b8cTN8MZ$%xx^mf+iS-ea!px4-pWE3OhQue1+PLL=U2s9BFhH^hsAxe|`R%;GNxzm5H zQdL~;tnUQf&?G~cJorgqCC{DPqziXw78O1$k=?R?M$RkJ^oDuFa@{frr|HGlAA;8z z%PriWhG=oChJ&3GCO~zdUb>|@$@B0}c%WV1H zXexLYZ8f8*_i@SaC-$;ky5`949yr~RjccUEdB8!>~YYB$wE_r*@ zvUST&^eHe)F%uVvDE@@_kDfav>L*#;ofD@J=W03hTdo%AVD2WBNwl6UUi^$RqC*&$ z5H?P>>5D(B_^OEjbn@RIh>rjT^bCah-`_J}Vkrm}7ljZ+%OkCAP-VlC+M z3U8qko+6L@e2(<*V#cZ&qsbLXw|XU5Fp6n$HC0?=hRC9g-7g@QQDx&P3+BSD9yk8` z9MP5^f&my;hvU6If0mQ_M{$%>FvS6-o7@ab&1tdy4&bRi1O`yOl~&^!JJf|<`od1(+ zXhiN>7PS-R*Jzp=*E4N!#iZP&UNKhrZGG1gxt;0pa~DmrRQ=nB{P@DP55#twpOPo| z3+m}iSc81Vo6344y9=SH9mc?lhd3g%usSWgnCT>A}lOZ>8fLtmK@UXUbt z9#~Pp_E3cuxV$}0p#LI(eN=~#U%g;7(O^;Y3pE$^4_MNb9r>CjAEhP3cm^FSurN_z z;$2AbN+?^WCJRkd>$~!0!RKr4+V5Pt%%PVsvi)b>|rO3W=K-;ftmsGOjS*Bd{P|U&hP}F_H zb30WE<;D*6FZYaOsU5iDkyhQfgcKt|n>yHkNGmML?Fs`O!cI~b>dTYr)^zx72 zumczR3;?ooAQtNL$~`ap%dD3#Pgz2nM>+I{IR;%2Q~*qD;aCPoKL;8hGVxiyESXlp z3sBzpE@nq$)o67~DYfSch%_PCCd=RzzW+cV?mD`D?RF_{GMIc#g#l|WKDGm-*_x&q2<3P4+nSp5x?@D1+ zSY+!VmH9fZL#uA`^SMq2y<-igyd>3ur|F;Rl zjK>Lmu20Gm<-#WED^r@IhU?=7*~ftKlm@z9VUAxwKS=7Bs{osR5voPIM<&vdXx4S# zH(xz8e!okwD4JtJ=v!lB-%Zpwl^~(aMGhKe`{4 z^+pl9`6amjyKH~SX~}##eG4Ml@@Th|?sWwbepxh9r!B~Vs&L50;ZJ&vO-~crbT0=D z{Uqyd(hIrc=&^(=+dt+8*}BIjk*LLK!WTNU8d)ji_J|)t7(_z}0s4L{mbka)jsvu? z^aQ)cjrY#4oeX1_M#a;D_WNtSEs&trTHh<_8s#!)3()|wQgUwXm!B{pdJM6_p%cMn zh#uOXWz1hzhi|JI&MA(;lVIu7kx-6aYYul{>Z5$*oDUcDlBrD29hcj3w02s|xSmjs z@6^$<4xQtAY1J*WH@bwKT2)Z%E#AbiKn)ME=aMehNx6?~j?983Gv8I=j>#0QlIYFnT z65D`a8DYQ-fEF(I4Fiu4bXTS&>lH7F{Tt4-`9av-z4dQ#hb(*#CtrHIF=>?^$hy?U zFZIPu5uhBP}iXTr_4s{U(8Y*+(cA88G=rInZ`EEW3}4n zl~8ItGw6ck-G1W>vcWd;Y++oy59a(dlhedcQk%1S6KXIjU7u=}>zYmgYACrilps&V zvd){UhtsXr_GPN)s{J!gg6|MLz5ROnv0tgXBHecHw($thoOi;3;V=7?EjXLLs6*fPZ^$8ulRT|-pan?i@BN?2VL*yhghcz=m6 zV|VHuaQSdq1qi;LL|a*(=Qt9TW;u?>UcqJdH`gnvQh*37B8jIyl3>t>pnrdHC%t;7 zO3v^iquv5*{dl>vYI$Y8YE@ehn@uSv^zGO7Zsk{?ibKQMN?Vb}W++e#n0pOftCyo1 z8%=>*!0|leuXNZfpy!1Rg(YlRLILth)#-TvtK=URW5v+@`LknU+qj?bPU5m8|KI2B zNY?c;2R4rI`6VtPNd!b{^R?FND=(L8J?`~F%|YRCbWAq@i~PbQqct>)ew5^Iv7;2B zM`!#}MearPZ;!dqu`8f8jz8+W2!Cwy1HY$mft0!jk=iyCp_t4x9PLBsK2?-_U;8r0 z?a0qjV$H-dZpIwpzwlgmX}rbZ8&~sbq*&_b)I>9-aL{EpOY|y!=@5Dv+YpDgC(hIt z5y|ybY8gAD+ux*O)W?N00+<~vwFta_pl^Eic<&rA;_aSHwPGHb~@l{(fwT@V`eKM;cFaQy8S5jTnG zUhbnUR})zPp`MtAP%fAV++=t1sVC*r3;TfPQO<$GyJR$)#GlXwt`D43{c*3S5bV6O z?z3#YlQAS~=tH6Q9{|82|Dv8kY=D4a$B)g@fevTiQ`aN z{}*eu7)fp#VqWEp6{e(t7Jv9so(x7mQ@?-vR&8`KEE#xErk>iq>R)?vY_3|@0*`4a zUF-X)TmzpudNnJFbBKjkKe=pn8{X>#Ly4dQ&ZWGQ-+YD9`wX1N zO*7Zgn3UgG2#3}W`gDrl4Q&G*lr;1V2pGaRR`uM9QlFRytH<#BB?_`?0h$rh2bc`1 zxnBlEEK&VeJ0&H(_7Xm3NA*s4BN`i-!ESjjbW{Qr2VH~k>YQw#5&DY-zldn_=;YYV zhhZeM)j!ZVx~J1`A-(?4?{}}csEWygH7C*gx{@os;RWZA4jw3uA@7Ylof(P=hNFA& zZAs(bss`yjE^MBM?(z6scBs7GV{*$%&-u+TLOup^N#X{3jwWU`Xv~(8&b4+`{!-Fn zEh*+519zXIZhg%4$LiNiz_AOQ3`a=K(D=#D3cv9&E^^EOIjvDH7{+S|VSv#Esn$5a z)f&tgmhn=d~$9zn^TO=<2z?a;}JvRyt3G)a^54Aa{jN)a6 ziHZQs2z1${gDQ#o{Z4-{0?EBAnk2vEfaw3K<@auE=&_+?iBbm<^9k4qM(zE(#qyR{ zBoa%+%KHsDq|c>Ey=PM*EzsuxA0*OqZF*`HHq3HehUzCJk+G5arQTnO4=mpE!n!;% zF^EmrHf1~azY7&{*WTZ=ToCSY;0^QBnNVZoWz46PQm#8scUeirtC}(8j5nbe+^E;% zM_JgY$MDJ@6==U+dUUE?L4{ZO)LsAB(j2D48$x_a$mQiAlt< z_3gIDrry-e;Aj%x(ywY+e!k3&#v61Av^TK-k)0deJZ8%_(rjAMpXa^P_h1mDG*bKK zW8AJ6?wUoch93CHpSWPBvF;ye^dIPg>&<;F-*gODYK~)oIV|TFl(@T=5_7+i&r$y$ zs7)iq(U8GDjcMEYRZqovi*oJah#9PNwqvf#MWB}%W$Jqr_ZE4G1cL| z0(|gAi&2Xq0|^$xLnbIAD2i-v7!gCt@jm$!(TSK1$Qz)Lg0!!G3g?>b$#6gGm)sss z@DYD9ZE5vIu+ZD?aRo}$^b`8L70v)wIh1Si3|WchQY$JnRg0AAJh}QP2V<=C)%!IRStXEzvF6ZfDo!n{waW>lm^l zBp=bQ{-UR31U^R&9O?w^E7nXL8}H-I=f1?#r{N(t@DES~9`$RzpM~YZXBwuk#kj9> zpEXZQUVM4}$of!b!ZbnE*rQz`&7{rt_^Db2Fm2};vnj5Ir%=sFZ(8<*&BQLWuuCz# z(x@NcCb@Xdga+a(AWKU4A8I}_mgm-vj_Gk z8|~W1e18>TTbr{{$+&y?4;1HvM*8b%;9lD%jCSQB131$@7N4Gg#2LXKtW(OIAR+wD znKpud5ktSiQ zA*EuvqM}osjJo>U5u?c zNF&vkwYmU8%|6My9-u>R+DJMEw!5PE;v$gI3z@&&%=P`*%woY-jZ=5c{0C93ZdKu$ z&29MWd*6{Zm�Z)rP&VP5Jg}v!RL&85nZMcY- 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 diff --git a/src/.vuepress/public/images/wp02.jpg b/src/.vuepress/public/images/wp02.jpg deleted file mode 100644 index d047ce1a1f6b813b92a51e85b6714f68925cab51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57342 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 YN@<{DNu)HUkkB!NnlflKl!kx**+!Z7K>z>% diff --git a/src/.vuepress/public/images/wp05.jpg b/src/.vuepress/public/images/wp05.jpg deleted file mode 100644 index 8d159d298e1152bdafd7c4100630a47e88e43ab9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46841 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

X{4E<;=HNac=pyLYjlEOEb!?$zztkmQGC-U6@k z_fg>&Q;C26c4}+}!rbpH*UkO;>w&d)Zk&DoW5gCp^sDjZaXj!kYgHF?aozYW&-Jzz z{ph^nI3dMPn$6&F*Q0RiSL$c=V{o9fae#6k_vPs$WqBWosKNC=eU>*{YtL@KHS69t zH}UPfcY1ls@XhPrO!~eNUYv+W_ZL z)TFWajXnN3)&1*>dUNynHT-9}Ooh(_`?@oVXuuQ1E<;t3=e3)%B7d;yVezU%59%mXnqTz!EX~bt-C+u**hi7{!IkG|J4?dy_#A7*w=^d ztsFuKb^opRQAg|fYDe~Clrd7M_TY2to~^IeP{E2-<2+w%`GNM63|<-+dhf{krqngN zO7L#S(`%;({CV-tuNxmU`KAttd~OP0Xwv#iv&K%Bk#DW1x^o&m7k*v)w`w;axi0^+ z4h75BS>FOnE}F;D*~sypO+eu5coIOBec>Ebr%`J$_b|nm!R5mW4D4I@r&G=~DiGlw z1XbL^Jtz)%k<`+iVYYgu4;IzLWRdaC~VQip=1dXiVo@Rj3PYq}$EylY)TvFrYm zBJbbE2P{9FGP`}MDID~Y%ef`(a;{y`^FZ6U^0D8Als4Y&U;j!*3+zkw1%ReoO-3FJ zeT@2Wx^oJ9@CFJynEVrkTM*(JcA_&)9(Zl!PtRd*-1v`7l3C7gPF1f@NGZ8QY{(SX ziB-q;H}Yv2=c|9su&uEoH?nGkE@)sU+pA~REGgME?{=x!h4SITLy&a}En(AXiLkPil#`-hf>XdKsw&@z zJ$jgG$7xgr9*W!2GI#&M#S82-cPN|`?wSfN!w+{3@0!i9o`I>&6&+aT%Ilob!1K6~ zV~5SsawWe0MCM4!;^ycQuj@e3xnb@!o;|MRq}!7Rj~pYf-}Orr^gU+$@`yfh3E)yY z?X-n@VYF41?RoU_;LbF3)qUkAk$xW?;m{*)S0dSVbMI;=`|O9+TPd15$Q>3~77Lo3 zfy{hyJ{!xDL<03?lYbQC0Qlw8C%Zos*}KB+KGYafyL@iz5vWXRzve`Dn@L4~-TBW4 z`>m)ao92M4GE$0#=Bm*qDx`bmhV3k5n=q2*#(Y!NvC@fo zE=MB5;CBw6_KuJIt0BFCdxNw!7MdJ$6+Cytd*twMTS_jiM1a{97B z4|VfRFA6+ja0F#1c9F!AB;D}Le^OIeBTst1~NcJ z*9GlAiB?8B5E8;m`vva=!SwHmO8{k*D5{T%s{N5pY+Xq#VG0?XyV1LDE9~Do;+;|! zw9T^`WFvaQ4Wx|9EVKo$9Qb+!c;)3XRK(PhX+J^BHLnV4q2>#Mt7DXNSr1d+t%t8? zN3lTr_g0Ck$%;%=GYyx%8)4(i7vPvMUYD3GnOnDg-PUfgYi)g^!`X^b=s)Q-7a6J? zm4|Tai=nBkD3T_yNUb{MuKgxXD*e8)L+L8(0j8DQ)u9P59;Cu@tSHs5feco+)sYYe zLq9+8C=sSOjbn1B?mEPRLhLg;

DGI#g;hr}fYb;Nv>xD~eA6X&3XXv%5|h&E%e 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 YK&<$#3Ge*(;WjOaK4? diff --git a/src/.vuepress/public/images/wp07.png b/src/.vuepress/public/images/wp07.png deleted file mode 100644 index e65162e53421d887fb5c9bacc5589eb05ffe4f1d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4741 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 ZLqHWRCg{n^YmI-Wb+wE%tJR(2{{xskkk|kK diff --git a/src/.vuepress/public/sample/testReport/covertest/test01.html b/src/.vuepress/public/sample/testReport/covertest/test01.html deleted file mode 100644 index d840b4a..0000000 --- a/src/.vuepress/public/sample/testReport/covertest/test01.html +++ /dev/null @@ -1,97 +0,0 @@ - - - - - uroboroSQL code coverage report for covertest/test01 - - - - - - -

-

covertest/test01

-
-
-
- 85% - Lines - 12/14 -
-
- 66% - Branches - 4/6 -
-
- - - - - -
-
-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-
-
2× -2× -2× -2× -2× -2× -2× -1× -1× -  -! -  -  -2× -! -  -2× -2× -
-SELECT
-    *
-FROM
-    TEST    T
-WHERE
-    1       =   1
-/*IF SF.isNotEmpty(id) */
-    /*IF id < 100 */
-AND T.ID    =   /*id*/0
-    /*ELSE*/
-AND T.ID    =   100
-    /*END*/
-/*END*/
-/*IF SF.isNotEmpty(name) */
-AND T.NAME  =   /*name*/''
-/*END*/
-ORDER BY
-    T.ID
-
-
- - - diff --git a/src/.vuepress/public/sample/testReport/covertest/test01_hash_1.html b/src/.vuepress/public/sample/testReport/covertest/test01_hash_1.html deleted file mode 100644 index 14199b3..0000000 --- a/src/.vuepress/public/sample/testReport/covertest/test01_hash_1.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - - uroboroSQL code coverage report for covertest/test01_hash_1 - - - - - - - -

covertest/test01_hash_1

- -
-
- 86% - Lines - 13/15 -
-
- 50% - Branches - 3/6 -
-
- - - - - -
-
-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-
-
1× -1× -1× -1× -1× -1× -1× -1× -1× -  -! -  -  -1× -! -  -1× -1× -1× -
-/* PREFIX */SELECT
-    *
-FROM
-    TEST    T
-WHERE
-    1       =   1
-/*IF SF.isNotEmpty(id) */
-    /*IF id < 100 */
-AND T.ID    =   /*id*/0
-    /*ELSE*/
-AND T.ID    =   100
-    /*END*/
-/*END*/
-/*IF SF.isNotEmpty(name) */
-AND T.NAME  =   /*name*/''
-/*END*/
-ORDER BY
-    T.ID
-/* SUFFIX */
-
- - - diff --git a/src/.vuepress/public/sample/testReport/covertest/test02.html b/src/.vuepress/public/sample/testReport/covertest/test02.html deleted file mode 100644 index 7084dea..0000000 --- a/src/.vuepress/public/sample/testReport/covertest/test02.html +++ /dev/null @@ -1,97 +0,0 @@ - - - - - uroboroSQL code coverage report for covertest/test02 - - - - - - - -

covertest/test02

- -
-
- 71% - Lines - 10/14 -
-
- 33% - Branches - 2/6 -
-
- - - - - -
-
-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-
-
1× -1× -1× -1× -1× -1× -1× -! -! -  -! -  -  -1× -! -  -1× -1× -
-SELECT
-    *
-FROM
-    TEST    T
-WHERE
-    1       =   1
-/*IF SF.isNotEmpty(id) */
-    /*IF id < 100 */
-AND T.ID    =   /*id*/0
-    /*ELSE*/
-AND T.ID    =   100
-    /*END*/
-/*END*/
-/*IF SF.isNotEmpty(name) */
-AND T.NAME  =   /*name*/''
-/*END*/
-ORDER BY
-    T.ID
-
-
- - - diff --git a/src/.vuepress/public/sample/testReport/covertest/test03.html b/src/.vuepress/public/sample/testReport/covertest/test03.html deleted file mode 100644 index 30128bf..0000000 --- a/src/.vuepress/public/sample/testReport/covertest/test03.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - uroboroSQL code coverage report for covertest/test03 - - - - - - - -

covertest/test03

- -
-
- 70% - Lines - 14/20 -
-
- 33% - Branches - 4/12 -
-
- - - - - -
-
-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-
-
1× -1× -  -1× -1× -1× -1× -1× -1× -1× -! -! -! -! -  -! -  -  -1× -! -  -1× -1× -  -1× -1× -
-/*BEGIN*/
-/* AAAAAAAAAAAA */
-/*END*/
-SELECT
-    *
-FROM
-    TEST    T
-WHERE
-    1       =   1
-/*IF SF.isNotEmpty(id) */
-    /*IF id < 100 */
-AND T.ID    =   /*id*/0
-    /*ELIF id >= 100 */
-AND 1       =   1
-    /*ELSE*/
-AND T.ID    =   100
-    /*END*/
-/*END*/
-/*IF SF.isNotEmpty(name) */
-AND T.NAME  =   /*name*/''
-/*END*/
-/*IF true */
--- ELSEaaa
-/*END*/
-ORDER BY
-    T.ID
-
-
- - - diff --git a/src/.vuepress/public/sample/testReport/example/select_test.html b/src/.vuepress/public/sample/testReport/example/select_test.html deleted file mode 100644 index c20c7c8..0000000 --- a/src/.vuepress/public/sample/testReport/example/select_test.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - - uroboroSQL code coverage report for example/select_test - - - - - - - -

example/select_test

- -
-
- 88% - Lines - 8/9 -
-
- 50% - Branches - 2/4 -
-
- - - - - -
-
-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-
-
1× -1× -1× -1× -1× -1× -  -1× -! -  -1× -
-select
-	*
-from test t
-where 1 = 1
-/*IF SF.isNotEmpty(id) */
-and	t.id = /*id*/''
-/*END*/
-/*IF SF.isNotEmpty(name) */
-and	t.name = /*name*/''
-/*END*/
-order by t.id
-
-
- - - diff --git a/src/.vuepress/public/sample/testReport/highlight.pack.js b/src/.vuepress/public/sample/testReport/highlight.pack.js deleted file mode 100644 index 4cabbc1..0000000 --- a/src/.vuepress/public/sample/testReport/highlight.pack.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! highlight.js v9.10.0 | BSD3 License | git.io/hljslicense */ -!function(e){var n="object"==typeof window&&window||"object"==typeof self&&self;"undefined"!=typeof exports?e(exports):n&&(n.hljs=e({}),"function"==typeof define&&define.amd&&define([],function(){return n.hljs}))}(function(e){function n(e){return e.replace(/[&<>]/gm,function(e){return j[e]})}function t(e){return e.nodeName.toLowerCase()}function r(e,n){var t=e&&e.exec(n);return t&&0===t.index}function a(e){return k.test(e)}function i(e){var n,t,r,i,o=e.className+" ";if(o+=e.parentNode?e.parentNode.className:"",t=B.exec(o))return w(t[1])?t[1]:"no-highlight";for(o=o.split(/\s+/),n=0,r=o.length;r>n;n++)if(i=o[n],a(i)||w(i))return i}function o(e){var n,t={},r=Array.prototype.slice.call(arguments,1);for(n in e)t[n]=e[n];return r.forEach(function(e){for(n in e)t[n]=e[n]}),t}function u(e){var n=[];return function r(e,a){for(var i=e.firstChild;i;i=i.nextSibling)3===i.nodeType?a+=i.nodeValue.length:1===i.nodeType&&(n.push({event:"start",offset:a,node:i}),a=r(i,a),t(i).match(/br|hr|img|input/)||n.push({event:"stop",offset:a,node:i}));return a}(e,0),n}function c(e,r,a){function i(){return e.length&&r.length?e[0].offset!==r[0].offset?e[0].offset"}function u(e){l+=""}function c(e){("start"===e.event?o:u)(e.node)}for(var s=0,l="",f=[];e.length||r.length;){var g=i();if(l+=n(a.substring(s,g[0].offset)),s=g[0].offset,g===e){f.reverse().forEach(u);do c(g.splice(0,1)[0]),g=i();while(g===e&&g.length&&g[0].offset===s);f.reverse().forEach(o)}else"start"===g[0].event?f.push(g[0].node):f.pop(),c(g.splice(0,1)[0])}return l+n(a.substr(s))}function s(e){return e.v&&!e.cached_variants&&(e.cached_variants=e.v.map(function(n){return o(e,{v:null},n)})),e.cached_variants||e.eW&&[o(e)]||[e]}function l(e){function n(e){return e&&e.source||e}function t(t,r){return new RegExp(n(t),"m"+(e.cI?"i":"")+(r?"g":""))}function r(a,i){if(!a.compiled){if(a.compiled=!0,a.k=a.k||a.bK,a.k){var o={},u=function(n,t){e.cI&&(t=t.toLowerCase()),t.split(" ").forEach(function(e){var t=e.split("|");o[t[0]]=[n,t[1]?Number(t[1]):1]})};"string"==typeof a.k?u("keyword",a.k):x(a.k).forEach(function(e){u(e,a.k[e])}),a.k=o}a.lR=t(a.l||/\w+/,!0),i&&(a.bK&&(a.b="\\b("+a.bK.split(" ").join("|")+")\\b"),a.b||(a.b=/\B|\b/),a.bR=t(a.b),a.e||a.eW||(a.e=/\B|\b/),a.e&&(a.eR=t(a.e)),a.tE=n(a.e)||"",a.eW&&i.tE&&(a.tE+=(a.e?"|":"")+i.tE)),a.i&&(a.iR=t(a.i)),null==a.r&&(a.r=1),a.c||(a.c=[]),a.c=Array.prototype.concat.apply([],a.c.map(function(e){return s("self"===e?a:e)})),a.c.forEach(function(e){r(e,a)}),a.starts&&r(a.starts,i);var c=a.c.map(function(e){return e.bK?"\\.?("+e.b+")\\.?":e.b}).concat([a.tE,a.i]).map(n).filter(Boolean);a.t=c.length?t(c.join("|"),!0):{exec:function(){return null}}}}r(e)}function f(e,t,a,i){function o(e,n){var t,a;for(t=0,a=n.c.length;a>t;t++)if(r(n.c[t].bR,e))return n.c[t]}function u(e,n){if(r(e.eR,n)){for(;e.endsParent&&e.parent;)e=e.parent;return e}return e.eW?u(e.parent,n):void 0}function c(e,n){return!a&&r(n.iR,e)}function s(e,n){var t=N.cI?n[0].toLowerCase():n[0];return e.k.hasOwnProperty(t)&&e.k[t]}function p(e,n,t,r){var a=r?"":I.classPrefix,i='',i+n+o}function h(){var e,t,r,a;if(!E.k)return n(k);for(a="",t=0,E.lR.lastIndex=0,r=E.lR.exec(k);r;)a+=n(k.substring(t,r.index)),e=s(E,r),e?(B+=e[1],a+=p(e[0],n(r[0]))):a+=n(r[0]),t=E.lR.lastIndex,r=E.lR.exec(k);return a+n(k.substr(t))}function d(){var e="string"==typeof E.sL;if(e&&!L[E.sL])return n(k);var t=e?f(E.sL,k,!0,x[E.sL]):g(k,E.sL.length?E.sL:void 0);return E.r>0&&(B+=t.r),e&&(x[E.sL]=t.top),p(t.language,t.value,!1,!0)}function b(){y+=null!=E.sL?d():h(),k=""}function v(e){y+=e.cN?p(e.cN,"",!0):"",E=Object.create(e,{parent:{value:E}})}function m(e,n){if(k+=e,null==n)return b(),0;var t=o(n,E);if(t)return t.skip?k+=n:(t.eB&&(k+=n),b(),t.rB||t.eB||(k=n)),v(t,n),t.rB?0:n.length;var r=u(E,n);if(r){var a=E;a.skip?k+=n:(a.rE||a.eE||(k+=n),b(),a.eE&&(k=n));do E.cN&&(y+=C),E.skip||(B+=E.r),E=E.parent;while(E!==r.parent);return r.starts&&v(r.starts,""),a.rE?0:n.length}if(c(n,E))throw new Error('Illegal lexeme "'+n+'" for mode "'+(E.cN||"")+'"');return k+=n,n.length||1}var N=w(e);if(!N)throw new Error('Unknown language: "'+e+'"');l(N);var R,E=i||N,x={},y="";for(R=E;R!==N;R=R.parent)R.cN&&(y=p(R.cN,"",!0)+y);var k="",B=0;try{for(var M,j,O=0;;){if(E.t.lastIndex=O,M=E.t.exec(t),!M)break;j=m(t.substring(O,M.index),M[0]),O=M.index+j}for(m(t.substr(O)),R=E;R.parent;R=R.parent)R.cN&&(y+=C);return{r:B,value:y,language:e,top:E}}catch(T){if(T.message&&-1!==T.message.indexOf("Illegal"))return{r:0,value:n(t)};throw T}}function g(e,t){t=t||I.languages||x(L);var r={r:0,value:n(e)},a=r;return t.filter(w).forEach(function(n){var t=f(n,e,!1);t.language=n,t.r>a.r&&(a=t),t.r>r.r&&(a=r,r=t)}),a.language&&(r.second_best=a),r}function p(e){return I.tabReplace||I.useBR?e.replace(M,function(e,n){return I.useBR&&"\n"===e?"
":I.tabReplace?n.replace(/\t/g,I.tabReplace):""}):e}function h(e,n,t){var r=n?y[n]:t,a=[e.trim()];return e.match(/\bhljs\b/)||a.push("hljs"),-1===e.indexOf(r)&&a.push(r),a.join(" ").trim()}function d(e){var n,t,r,o,s,l=i(e);a(l)||(I.useBR?(n=document.createElementNS("http://www.w3.org/1999/xhtml","div"),n.innerHTML=e.innerHTML.replace(/\n/g,"").replace(//g,"\n")):n=e,s=n.textContent,r=l?f(l,s,!0):g(s),t=u(n),t.length&&(o=document.createElementNS("http://www.w3.org/1999/xhtml","div"),o.innerHTML=r.value,r.value=c(t,u(o),s)),r.value=p(r.value),e.innerHTML=r.value,e.className=h(e.className,l,r.language),e.result={language:r.language,re:r.r},r.second_best&&(e.second_best={language:r.second_best.language,re:r.second_best.r}))}function b(e){I=o(I,e)}function v(){if(!v.called){v.called=!0;var e=document.querySelectorAll("pre code");E.forEach.call(e,d)}}function m(){addEventListener("DOMContentLoaded",v,!1),addEventListener("load",v,!1)}function N(n,t){var r=L[n]=t(e);r.aliases&&r.aliases.forEach(function(e){y[e]=n})}function R(){return x(L)}function w(e){return e=(e||"").toLowerCase(),L[e]||L[y[e]]}var E=[],x=Object.keys,L={},y={},k=/^(no-?highlight|plain|text)$/i,B=/\blang(?:uage)?-([\w-]+)\b/i,M=/((^(<[^>]+>|\t|)+|(?:\n)))/gm,C="
",I={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0},j={"&":"&","<":"<",">":">"};return e.highlight=f,e.highlightAuto=g,e.fixMarkup=p,e.highlightBlock=d,e.configure=b,e.initHighlighting=v,e.initHighlightingOnLoad=m,e.registerLanguage=N,e.listLanguages=R,e.getLanguage=w,e.inherit=o,e.IR="[a-zA-Z]\\w*",e.UIR="[a-zA-Z_]\\w*",e.NR="\\b\\d+(\\.\\d+)?",e.CNR="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",e.BNR="\\b(0b[01]+)",e.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",e.BE={b:"\\\\[\\s\\S]",r:0},e.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[e.BE]},e.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[e.BE]},e.PWM={b:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|like)\b/},e.C=function(n,t,r){var a=e.inherit({cN:"comment",b:n,e:t,c:[]},r||{});return a.c.push(e.PWM),a.c.push({cN:"doctag",b:"(?:TODO|FIXME|NOTE|BUG|XXX):",r:0}),a},e.CLCM=e.C("//","$"),e.CBCM=e.C("/\\*","\\*/"),e.HCM=e.C("#","$"),e.NM={cN:"number",b:e.NR,r:0},e.CNM={cN:"number",b:e.CNR,r:0},e.BNM={cN:"number",b:e.BNR,r:0},e.CSSNM={cN:"number",b:e.NR+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",r:0},e.RM={cN:"regexp",b:/\//,e:/\/[gimuy]*/,i:/\n/,c:[e.BE,{b:/\[/,e:/\]/,r:0,c:[e.BE]}]},e.TM={cN:"title",b:e.IR,r:0},e.UTM={cN:"title",b:e.UIR,r:0},e.METHOD_GUARD={b:"\\.\\s*"+e.UIR,r:0},e});hljs.registerLanguage("sql",function(e){var t=e.C("--","$");return{cI:!0,i:/[<>{}*#]/,c:[{bK:"begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke comment",e:/;/,eW:!0,l:/[\w\.]+/,k:{keyword:"abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias allocate allow alter always analyze ancillary and any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound buffer_cache buffer_pool build bulk by byte byteordermark bytes cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain export export_set extended extent external external_1 external_2 externally extract failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour http id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists keep keep_duplicates key keys kill language large last last_day last_insert_id last_value lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second section securefile security seed segment select self sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime table tables tablespace tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek",literal:"true false null",built_in:"array bigint binary bit blob boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text varchar varying void"},c:[{cN:"string",b:"'",e:"'",c:[e.BE,{b:"''"}]},{cN:"string",b:'"',e:'"',c:[e.BE,{b:'""'}]},{cN:"string",b:"`",e:"`",c:[e.BE]},e.CNM,e.CBCM,t]},e.CBCM,t]}}); \ No newline at end of file diff --git a/src/.vuepress/public/sample/testReport/icon.png b/src/.vuepress/public/sample/testReport/icon.png deleted file mode 100644 index 00a7ae65a57afafc835299f5467711fa1641a1c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26019 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 Eg6N@KF8}}l diff --git a/src/.vuepress/public/sample/testReport/index.html b/src/.vuepress/public/sample/testReport/index.html deleted file mode 100644 index 5a1b882..0000000 --- a/src/.vuepress/public/sample/testReport/index.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - uroboroSQL code coverage report - - - - - - - -

Code coverage report Summary

-
-
- 79% - Lines - 57/72 -
-
- 44% - Branches - 15/34 -
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FileLinesBranches
covertest/test01
85%12/1466%4/6
covertest/test01_hash_1
86%13/1550%3/6
covertest/test02
71%10/1433%2/6
covertest/test03
70%14/2033%4/12
example/select_test
88%8/950%2/4
-
-
- \ No newline at end of file diff --git a/src/.vuepress/public/sample/testReport/jquery-3.2.0.min.js b/src/.vuepress/public/sample/testReport/jquery-3.2.0.min.js deleted file mode 100644 index 2ec0d1d..0000000 --- a/src/.vuepress/public/sample/testReport/jquery-3.2.0.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/*! jQuery v3.2.0 | (c) JS Foundation and other contributors | jquery.org/license */ -!function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.2.0",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null==a?f.call(this):a<0?this[a+this.length]:this[a]},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(a<0?b:0);return this.pushStack(c>=0&&c0&&b-1 in a)}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0&&("form"in a||"label"in a)},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"form"in b?b.parentNode&&b.disabled===!1?"label"in b?"label"in b.parentNode?b.parentNode.disabled===a:b.disabled===a:b.isDisabled===a||b.isDisabled!==!a&&ea(b)===a:b.disabled===a:"label"in b&&b.disabled===a}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}}):(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c,d,e,f=b.getElementById(a);if(f){if(c=f.getAttributeNode("id"),c&&c.value===a)return[f];e=b.getElementsByName(a),d=0;while(f=e[d++])if(c=f.getAttributeNode("id"),c&&c.value===a)return[f]}return[]}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:!b||(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b&&(e===c||e.slice(0,c.length+1)===c+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,c,e){var f,i,j,k,l,m="function"==typeof a&&a,n=!e&&g(a=m.selector||a);if(c=c||[],1===n.length){if(i=n[0]=n[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&9===b.nodeType&&p&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(_,aa),b)||[])[0],!b)return c;m&&(b=b.parentNode),a=a.slice(i.shift().value.length)}f=V.needsContext.test(a)?0:i.length;while(f--){if(j=i[f],d.relative[k=j.type])break;if((l=d.find[k])&&(e=l(j.matches[0].replace(_,aa),$.test(i[0].type)&&qa(b.parentNode)||b))){if(i.splice(f,1),a=e.length&&sa(i),!a)return G.apply(c,e),c;break}}}return(m||h(a,n))(e,b,!p,c,!b||$.test(a)&&qa(b.parentNode)||b),c},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext;function B(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()}var C=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,D=/^.[^:#\[\.,]*$/;function E(a,b,c){return r.isFunction(b)?r.grep(a,function(a,d){return!!b.call(a,d,a)!==c}):b.nodeType?r.grep(a,function(a){return a===b!==c}):"string"!=typeof b?r.grep(a,function(a){return i.call(b,a)>-1!==c}):D.test(b)?r.filter(b,a,c):(b=r.filter(b,a),r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType}))}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(E(this,a||[],!1))},not:function(a){return this.pushStack(E(this,a||[],!0))},is:function(a){return!!E(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var F,G=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,H=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||F,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:G.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),C.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};H.prototype=r.fn,F=r(d);var I=/^(?:parents|prev(?:Until|All))/,J={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function K(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return K(a,"nextSibling")},prev:function(a){return K(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return B(a,"iframe")?a.contentDocument:(B(a,"template")&&(a=a.content||a),r.merge([],a.childNodes))}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(J[a]||r.uniqueSort(e),I.test(a)&&e.reverse()),this.pushStack(e)}});var L=/[^\x20\t\r\n\f]+/g;function M(a){var b={};return r.each(a.match(L)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?M(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=e||a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function N(a){return a}function O(a){throw a}function P(a,b,c,d){var e;try{a&&r.isFunction(e=a.promise)?e.call(a).done(b).fail(c):a&&r.isFunction(e=a.then)?e.call(a,b,c):b.apply(void 0,[a].slice(d))}catch(a){c.apply(void 0,[a])}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b=f&&(d!==O&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:N,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:N)),c[2][3].add(g(0,a,r.isFunction(d)?d:O))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(P(a,g.done(h(c)).resolve,g.reject,!b),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)P(e[c],h(c),g.reject);return g.promise()}});var Q=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&Q.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var R=r.Deferred();r.fn.ready=function(a){return R.then(a)["catch"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||R.resolveWith(d,[r]))}}),r.ready.then=R.then;function S(){d.removeEventListener("DOMContentLoaded",S), -a.removeEventListener("load",S),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",S),a.addEventListener("load",S));var T=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)T(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h1,null,!0)},removeData:function(a){return this.each(function(){X.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=W.get(a,b),c&&(!d||Array.isArray(c)?d=W.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return W.get(a,c)||W.access(a,c,{empty:r.Callbacks("once memory").add(function(){W.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length\x20\t\r\n\f]+)/i,la=/^$|\/(?:java|ecma)script/i,ma={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ma.optgroup=ma.option,ma.tbody=ma.tfoot=ma.colgroup=ma.caption=ma.thead,ma.th=ma.td;function na(a,b){var c;return c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[],void 0===b||b&&B(a,b)?r.merge([a],c):c}function oa(a,b){for(var c=0,d=a.length;c-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=na(l.appendChild(f),"script"),j&&oa(g),c){k=0;while(f=g[k++])la.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var ra=d.documentElement,sa=/^key/,ta=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ua=/^([^.]*)(?:\.(.+)|)/;function va(){return!0}function wa(){return!1}function xa(){try{return d.activeElement}catch(a){}}function ya(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ya(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=wa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(ra,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(L)||[""],j=b.length;while(j--)h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.hasData(a)&&W.get(a);if(q&&(i=q.events)){b=(b||"").match(L)||[""],j=b.length;while(j--)if(h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&W.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(W.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c=1))for(;j!==this;j=j.parentNode||this)if(1===j.nodeType&&("click"!==a.type||j.disabled!==!0)){for(f=[],g={},c=0;c-1:r.find(e,this,null,[j]).length),g[e]&&f.push(d);f.length&&h.push({elem:j,handlers:f})}return j=this,i\x20\t\r\n\f]*)[^>]*)\/>/gi,Aa=/\s*$/g;function Ea(a,b){return B(a,"table")&&B(11!==b.nodeType?b:b.firstChild,"tr")?r(">tbody",a)[0]||a:a}function Fa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Ga(a){var b=Ca.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ha(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(W.hasData(a)&&(f=W.access(a),g=W.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c1&&"string"==typeof q&&!o.checkClone&&Ba.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ja(f,b,c,d)});if(m&&(e=qa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(na(e,"script"),Fa),i=h.length;l")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=na(h),f=na(a),d=0,e=f.length;d0&&oa(g,!i&&na(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(U(c)){if(b=c[W.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[W.expando]=void 0}c[X.expando]&&(c[X.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ka(this,a,!0)},remove:function(a){return Ka(this,a)},text:function(a){return T(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.appendChild(a)}})},prepend:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(na(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return T(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!Aa.test(a)&&!ma[(ka.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c1)}});function _a(a,b,c,d,e){return new _a.prototype.init(a,b,c,d,e)}r.Tween=_a,_a.prototype={constructor:_a,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=_a.propHooks[this.prop];return a&&a.get?a.get(this):_a.propHooks._default.get(this)},run:function(a){var b,c=_a.propHooks[this.prop];return this.options.duration?this.pos=b=r.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):_a.propHooks._default.set(this),this}},_a.prototype.init.prototype=_a.prototype,_a.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},_a.propHooks.scrollTop=_a.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=_a.prototype.init,r.fx.step={};var ab,bb,cb=/^(?:toggle|show|hide)$/,db=/queueHooks$/;function eb(){bb&&(d.hidden===!1&&a.requestAnimationFrame?a.requestAnimationFrame(eb):a.setTimeout(eb,r.fx.interval),r.fx.tick())}function fb(){return a.setTimeout(function(){ab=void 0}),ab=r.now()}function gb(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=ca[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function hb(a,b,c){for(var d,e=(kb.tweeners[b]||[]).concat(kb.tweeners["*"]),f=0,g=e.length;f1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?lb:void 0)),void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b),null==d?void 0:d)); -},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&B(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(L);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),lb={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=mb[b]||r.find.attr;mb[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=mb[g],mb[g]=e,e=null!=c(a,b,d)?g:null,mb[g]=f),e}});var nb=/^(?:input|select|textarea|button)$/i,ob=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return T(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,"tabindex");return b?parseInt(b,10):nb.test(a.nodeName)||ob.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});function pb(a){var b=a.match(L)||[];return b.join(" ")}function qb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,qb(this)))});if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,qb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,qb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(L)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=qb(this),b&&W.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":W.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+pb(qb(c))+" ").indexOf(b)>-1)return!0;return!1}});var rb=/\r/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":Array.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(rb,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:pb(r.text(a))}},select:{get:function(a){var b,c,d,e=a.options,f=a.selectedIndex,g="select-one"===a.type,h=g?null:[],i=g?f+1:e.length;for(d=f<0?i:g?f:0;d-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(Array.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var sb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!sb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,sb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(W.get(h,"events")||{})[b.type]&&W.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&U(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!U(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=W.access(d,b);e||d.addEventListener(a,c,!0),W.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=W.access(d,b)-1;e?W.access(d,b,e):(d.removeEventListener(a,c,!0),W.remove(d,b))}}});var tb=a.location,ub=r.now(),vb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var wb=/\[\]$/,xb=/\r?\n/g,yb=/^(?:submit|button|image|reset|file)$/i,zb=/^(?:input|select|textarea|keygen)/i;function Ab(a,b,c,d){var e;if(Array.isArray(b))r.each(b,function(b,e){c||wb.test(a)?d(a,e):Ab(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)Ab(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(Array.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)Ab(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&zb.test(this.nodeName)&&!yb.test(a)&&(this.checked||!ja.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:Array.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(xb,"\r\n")}}):{name:b.name,value:c.replace(xb,"\r\n")}}).get()}});var Bb=/%20/g,Cb=/#.*$/,Db=/([?&])_=[^&]*/,Eb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Fb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Gb=/^(?:GET|HEAD)$/,Hb=/^\/\//,Ib={},Jb={},Kb="*/".concat("*"),Lb=d.createElement("a");Lb.href=tb.href;function Mb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(L)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Nb(a,b,c,d){var e={},f=a===Jb;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Ob(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Pb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Qb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:tb.href,type:"GET",isLocal:Fb.test(tb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Kb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Ob(Ob(a,r.ajaxSettings),b):Ob(r.ajaxSettings,a)},ajaxPrefilter:Mb(Ib),ajaxTransport:Mb(Jb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Eb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||tb.href)+"").replace(Hb,tb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(L)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Lb.protocol+"//"+Lb.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Nb(Ib,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Gb.test(o.type),f=o.url.replace(Cb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(Bb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(vb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Db,"$1"),n=(vb.test(f)?"&":"?")+"_="+ub++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Kb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Nb(Jb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Pb(o,y,d)),v=Qb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Rb={0:200,1223:204},Sb=r.ajaxSettings.xhr();o.cors=!!Sb&&"withCredentials"in Sb,o.ajax=Sb=!!Sb,r.ajaxTransport(function(b){var c,d;if(o.cors||Sb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Rb[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r(" diff --git a/src/background/el.md b/src/background/el.md index 25cc89f..c9a5f5e 100644 --- a/src/background/el.md +++ b/src/background/el.md @@ -1,20 +1,23 @@ --- -meta: - - name: og:title - content: '式言語' - - name: og:url - content: '/uroborosql-doc/background/el.html' +head: + - - meta + - name: og:title + content: "式言語" + - - meta + - name: og:url + content: "/uroborosql-doc/background/el.html" --- + # 式言語 **uroboroSQL**では、条件分岐に式言語を利用することができます。 利用可能な式言語は以下の2つになります。 -* [OGNL](https://github.com/jkuhnert/ognl) -* [Spring Expression Language(SpEL)](https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#expressions) +- [OGNL](https://github.com/jkuhnert/ognl) +- [Spring Expression Language(SpEL)](https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#expressions) 利用する式言語の切替は依存関係ライブラリの指定により行ってください。 -依存関係ライブラリの指定については[環境設定](../getting_started/README.md#ビルドツールの設定)を参照してください。 +依存関係ライブラリの指定については[環境設定](../getting_started/index.md#ビルドツールの設定)を参照してください。 条件分岐の評価式として使用する場合、評価結果が真偽値(true/false)になるように記述してください。 @@ -27,16 +30,16 @@ OGNL文法の詳細は[こちら](https://commons.apache.org/proper/commons-ognl 以下のリテラルが使用できます。 -* “a”(java.lang.String) -* 'a'(char) -* 1(int) -* 1L(long) -* 0.1F(float) -* 0.1D(double) -* 0.1B(java.math.BigDecimal) -* 1H(java.math.BigInteger) -* true, false(Boolean) -* null +- “a”(java.lang.String) +- 'a'(char) +- 1(int) +- 1L(long) +- 0.1F(float) +- 0.1D(double) +- 0.1B(java.math.BigDecimal) +- 1H(java.math.BigInteger) +- true, false(Boolean) +- null ### 演算子(OGNL) @@ -44,41 +47,41 @@ OGNL文法の詳細は[こちら](https://commons.apache.org/proper/commons-ognl ### 算術演算子(OGNL) -* e1 + e2 (足し算) -* e1 - e2 (引き算) -* e1 * e2 (掛け算) -* e1 / e2 (割り算) -* e1 % e2 (余り) +- e1 + e2 (足し算) +- e1 - e2 (引き算) +- e1 \* e2 (掛け算) +- e1 / e2 (割り算) +- e1 % e2 (余り) ### 比較演算子(OGNL) -* e1 eq e2, e1 == e2 (等しい) - * e1・e2のいずれかがnullの場合、両方ともnullの時のみe1とe2は等しい - * e1・e2が同じオブジェクトの場合、またはequals()メソッドにより等しいと判断される場合、e1とe2は等しい - * e1・e2が数値の場合、倍精度浮動小数点数が等しい時のみe1とe2は等しい - * その以外の場合、e1とe2は等しくない -* e1 neq e2, e1 != e2 (等しくない) -* e1 lt e2, e1 < e2 (小なり) -* e1 lte e2, e1 <= e2 (小なりイコール) -* e1 gt e2, e1 > e2 (大なり) -* e1 gte e2, e1 >= e2 (大なりイコール) +- e1 eq e2, e1 == e2 (等しい) + - e1・e2のいずれかがnullの場合、両方ともnullの時のみe1とe2は等しい + - e1・e2が同じオブジェクトの場合、またはequals()メソッドにより等しいと判断される場合、e1とe2は等しい + - e1・e2が数値の場合、倍精度浮動小数点数が等しい時のみe1とe2は等しい + - その以外の場合、e1とe2は等しくない +- e1 neq e2, e1 != e2 (等しくない) +- e1 lt e2, e1 < e2 (小なり) +- e1 lte e2, e1 <= e2 (小なりイコール) +- e1 gt e2, e1 > e2 (大なり) +- e1 gte e2, e1 >= e2 (大なりイコール) ### 論理演算子(OGNL) -* e1 or e2, e1 || e2 (論理和) -* e1 and e2, e1 && e2 (論理積) -* not e, ! e (論理否定) +- e1 or e2, e1 || e2 (論理和) +- e1 and e2, e1 && e2 (論理積) +- not e, ! e (論理否定) ### 連結演算子(OGNL) -* e1 + e2 (文字列連結) +- e1 + e2 (文字列連結) ### メソッド・フィールドの呼び出し(OGNL) 以下のようにメソッド・フィールドの呼び出しができます。 -* e.method(args) (メソッドの呼び出し) -* e.property (フィールドの呼び出し) +- e.method(args) (メソッドの呼び出し) +- e.property (フィールドの呼び出し) ## Spring Expression Language(SpEL) @@ -89,8 +92,8 @@ SpEL文法の詳細は[こちら](https://docs.spring.io/spring/docs/current/spr 以下のリテラルが使用できます。 -* 文字列はシングルクォートで囲む。シングルクォート自体を使用する場合はシングルクォートを2つ重ねる('') -* 数字や真偽値、nullはそのまま記述 +- 文字列はシングルクォートで囲む。シングルクォート自体を使用する場合はシングルクォートを2つ重ねる('') +- 数字や真偽値、nullはそのまま記述 ### 演算子(SpEL) @@ -98,56 +101,56 @@ SpEL文法の詳細は[こちら](https://docs.spring.io/spring/docs/current/spr ### 算術演算子(SpEL) -* e1 + e2 (足し算) -* e1 - e2 (引き算) -* e1 * e2 (掛け算) -* e1 / e2, e1 div e2 (割り算) -* e1 % e2, e1 mod e2 (余り) +- e1 + e2 (足し算) +- e1 - e2 (引き算) +- e1 \* e2 (掛け算) +- e1 / e2, e1 div e2 (割り算) +- e1 % e2, e1 mod e2 (余り) ### 比較演算子(SpEL) -* e1 eq e2, e1 == e2 (等しい) - * e1・e2のいずれかがnullの場合、両方ともnullの時のみe1とe2は等しい - * e1・e2が同じオブジェクトの場合、またはequals()メソッドにより等しいと判断される場合、e1とe2は等しい - * e1・e2が数値の場合、倍精度浮動小数点数が等しい時のみe1とe2は等しい - * その以外の場合、e1とe2は等しくない -* e1 ne e2, e1 != e2 (等しくない) -* e1 lt e2, e1 < e2 (小なり) -* e1 le e2, e1 <= e2 (小なりイコール) -* e1 gt e2, e1 > e2 (大なり) -* e1 ge e2, e1 >= e2 (大なりイコール) +- e1 eq e2, e1 == e2 (等しい) + - e1・e2のいずれかがnullの場合、両方ともnullの時のみe1とe2は等しい + - e1・e2が同じオブジェクトの場合、またはequals()メソッドにより等しいと判断される場合、e1とe2は等しい + - e1・e2が数値の場合、倍精度浮動小数点数が等しい時のみe1とe2は等しい + - その以外の場合、e1とe2は等しくない +- e1 ne e2, e1 != e2 (等しくない) +- e1 lt e2, e1 < e2 (小なり) +- e1 le e2, e1 <= e2 (小なりイコール) +- e1 gt e2, e1 > e2 (大なり) +- e1 ge e2, e1 >= e2 (大なりイコール) ### 論理演算子(SpEL) -* e1 or e2 (論理和) -* e1 and e2 (論理積) -* not e, ! e (論理否定) +- e1 or e2 (論理和) +- e1 and e2 (論理積) +- not e, ! e (論理否定) ### 連結演算子(SpEL) -* e1 + e2 (文字列連結) +- e1 + e2 (文字列連結) ### その他の演算子(SpEL) -* instanceof (型判定) - * ex) 'xyz' instanceof T(int) // false T() はタイプ(型)を表す -* matches (正規表現) - * ex) '5.00' matches '^[0-9]{2}$' // false +- instanceof (型判定) + - ex) 'xyz' instanceof T(int) // false T() はタイプ(型)を表す +- matches (正規表現) + - ex) '5.00' matches '^[0-9]{2}$' // false ### メソッド・フィールドの呼び出し(SpEL) 以下のようにメソッド・フィールドの呼び出しができます。 -* e.method(args) (メソッドの呼び出し) -* e.property (フィールドの呼び出し) -* T(type).staticMethod(args) (staticメソッドの呼び出し) +- e.method(args) (メソッドの呼び出し) +- e.property (フィールドの呼び出し) +- T(type).staticMethod(args) (staticメソッドの呼び出し) ## StringFunction(SF) **uroboroSQL**では評価式を利用する際、標準で`StringFunction`(SF)を使用することができます。 評価式と合わせて`StringFunction`クラスのメソッドを呼び出すことができます。 -* 評価式で使用する場合 +- 評価式で使用する場合 ```sql /*IF SF.isNotEmpty(emp_no)*/ @@ -155,14 +158,14 @@ SpEL文法の詳細は[こちら](https://docs.spring.io/spring/docs/current/spr /*END*/ ``` -* バインドパラメータと合わせて使用する場合 +- バインドパラメータと合わせて使用する場合 ```sql emp_name like /*SF.contains(emp_name)*/'' escape '$' -- emp_name=Bobの場合、 emp_name like %Bob% escape '$' となる ``` -* `StringFunction`が提供するメソッドの一覧 +- `StringFunction`が提供するメソッドの一覧 | メソッド名 | 戻り値 | 説明 | | :--------------------------------------------------- | :------- | :--------------------------------------------------------------------------------------------------------------------- | diff --git a/src/background/README.md b/src/background/index.md similarity index 98% rename from src/background/README.md rename to src/background/index.md index c075006..aa54f02 100644 --- a/src/background/README.md +++ b/src/background/index.md @@ -1,10 +1,13 @@ --- -meta: - - name: og:title - content: '2WaySQL' - - name: og:url - content: '/uroborosql-doc/background/' +head: + - - meta + - name: og:title + content: "2WaySQL" + - - meta + - name: og:url + content: "/uroborosql-doc/background/" --- + # 2WaySQL **uroboroSQL**の基本操作について説明する前に**uroboroSQL**を利用する上で必要になる項目について説明します。 diff --git a/src/basics/entity-api.md b/src/basics/entity-api.md index 2f81f46..3862910 100644 --- a/src/basics/entity-api.md +++ b/src/basics/entity-api.md @@ -1,10 +1,13 @@ --- -meta: - - name: og:title - content: 'DAOインタフェース' - - name: og:url - content: '/uroborosql-doc/basics/entity-api.html' +head: + - - meta + - name: og:title + content: "DAOインタフェース" + - - meta + - name: og:url + content: "/uroborosql-doc/basics/entity-api.html" --- + # DAOインタフェース **uroboroSQL**はDAO(Data Access Object)を用いた単一テーブルへのCRUDに対応しています。 @@ -296,14 +299,14 @@ long count = agent.query(Employee.class).count(); | <E> SqlAgent#insert(E) | int | | <E> SqlAgent#insertAndReturn(E) | E | -エンティティクラスのインスタンスを使って1レコードの挿入を行います。 +エンティティクラスのインスタンスを使って1レコードの挿入を行います。 -* [@Id](#id-generatedvalue-sequencegenerator)アノテーションの指定があるフィールド -* 対するカラムが自動採番となっているフィールド +- [@Id](#id-generatedvalue-sequencegenerator)アノテーションの指定があるフィールド +- 対するカラムが自動採番となっているフィールド 上記の型がprimitive型の場合、もしくはフィールドの値が`null`の場合、カラムの値は挿入時に自動採番されます。 また、挿入により採番された値がエンティティの該当フィールドにも設定されます。 -フィールドに値を指定した場合は自動採番カラムであっても指定した値が挿入されます。 +フィールドに値を指定した場合は自動採番カラムであっても指定した値が挿入されます。 デフォルト値の指定があるカラムに対するフィールドが `null` の場合、カラムの値にデフォルト値が設定されます。 @@ -349,12 +352,12 @@ System.out.println(employee.getEmpNo()); // 自動採番された値が出力さ `java.util.stream.Stream`経由で渡される複数のエンティティインスタンスを挿入します。 -* [@Id](#id-generatedvalue-sequencegenerator)アノテーションの指定があるフィールド -* 対するカラムが自動採番となっているフィールド +- [@Id](#id-generatedvalue-sequencegenerator)アノテーションの指定があるフィールド +- 対するカラムが自動採番となっているフィールド の型がprimitive型の場合、もしくはフィールドの値が`null`の場合、カラムの値は挿入時に自動採番されます。 また、挿入により採番された値がエンティティの該当フィールドにも設定されます。 -フィールドに値を指定した場合は自動採番カラムであっても指定した値が挿入されます。 +フィールドに値を指定した場合は自動採番カラムであっても指定した値が挿入されます。 ::: warning 注意 複数件の挿入で生成されるSQLでは、行毎のフィールドの値の有無を変更することができません。 @@ -403,7 +406,7 @@ agent.inserts(agent.insertsAndReturn(agent.query(Employee.class).stream()) Stream employees = agent.query(Employee.class) .stream() .map(e -> e.setEmpNo(e.getEmpNo() + 1000)); - + // 複数件の挿入(バッチ実行) agent.inserts(employees, InsertsType.BATCH); } @@ -420,7 +423,7 @@ agent.inserts(employees, InsertsType.BATCH); 1. SQLをpreparedStatementに変換 2. SQL発行 - `BATCH` の動作が以下のような動作になっているためです。 +`BATCH` の動作が以下のような動作になっているためです。 1. SQLをpreparedStatementに変換 2. [挿入条件](#挿入条件-insertscondition-の指定)で指定した条件になるまで蓄積したデータをDBに送信 @@ -443,7 +446,7 @@ agent.inserts(employees, InsertsType.BATCH); Stream employees = agent.query(Employee.class) .stream() .map(e -> e.setEmpNo(e.getEmpNo() + 1000)); - + // 複数件の挿入(10件毎に挿入) agent.inserts(employees, (ctx, count, entity) -> count == 10); ``` @@ -559,7 +562,7 @@ Stream employees = agent.query(Employee.class) e.setFirstName(e.getFirstName() + "_new"); return e; }); - + // 複数件の更新(10件毎に挿入) agent.updates(employees, (ctx, count, entity) -> count == 10); ``` @@ -759,10 +762,10 @@ DAOインタフェースで利用するエンティティクラスではテー エンティティクラスに紐づけるテーブル名を指定します。 テーブル名と名前が一致しないエンティティクラスにマッピングしたい場合に利用します。 -| 属性名 | 型 | 必須 | 説明 | 初期値 | -| :----- | :----- | :---: | :----------------------------------------------------------------------------------------------- | :----- | -| name | String | - | マッピングするテーブル名。指定しない場合はクラス名をスネークケースにしたテーブルとマッピングする | なし | -| schema | String | - | マッピングするテーブルの所属するスキーマ名 | なし | +| 属性名 | 型 | 必須 | 説明 | 初期値 | +| :----- | :----- | :--: | :----------------------------------------------------------------------------------------------- | :----- | +| name | String | - | マッピングするテーブル名。指定しない場合はクラス名をスネークケースにしたテーブルとマッピングする | なし | +| schema | String | - | マッピングするテーブルの所属するスキーマ名 | なし | ```java import jp.co.future.uroborosql.mapping.annotations.Table; @@ -785,9 +788,9 @@ public class CustomEmployee { フィールドに紐づけるカラム名を指定します。 カラム名と名前が一致しないフィールドにマッピングしたい場合に利用します。 -| 属性名 | 型 | 必須 | 説明 | 初期値 | -| :----- | :----- | :---: | :--------------------- | :----- | -| name | String | 〇 | マッピングするカラム名 | なし | +| 属性名 | 型 | 必須 | 説明 | 初期値 | +| :----- | :----- | :--: | :--------------------- | :----- | +| name | String | 〇 | マッピングするカラム名 | なし | ```java import jp.co.future.uroborosql.mapping.annotations.Table; @@ -808,12 +811,12 @@ public class Employee { 独自に作成した型(ドメインクラス)やEnumのフィールドにカラムをマッピングする場合に指定します。 -| 属性名 | 型 | 必須 | 説明 | 初期値 | -| :------------ | :------- | :---: | :--------------------------------------------------------------------------------------- | :--------- | -| valueType | Class | 〇 | ドメインクラスを生成するのに必要な値の型 | なし | -| factoryMethod | String | - | ドメインクラスを生成・取得するメソッド名。指定しない場合はコンストラクタが呼び出される。 | "" | -| toJdbcMethod | String | - | JDBCが受け付けられる値に変換するメソッド名 | "getValue" | -| nullable | boolean | - | null可かどうかの指定 | false | +| 属性名 | 型 | 必須 | 説明 | 初期値 | +| :------------ | :------- | :--: | :--------------------------------------------------------------------------------------- | :--------- | +| valueType | Class | 〇 | ドメインクラスを生成するのに必要な値の型 | なし | +| factoryMethod | String | - | ドメインクラスを生成・取得するメソッド名。指定しない場合はコンストラクタが呼び出される。 | "" | +| toJdbcMethod | String | - | JDBCが受け付けられる値に変換するメソッド名 | "getValue" | +| nullable | boolean | - | null可かどうかの指定 | false | 例 @@ -856,10 +859,10 @@ public class Employee { INSERT/UPDATEの対象から除外したいケースで利用します。 ::: -| 属性名 | 型 | 必須 | 説明 | 初期値 | -| :----- | :------ | :---: | :----------------------------------------------------------------------------- | :----- | -| insert | boolean | - | `agent#insert()`実行時にフィールドを無視するかどうか。`true`の場合は無視する。 | true | -| update | boolean | - | `agent#update()`実行時にフィールドを無視するかどうか。`true`の場合は無視する。 | true | +| 属性名 | 型 | 必須 | 説明 | 初期値 | +| :----- | :------ | :--: | :----------------------------------------------------------------------------- | :----- | +| insert | boolean | - | `agent#insert()`実行時にフィールドを無視するかどうか。`true`の場合は無視する。 | true | +| update | boolean | - | `agent#update()`実行時にフィールドを無視するかどうか。`true`の場合は無視する。 | true | 例 @@ -894,9 +897,9 @@ public class Employee { `@Version`を付与するフィールドにマッピングされるDBカラムの型は数値型でなければなりません。 ::: -| 属性名 | 型 | 必須 | 説明 | 初期値 | -| :------------------------------ | :--------------------- | :---: | :------------------- | :-------------------------------- | -| supplier | OptimisticLockSupplier | - | バージョン情報カラム | LockVersionOptimisticLockSupplier | +| 属性名 | 型 | 必須 | 説明 | 初期値 | +| :------------------------------ | :--------------------- | :--: | :------------------- | :-------------------------------- | +| supplier | OptimisticLockSupplier | - | バージョン情報カラム | LockVersionOptimisticLockSupplier | #### サプライヤの種類 @@ -936,19 +939,19 @@ public class Employee { `@GeneratedValue`のstrategy属性が`GenerationType.SEQUENCE`の場合に`@SequenceGenerator`を付与してシーケンスの生成方法を指定する必要があります。 1つのエンティティに属する複数のフィールドを自動採番フィールドとして指定することも可能です。 -| アノテーション | 説明 | -| :----------------- | :------------------------------------------- | +| アノテーション | 説明 | +| :----------------- | :------------------------------------------------------- | | @Id | エンティティの自動採番フィールドを識別するアノテーション | | @GeneratedValue | 自動採番フィールドの値の生成戦略を指定するアノテーション | -| @SequenceGenerator | ID生成に使用するSEQUENCEの情報を設定するアノテーション | - -| アノテーション | 属性名 | 型 | 必須 | 説明 | 初期値 | -| :----------------- | :------- | :------------- | :---: | :--------------------------------------------------------------------------------------- | :---------------------- | -| @Id | なし | - | - | - | - | -| @GeneratedValue | strategy | GenerationType | - | ID生成戦略の型。`GenerationType.IDENTITY`, `GenerationType.SEQUENCE`のいずれかを指定 | GenerationType.IDENTITY | -| @SequenceGenerator | sequence | String | 〇 | シーケンス名 | なし | -| @SequenceGenerator | catalog | String | - | シーケンスが所属するカタログ名 | "" | -| @SequenceGenerator | schema | String | - | シーケンスが所属するスキーマ名 | "" | +| @SequenceGenerator | ID生成に使用するSEQUENCEの情報を設定するアノテーション | + +| アノテーション | 属性名 | 型 | 必須 | 説明 | 初期値 | +| :----------------- | :------- | :------------- | :--: | :----------------------------------------------------------------------------------- | :---------------------- | +| @Id | なし | - | - | - | - | +| @GeneratedValue | strategy | GenerationType | - | ID生成戦略の型。`GenerationType.IDENTITY`, `GenerationType.SEQUENCE`のいずれかを指定 | GenerationType.IDENTITY | +| @SequenceGenerator | sequence | String | 〇 | シーケンス名 | なし | +| @SequenceGenerator | catalog | String | - | シーケンスが所属するカタログ名 | "" | +| @SequenceGenerator | schema | String | - | シーケンスが所属するスキーマ名 | "" | ```java import jp.co.future.uroborosql.mapping.annotations.Table; diff --git a/src/basics/README.md b/src/basics/index.md similarity index 56% rename from src/basics/README.md rename to src/basics/index.md index 3c0d160..36d6243 100644 --- a/src/basics/README.md +++ b/src/basics/index.md @@ -1,10 +1,13 @@ --- -meta: - - name: og:title - content: '事前準備' - - name: og:url - content: '/uroborosql-doc/basics/' +head: + - - meta + - name: og:title + content: "事前準備" + - - meta + - name: og:url + content: "/uroborosql-doc/basics/" --- + # 事前準備 **uroboroSQL**を利用した基本的なDB操作を説明します。 @@ -30,7 +33,7 @@ SqlConfig config = UroboroSQL.builder(dataSource).build(); ``` `UroboroSQL`クラスを使って`SqlConfig`インスタンスを生成する際、**uroboroSQL**の挙動を変更する各種の設定も合わせて行うことができます。 -設定の詳細については[設定](../configuration)を参照してください。 +設定の詳細については[設定](../configuration/index.md)を参照してください。 ::: warning `SqlConfig`インスタンスはアプリケーション内で接続先毎に1つ保持するようにしてください。 @@ -56,9 +59,9 @@ SQLの操作はすべてこの`SqlAgent`インスタンスを使って行うこ ## SQLファイルの配置 **uroboroSQL**ではSQL文の書かれたファイルのパスを指定してSQLを実行することができます。 -その際、SQLファイルはクラスパスから参照できる場所に配置されている必要があります。 +その際、SQLファイルはクラスパスから参照できる場所に配置されている必要があります。 -```md +```txt src └─main └─resources @@ -84,12 +87,12 @@ SQLファイルのルートフォルダ(初期値:`sql`)は変更するこ SQLファイルの指定する際のファイルパスを`SQL名`といいます。 上記フォルダ構成の場合、それぞれのSQLファイルは以下のような`SQL名`となります。 -|SQLファイルパス(SQLルートフォルダから)|SQL名| -|:---|:---| -|department/insert_department.sql|department/insert_department| -|department/select_department.sql|department/select_department| -|employee/insert_employee.sql|employee/insert_employee| -|employee/select_employee.sql|employee/select_employee| +| SQLファイルパス(SQLルートフォルダから) | SQL名 | +| :--------------------------------------- | :--------------------------- | +| department/insert_department.sql | department/insert_department | +| department/select_department.sql | department/select_department | +| employee/insert_employee.sql | employee/insert_employee | +| employee/select_employee.sql | employee/select_employee | SQLファイルの配置は設定によりカスタマイズが可能です。SQLファイル配置のカスタマイズについては [SQLファイルの解決ルール](../advanced/#sqlファイルの解決ルール) を参照してください。 @@ -109,18 +112,18 @@ Map department = agent.query("department/select_department") .first(); ``` -|主なメソッド|説明| -|:---|:---| -|| -| から非推奨。かわりに`param()`に`Arrays.asList()`もしくは`List.of()`を使って`List型`に詰めて設定してください| -|SqlFluent#paramMap(Map | +| から非推奨。かわりに`param()`に`Arrays.asList()`もしくは`List.of()`を使って`List型`に詰めて設定してください | +| SqlFluent#paramMap(Map | 検索結果をMapや指定したクラスのListとして取得します。 -Mapには`キー:カラムラベル名`、`値:カラムの値`の形で1行分のデータが格納されます。 +Mapには`キー:カラムラベル名`、`値:カラムの値`の形で1行分のデータが格納されます。 ::: warning `SqlQuery#collect()`では検索結果をすべてメモリ上に格納します。大量データの検索を行う場合は後述の`SqlQuery#strem()`の利用を検討してください。 @@ -186,7 +189,8 @@ try (SqlAgent agent = config.agent()) { - java.lang.Object[] - byte[] - ドメイン型 - - [Domain](./entity-api.md/#domain) アノテーションを付与した型 + - [Domain](./entity-api.md#domain) アノテーションを付与した型 + ::: ```java @@ -328,7 +332,7 @@ try (SqlAgent agent = config.agent()) { 検索結果の1件目を取得します。[find()](#先頭取得(sqlquery-first)と違い、実行するSQLで複数件の検索結果を返す場合は例外をスローします。 結果を取得できない(検索結果が0件)場合、`jp.co.future.uroborosql.exception.DataNotFoundException`をスローします。 -検索結果が2件以上存在する場合、`jp.co.future.uroborosql.exception.DataNotUniqueException`をスローします。 +検索結果が2件以上存在する場合、`jp.co.future.uroborosql.exception.DataNotUniqueException`をスローします。 ::: tip メモリ上には最大1件分のデータしか格納しないため、検索結果が大量になる場合でもメモリ使用量を気にせず呼び出すことができます。 @@ -547,7 +551,7 @@ try (SqlAgent agent = config.agent()) { } ``` -`jp.co.future.uroborosql.converter.ResultSetConverter`インタフェースを実装したクラスを引数に渡すことで、検索結果により複雑な加工を行うことができます。 +`jp.co.future.uroborosql.converter.ResultSetConverter`インタフェースを実装したクラスを引数に渡すことで、検索結果により複雑な加工を行うことができます。 提供されている `ResultSetConverter` は以下になります。 @@ -557,8 +561,6 @@ try (SqlAgent agent = config.agent()) { | EntityResultSetConverter | 検索結果をエンティティ型のインスタンスに変換します。エンティティ型はコンストラクタで指定します。 | | SingleColumnResultSetConverter | 検索結果のうち、1項目を指定した型のインスタンスに変換します。対象とする項目と変換する型はコンストラクタで指定します。 | - - `ResultSetConverter`は`FunctionInterface`として提供されているので、`lambda式`による記述も可能です。 ResultSetConverter指定(lambda式) @@ -608,13 +610,12 @@ try (SqlAgent agent = config.agent()) { 検索結果を`java.sql.ResultSet`の形式で取得します。 ::: danger 注意 - ResultSetリソースのクローズは各自で行う必要があります。 +ResultSetリソースのクローズは各自で行う必要があります。 ::: ::: danger 注意 ResultSetリソースのクローズより先にSqlAgentインスタンスがクローズ、または破棄された場合、ResultSetリソースもクローズされてしまい不正な動作となります。ResultSetリソースとそのResultSetを生成したSqlAgentインスタンスの生存期間を合わせる、もしくはSqlAgentインスタンスの生存期間を長くしてください。 ::: - このAPIは他のフレームワークとの連携など、`ResultSet`リソースの取得が必要なケースを想定して提供しています。 ::: warning @@ -637,10 +638,10 @@ try (SqlAgent agent = config.agent()) { DB更新処理(登録/変更/削除)やDDLの実行も検索処理と同様`SQL名`を指定する場合と`SQL文字列`を指定する2つのAPIが提供されています。 -| 利用メソッド | 説明 | -| :--------------------------------- | :------------------------------------------------ | -| SqlAgent#update("[SQL名]") | [SQL名](./README.md#sql名)で説明した`SQL名`を指定 | -| SqlAgent#updateWith("[SQL文字列]") | `SQL文字列`を直接指定 | +| 利用メソッド | 説明 | +| :--------------------------------- | :----------------------------------------------- | +| SqlAgent#update("[SQL名]") | [SQL名](./index.md#sql名)で説明した`SQL名`を指定 | +| SqlAgent#updateWith("[SQL文字列]") | `SQL文字列`を直接指定 | 上記2つのメソッドは更新を行うための`SqlUpdate`インタフェースのインスタンスを返却します。 @@ -707,12 +708,12 @@ try (SqlAgent agent = config.agent()) { 大量のデータを一括で更新する場合、通常の更新ではSQLが都度実行されるため処理速度が遅く問題になる場合があります。 こういったケースに対応するため、**uroboroSQL**ではバッチ更新用のAPIを提供しています。 -バッチ更新処理も他と同様`SQL名`を指定する場合と`SQL文字列`を直接記述する2つのAPIが提供されています。 +バッチ更新処理も他と同様`SQL名`を指定する場合と`SQL文字列`を直接記述する2つのAPIが提供されています。 -| 利用メソッド | 説明 | -| :-------------------------------- | :------------------------------------------------ | -| SqlAgent#batch("[SQL名]") | [SQL名](./README.md#sql名)で説明した`SQL名`を指定 | -| SqlAgent#batchWith("[SQL文字列]") | `SQL文字列`を直接指定 | +| 利用メソッド | 説明 | +| :-------------------------------- | :----------------------------------------------- | +| SqlAgent#batch("[SQL名]") | [SQL名](./index.md#sql名)で説明した`SQL名`を指定 | +| SqlAgent#batchWith("[SQL文字列]") | `SQL文字列`を直接指定 | 上記2つのメソッドはバッチ更新を行うための`SqlBatch`インタフェースのインスタンスを返却します。 @@ -720,16 +721,16 @@ try (SqlAgent agent = config.agent()) { batch/batchWithの内部では `PreparedStatement` を作成し、渡されたパラメータをバインドしながら `PreparedStatement#executeBatch()` メソッドを呼び出すことでバッチ処理を行っています。 その際 `PreparedStatement` は、引数で渡されたSQLを**定数パラメータとエスケープキャラクタ置換文字**で評価したSQLを元に生成し、この `PreparedStatement` をバッチ処理が終了するまで利用します。 そのため、SQLの中に 条件分岐(`/*IF*/` など)や埋め込み文字(`/*# */` など)を記載していると、条件分岐や埋め込み文字をnullで判定したSQLを元に `PreparedStatement` が生成されることになり、意図しない結果になります。 -このことから、バッチ処理で使用するSQLには条件分岐や埋め込み文字を **使用しないようにする必要があります**。 +このことから、バッチ処理で使用するSQLには条件分岐や埋め込み文字を **使用しないようにする必要があります**。 例) 下記のようなデータを -| id | name | age | -| :--- | :----- | :--- | -| null | taro | 13 | -| 2 | hanako | 15 | -| 3 | jiro | 10 | +| id | name | age | +| :--- | :----- | :-- | +| null | taro | 13 | +| 2 | hanako | 15 | +| 3 | jiro | 10 | 以下のSQLでバッチインサートすると @@ -869,10 +870,10 @@ try (SqlAgent agent = config.agent()) { **uroboroSQL**では、SQLの検索/更新のほかDBが提供するストアドプロシージャの呼び出し用APIも提供しています。 -| 利用メソッド | 説明 | -| :------------------------------- | :------------------------------------------------ | -| SqlAgent#proc("[SQL名]") | [SQL名](./README.md#sql名)で説明した`SQL名`を指定 | -| SqlAgent#procWith("[SQL文字列]") | `SQL文字列`を直接指定 | +| 利用メソッド | 説明 | +| :------------------------------- | :----------------------------------------------- | +| SqlAgent#proc("[SQL名]") | [SQL名](./index.md#sql名)で説明した`SQL名`を指定 | +| SqlAgent#procWith("[SQL文字列]") | `SQL文字列`を直接指定 | 上記2つのメソッドはストアドプロシージャの呼出を行うための`Procedure`インタフェースのインスタンスを返却します。 diff --git a/src/basics/transaction.md b/src/basics/transaction.md index 6229899..aae2d55 100644 --- a/src/basics/transaction.md +++ b/src/basics/transaction.md @@ -1,10 +1,13 @@ --- -meta: - - name: og:title - content: 'トランザクション' - - name: og:url - content: '/uroborosql-doc/basics/transaction.html' +head: + - - meta + - name: og:title + content: "トランザクション" + - - meta + - name: og:url + content: "/uroborosql-doc/basics/transaction.html" --- + # トランザクション **uroboroSQL**ではローカルトランザクションを提供します。 @@ -133,10 +136,9 @@ agent.required(() -> { }); ``` - ::: tip PostgreSQLについては、自動的にセーブポイントを利用したトランザクションの部分ロールバックに対応しています。 -詳細は、[PostgreSQLのトランザクション内SQLエラー対応](../advanced/README.md#postgresqlのトランザクション内sqlエラー対応)を参照してください。 +詳細は、[PostgreSQLのトランザクション内SQLエラー対応](../advanced/index.md#postgresqlのトランザクション内sqlエラー対応)を参照してください。 ::: ## AutoCommitスコープ(`SqlAgent#autoCommitScope`) @@ -150,7 +152,7 @@ PostgreSQLについては、自動的にセーブポイントを利用したト 例えば postgresqlの `vacuum` コマンドはトランザクション制御下では実行できないため、自動コミット・モードを有効にする必要があります ::: - こういったケースを実現する場合、 までは以下のような実装が必要でした。 +こういったケースを実現する場合、 までは以下のような実装が必要でした。 ```java agent.required(() -> { @@ -179,7 +181,7 @@ agent.required(() -> { 上記の実装では、自動コミット・モードの切替えを try-catch で囲む必要があり記述が冗長でした。 - からは SqlAgent#autoCommitScope() を使って自動コミット・モードの切替えができるようになりました。 + からは SqlAgent#autoCommitScope() を使って自動コミット・モードの切替えができるようになりました。 ```java // SqlAgent#autoCommitScope()を使った実装 diff --git a/src/configuration/connection-supplier.md b/src/configuration/connection-supplier.md index 2e3380d..aaedcb0 100644 --- a/src/configuration/connection-supplier.md +++ b/src/configuration/connection-supplier.md @@ -1,10 +1,13 @@ --- -meta: - - name: og:title - content: 'ConnectionSupplier' - - name: og:url - content: '/uroborosql-doc/configuration/connection-supplier.html' +head: + - - meta + - name: og:title + content: "ConnectionSupplier" + - - meta + - name: og:url + content: "/uroborosql-doc/configuration/connection-supplier.html" --- + # ConnectionSupplier DB接続を行う際のコネクションを提供するクラスです。 @@ -56,4 +59,4 @@ try (SqlAgent agent = config.agent(ConnectionContextBuilder .... }); } -``` \ No newline at end of file +``` diff --git a/src/configuration/dialect.md b/src/configuration/dialect.md index 83e96d0..cf63dfc 100644 --- a/src/configuration/dialect.md +++ b/src/configuration/dialect.md @@ -1,10 +1,13 @@ --- -meta: - - name: og:title - content: 'Dialect' - - name: og:url - content: '/uroborosql-doc/configuration/dialect.html' +head: + - - meta + - name: og:title + content: "Dialect" + - - meta + - name: og:url + content: "/uroborosql-doc/configuration/dialect.html" --- + # Dialect 複数のDBを対象とするアプリケーションを作成する場合、DB毎のSQL文法の差異を吸収するため @@ -12,7 +15,7 @@ meta: **uroboroSQL**では、こういったDB毎のSQL文法の差異に対応するため、`Dialect`という仕組みを提供しています。 `Dialect`は接続したDBから取得できる情報を元に自動で判別される為、通常は変更する必要はありません。 -現在、標準で以下のDBに対するDialectが提供されています。 +現在、標準で以下のDBに対するDialectが提供されています。 | DB名 | Dialect | | :------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -33,7 +36,7 @@ meta: 標準でサポートしている上記のDB以外に接続し、`DefaultDialect`と違う動作をさせたい場合は、対象のDBに対する`Dialect`クラスを作成して**uroboroSQL**に登録する必要があります。 -`Dialect`の登録には、Javaの [java.util.ServiceLoader](https://docs.oracle.com/javase/jp/8/docs/api/java/util/ServiceLoader.html)を利用します。 +`Dialect`の登録には、Javaの [java.util.ServiceLoader](https://docs.oracle.com/javase/jp/8/docs/api/java/util/ServiceLoader.html)を利用します。 最初に対象のDB(ここではSQLiteとする)に対する`Dialect`クラスを作成します。 @@ -89,7 +92,7 @@ public class SqliteDialect extends AbstractDialect { 次に**uroboroSQL**を利用するアプリケーションのクラスパス上に以下のファイル名のファイルを作成します。 -```md +```txt META-INF └─services └─jp.co.future.uroborosql.dialect.Dialect diff --git a/src/configuration/entity-handler.md b/src/configuration/entity-handler.md index 6b12e39..a1bc320 100644 --- a/src/configuration/entity-handler.md +++ b/src/configuration/entity-handler.md @@ -1,10 +1,13 @@ --- -meta: - - name: og:title - content: 'EntityHandler' - - name: og:url - content: '/uroborosql-doc/configuration/entity-handler.html' +head: + - - meta + - name: og:title + content: "EntityHandler" + - - meta + - name: og:url + content: "/uroborosql-doc/configuration/entity-handler.html" --- + # EntityHandler `EntityHandler`はDAOインタフェースを利用したDB操作を行う際に実行するSQLの生成を制御するためのクラスです。 diff --git a/src/configuration/README.md b/src/configuration/index.md similarity index 95% rename from src/configuration/README.md rename to src/configuration/index.md index ba51093..3933569 100644 --- a/src/configuration/README.md +++ b/src/configuration/index.md @@ -1,10 +1,13 @@ --- -meta: - - name: og:title - content: 'SqlConfigの生成' - - name: og:url - content: '/uroborosql-doc/configuration/' +head: + - - meta + - name: og:title + content: "SqlConfigの生成" + - - meta + - name: og:url + content: "/uroborosql-doc/configuration/" --- + # SqlConfigの生成 **uroboroSQL**ではSqlConfigを生成するタイミングで各種の設定を行うことによりライブラリの動作や実行されるSQLを変更することができます。 @@ -40,4 +43,3 @@ SqlConfig config = UroboroSQL | [EntityHandler](./entity-handler.md#entityhandler) | エンティティ処理クラス | | [Dialect](./dialect.md#dialect) | Database方言を表すクラス | | [Clock](https://docs.oracle.com/javase/jp/8/docs/api/java/time/Clock.html) | タイムゾーンを使用して現在の時点、日付および時間へのアクセスを提供するクロック | - diff --git a/src/configuration/sql-agent-factory.md b/src/configuration/sql-agent-factory.md index d9fe870..da239d5 100644 --- a/src/configuration/sql-agent-factory.md +++ b/src/configuration/sql-agent-factory.md @@ -1,10 +1,13 @@ --- -meta: - - name: og:title - content: 'SqlAgentFactory' - - name: og:url - content: '/uroborosql-doc/configuration/sql-agent-factory.html' +head: + - - meta + - name: og:title + content: "SqlAgentFactory" + - - meta + - name: og:url + content: "/uroborosql-doc/configuration/sql-agent-factory.html" --- + # SqlAgentFactory SQL実行を行うクラスである`SqlAgent`を生成するファクトリクラスです。SQL実行時の挙動を変更するための初期値の設定が行えます。 @@ -42,7 +45,7 @@ SqlConfig config = UroboroSQL.builder(...) ).build(); ``` -## フェッチサイズと検索タイムアウト設定 ( `SqlAgentFactory#setFetchSize` /`#setQueryTimeout` ) +## フェッチサイズと検索タイムアウト設定 ( `SqlAgentFactory#setFetchSize` /`#setQueryTimeout` ) `SqlAgent`で検索処理を行う際、データベースから一度に取得する行数(`fetchSize`)や 検索タイムアウト時間(秒)(`queryTimeout`)の初期値を指定することが出来ます。 @@ -87,7 +90,7 @@ SqlConfig config = UroboroSQL.builder(...) ## SQL_IDの置換文字列設定 ( `SqlAgentFactory#setSqlIdKeyName` ) SQL文に特定の置換文字列をSQLコメントとして記述することで、SQL実行時に実行したSQLの元となるSQLファイルを特定するための -情報(SQL_ID)を埋め込むことが出来ます。SQL_IDを埋め込むことでSQLログやDBのSQL履歴で実行されたSQLの元となるファイルを +情報(`SQL_ID`)を埋め込むことが出来ます。`SQL_ID`を埋め込むことでSQLログやDBのSQL履歴で実行されたSQLの元となるファイルを 特定しやすくなります。 必要に応じてこの置換文字列は変更することが出来ます。 指定しない場合`_SQL_ID_`になります。 @@ -208,8 +211,6 @@ SqlConfig config = UroboroSQL.builder(...) ).build(); ``` - - ## SQL実行のリトライ ( `SqlAgentFactory#setSqlRetryCodeList` /`#setDefaultMaxRetryCount` /`#setDefaultSqlRetryWaitTime` ) SQLを実行した際、タイミングによって発生する例外(テーブルロックエラーなど)の場合はリトライを行い、 @@ -298,7 +299,7 @@ try (SqlAgent agent = config.agent()) { ## DB更新処理をトランザクション内のみに強制 ( `SqlAgentFactory#setForceUpdateWithinTransaction` ) -複数のDB更新処理をまとめて行う際、途中で例外が発生するとDBデータが不整合な状態になる場合があります。このようなデータ不整合を防ぐためには[トランザクション](../transaction.md#トランザクション)を利用します。 +複数のDB更新処理をまとめて行う際、途中で例外が発生するとDBデータが不整合な状態になる場合があります。このようなデータ不整合を防ぐためには[トランザクション](../basics/transaction.md#トランザクション)を利用します。 しかし、通常の設定ではトランザクションを開始しない状態でもDB更新処理を行うことが可能になっているため不具合に気付きにくいという問題があります。 **uroboroSQL**ではトランザクションを開始していない状態でDB更新処理が行なわれた場合に例外をスローするオプションを提供しています。このオプションを使用することでDBデータの整合性を維持しやすくなります。 diff --git a/src/configuration/sql-context-factory.md b/src/configuration/sql-context-factory.md index 70e6561..a6b2b32 100644 --- a/src/configuration/sql-context-factory.md +++ b/src/configuration/sql-context-factory.md @@ -1,10 +1,13 @@ --- -meta: - - name: og:title - content: 'SqlContextFactory' - - name: og:url - content: '/uroborosql-doc/configuration/sql-context-factory.html' +head: + - - meta + - name: og:title + content: "SqlContextFactory" + - - meta + - name: og:url + content: "/uroborosql-doc/configuration/sql-context-factory.html" --- + # SqlContextFactory SQL構造を表現するクラスである`SqlContext`を生成するファクトリクラスです。生成されるSQLの挙動を変更するための設定が行えます。 @@ -152,11 +155,11 @@ public enum Gender { 定数パラメータを利用する場合、以下の命名ルールに従ってパラメータを指定します。 -|パターン|書式| -|:---|:---| -|定数|[定数パラメータプレフィックス][定数フィールド名大文字]| -|定数(Innerクラスがある場合)|[定数パラメータプレフィックス][Innerクラス名大文字スネークケース]_[Innerクラス内定数フィールド名大文字]| -|列挙型|[定数パラメータプレフィックス][列挙型名大文字]_[列挙子名大文字]| +| パターン | 書式 | +| :-------------------------- | :------------------------------------------------------------------------------------------------------- | +| 定数 | [定数パラメータプレフィックス][定数フィールド名大文字] | +| 定数(Innerクラスがある場合) | [定数パラメータプレフィックス][Innerクラス名大文字スネークケース]\_[Innerクラス内定数フィールド名大文字] | +| 列挙型 | [定数パラメータプレフィックス][列挙型名大文字]\_[列挙子名大文字] | ::: tip ※定数パラメータプレフィックスの初期値は `CLS_`となっています。 @@ -175,7 +178,7 @@ public enum Gender { - /\*$[定数パラメータプレフィックス][Innerクラス名大文字スネークケース]\_[Innerクラス内定数フィールド名大文字]\*/ - /\*$[定数パラメータプレフィックス][列挙型名大文字]\_[列挙子名大文字]\*/ -という風に使用します。 +という風に使用します。 ::: tip 定数や列挙型の値は固定値なので生成されるSQLは毎回同じ値になり、SQL文解析処理によるCPU負荷を考慮する必要はありません。 @@ -263,7 +266,7 @@ SqlConfig config = UroboroSQL ).build(); ``` -自動パラメータバインド関数は`SqlContext`を引数に受け取るので、関数内でパラメータの設定を行ってください。 +自動パラメータバインド関数は`SqlContext`を引数に受け取るので、関数内でパラメータの設定を行ってください。 ::: tip 関数の評価は、SQL生成処理(SQL文内の`/*IF*/`や`/*BEGIN*/`、`/*parameter_name*/`の評価)の直前に行われます。 @@ -306,15 +309,15 @@ public class Name { `SqlContextFactory`の設定 - ```java +```java // create SqlConfig SqlConfig config = UroboroSQL - .builder(...) - // SqlContextFactoryの設定 - .setSqlContextFactory(new SqlContextFactoryImpl() - // パラメータ変換クラスの登録 - .addBindParamMapper(new CustomBindParamMapper()) - ).build(); +.builder(...) +// SqlContextFactoryの設定 +.setSqlContextFactory(new SqlContextFactoryImpl() + // パラメータ変換クラスの登録 + .addBindParamMapper(new CustomBindParamMapper()) +).build(); ``` バインドパラメータ設定例 @@ -346,16 +349,16 @@ SqlConfig config = UroboroSQL ### カーソル型の初期値(`DefaultResultSetType`) `java.sql.ResultSet`のカーソルの型を指定します。 -|型|説明|初期値| -|:--|:--|:--:| -|java.sql.ResultSet#TYPE_FORWARD_ONLY|カーソルは最初から最後まで順方向にしか移動できません。|◯| -|java.sql.ResultSet#TYPE_SCROLL_INSENSITIVE|カーソルは順方向・逆方向いずれにも移動可能です。ただし他による変更を反映しません。|| -|java.sql.ResultSet#TYPE_SCROLL_SENSITIVE|カーソルは順方向・逆方向いずれにも移動可能です。また他による変更も反映します。|| +| 型 | 説明 | 初期値 | +| :----------------------------------------- | :--------------------------------------------------------------------------------- | :----: | +| java.sql.ResultSet#TYPE_FORWARD_ONLY | カーソルは最初から最後まで順方向にしか移動できません。 | ◯ | +| java.sql.ResultSet#TYPE_SCROLL_INSENSITIVE | カーソルは順方向・逆方向いずれにも移動可能です。ただし他による変更を反映しません。 | | +| java.sql.ResultSet#TYPE_SCROLL_SENSITIVE | カーソルは順方向・逆方向いずれにも移動可能です。また他による変更も反映します。 | | ### 変更可能性の初期値(`DefaultResultSetConcurrency`) `java.sql.ResultSet`の変更可能性を指定します。 -|型|説明|初期値| -|:--|:--|:--:| -|java.sql.ResultSet.CONCUR_READ_ONLY|カーソルはデータの読み出ししかサポートしません。|◯| -|java.sql.ResultSet.CONCUR_UPDATABLE|カーソルは変更可能です。カーソルを用いたデータの挿入・変更・削除がサポートされます。|| +| 型 | 説明 | 初期値 | +| :---------------------------------- | :----------------------------------------------------------------------------------- | :----: | +| java.sql.ResultSet.CONCUR_READ_ONLY | カーソルはデータの読み出ししかサポートしません。 | ◯ | +| java.sql.ResultSet.CONCUR_UPDATABLE | カーソルは変更可能です。カーソルを用いたデータの挿入・変更・削除がサポートされます。 | | diff --git a/src/configuration/sql-filter-manager.md b/src/configuration/sql-filter-manager.md index 0a0790c..321a0d4 100644 --- a/src/configuration/sql-filter-manager.md +++ b/src/configuration/sql-filter-manager.md @@ -1,10 +1,13 @@ --- -meta: - - name: og:title - content: 'SqlFilterManager' - - name: og:url - content: '/uroborosql-doc/configuration/sql-filter-manager.html' +head: + - - meta + - name: og:title + content: "SqlFilterManager" + - - meta + - name: og:url + content: "/uroborosql-doc/configuration/sql-filter-manager.html" --- + # SqlFilterManager ## SQLフィルター @@ -14,28 +17,28 @@ meta: SQL処理の拡張はSqlFilterインタフェースを実装したクラスを作成し登録することで行います。 SqlFilterインタフェースには以下のメソッドが定義されています。 -|SqlFilterメソッド名|説明| -|:--------|:---| -|initialize|SqlFilterの初期化を行う| -|doTransformSql|変換前のSQLに対して加工を行う| -|doParameter|バインドパラメータの加工を行う| -|doOutParameter|ストアドプロシージャのOutParameterの加工を行う| -|doPreparedStatement|PreparedStatementの加工を行う| -|doCallableStatement|CallableStatementの加工を行う| -|doQuery|検索処理結果の加工を行う| -|doUpdate|更新処理結果の加工を行う| -|doBatch|バッチ処理結果の加工を行う| -|doProcedure|Procedure呼出処理結果の加工を行う| +| SqlFilterメソッド名 | 説明 | +| :------------------ | :--------------------------------------------- | +| initialize | SqlFilterの初期化を行う | +| doTransformSql | 変換前のSQLに対して加工を行う | +| doParameter | バインドパラメータの加工を行う | +| doOutParameter | ストアドプロシージャのOutParameterの加工を行う | +| doPreparedStatement | PreparedStatementの加工を行う | +| doCallableStatement | CallableStatementの加工を行う | +| doQuery | 検索処理結果の加工を行う | +| doUpdate | 更新処理結果の加工を行う | +| doBatch | バッチ処理結果の加工を行う | +| doProcedure | Procedure呼出処理結果の加工を行う | **uroboroSQL**には標準でいくつかのSqlFilterの実装が含まれています。 -|クラス名|説明| -|:------|:---| -|jp.co.future.uroborosql.filter.DebugSqlFilter|SqlFilterの動作を理解するためのサンプル。各拡張ポイントで呼び出されるメソッドでログを出力します。| -|jp.co.future.uroborosql.filter.DumpResultSqlFilter|検索結果を表形式でログ出力するSQLフィルター。SqlREPLで使用しています。| -|jp.co.future.uroborosql.filter.WrapContextSqlFilter|SQL文の前後に文字列を追加するSQLフィルター。ページングや検索件数の上限設定に使用します。| -|jp.co.future.uroborosql.filter.SecretColumnSqlFilter|指定した特定のカラムのみ暗号化を行うSQLフィルター。パスワードや機密情報を暗号化してDBに格納するために使用します。| -|jp.co.future.uroborosql.filter.AuditLogSqlFilter|監査記録を取得するためのSQLフィルター。| +| クラス名 | 説明 | +| :--------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------- | +| jp.co.future.uroborosql.filter.DebugSqlFilter | SqlFilterの動作を理解するためのサンプル。各拡張ポイントで呼び出されるメソッドでログを出力します。 | +| jp.co.future.uroborosql.filter.DumpResultSqlFilter | 検索結果を表形式でログ出力するSQLフィルター。SqlREPLで使用しています。 | +| jp.co.future.uroborosql.filter.WrapContextSqlFilter | SQL文の前後に文字列を追加するSQLフィルター。ページングや検索件数の上限設定に使用します。 | +| jp.co.future.uroborosql.filter.SecretColumnSqlFilter | 指定した特定のカラムのみ暗号化を行うSQLフィルター。パスワードや機密情報を暗号化してDBに格納するために使用します。 | +| jp.co.future.uroborosql.filter.AuditLogSqlFilter | 監査記録を取得するためのSQLフィルター。 | SQLフィルターを利用するためには、SqlConfig生成時にSqlFilterManagerの設定を追加して利用するSQLフィルターの登録を行ってください。 SQLフィルターは複数登録することができます。複数登録した場合は登録した順にSQLフィルターが処理されます。 diff --git a/src/configuration/sql-manager.md b/src/configuration/sql-manager.md index b100c61..c2588e9 100644 --- a/src/configuration/sql-manager.md +++ b/src/configuration/sql-manager.md @@ -1,32 +1,35 @@ --- -meta: - - name: og:title - content: 'SqlManager' - - name: og:url - content: '/uroborosql-doc/configuration/sql-manager.html' +head: + - - meta + - name: og:title + content: "SqlManager" + - - meta + - name: og:url + content: "/uroborosql-doc/configuration/sql-manager.html" --- + # SqlManager `SqlManager`はSQLファイルを管理するクラスです。2つのクラスが提供されています。 -|クラス|説明| -|:---|:---| -|SqlManagerImpl|`java.io`を利用したファイルアクセスを行う`SqlManager`クラス。| -|NioSqlManagerImpl|`java.nio`を利用したファイルアクセスを行う`SqlManager`クラス| +| クラス | 説明 | +| :---------------- | :------------------------------------------------------------ | +| SqlManagerImpl | `java.io`を利用したファイルアクセスを行う`SqlManager`クラス。 | +| NioSqlManagerImpl | `java.nio`を利用したファイルアクセスを行う`SqlManager`クラス | クラスの特徴比較 -|特徴|SqlManagerImpl|NioSqlManagerImpl|補足| -|:--|:--:|:--:|:--| -|SQLファイルルートフォルダ設定|〇|〇|| -|SQLファイルエンコーディング設定|〇|〇|| -|起動時のファイルキャッシュ|〇|△|NioSqlManagerImplはファイルパスのみキャッシュ| -|遅延ファイルキャッシュ|×|〇|| -|jarファイル中のSQL参照|〇|〇|| -|zipファイル中のSQL参照|×|〇|| -|カスタムファイルアクセス対応|×|〇|`java.nio.file`パッケージを使用| -|ファイル変更検知|×|〇| -|DB種類毎のファイルパス切り替え|×|〇| +| 特徴 | SqlManagerImpl | NioSqlManagerImpl | 補足 | +| :------------------------------ | :------------: | :---------------: | :-------------------------------------------- | +| SQLファイルルートフォルダ設定 | 〇 | 〇 | | +| SQLファイルエンコーディング設定 | 〇 | 〇 | | +| 起動時のファイルキャッシュ | 〇 | △ | NioSqlManagerImplはファイルパスのみキャッシュ | +| 遅延ファイルキャッシュ | × | 〇 | | +| jarファイル中のSQL参照 | 〇 | 〇 | | +| zipファイル中のSQL参照 | × | 〇 | | +| カスタムファイルアクセス対応 | × | 〇 | `java.nio.file`パッケージを使用 | +| ファイル変更検知 | × | 〇 | +| DB種類毎のファイルパス切り替え | × | 〇 | 利用用途に応じて`SqlManager`を選択してください。 SqlManagerクラスの切り替えはビルダーAPIで行うことが出来ます。指定しない場合の初期値は`SqlManagerImpl`になります。 @@ -77,7 +80,7 @@ v0.20.5までのように、実行可能jarかどうかで設定を変える必 以下のようなファイル構成を例として説明します。 -```md +```txt sql ├─employee │ └─select_employee.sql -- Oracle, postgresql以外のDB用SQL @@ -96,14 +99,14 @@ DBに対するDialect用のフォルダがない場合は通常通り`sql/employ DB毎のフォルダ名 -|DB名|フォルダ名| -|:---|:---| -|H2 DB|h2| -|Microsoft SQL Server|mssql| -|MySQL|mysql| -|Oracle|oracle| -|Postgresql|postgresql| -|その他|default| +| DB名 | フォルダ名 | +| :------------------- | :--------- | +| H2 DB | h2 | +| Microsoft SQL Server | mssql | +| MySQL | mysql | +| Oracle | oracle | +| Postgresql | postgresql | +| その他 | default | ## SQLファイルの更新監視 diff --git a/src/developer_guide/README.md b/src/developer_guide/index.md similarity index 94% rename from src/developer_guide/README.md rename to src/developer_guide/index.md index 3fadec8..facf635 100644 --- a/src/developer_guide/README.md +++ b/src/developer_guide/index.md @@ -1,10 +1,13 @@ --- -meta: - - name: og:title - content: '開発者ガイド' - - name: og:url - content: '/uroborosql-doc/developer_guide/' +head: + - - meta + - name: og:title + content: "開発者ガイド" + - - meta + - name: og:url + content: "/uroborosql-doc/developer_guide/" --- + # 開発者ガイド uroboroSQLを開発する人向けのガイドです diff --git a/src/developer_tools/README.md b/src/developer_tools/index.md similarity index 81% rename from src/developer_tools/README.md rename to src/developer_tools/index.md index ef990df..9993352 100644 --- a/src/developer_tools/README.md +++ b/src/developer_tools/index.md @@ -1,10 +1,13 @@ --- -meta: - - name: og:title - content: 'Developer Tools' - - name: og:url - content: '/uroborosql-doc/developer_tools/' +head: + - - meta + - name: og:title + content: "Developer Tools" + - - meta + - name: og:url + content: "/uroborosql-doc/developer_tools/" --- + # Developer Tools ![uroboroSQL formatter](./uroboroSQLformatter_logo.png) diff --git a/src/getting_started/entity-access.md b/src/getting_started/entity-access.md index 64fac62..541e704 100644 --- a/src/getting_started/entity-access.md +++ b/src/getting_started/entity-access.md @@ -1,10 +1,13 @@ --- -meta: - - name: og:title - content: 'エンティティクラスを使用したDBアクセス' - - name: og:url - content: '/uroborosql-doc/getting_started/entity-access.html' +head: + - - meta + - name: og:title + content: "エンティティクラスを使用したDBアクセス" + - - meta + - name: og:url + content: "/uroborosql-doc/getting_started/entity-access.html" --- + # エンティティクラスを使用したDBアクセス **uroboroSQL**ではSQLファイルを使用したDBアクセスの他にエンティティクラスを使用したDBアクセスも提供しています。([EntityApiSample.java](https://github.com/future-architect/uroborosql-sample/blob/master/src/main/java/jp/co/future/uroborosql/sample/EntityApiSample.java)を参照) @@ -15,12 +18,12 @@ meta: **SqlEntityQuery**では検索結果をいくつかの形式で取得することができます。 -|メソッド|説明| -|:---|:---| -|SqlEntityQuery#collect()|検索結果を`List<エンティティクラス>`の形式で取得する| -|SqlEntityQuery#stream()|検索結果を`java.util.Stream`の形式で取得する| -|SqlEntityQuery#first()|検索結果の1件目を取得する。戻り値は`Optional`| -|SqlEntityQuery#one()|検索結果の1件目を取得する。検索結果が複数件になる場合は`DataNonUniqueException`をスローする。戻り値は`Optional`| +| メソッド | 説明 | +| :----------------------- | :--------------------------------------------------------------------------------------------------------------- | +| SqlEntityQuery#collect() | 検索結果を`List<エンティティクラス>`の形式で取得する | +| SqlEntityQuery#stream() | 検索結果を`java.util.Stream`の形式で取得する | +| SqlEntityQuery#first() | 検索結果の1件目を取得する。戻り値は`Optional` | +| SqlEntityQuery#one() | 検索結果の1件目を取得する。検索結果が複数件になる場合は`DataNonUniqueException`をスローする。戻り値は`Optional` | まずはテーブルに紐づくエンティティクラスを作成します。 diff --git a/src/getting_started/README.md b/src/getting_started/index.md similarity index 98% rename from src/getting_started/README.md rename to src/getting_started/index.md index fda17de..3672bd9 100644 --- a/src/getting_started/README.md +++ b/src/getting_started/index.md @@ -1,10 +1,13 @@ --- -meta: - - name: og:title - content: '環境設定' - - name: og:url - content: '/uroborosql-doc/getting_started/' +head: + - - meta + - name: og:title + content: "環境設定" + - - meta + - name: og:url + content: "/uroborosql-doc/getting_started/" --- + # 環境設定 ## ビルドツールの設定 @@ -131,7 +134,7 @@ mvn -PrunMain ではサンプルアプリケーションの構成を見ていきましょう。 -<<<@/src/getting_started/tree.txt +<<< ./tree.txt 主要なファイルの説明です diff --git a/src/getting_started/sql-file-access.md b/src/getting_started/sql-file-access.md index 6602f23..2ee215b 100644 --- a/src/getting_started/sql-file-access.md +++ b/src/getting_started/sql-file-access.md @@ -1,10 +1,13 @@ --- -meta: - - name: og:title - content: 'SQLファイルを使用したDBアクセス' - - name: og:url - content: '/uroborosql-doc/getting_started/sql-file-access.html' +head: + - - meta + - name: og:title + content: "SQLファイルを使用したDBアクセス" + - - meta + - name: og:url + content: "/uroborosql-doc/getting_started/sql-file-access.html" --- + # SQLファイルを使用したDBアクセス ## SqlConfigの生成 @@ -39,7 +42,7 @@ SqlConfig config = UroboroSQL .build(); ``` -`SqlConfig`生成時のカスタマイズの詳細については [設定](../configuration)を参照してください。 +`SqlConfig`生成時のカスタマイズの詳細については [設定](../configuration/index.md)を参照してください。 ## テーブルの作成と初期データの登録 @@ -60,7 +63,7 @@ try (SqlAgent agent = config.agent()) { 以降の説明では`SqlAgent`に対する処理はtry-with-resources文の中で行っているものとします。 ::: -**uroboroSQL**では実行するSQLをファイルパスに似た表現(以降 *SQL名* と呼ぶ)で指定します。 +**uroboroSQL**では実行するSQLをファイルパスに似た表現(以降 _SQL名_ と呼ぶ)で指定します。 下の例ではクラスパス上にあるsqlフォルダ配下のddl/create_tables.sqlを指定してSQL更新処理を実行します。 更新処理を行う場合、`SqlAgent#update("[SQL名]")`メソッドを使用して**SqlUpdate**を取得しUpdateの実行を行います。 @@ -103,15 +106,15 @@ erDiagram **SqlQuery**では検索結果をいくつかの形式で取得することができます。 -|メソッド|説明| -|:---|:---| -|SqlQuery#collect()|検索結果を`List`の形式で取得する| -|SqlQuery#stream()|検索結果を`java.util.Stream`の形式で取得する| -|SqlQuery#resultSet()|検索結果の`ResultSet`を取得する| -|SqlQuery#first()|検索結果の1件目を取得する。取得できない場合は`RuntimeException`がスローされる| -|SqlQuery#findFirst()|検索結果の1件目を取得する。戻り値は`Optional`| -|SqlQuery#one()|検索結果の1件目を取得する。取得できない場合、もしくは2件以上取得出来た場合は`RuntimeException`がスローされる| -|SqlQuery#findOne()|検索結果の1件目を取得する。戻り値は`Optional`。2件以上取得出来た場合は`RuntimeException`がスローされる| +| メソッド | 説明 | +| :------------------- | :------------------------------------------------------------------------------------------------------------- | +| SqlQuery#collect() | 検索結果を`List`の形式で取得する | +| SqlQuery#stream() | 検索結果を`java.util.Stream`の形式で取得する | +| SqlQuery#resultSet() | 検索結果の`ResultSet`を取得する | +| SqlQuery#first() | 検索結果の1件目を取得する。取得できない場合は`RuntimeException`がスローされる | +| SqlQuery#findFirst() | 検索結果の1件目を取得する。戻り値は`Optional` | +| SqlQuery#one() | 検索結果の1件目を取得する。取得できない場合、もしくは2件以上取得出来た場合は`RuntimeException`がスローされる | +| SqlQuery#findOne() | 検索結果の1件目を取得する。戻り値は`Optional`。2件以上取得出来た場合は`RuntimeException`がスローされる | 以下のように呼び出します。 @@ -152,7 +155,7 @@ and dept.dept_name = /*deptName*/'sample' - `/*IF*/ ... /*END*/`は条件分岐で、IFの後ろの評価式が`True`となる場合に`/*IF*/`と`/*END*/`で囲まれた部分が出力されます。 - `/*deptNo*/`はバインドパラメータで、実行時に`?`に変換され、SqlQueryに設定したパラメータがSQLへバインドされます。 - `/*deptNo*/`の後ろの`1`はテスト用データです。このようにテスト用データをSQL文に記述しておくことで、このSQLを -SQLクライアントツールで実行する際にエラーにならずに文法の確認を行うことができます。 + SQLクライアントツールで実行する際にエラーにならずに文法の確認を行うことができます。 SQLで使用できる構文については[2WaySQL](../background/#_2waysql)を参照してください。 また、検索のより詳しい説明は[SQLによる検索](../basics/sql-file-api.md#sqlによる検索-sqlagent-query-sqlagent-querywith)を参照してください。 diff --git a/src/getting_started/sql-repl.md b/src/getting_started/sql-repl.md index 59992f2..a0ff1b5 100644 --- a/src/getting_started/sql-repl.md +++ b/src/getting_started/sql-repl.md @@ -1,10 +1,13 @@ --- -meta: - - name: og:title - content: 'SQL-REPL' - - name: og:url - content: '/uroborosql-doc/getting_started/sql-repl.html' +head: + - - meta + - name: og:title + content: "SQL-REPL" + - - meta + - name: og:url + content: "/uroborosql-doc/getting_started/sql-repl.html" --- + # SQL-REPL ここまではJavaアプリケーションから**uroboroSQL**を利用する場合の説明でした。 @@ -23,7 +26,7 @@ mvn -PREPL 実行すると以下のようにタイトル表示とコマンド説明、設定値の情報が表示され、そのあとコマンド入力状態になります。 -<<<@/src/getting_started/repl/prompt.sh +<<< ./repl/prompt.sh **REPL**を立ち上げた状態では接続したDB(H2DB メモリDB)には何もない状態なので、まずはテーブルを作成します。 サンプルアプリケーションで利用できるSQLファイルを確認しましょう。 @@ -34,7 +37,7 @@ uroborosql > list[Enter] と入力してください。 -<<<@/src/getting_started/repl/list.sh +<<< ./repl/list.sh ロード済みのSQLファイルの`SQL名`がわかります。 テーブルを作成するために`ddl/create_tables`を実行します。 @@ -44,7 +47,7 @@ uroborosql > list[Enter] uroborosql > u[Tab] ``` -と入力してください。 +と入力してください。 ```sh uroborosql > update @@ -78,8 +81,7 @@ uroborosql > update ddl/create_tables もう一度`[Enter]`を入力するとSQLが実行されます。 -<<<@/src/getting_started/repl/create_tables.sql - +<<< ./repl/create_tables.sql `ddl/create_tables`が実行され、DBにテーブルが作成されました。 @@ -91,7 +93,7 @@ uroborosql > update ddl/create_tables uroborosql > desc EMPLOYEE[Enter] ``` -<<<@/src/getting_started/repl/desc.sql +<<< ./repl/desc.sql EMPLOYEEテーブルの定義情報が表形式で表示されました。 @@ -103,7 +105,7 @@ EMPLOYEEテーブルの定義情報が表形式で表示されました。 uroborosql > update setup/insert_data[Enter] ``` -<<<@/src/getting_started/repl/insert_data.sql +<<< ./repl/insert_data.sql これでテーブルに初期データが挿入されました。 では、挿入したデータを検索してみましょう。 @@ -115,7 +117,7 @@ SQLの内容を確認するには`view`コマンドを使用します。 uroborosql > view department/select_department[Enter] ``` -<<<@/src/getting_started/repl/view.sql +<<< ./repl/view.sql 検索を行う場合は`query`コマンドを使用します。 `query`の後に実行する`SQL名`を指定します。 @@ -124,7 +126,7 @@ uroborosql > view department/select_department[Enter] uroborosql > query department/select_department[Enter] ``` -<<<@/src/getting_started/repl/select_department_1.sql +<<< ./repl/select_department_1.sql ここではバインドパラメータを指定しなかったため、絞込み条件のないSQLが実行され検索結果として4件のデータが取得できました。 @@ -146,13 +148,13 @@ uroborosql > query department/select_department[Enter] uroborosql > parse department/select_department[Enter] ``` -<<<@/src/getting_started/repl/parse.sql +<<< ./repl/parse.sql `parse`コマンドの結果は以下のようになります。 -* `SQL` : 解析対象のSQL -* `BRANCHES` : 条件分岐 -* `BIND_PARAMS` : バインドパラメータ +- `SQL` : 解析対象のSQL +- `BRANCHES` : 条件分岐 +- `BIND_PARAMS` : バインドパラメータ 条件分岐では `BEGIN`のスコープ({}で囲まれた中)に2つのIF分岐が並んでいることがわかります。 また、バインドパラメータでは `deptNo`と`deptName`があることがわかります。 @@ -163,7 +165,7 @@ uroborosql > parse department/select_department[Enter] uroborosql > query department/select_department deptNo=1[Enter] ``` -<<<@/src/getting_started/repl/select_department_2.sql +<<< ./repl/select_department_2.sql `deptNo`に`1`を指定して検索しています。 この時、SQL文の評価式である/\*IF SF.isNotEmpty(deptNo)\*/が`true`となりSQLのwhere句に`dept_no`の条件が追加されバインドパラメータがバインドされます。 @@ -179,7 +181,7 @@ uroborosql > query department/select_department deptNo=1[Enter] uroborosql > query department/select_department deptNo=1 deptName=sales[Enter] ``` -<<<@/src/getting_started/repl/select_department_3.sql +<<< ./repl/select_department_3.sql **REPL**を終了する場合はコマンド`quit`,もしくは`exit`を入力してください。 @@ -263,12 +265,11 @@ sql.additionalClassPath=${user.home}/.m2/repository/com/h2database/h2/1.4.192/h2 | sqlContextFactory.constantClassNames | SqlContextFactoryに登録する定数クラスを指定。`,`で区切ることで複数指定可。 ex) jp.co.future.uroborosql.context.test.TestConsts | | sqlContextFactory.enumConstantPackageNames | SqlContextFactoryに登録するEnum定数パッケージ名を指定。`,`で区切ることで複数指定可。ex) jp.co.future.uroborosql.context.test | - このプロパティファイルを変更することでいろいろなDBに接続することができるようになります。 これまで見てきたように**REPL**を利用することで簡単にSQL実行や動作確認ができるので、SQL開発には欠かせないツールになります。 色々なSQLを記述して**REPL**で試してみてください。 -これで *Getting Started* は終了です。 +これで _Getting Started_ は終了です。 -**uroboroSQL**で使用するSQLの文法や基本的な操作については[基本操作](../basics)を参照してください。 +**uroboroSQL**で使用するSQLの文法や基本的な操作については[基本操作](../basics/index.md)を参照してください。 diff --git a/src/README.md b/src/index.md similarity index 80% rename from src/README.md rename to src/index.md index 87f5c74..f28f6ab 100644 --- a/src/README.md +++ b/src/index.md @@ -1,8 +1,16 @@ --- -home: true -heroImage: /images/logo.png -actionText: Why uroboroSQL -actionLink: /why_uroborosql/ +layout: home +title: uroboroSQL, +hero: + name: uroboroSQL + text: 'Java製のシンプルなSQL実行ライブラリ' + image: + src: /images/logo.png + alt: uroboroSQL + actions: + - theme: brand + text: Why uroboroSQL + link: ./why_uroborosql/ features: - title: 2Way-SQL with Coverage details: ORマッパー、クエリビルダならJavaコードでカバレッジが取れるのに、2Way-SQLで分岐を使った場合にはカバレッジが取れず本番環境で意図しないSQLが・・・。uroboroSQLではテスト実行時にカバレッジ取得用のログを出力・解析することにより、カバレッジレポートを出力することが可能です。 @@ -10,12 +18,13 @@ features: details: SQLファイルを修正するたびにコンパイルしてテスト実行するのに時間がかかる・・・。他のORマッパーやSQLフレームワークでイライラしていた経験はありませんか?uroboroSQLではREPLを搭載。SQLを修正してすぐにIDE等のコンソールからコマンドでコンパイルなしで実行、即デバッグができます。 - title: 区分値サポート details: 2Way-SQLのライブラリを使用していると、それぞれのSQLで区分値や定数などをいちいちパラメータに指定するのがわずらわしいと思ったことはありませんか?エンタープライズで使われてOSS化したuroboroSQLでは、SQLファイルの中で定数クラスや列挙体を指定することにより、呼び出し時の実装をシンプルにします。 -footer: MIT Licensed | ©2018-2022 Future Corporation. All rights reserved. -meta: - - name: og:title - content: 'uroboroSQL' - - name: og:url - content: '/uroborosql-doc/' +head: + - - meta + - name: og:title + content: "uroboroSQL" + - - meta + - name: og:url + content: "/uroborosql-doc/" --- ![GitHub stars](https://img.shields.io/github/stars/future-architect/uroborosql.svg?style=social&label=Stars) diff --git a/src/license/README.md b/src/license/index.md similarity index 88% rename from src/license/README.md rename to src/license/index.md index b8b2869..5c9f605 100644 --- a/src/license/README.md +++ b/src/license/index.md @@ -1,10 +1,13 @@ --- -meta: - - name: og:title - content: 'License' - - name: og:url - content: '/uroborosql-doc/license/' +head: + - - meta + - name: og:title + content: "License" + - - meta + - name: og:url + content: "/uroborosql-doc/license/" --- + # License MIT License diff --git a/docs/favicon.ico b/src/public/favicon.ico similarity index 100% rename from docs/favicon.ico rename to src/public/favicon.ico diff --git a/docs/fonts/FontAwesome.otf b/src/public/fonts/FontAwesome.otf similarity index 100% rename from docs/fonts/FontAwesome.otf rename to src/public/fonts/FontAwesome.otf diff --git a/docs/fonts/fontawesome-webfont.eot b/src/public/fonts/fontawesome-webfont.eot similarity index 100% rename from docs/fonts/fontawesome-webfont.eot rename to src/public/fonts/fontawesome-webfont.eot diff --git a/docs/fonts/fontawesome-webfont.svg b/src/public/fonts/fontawesome-webfont.svg similarity index 100% rename from docs/fonts/fontawesome-webfont.svg rename to src/public/fonts/fontawesome-webfont.svg diff --git a/docs/fonts/fontawesome-webfont.ttf b/src/public/fonts/fontawesome-webfont.ttf similarity index 100% rename from docs/fonts/fontawesome-webfont.ttf rename to src/public/fonts/fontawesome-webfont.ttf diff --git a/docs/fonts/fontawesome-webfont.woff b/src/public/fonts/fontawesome-webfont.woff similarity index 100% rename from docs/fonts/fontawesome-webfont.woff rename to src/public/fonts/fontawesome-webfont.woff diff --git a/docs/fonts/fontawesome-webfont.woff2 b/src/public/fonts/fontawesome-webfont.woff2 similarity index 100% rename from docs/fonts/fontawesome-webfont.woff2 rename to src/public/fonts/fontawesome-webfont.woff2 diff --git a/docs/images/logo.png b/src/public/images/logo.png similarity index 100% rename from docs/images/logo.png rename to src/public/images/logo.png diff --git a/docs/images/logo.svg b/src/public/images/logo.svg similarity index 100% rename from docs/images/logo.svg rename to src/public/images/logo.svg diff --git a/docs/images/white_blank.png b/src/public/images/white_blank.png similarity index 100% rename from docs/images/white_blank.png rename to src/public/images/white_blank.png diff --git a/docs/images/wp-index.jpg b/src/public/images/wp-index.jpg similarity index 100% rename from docs/images/wp-index.jpg rename to src/public/images/wp-index.jpg diff --git a/docs/images/wp01.jpg b/src/public/images/wp01.jpg similarity index 100% rename from docs/images/wp01.jpg rename to src/public/images/wp01.jpg diff --git a/docs/images/wp02.jpg b/src/public/images/wp02.jpg similarity index 100% rename from docs/images/wp02.jpg rename to src/public/images/wp02.jpg diff --git a/docs/images/wp03.jpg b/src/public/images/wp03.jpg similarity index 100% rename from docs/images/wp03.jpg rename to src/public/images/wp03.jpg diff --git a/docs/images/wp04.jpg b/src/public/images/wp04.jpg similarity index 100% rename from docs/images/wp04.jpg rename to src/public/images/wp04.jpg diff --git a/docs/images/wp05.jpg b/src/public/images/wp05.jpg similarity index 100% rename from docs/images/wp05.jpg rename to src/public/images/wp05.jpg diff --git a/docs/images/wp06.jpg b/src/public/images/wp06.jpg similarity index 100% rename from docs/images/wp06.jpg rename to src/public/images/wp06.jpg diff --git a/docs/images/wp07.png b/src/public/images/wp07.png similarity index 100% rename from docs/images/wp07.png rename to src/public/images/wp07.png diff --git a/docs/sample/testReport/covertest/test01.html b/src/public/sample/testReport/covertest/test01.html similarity index 100% rename from docs/sample/testReport/covertest/test01.html rename to src/public/sample/testReport/covertest/test01.html diff --git a/docs/sample/testReport/covertest/test01_hash_1.html b/src/public/sample/testReport/covertest/test01_hash_1.html similarity index 100% rename from docs/sample/testReport/covertest/test01_hash_1.html rename to src/public/sample/testReport/covertest/test01_hash_1.html diff --git a/docs/sample/testReport/covertest/test02.html b/src/public/sample/testReport/covertest/test02.html similarity index 100% rename from docs/sample/testReport/covertest/test02.html rename to src/public/sample/testReport/covertest/test02.html diff --git a/docs/sample/testReport/covertest/test03.html b/src/public/sample/testReport/covertest/test03.html similarity index 100% rename from docs/sample/testReport/covertest/test03.html rename to src/public/sample/testReport/covertest/test03.html diff --git a/docs/sample/testReport/example/select_test.html b/src/public/sample/testReport/example/select_test.html similarity index 100% rename from docs/sample/testReport/example/select_test.html rename to src/public/sample/testReport/example/select_test.html diff --git a/docs/sample/testReport/highlight.pack.js b/src/public/sample/testReport/highlight.pack.js similarity index 100% rename from docs/sample/testReport/highlight.pack.js rename to src/public/sample/testReport/highlight.pack.js diff --git a/docs/sample/testReport/icon.png b/src/public/sample/testReport/icon.png similarity index 100% rename from docs/sample/testReport/icon.png rename to src/public/sample/testReport/icon.png diff --git a/docs/sample/testReport/index.html b/src/public/sample/testReport/index.html similarity index 100% rename from docs/sample/testReport/index.html rename to src/public/sample/testReport/index.html diff --git a/docs/sample/testReport/jquery-3.2.0.min.js b/src/public/sample/testReport/jquery-3.2.0.min.js similarity index 100% rename from docs/sample/testReport/jquery-3.2.0.min.js rename to src/public/sample/testReport/jquery-3.2.0.min.js diff --git a/docs/sample/testReport/sqlcov.js b/src/public/sample/testReport/sqlcov.js similarity index 100% rename from docs/sample/testReport/sqlcov.js rename to src/public/sample/testReport/sqlcov.js diff --git a/docs/sample/testReport/stupidtable.min.js b/src/public/sample/testReport/stupidtable.min.js similarity index 100% rename from docs/sample/testReport/stupidtable.min.js rename to src/public/sample/testReport/stupidtable.min.js diff --git a/docs/sample/testReport/style.css b/src/public/sample/testReport/style.css similarity index 100% rename from docs/sample/testReport/style.css rename to src/public/sample/testReport/style.css diff --git a/src/why_uroborosql/README.md b/src/why_uroborosql/index.md similarity index 96% rename from src/why_uroborosql/README.md rename to src/why_uroborosql/index.md index 95db033..0d37529 100644 --- a/src/why_uroborosql/README.md +++ b/src/why_uroborosql/index.md @@ -1,10 +1,13 @@ --- -meta: - - name: og:title - content: 'uroboroSQLとは' - - name: og:url - content: '/uroborosql-doc/why_uroborosql/' +head: + - - meta + - name: og:title + content: "uroboroSQLとは" + - - meta + - name: og:url + content: "/uroborosql-doc/why_uroborosql/" --- + # uroboroSQLとは **uroboroSQL**は2Way-SQLが利用可能なJava製のシンプルなSQL実行ライブラリです。 From b0722f0294f6d38ead43c17216dfde925a7dd923 Mon Sep 17 00:00:00 2001 From: ota-meshi Date: Sat, 21 Dec 2024 14:27:53 +0900 Subject: [PATCH 2/8] fix ci comment --- .github/workflows/ci.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 743e0cc..4ccfda0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,9 +17,7 @@ jobs: npm i -f - name: Lint run: | - # フォーマットをチェックします。 - # 失敗した場合は、npm run formatを実行するかしてください。 - # ローカル環境の構築が難しい場合は、GitHub Actions から Format ワークフローを起動すると解決するかもしれません。 + # フォーマットをチェックします。失敗した場合は、npm run formatを実行するかしてください。ローカル環境の構築が難しい場合は、GitHub Actions から Format ワークフローを起動すると解決するかもしれません。 npm run lint - name: Build run: | From eb0daa71afc3feb5d5b1e382117868ae3c818117 Mon Sep 17 00:00:00 2001 From: ota-meshi Date: Sat, 21 Dec 2024 14:36:53 +0900 Subject: [PATCH 3/8] update site icon --- src/.vitepress/config.mjs | 2 +- src/public/icon.png | Bin 0 -> 26633 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 src/public/icon.png diff --git a/src/.vitepress/config.mjs b/src/.vitepress/config.mjs index 982930a..904e5bf 100644 --- a/src/.vitepress/config.mjs +++ b/src/.vitepress/config.mjs @@ -103,7 +103,7 @@ export default defineConfig({ }, }, head: [ - ["link", { rel: "icon", href: "/uroborosql-doc/favicon.ico" }], + ["link", { rel: "icon", href: "/uroborosql-doc/icon.png" }], ["meta", { name: "og:type", content: "website" }], [ "meta", diff --git a/src/public/icon.png b/src/public/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..c209a4d5b2e12ef6361cbf3dedef16ad08b49093 GIT binary patch literal 26633 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

tr%vTi0nys8;|-7v}(~oFgw7Z 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

5J{VG@jDe3D#~X8utT{Q{#VOk}5TrZBhshD~ zrht_A;!SZmpXC&Q^K&m)M=yc*-&vTfDPqL(iMLN6x4dy8bS%?I#up3qb`jBuYo7rBrL$n=U;AlZTy5-dE;%oY>8TXr+`+dJwO+L z^_>G+SQQQ@x4bre&?Mut>5Y+S#fJi1s2$Aj@0jgE{F$C~RXR4u=RS(gA{n13#bp1K zqyQLT78u}ZaEQJPKZ^fv?~GL%2!b%YM#L_u4z!AeB&4y(GvpCOuoEjwNueZ7z+RtB z6it~@hy+2b0uglmHz*uo0|5_alluaJV;63BzF~(QZug(V0*xf)Ef8i=uOjdjMUwYy z1cAQ;(F%e=aitS8N{i-B0WwqHss5|fFec@Vfi!F*@EO8q=(Gtuz4^AJoh~)Y#Q-JM})V+MvNrojX<$zBJf#IXUw%G@LN6YM0FYWbVvAh(U?%GvoUeU+5ujvubuBF<;~Nu zdnWMNv1jBG5QrR@Cgn}Q?*zUCoWK+|pTKb9kF-M!cZS1uTXmRivm_GV?JP0uU%Of#(meg6pcL!4CoufB*y_009U<00Izz00bZa0SNq` Zzz+=P(pO9y10VnZ002ovPDHLkV1fj|@g@KO literal 0 HcmV?d00001 From 7ba25825cb92b36dd46d1fee6ad162b1204a82a0 Mon Sep 17 00:00:00 2001 From: ota-meshi Date: Sat, 21 Dec 2024 14:42:10 +0900 Subject: [PATCH 4/8] =?UTF-8?q?=E3=83=AA=E3=83=B3=E3=82=AF=E3=81=AE?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/advanced/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/advanced/index.md b/src/advanced/index.md index 0816eba..425fbb2 100644 --- a/src/advanced/index.md +++ b/src/advanced/index.md @@ -221,7 +221,7 @@ SQLカバレッジを有効にするとアプリケーションが実行して ![HTML Coverage Report](./html_coverage_report.png) -出力サンプル +出力サンプル ## ログ出力 From 11cada727e95b381568ba2b60fcf584a95ad0e4c Mon Sep 17 00:00:00 2001 From: ota-meshi Date: Sat, 21 Dec 2024 18:04:33 +0900 Subject: [PATCH 5/8] update image --- src/.vitepress/theme/style.css | 48 +++++++++++++++++++++++++--------- 1 file changed, 36 insertions(+), 12 deletions(-) diff --git a/src/.vitepress/theme/style.css b/src/.vitepress/theme/style.css index 6f56279..553660c 100644 --- a/src/.vitepress/theme/style.css +++ b/src/.vitepress/theme/style.css @@ -6,18 +6,42 @@ --uroborosql-yellow: #c0ff16; --vp-home-hero-name-color: var(--uroborosql-blue); - /*--vp-home-hero-name-color: transparent; - --vp-home-hero-name-background: -webkit-linear-gradient( - 120deg, - var(--uroborosql-blue) 30%, - var(--uroborosql-red) - ); */ - --vp-home-hero-image-background-image: linear-gradient( - -45deg, - var(--uroborosql-yellow) 50%, - var(--uroborosql-blue) 50% - ); - --vp-home-hero-image-filter: blur(120px); + --vp-home-hero-image-filter: blur(80px); +} + +.image-bg { + animation: 30s linear infinite rotation; +} +.image-bg::before { + content: ""; + position: absolute; + top: 0; + left: 5%; + height: 100%; + width: 90%; + border-radius: 50%; + box-shadow: + 30px 0 var(--uroborosql-blue), + -30px 0 var(--uroborosql-red); +} +.image-bg::after { + content: ""; + position: absolute; + top: 25%; + left: 25%; + height: 50%; + width: 50%; + border-radius: 50%; + background-color: var(--uroborosql-yellow); +} + +@keyframes rotation { + 0% { + transform: translate(-50%, -50%) rotate(-30deg); + } + 100% { + transform: translate(-50%, -50%) rotate(-390deg); + } } /* コンテンツの画像を横並びに戻します */ From 58fc33e936dcf3122f2bb473e6e41210ef499b74 Mon Sep 17 00:00:00 2001 From: ota-meshi Date: Mon, 23 Dec 2024 08:04:35 +0900 Subject: [PATCH 6/8] add .stackblitzrc --- .stackblitzrc | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .stackblitzrc diff --git a/.stackblitzrc b/.stackblitzrc new file mode 100644 index 0000000..3e262c7 --- /dev/null +++ b/.stackblitzrc @@ -0,0 +1,3 @@ +{ + "startCommand": "npm run watch" +} From 6e819a953f8cd84d2a9f2712886673dd53b5f98a Mon Sep 17 00:00:00 2001 From: ota-meshi Date: Mon, 23 Dec 2024 08:11:07 +0900 Subject: [PATCH 7/8] add codeflow.json --- .stackblitz/codeflow.json | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .stackblitz/codeflow.json diff --git a/.stackblitz/codeflow.json b/.stackblitz/codeflow.json new file mode 100644 index 0000000..f78d5a6 --- /dev/null +++ b/.stackblitz/codeflow.json @@ -0,0 +1,7 @@ +{ + "bot": { + "issues": { + "enabled": false + } + } +} From adc7fcb82c37f606a4ebf7cd79f9478137f3c8bf Mon Sep 17 00:00:00 2001 From: ota-meshi Date: Mon, 23 Dec 2024 14:31:01 +0900 Subject: [PATCH 8/8] add vscode/extensions.json --- .vscode/extensions.json | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .vscode/extensions.json diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..c83e263 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["esbenp.prettier-vscode"] +}

PUPo$#qb#CepaTTjk(ReTvsrq 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 diff --git a/src/.vuepress/public/images/wp06.jpg b/src/.vuepress/public/images/wp06.jpg deleted file mode 100644 index 5486769b2c21d407d8e14c974f2678125d0943ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 96766 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