From 91075c224457788ff37cb1384017d74ef2326e15 Mon Sep 17 00:00:00 2001 From: francis-du Date: Mon, 6 Jan 2020 18:22:52 +0800 Subject: [PATCH 1/2] Add blog and Fixed some document specifications --- docs/about/faq.md | 4 +- docs/about/license.md | 2 +- docs/about/release-notes.md | 4 +- docs/blog/2019.md | 4 +- docs/blog/2020.md | 3 ++ ...25\347\245\250\347\273\223\346\236\234.md" | 37 ++++++++++++++++++ docs/community/channel.md | 2 +- docs/community/contribution-code.md | 29 +++++++++++++- docs/community/contribution-docs.md | 2 +- docs/community/contributors.md | 2 + docs/deployment/deployment.md | 12 +++--- docs/images/accent-color-count.png | Bin 0 -> 35537 bytes docs/images/primary-color-count.png | Bin 0 -> 45519 bytes docs/reference/develop.md | 5 ++- docs/reference/getting-started.md | 17 ++++---- docs/reference/sql-language.md | 11 ++++-- docs/zh/about/faq.md | 4 +- docs/zh/about/license.md | 2 +- docs/zh/about/release-notes.md | 4 +- docs/zh/community/channel.md | 2 +- docs/zh/community/contribution-code.md | 28 ++++++++++++- docs/zh/deployment/deployment.md | 10 ++--- docs/zh/reference/develop.md | 5 ++- docs/zh/reference/getting-started.md | 17 ++++---- docs/zh/reference/sql-language.md | 13 +++--- 25 files changed, 164 insertions(+), 55 deletions(-) create mode 100644 "docs/blog/articles/\345\234\250\347\272\277\346\226\207\346\241\243\344\270\273\351\242\230\350\211\262\346\212\225\347\245\250\347\273\223\346\236\234.md" create mode 100644 docs/images/accent-color-count.png create mode 100644 docs/images/primary-color-count.png diff --git a/docs/about/faq.md b/docs/about/faq.md index 6888034c..4a292dba 100644 --- a/docs/about/faq.md +++ b/docs/about/faq.md @@ -1 +1,3 @@ -[English](./faq.md)|[中文](../zh/about/faq.md) \ No newline at end of file +[English](./faq.md)|[中文](../zh/about/faq.md) + +# FAQ \ No newline at end of file diff --git a/docs/about/license.md b/docs/about/license.md index 46a18c1e..fc39d3bd 100644 --- a/docs/about/license.md +++ b/docs/about/license.md @@ -1,4 +1,4 @@ -## **MIT License** +# **MIT License** **Copyright (c) 2018 ** diff --git a/docs/about/release-notes.md b/docs/about/release-notes.md index 5343749b..a2866f0f 100644 --- a/docs/about/release-notes.md +++ b/docs/about/release-notes.md @@ -1,6 +1,6 @@ [English](./release-notes.md)|[中文](../zh/about/release-notes.md) -## **RELEASE-0.6** +# **RELEASE-0.6** **0.6版涉及的改动如下:** @@ -24,5 +24,5 @@ - 支持混算模式下JDBC数据源的分布式查询。 -## **RELEASE-0.5** +# **RELEASE-0.5** - 无 \ No newline at end of file diff --git a/docs/blog/2019.md b/docs/blog/2019.md index 2ea86ff2..a6e86cf3 100644 --- a/docs/blog/2019.md +++ b/docs/blog/2019.md @@ -1,7 +1,7 @@ -## 2019-08-27 +# 2019-08-27 [360多数据源混合查询引擎的前世今生 | 刘思源](https://mp.weixin.qq.com/s/ZdWi5CtBE_38t-brGkyB3g) -## 2019-01-09 +# 2019-01-09 [Quicksql——更简单,更安全,更快速的跨数据源统一SQL查询引擎 | 360技术](https://mp.weixin.qq.com/s/XUFhq5iwK-Lfbf8vSXr7tA) \ No newline at end of file diff --git a/docs/blog/2020.md b/docs/blog/2020.md index e69de29b..5acf7d17 100644 --- a/docs/blog/2020.md +++ b/docs/blog/2020.md @@ -0,0 +1,3 @@ +# 2020-01-03 + +[Quick SQL在线文档主题色投票结果 | Francis](articles/在线文档主题色投票结果.md) \ No newline at end of file diff --git "a/docs/blog/articles/\345\234\250\347\272\277\346\226\207\346\241\243\344\270\273\351\242\230\350\211\262\346\212\225\347\245\250\347\273\223\346\236\234.md" "b/docs/blog/articles/\345\234\250\347\272\277\346\226\207\346\241\243\344\270\273\351\242\230\350\211\262\346\212\225\347\245\250\347\273\223\346\236\234.md" new file mode 100644 index 00000000..f165eee6 --- /dev/null +++ "b/docs/blog/articles/\345\234\250\347\272\277\346\226\207\346\241\243\344\270\273\351\242\230\350\211\262\346\212\225\347\245\250\347\273\223\346\236\234.md" @@ -0,0 +1,37 @@ +# Quick SQL在线文档主题色投票结果出来啦 + +上周四,也就是2020年01月02日,我们发起了一个关于我们 +[在线文档的主题颜色投票](https://form.chinagdg.org/forms/d/e/1FAIpQLSc4CdXZsDZO3jat8rPgm9VEjXfrqlPQB5DCOva0OTcFemp16w/viewform) + +首先呢,通过本次投票,极大的鼓舞了 Quick SQL 社区的小伙伴儿的积极性 +(虽然只有20个人参与),但是群里的小哥看到我们的新的文档 +表示一下充满了信心,要来贡献代码呢~-~ + +其次,我们正在逐渐的国际化,最近也开了Slack Channel,我们日常的一些 +开发和讨论都在[Slack](https://quicksql.readthedocs.io/en/latest/community/channel/) +上,欢迎大家加入讨论和贡献[代码](https://quicksql.readthedocs.io/en/latest/community/contribution-code/) +和[文档](https://quicksql.readthedocs.io/en/latest/community/contribution-docs/)哦~ +另外我们的翻译平台也在逐步的建立。总之就是我们会越来越好哒^-^ + +拉好小板凳,现在让我来公布下投票结果~ + +获得我们`页面整体色调`人数最多奖的是... `Blue(15%)` + +![primary](../../../images/primary-color-count.png) + +获得我们`鼠标经过时色调`人数最多奖的是... `Red(20%)` + +![accent](../../../images/accent-color-count.png) + +我们接下来会将我们的主题颜色改成以上的两位获奖色 +感谢大家的投票,希望下次投票人能多点,`手动捂脸.jpg` + +## 加入我们 + +[![Slack](../../../images/slack.png)](https://join.slack.com/t/quicksql/shared_invite/enQtODkwMzM0Njc3NTExLWQxNjRlY2M5YTlkMTk4OTM2YzhjMjUxYTUyN2VlNzJlNzQwM2E4YjkxNzA4MDllODg5NWUxNDY4MTMyMzczMWI) +[![Github](../../../images/github.png)](https://github.com/qihoo360/Quicksql/issues) +[![QQ](../../../images/qq.png)](https://jq.qq.com/?_wv=1027&k=5782R6F) + + + + diff --git a/docs/community/channel.md b/docs/community/channel.md index 3a2c0221..c1eab576 100644 --- a/docs/community/channel.md +++ b/docs/community/channel.md @@ -1,4 +1,4 @@ -## Join us +# Join us [![Slack](../images/slack.png)](https://join.slack.com/t/quicksql/shared_invite/enQtODkwMzM0Njc3NTExLWQxNjRlY2M5YTlkMTk4OTM2YzhjMjUxYTUyN2VlNzJlNzQwM2E4YjkxNzA4MDllODg5NWUxNDY4MTMyMzczMWI) [![Github](../images/github.png)](https://github.com/qihoo360/Quicksql/issues) diff --git a/docs/community/contribution-code.md b/docs/community/contribution-code.md index 2f0d1a48..3562c3b7 100644 --- a/docs/community/contribution-code.md +++ b/docs/community/contribution-code.md @@ -1,3 +1,30 @@ [English](./contribution-code.md)|[中文](../zh/community/contribution-code.md) -## Contributing code \ No newline at end of file +# Contributing Code + +We welcome contributions. + +If you are interested in Quicksql, you can download the source code from GitHub and execute the following maven command at the project root directory: + +```shell +mvn -DskipTests clean package +``` + +If you are planning to make a large contribution, talk to us first! It helps to agree on the general approach. Log a Issures on GitHub for your proposed feature. + +Fork the GitHub repository, and create a branch for your feature. + +Develop your feature and test cases, and make sure that `mvn install` succeeds. (Run extra tests if your change warrants it.) + +Commit your change to your branch. + +If your change had multiple commits, use `git rebase -i master` to squash them into a single commit, and to bring your code up to date with the latest on the main line. + +Then push your commit(s) to GitHub, and create a pull request from your branch to the QSQL master branch. Update the JIRA case to reference your pull request, and a committer will review your changes. + +The pull request may need to be updated (after its submission) for two main reasons: + +1. you identified a problem after the submission of the pull request; +2. the reviewer requested further changes; + +In order to update the pull request, you need to commit the changes in your branch and then push the commit(s) to GitHub. You are encouraged to use regular (non-rebased) commits on top of previously existing ones. diff --git a/docs/community/contribution-docs.md b/docs/community/contribution-docs.md index 4adf9f25..b848d525 100644 --- a/docs/community/contribution-docs.md +++ b/docs/community/contribution-docs.md @@ -1,6 +1,6 @@ [English](./contribution-docs.md)|[中文](../zh/community/contribution-docs.md) -## Contributing documents +# Contributing documents ## Installing Python Install [Python](https://www.python.org/) or [Anaconda](https://www.anaconda.com/). diff --git a/docs/community/contributors.md b/docs/community/contributors.md index dba85762..3aa5fb6f 100644 --- a/docs/community/contributors.md +++ b/docs/community/contributors.md @@ -1,3 +1,5 @@ +# Contributors + Sort alphabetically,Show only GitHub ID without avatar. ### Without avatar diff --git a/docs/deployment/deployment.md b/docs/deployment/deployment.md index 49e8467b..f3ad4355 100644 --- a/docs/deployment/deployment.md +++ b/docs/deployment/deployment.md @@ -1,11 +1,11 @@ -[English](../../deployment/deployment.md)|[中文](./deployment.md) +[English](./deployment.md)|[中文](../zh/deployment/deployment.md) -## 部署指南 +# 部署指南 (引言)本页面将提供Quicksql支持的数据源和引擎的配套版本和依赖包调整方式,此外,元数据的管理方式也将被提及。 -### 数据源管理 +## 数据源管理 Quicksql提供默认的数据源客户端版本,以下是版本关系表,用户可以自行替换Jar包更替。 @@ -29,7 +29,7 @@ $ cp mysql-connector-java-8.0.18.jar ./ $ ../bin/quicksql -e "SELECT * FROM TABLE_IN_MySQL8" `````` -### 计算引擎管理 +## 计算引擎管理 Quicksql使用的计算引擎可以由用户自定义参数,参数可以在./conf/qsql-runner.properties中修改: @@ -52,11 +52,11 @@ Quicksql使用的计算引擎可以由用户自定义参数,参数可以在./c | ------------- | ------- | ------- | | 待补充 | 待补充 | 待补充 | -### 元数据管理 +## 元数据管理 Quicksql使用一个独立的存储来存放各类数据源的元数据及配置信息,默认的元数据存储为Sqlite,一个文档数据库,在普通开发环境下可以使用。如果对并发能力有更高的要求,可以更换元数据存储为MySQL等,采用通用的JDBC标准,可参考以下配置: -#### 元数据参数 +### 元数据参数 | Property Name | Default | Meaning | | --------------------------- | ---------------------- | ------------------------------------------------------------ | diff --git a/docs/images/accent-color-count.png b/docs/images/accent-color-count.png new file mode 100644 index 0000000000000000000000000000000000000000..ed94346649358e22d639614d9e376127bf993f5c GIT binary patch literal 35537 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�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 LsZc5Z{O$h$#FV2V literal 0 HcmV?d00001 diff --git a/docs/images/primary-color-count.png b/docs/images/primary-color-count.png new file mode 100644 index 0000000000000000000000000000000000000000..2b870ef004b309e746c66eff1284613a7962aff8 GIT binary patch literal 45519 zcmdSB2UJsAv@VQ#Y+yMmMHE4$ccgc0^eUkksv#8VLI_B=#X^;ugsK9;5Q-3b)hIm# zrH87NL`VQB0qJkYQ}4U)jd90#|0{pS5VLnyR-J3EZ_e-Ad0}Rvdz|$gD+>$Daecj; z<}54+h%7AoCyyKg?i|~2%mDt|2Q$~b&QeU`nFTI>bGv4IjfJH&o^2a)5V$^iPY(=Z zVL2VZ{I_r1mG3_Ap|k$YYZmt%=wnASEM_tnBNvuK#^xgziJ3F-n$B(NoN_cwZtq2s z{^cZMrk)e0tiF&l@w$@`;nSyA`pIAJK0lXm=grMCfdE`8Q_2Bq(MYXPR`q#TiH|;23in8{j-&;XU_x!kV$SPFE&NsZfT02}i*u1mmDeH65wpCXh%GWh?PI?E5d;-ycV)g~*&Z8W zMR5Om`+uS6OX~y$Pk|q=PwMYA?GE;6L9Wj>huF<6VOx)~yuGvQX!plSK^w*X;%tP02FnB1nZ*_> z5hBZj-wNIpOcv;*%e}5#;iSxTB57~t{S8;ic(+VLuQ|6Wl(niQYNuIA($f}xesR9< zdD%IzRbCA{iq&1{XxQYL(_=Ltf#2T+v7azp{Q==lyTb2N_kmV|Y*Skl@L8`YY4%1M zv-~q8&vFFVc*k|KN|Fmfz5qTEww!cSP{w}Q@}2Q|iqs9q-LhjPP1G^EdOC=4^le` z8D0jJVni(FKCZJtyDl-NLPnQ1=ltUU-)DZ}H|=QIab((~B8(H#91>U0NNp^tS}iy= z^)2p1c(8N7SUC7c;}$((=EJq4nm-;i8hLAlExmzHL5@n>pBr&g{MYK-MVy0JA)9_q zMjve+3aB%flqO>1+^q)P2P%Cafxh`~30}4K1<3}Gft;4u*v-ms){e1tQnisyjq1w_ zb(?PRhBuYgRj{h)`kl(~jc*@IJIjv#V14+}$L!ylRxX62ZBb*V+>}ZQVc#D8 zCS)2{CzbRsqb|4Opah5zU2CL>yPb)m&rVTZ`$pP6t*c%2YftFML6IO}^Q-)6WGui! z*W~95&wek9vgyOUe*KW(^|F&dHy^=*jIfCJQOy>5_!kbJXxqUJC2tuj=eJk1;_Y<- zPcr@2CMvgM2POkq^?O~Pix0#KR6aIx3k9=9;WJb1qxgxn64@#_>p7f1%&B&34vUt zXSx~~S6THI8;_b_7;)tN$rp;b#oz966RaO-;$qeQ?@j?#?x>_#AjqL47X|wf$?mz3 zpc$`)@*xIE>^1Z@X0x7YEp_z z%2$o`?=Tr0?8>u<