Kouhei Sutou
null+****@clear*****
Tue Jan 17 20:08:09 JST 2017
Kouhei Sutou 2017-01-17 20:08:09 +0900 (Tue, 17 Jan 2017) New Revision: 646a1381d350458100ae72bc187367355e89d3ab https://github.com/groonga/groonga/commit/646a1381d350458100ae72bc187367355e89d3ab Message: doc: select logical_select: use "drilldowns" style Modified files: doc/files.am doc/source/reference/commands/logical_select.rst doc/source/reference/commands/select.rst Renamed files: doc/source/example/reference/commands/logical_select/drilldowns_label_calc_types.log (from doc/source/example/reference/commands/logical_select/drilldown_label_calc_types.log) doc/source/example/reference/commands/logical_select/drilldowns_label_keys.log (from doc/source/example/reference/commands/logical_select/drilldown_label_keys.log) doc/source/example/reference/commands/logical_select/drilldowns_label_limit.log (from doc/source/example/reference/commands/logical_select/drilldown_label_limit.log) doc/source/example/reference/commands/logical_select/drilldowns_label_offset.log (from doc/source/example/reference/commands/logical_select/drilldown_label_offset.log) doc/source/example/reference/commands/logical_select/drilldowns_label_output_columns.log (from doc/source/example/reference/commands/logical_select/drilldown_label_output_columns.log) doc/source/example/reference/commands/logical_select/drilldowns_label_sortby.log (from doc/source/example/reference/commands/logical_select/drilldown_label_sortby.log) doc/source/example/reference/commands/select/drilldowns_label_keys_multiple.log (from doc/source/example/reference/commands/select/drilldown_label_keys_multiple.log) doc/source/example/reference/commands/select/drilldowns_label_output_columns_single_group_key.log (from doc/source/example/reference/commands/select/drilldown_label_output_columns_single_group_key.log) Modified: doc/files.am (+16 -16) =================================================================== --- doc/files.am 2017-01-17 20:01:03 +0900 (cfb1c8a) +++ doc/files.am 2017-01-17 20:08:09 +0900 (3b4ee07) @@ -122,12 +122,12 @@ absolute_source_files = \ $(top_srcdir)/doc/source/example/reference/commands/logical_parameters/usage_set.log \ $(top_srcdir)/doc/source/example/reference/commands/logical_select/drilldown.log \ $(top_srcdir)/doc/source/example/reference/commands/logical_select/drilldown_calc_types.log \ - $(top_srcdir)/doc/source/example/reference/commands/logical_select/drilldown_label_calc_types.log \ - $(top_srcdir)/doc/source/example/reference/commands/logical_select/drilldown_label_keys.log \ - $(top_srcdir)/doc/source/example/reference/commands/logical_select/drilldown_label_limit.log \ - $(top_srcdir)/doc/source/example/reference/commands/logical_select/drilldown_label_offset.log \ - $(top_srcdir)/doc/source/example/reference/commands/logical_select/drilldown_label_output_columns.log \ - $(top_srcdir)/doc/source/example/reference/commands/logical_select/drilldown_label_sortby.log \ + $(top_srcdir)/doc/source/example/reference/commands/logical_select/drilldowns_label_calc_types.log \ + $(top_srcdir)/doc/source/example/reference/commands/logical_select/drilldowns_label_keys.log \ + $(top_srcdir)/doc/source/example/reference/commands/logical_select/drilldowns_label_limit.log \ + $(top_srcdir)/doc/source/example/reference/commands/logical_select/drilldowns_label_offset.log \ + $(top_srcdir)/doc/source/example/reference/commands/logical_select/drilldowns_label_output_columns.log \ + $(top_srcdir)/doc/source/example/reference/commands/logical_select/drilldowns_label_sortby.log \ $(top_srcdir)/doc/source/example/reference/commands/logical_select/drilldown_limit.log \ $(top_srcdir)/doc/source/example/reference/commands/logical_select/drilldown_offset.log \ $(top_srcdir)/doc/source/example/reference/commands/logical_select/drilldown_output_columns.log \ @@ -203,8 +203,8 @@ absolute_source_files = \ $(top_srcdir)/doc/source/example/reference/commands/select/drilldown_calc_types_min.log \ $(top_srcdir)/doc/source/example/reference/commands/select/drilldown_calc_types_sum.log \ $(top_srcdir)/doc/source/example/reference/commands/select/drilldown_filter.log \ - $(top_srcdir)/doc/source/example/reference/commands/select/drilldown_label_keys_multiple.log \ - $(top_srcdir)/doc/source/example/reference/commands/select/drilldown_label_output_columns_single_group_key.log \ + $(top_srcdir)/doc/source/example/reference/commands/select/drilldowns_label_keys_multiple.log \ + $(top_srcdir)/doc/source/example/reference/commands/select/drilldowns_label_output_columns_single_group_key.log \ $(top_srcdir)/doc/source/example/reference/commands/select/drilldown_limit_negative.log \ $(top_srcdir)/doc/source/example/reference/commands/select/drilldown_limit_simple.log \ $(top_srcdir)/doc/source/example/reference/commands/select/drilldown_multiple.log \ @@ -1000,12 +1000,12 @@ source_files_relative_from_doc_dir = \ source/example/reference/commands/logical_parameters/usage_set.log \ source/example/reference/commands/logical_select/drilldown.log \ source/example/reference/commands/logical_select/drilldown_calc_types.log \ - source/example/reference/commands/logical_select/drilldown_label_calc_types.log \ - source/example/reference/commands/logical_select/drilldown_label_keys.log \ - source/example/reference/commands/logical_select/drilldown_label_limit.log \ - source/example/reference/commands/logical_select/drilldown_label_offset.log \ - source/example/reference/commands/logical_select/drilldown_label_output_columns.log \ - source/example/reference/commands/logical_select/drilldown_label_sortby.log \ + source/example/reference/commands/logical_select/drilldowns_label_calc_types.log \ + source/example/reference/commands/logical_select/drilldowns_label_keys.log \ + source/example/reference/commands/logical_select/drilldowns_label_limit.log \ + source/example/reference/commands/logical_select/drilldowns_label_offset.log \ + source/example/reference/commands/logical_select/drilldowns_label_output_columns.log \ + source/example/reference/commands/logical_select/drilldowns_label_sortby.log \ source/example/reference/commands/logical_select/drilldown_limit.log \ source/example/reference/commands/logical_select/drilldown_offset.log \ source/example/reference/commands/logical_select/drilldown_output_columns.log \ @@ -1081,8 +1081,8 @@ source_files_relative_from_doc_dir = \ source/example/reference/commands/select/drilldown_calc_types_min.log \ source/example/reference/commands/select/drilldown_calc_types_sum.log \ source/example/reference/commands/select/drilldown_filter.log \ - source/example/reference/commands/select/drilldown_label_keys_multiple.log \ - source/example/reference/commands/select/drilldown_label_output_columns_single_group_key.log \ + source/example/reference/commands/select/drilldowns_label_keys_multiple.log \ + source/example/reference/commands/select/drilldowns_label_output_columns_single_group_key.log \ source/example/reference/commands/select/drilldown_limit_negative.log \ source/example/reference/commands/select/drilldown_limit_simple.log \ source/example/reference/commands/select/drilldown_multiple.log \ Renamed: doc/source/example/reference/commands/logical_select/drilldowns_label_calc_types.log (+0 -0) 100% =================================================================== Renamed: doc/source/example/reference/commands/logical_select/drilldowns_label_keys.log (+0 -0) 100% =================================================================== Renamed: doc/source/example/reference/commands/logical_select/drilldowns_label_limit.log (+0 -0) 100% =================================================================== Renamed: doc/source/example/reference/commands/logical_select/drilldowns_label_offset.log (+0 -0) 100% =================================================================== Renamed: doc/source/example/reference/commands/logical_select/drilldowns_label_output_columns.log (+0 -0) 100% =================================================================== Renamed: doc/source/example/reference/commands/logical_select/drilldowns_label_sortby.log (+0 -0) 100% =================================================================== Renamed: doc/source/example/reference/commands/select/drilldowns_label_keys_multiple.log (+0 -0) 100% =================================================================== Renamed: doc/source/example/reference/commands/select/drilldowns_label_output_columns_single_group_key.log (+0 -0) 100% =================================================================== Modified: doc/source/reference/commands/logical_select.rst (+70 -67) =================================================================== --- doc/source/reference/commands/logical_select.rst 2017-01-17 20:01:03 +0900 (ff6b839) +++ doc/source/reference/commands/logical_select.rst 2017-01-17 20:08:09 +0900 (4ae5791) @@ -50,13 +50,16 @@ parameters are optional:: ``logical_select`` has the following named parameters for advanced drilldown: - * ``drilldown[${LABEL}].keys=null`` - * ``drilldown[${LABEL}].sortby=null`` - * ``drilldown[${LABEL}].output_columns="_key, _nsubrecs"`` - * ``drilldown[${LABEL}].offset=0`` - * ``drilldown[${LABEL}].limit=10`` - * ``drilldown[${LABEL}].calc_types=NONE`` - * ``drilldown[${LABEL}].calc_target=null`` + * ``drilldowns[${LABEL}].keys=null`` + * ``drilldowns[${LABEL}].sortby=null`` + * ``drilldowns[${LABEL}].output_columns="_key, _nsubrecs"`` + * ``drilldowns[${LABEL}].offset=0`` + * ``drilldowns[${LABEL}].limit=10`` + * ``drilldowns[${LABEL}].calc_types=NONE`` + * ``drilldowns[${LABEL}].calc_target=null`` + +.. deprecated:: 6.1.4 + ``drilldown[...]`` syntax is deprecated, Use ``drilldowns[...]`` instead. You can use one or more alphabets, digits, ``_`` and ``.`` for ``${LABEL}``. For example, ``parent.sub1`` is a valid ``${LABEL}``. @@ -65,15 +68,15 @@ Parameters that have the same ``${LABEL}`` are grouped. For example, the following parameters specify one drilldown: - * ``--drilldown[label].keys column`` - * ``--drilldown[label].sortby -_nsubrecs`` + * ``--drilldowns[label].keys column`` + * ``--drilldowns[label].sortby -_nsubrecs`` The following parameters specify two drilldowns: - * ``--drilldown[label1].keys column1`` - * ``--drilldown[label1].sortby -_nsubrecs`` - * ``--drilldown[label2].keys column2`` - * ``--drilldown[label2].sortby _key`` + * ``--drilldowns[label1].keys column1`` + * ``--drilldowns[label1].sortby -_nsubrecs`` + * ``--drilldowns[label2].keys column2`` + * ``--drilldowns[label2].sortby _key`` Differences from ``select`` --------------------------- @@ -88,9 +91,9 @@ But there are some differences from :doc:`select`: instead of ``table`` parameter. * ``sortby`` isn't supported when multiple shards are used. (Only one shard is used, they are supported.) - * ``_value.${KEY_NAME}`` in ``drilldown[${LABEL}].sortby`` doesn't + * ``_value.${KEY_NAME}`` in ``drilldowns[${LABEL}].sortby`` doesn't work with multiple shards. It works with one shard. ``_key`` in - ``drilldown[${LABEL}].sortby`` work with multiple shards. + ``drilldowns[${LABEL}].sortby`` work with multiple shards. * ``match_columns`` and ``query`` aren't supported yet. * ``cache`` isn't supported yet. * ``match_escalation_threshold`` isn't supported yet. @@ -661,70 +664,70 @@ details. There are some limitations: - * ``_value.${KEY_NAME}`` in ``drilldown[${LABEL}].sortby`` doesn't + * ``_value.${KEY_NAME}`` in ``drilldowns[${LABEL}].sortby`` doesn't work with multiple shards. It works with one shard. ``_key`` in - ``drilldown[${LABEL}].sortby`` work with multiple shards. + ``drilldowns[${LABEL}].sortby`` work with multiple shards. -.. _logical-select-drilldown-label-keys: +.. _logical-select-drilldowns-label-keys: -``drilldown[${LABEL}].keys`` -"""""""""""""""""""""""""""" +``drilldowns[${LABEL}].keys`` +""""""""""""""""""""""""""""" -Corresponds to :ref:`select-drilldown-label-keys` in -:doc:`select`. See :ref:`select-drilldown-label-keys` for details. +Corresponds to :ref:`select-drilldowns-label-keys` in +:doc:`select`. See :ref:`select-drilldowns-label-keys` for details. Here is an example: .. groonga-command -.. include:: ../../example/reference/commands/logical_select/drilldown_label_keys.log +.. include:: ../../example/reference/commands/logical_select/drilldowns_label_keys.log .. logical_select \ .. --logical_table Entries \ .. --shard_key created_at \ .. --limit 0 \ .. --output_columns _id \ -.. --drilldown[tag.n_likes].keys tag,n_likes \ -.. --drilldown[tag.n_likes].output_columns _value.tag,_value.n_likes,_nsubrecs +.. --drilldowns[tag.n_likes].keys tag,n_likes \ +.. --drilldowns[tag.n_likes].output_columns _value.tag,_value.n_likes,_nsubrecs -.. _logical-select-drilldown-label-output-columns: +.. _logical-select-drilldowns-label-output-columns: -``drilldown[${LABEL}].output_columns`` -"""""""""""""""""""""""""""""""""""""" +``drilldowns[${LABEL}].output_columns`` +""""""""""""""""""""""""""""""""""""""" -Corresponds to :ref:`select-drilldown-label-output-columns` in -:doc:`select`. See :ref:`select-drilldown-label-output-columns` for +Corresponds to :ref:`select-drilldowns-label-output-columns` in +:doc:`select`. See :ref:`select-drilldowns-label-output-columns` for details. Here is an example: .. groonga-command -.. include:: ../../example/reference/commands/logical_select/drilldown_label_output_columns.log +.. include:: ../../example/reference/commands/logical_select/drilldowns_label_output_columns.log .. logical_select \ .. --logical_table Entries \ .. --shard_key created_at \ .. --limit 0 \ .. --output_columns _id \ -.. --drilldown[tag].keys tag \ -.. --drilldown[tag].output_columns _key,_nsubrecs +.. --drilldowns[tag].keys tag \ +.. --drilldowns[tag].output_columns _key,_nsubrecs -.. _logical-select-drilldown-label-sortby: +.. _logical-select-drilldowns-label-sortby: -``drilldown[${LABEL}].sortby`` -"""""""""""""""""""""""""""""" +``drilldowns[${LABEL}].sortby`` +""""""""""""""""""""""""""""""" Corresponds to :ref:`logical-select-drilldown-sortby` in not labeled drilldown. -``drilldown[${LABEL}].sortby`` has a limitation. +``drilldowns[${LABEL}].sortby`` has a limitation. -``_value.${KEY_NAME}`` in ``drilldown[${LABEL}].sortby`` doesn't work +``_value.${KEY_NAME}`` in ``drilldowns[${LABEL}].sortby`` doesn't work with multiple shards. It works with one shard. ``_key`` in -``drilldown[${LABEL}].sortby`` work with multiple shards. +``drilldowns[${LABEL}].sortby`` work with multiple shards. Here is an example that uses ``_value.${KEY_NAME}`` with only one shard: .. groonga-command -.. include:: ../../example/reference/commands/logical_select/drilldown_label_sortby.log +.. include:: ../../example/reference/commands/logical_select/drilldowns_label_sortby.log .. logical_select \ .. --logical_table Entries \ .. --shard_key created_at \ @@ -734,14 +737,14 @@ shard: .. --max_border "exclude" \ .. --limit 0 \ .. --output_columns _id \ -.. --drilldown[tag.n_likes].keys tag,n_likes \ -.. --drilldown[tag.n_likes].output_columns _nsubrecs,_value.n_likes,_value.tag \ -.. --drilldown[tag.n_likes].sortby -_nsubrecs,_value.n_likes,_value.tag +.. --drilldowns[tag.n_likes].keys tag,n_likes \ +.. --drilldowns[tag.n_likes].output_columns _nsubrecs,_value.n_likes,_value.tag \ +.. --drilldowns[tag.n_likes].sortby -_nsubrecs,_value.n_likes,_value.tag -.. _logical-select-drilldown-label-offset: +.. _logical-select-drilldowns-label-offset: -``drilldown[${LABEL}].offset`` -"""""""""""""""""""""""""""""" +``drilldowns[${LABEL}].offset`` +""""""""""""""""""""""""""""""" Corresponds to :ref:`logical-select-drilldown-offset` in not labeled drilldown. @@ -749,19 +752,19 @@ drilldown. Here is an example: .. groonga-command -.. include:: ../../example/reference/commands/logical_select/drilldown_label_offset.log +.. include:: ../../example/reference/commands/logical_select/drilldowns_label_offset.log .. logical_select \ .. --logical_table Entries \ .. --shard_key created_at \ .. --limit 0 \ .. --output_columns _id \ -.. --drilldown[tag.n_likes].keys tag \ -.. --drilldown[tag.n_likes].offset 1 +.. --drilldowns[tag.n_likes].keys tag \ +.. --drilldowns[tag.n_likes].offset 1 -.. _logical-select-drilldown-label-limit: +.. _logical-select-drilldowns-label-limit: -``drilldown[${LABEL}].limit`` -""""""""""""""""""""""""""""" +``drilldowns[${LABEL}].limit`` +"""""""""""""""""""""""""""""" Corresponds to :ref:`logical-select-drilldown-limit` in not labeled drilldown. @@ -769,19 +772,19 @@ drilldown. Here is an example: .. groonga-command -.. include:: ../../example/reference/commands/logical_select/drilldown_label_limit.log +.. include:: ../../example/reference/commands/logical_select/drilldowns_label_limit.log .. logical_select \ .. --logical_table Entries \ .. --shard_key created_at \ .. --limit 0 \ .. --output_columns _id \ -.. --drilldown[tag.n_likes].keys tag \ -.. --drilldown[tag.n_likes].limit 2 +.. --drilldowns[tag.n_likes].keys tag \ +.. --drilldowns[tag.n_likes].limit 2 -.. _logical-select-drilldown-label-calc-types: +.. _logical-select-drilldowns-label-calc-types: -``drilldown[${LABEL}].calc_types`` -"""""""""""""""""""""""""""""""""" +``drilldowns[${LABEL}].calc_types`` +""""""""""""""""""""""""""""""""""" Corresponds to :ref:`logical-select-drilldown-calc-types` in not labeled drilldown. @@ -789,26 +792,26 @@ labeled drilldown. Here is an example: .. groonga-command -.. include:: ../../example/reference/commands/logical_select/drilldown_label_calc_types.log +.. include:: ../../example/reference/commands/logical_select/drilldowns_label_calc_types.log .. logical_select \ .. --logical_table Entries \ .. --shard_key created_at \ .. --limit 0 \ .. --output_columns _id \ -.. --drilldown[tag].keys tag \ -.. --drilldown[tag].calc_types MAX,MIN,SUM,AVG \ -.. --drilldown[tag].calc_target n_likes \ -.. --drilldown[tag].output_columns _key,_nsubrecs,_max,_min,_sum,_avg +.. --drilldowns[tag].keys tag \ +.. --drilldowns[tag].calc_types MAX,MIN,SUM,AVG \ +.. --drilldowns[tag].calc_target n_likes \ +.. --drilldowns[tag].output_columns _key,_nsubrecs,_max,_min,_sum,_avg -.. _logical-select-drilldown-label-calc-target: +.. _logical-select-drilldowns-label-calc-target: -``drilldown[${LABEL}].calc_target`` -""""""""""""""""""""""""""""""""""" +``drilldowns[${LABEL}].calc_target`` +"""""""""""""""""""""""""""""""""""" Corresponds to :ref:`logical-select-drilldown-calc-target` in not labeled drilldown. -See also :ref:`logical-select-drilldown-label-calc-types` +See also :ref:`logical-select-drilldowns-label-calc-types` for an example. Return value Modified: doc/source/reference/commands/select.rst (+15 -15) =================================================================== --- doc/source/reference/commands/select.rst 2017-01-17 20:01:03 +0900 (a960f71) +++ doc/source/reference/commands/select.rst 2017-01-17 20:08:09 +0900 (f029cb1) @@ -1442,7 +1442,7 @@ The following parameters are needed more description: Output format is different a bit. It's also needed more description. -.. _select-drilldown-label-keys: +.. _select-drilldowns-label-keys: ``drilldowns[${LABEL}].keys`` """"""""""""""""""""""""""""" @@ -1459,7 +1459,7 @@ Here is an example to group by multiple keys, ``tag`` and ``n_likes`` column values: .. groonga-command -.. include:: ../../example/reference/commands/select/drilldown_label_keys_multiple.log +.. include:: ../../example/reference/commands/select/drilldowns_label_keys_multiple.log .. select Entries \ .. --limit -1 \ .. --output_column tag,n_likes \ @@ -1468,7 +1468,7 @@ column values: ``tag.n_likes`` is used as the label for the drilldown parameters group. You can refer grouped keys by ``_value.${KEY_NAME}`` syntax in -:ref:`select-drilldown-label-output-columns`. ``${KEY_NAME}`` is a +:ref:`select-drilldowns-label-output-columns`. ``${KEY_NAME}`` is a column name to be used by group key. ``tag`` and ``n_likes`` are ``${KEY_NAME}`` in this case. @@ -1477,7 +1477,7 @@ specify one key as ``drilldowns[${LABEL}].keys`` like ``--drilldowns[tag].keys tag``. You should use ``_key`` for the case. It's the same rule in :ref:`select-drilldown-output-columns`. -.. _select-drilldown-label-output-columns: +.. _select-drilldowns-label-output-columns: ``drilldowns[${LABEL}].output_columns`` """"""""""""""""""""""""""""""""""""""" @@ -1490,13 +1490,13 @@ difference between :ref:`select-drilldown-output-columns` and :doc:`/reference/columns/pseudo` to refer group key. ``drilldowns[${LABEL}].output_columns`` also uses ``_key`` :doc:`/reference/columns/pseudo` to refer group key when you specify -only one group key by :ref:`select-drilldown-label-keys`. +only one group key by :ref:`select-drilldowns-label-keys`. Here is an example to refer single group key by ``_key`` :doc:`/reference/columns/pseudo`: .. groonga-command -.. include:: ../../example/reference/commands/select/drilldown_label_output_columns_single_group_key.log +.. include:: ../../example/reference/commands/select/drilldowns_label_output_columns_single_group_key.log .. select Entries \ .. --limit 0 \ .. --output_column _id \ @@ -1507,13 +1507,13 @@ But you can't refer each group key by ``_key`` :doc:`/reference/columns/pseudo` in ``drilldowns[${LABEL}].output_columns``. You need to use ``_value.${KEY_NAME}`` syntax. ``${KEY_NAME}`` is a column name that is -used for group key in :ref:`select-drilldown-label-keys`. +used for group key in :ref:`select-drilldowns-label-keys`. Here is an example to refer each group key in multiple group keys by ``_value.${KEY_NAME}`` syntax: .. groonga-command -.. include:: ../../example/reference/commands/select/drilldown_label_output_columns_single_group_key.log +.. include:: ../../example/reference/commands/select/drilldowns_label_output_columns_single_group_key.log .. select Entries \ .. --limit 0 \ .. --output_column _id \ @@ -1530,23 +1530,23 @@ Here is an example to refer each group key in multiple group keys by There is one grouped record in ``_value`` to refer each grouped values when you specify multiple group keys to - :ref:`select-drilldown-label-keys`. So you can refer each group key + :ref:`select-drilldowns-label-keys`. So you can refer each group key by ``_value.${KEY_NAME}`` syntax. On the other hand, there is no grouped record in ``_value`` when you specify only one group key to - :ref:`select-drilldown-label-keys`. So you can't refer group key by + :ref:`select-drilldowns-label-keys`. So you can't refer group key by ``_value.${KEY_NAME}`` syntax. -.. _select-drilldown-label-output-format: +.. _select-drilldowns-label-output-format: Output format for ``drilldowns[${LABEL}]`` style """""""""""""""""""""""""""""""""""""""""""""""" There is a difference in output format between :ref:`select-drilldown` -and :ref:`select-drilldown-label-keys`. :ref:`select-drilldown` uses +and :ref:`select-drilldowns-label-keys`. :ref:`select-drilldown` uses array to output multiple drilldown results. -:ref:`select-drilldown-label-keys` uses pairs of label and drilldown +:ref:`select-drilldowns-label-keys` uses pairs of label and drilldown result. :ref:`select-drilldown` uses the following output format:: @@ -1561,7 +1561,7 @@ result. ] ] -:ref:`select-drilldown-label-keys` uses the following output format:: +:ref:`select-drilldowns-label-keys` uses the following output format:: [ HEADER, @@ -1918,7 +1918,7 @@ The following value part is the same format as ``SEARCH_RESULT``:: RECORDS ] -See also :ref:`select-drilldown-label-output-format` for +See also :ref:`select-drilldowns-label-output-format` for ``drilldowns[${LABEL}]`` style drilldown output format. -------------- next part -------------- HTML����������������������������...Download