1. Micha Kops
  2. jira-quick-subtasks

Wiki

Clone wiki

jira-quick-subtasks / Home

Quick Subtasks Logo

Table of Contents

About

The Quick Subtasks Plugin for JIRA allows you to write down a list of subtasks using a special syntax anywhere you want - e.g. a text editor or in your wiki and afterwards paste them in your JIRA instance and create multiple subtasks for a given issue.

In addition one may define pre-set subtask-templates for each project in the administration area or custom user templates.

A workflow function allows to create sub-tasks from a given template when the designated workflow transition is triggered.

Features

The latest release contains the following features:

  • Integration into JIRA's issue operation menu

  • Creating multiple subtasks for a selected issue

  • Specifying the summary, description and the estimated time for each subtask using a special syntax

  • Specifying the issue types for all subtasks to be created

  • Permission checks to ensure a secure integration

  • Manage multiple sub-task templates for each project in the administration area

  • The security schema of the parent issue is applied to all subtasks created

  • Subtasks inherit the priority from their parent issue, otherwise you may specify it for every subtask

  • Create subtasks when a workflow transition is reached

  • Integration into the workflow editor

  • Set one or more labels for each subtask

  • Use placeholders in a subtasks summary

  • Setting dynamic due dates

  • User customized subtask templates

Usage / Variables

In its simplest form you may specify multiple subtasks to be created for the current issue by typing - summary - if you need more than one - each new line in this format makes a new subtask.

In addition you may specify the following additional fields for the subtasks:

Estimate

  • estimate: The estimated time for the subtask. An example: Create an issue with a summary "Fix XSS Bug" and an estimate 4 days and 20 minutes:
    - Fix XSS Bug / estimate:"4d 20m"

Assignee

  • assignee: The JIRA user the subtask will be assigned to. An example: Create an issue with a summary "Fix XSS Bug" and assign it to the user named "admin":

Since 3.3.0 you may use placeholders to set the current user as assignee or to inherit the assignee from the parent issue.

Please note: If you've disable unassigned issues in the general system configuration and no assignee is set in your subtask template or the assignee can't be found, the plugin tries to use the project lead as the fallback assignee (since version 3.3.1).

    - Fix XSS Bug / assignee:"admin"
    - Add Documentation / assignee:"@current"
    - CDN Updates / assignee:"@inherit" 

Description

  • description: The issue's description. An example: Create an issue with a summary "Fix XSS Bug" and a description "Filter request parameters":
    - Fix XSS Bug / description:"Filter request parameters"

Multiline descriptions (since 4.0.0): You may use {n} as a placeholder for a newline here. e.g.

 - subtask / description:"this is a list{n}* one{n}* two{n}* three{n}"

Priority

  • priority: The issue priority. If not specified, the parent issue's priority will be applied to the subtask. An example: Create an issue with a summary "Fix XSS Bug" and set the priority to "Critical":
    - Fix XSS Bug / priority:"Critical"

Component

  • component: The component. Since 4.3.0 the parent issue's components may be inherited (Inherit). An example: Create an issue with a summary "Fix XSS Bug" and assign the component "Documentation":
    - Fix XSS Bug / component:"Documentation"

Another example: Create an issue with summary "QA" and inherit the components from the parent issue:

    - QA / component:"@inherit"

Labels

  • labels (since 2.4.0): One or more labels. Separate multiple labels using a comma. An example: Create an issue with summary "Website error" and add two labels "bug" and "unconfirmed":

Since 3.2.0 labels may also be inherited from the parent issue using Inherit as a placeholder.

    - Website error / labels:"bug,unconfirmed"
    - Add documentation / labels:"docs,@inherit,qa"

Fix-Version

  • fixversion (since 2.5.0): The fix version. The parent issue's fix versions may be inherited using Inherit.

  • An example: Create an issue with summary "Documentation" and fixversion "v1.0":

    - Documentation / fixversion:"v1.0". 
  • Another example: Create an issue with summary "Documentation" and fixversions inherited from the parent issue:
    - Documentation / fixversion:"@inherit"

Affected-Version

  • affectedversion (since 2.5.0): The affected version. The parent issue's affected versions may be inherited using Inherit.

  • An example: Create an issue with summary "Documentation" and affectedversion "v1.0":

- Documentation / affectedversion:"v1.0"
  • Another example. Create an issue with summary "Documentation" and affectedversion inherited from the parent issue:
- Documentation / affectedversion:"@inherit"

Issue Type

  • issueType (since 2.5.0): The subtask issue type. An example: Create an issue with summary "Website Error" and subtask issue type "Bugfix Subtask":
- Website Error / issueType:"Bugfix Subtask"

Due Date

  • duedate (since 3.0.0): The due date. There are three ways to set a due date:

  • Inherit it from the parent issue using

duedate:"@inherit"
  • Specify an absolute date e.g.
duedate:"2014-12-24"
  • Specify a relative date e.g.
duedate:"@now+1d"
  • You may use m for month, d for day and y for year here to specify the relative date you need.

  • You may also specify a negative time span to substract the date from the parent issue's date or the current date (since 3.4.0) e.g.:

duedate:"@inherit-4d"
duedate:"@now-4d"

Reporter

  • reporter (since 3.0.0): The reporter. Since 4.3.0, reporter may be inherited from the parent issue (Inherit). An example: Create an issue with summary "Test" and set the user "joe" as the reporter:
- Test / reporter:"joe" 

Another example: Create an issue with summary "QA" and inherit reporters from the parent issue:

- QA / reporter:"@inherit" 
  • link (since 3.3.0): Issue links. You may specify inward/outgoing links using the link type name and a target issue. An example: "Create an issue with summary "Test" and add an inward link of issue-link-type Blocker to the issue DEMO-4:
- Test / link:"Blocker <- DEMO-4"

Another example: Create an issue with summary "Subtask" and adding an outgoing link of issue-link-type Blocker to the issue DEMO-4:

- Subtask / link:"Blocker -> DEMO-4"

Custom Fields (Inheriting)

  • cfield (since 4.0.0): Allows to inherit the parent issue's custom-fields. An example: Create an issue with a summary "Test" and inherit the customfield cf1 and cf2 from the parent issue:
- Test / cfield:"cf1:@inherit" cfield:"cf2:@inherit"

The following custom-field types are currently suported:

  • Checkboxes
  • Text Field (Single Line)
  • Date Picker
  • Number Field
  • Text Field (Multi Line)
  • URL Field
  • User Picker (single user)
  • Select List (multiple choices)
  • Date Time Picker

Custom Fields (Assigning)

  • cfield (since 4.2.0): Allows to assign values to the sub-tasks custom-fields. An example: Create an issue with a summary "Test" and set the value of the number custom-field named somenumber to the value 3.5:
- Test / cfield:"somenumber:3.5"

The following custom-field types are currently suported (more to come):

  • Text Field (Single Line)
  • Number Field
  • Text Field (Multi Line)
  • Select List (Single Choice)

Watcher

  • watcher (since 4.3.0): Issue watchers. Since 4.6.0 the parent issue's watchers may be inherited using Inherit as placeholder.

An example: Create an issue with summary "Test" and add users "selma" and "fred" as watchers:

- Test / watcher:"selma,fred" 

Another example: Create an issue with summary "Test" and inherit the parent issue's watchers:

- Test / watcher:"@inherit" 

Using Placeholders in the Summary

You may use placeholders for each subtask's summary. Supported placeholders are:

  • @{summary}: The parent issue's summary.

  • @{key}: The parent issue's issue key.

Dynamic Due Dates

You may specify a due date in a static format e.g. 2014-05-23 or as a relative date e.g.:

    - subtask / duedate:"@now"

    - subtask / duedate:"@now+1d"

    - subtask / duedate:"@now+1m"

    - subtask / duedate:"@now+1y"

    - subtask / duedate:"@now+1d1m1y"

    - subtask / duedate:"@inherit"

Additional Features

  • Issue Type: You may choose the issue type in the select box in the dataentry screen or - when using a workflow postprocessing function - in the workflow editor.

  • Prefixing: If you select this option in the dataentry screen every subtask to be created will be prefixed by the parent issue's summary.

Examples

    - Implementation

    - Write unit tests / estimate:"3h"

    - Write Acceptance tests / estimate:"6h" labels:"testing,atdd" fixversion:"1.5-alpha"

    -Code Review / assignee:"mkops" component:"testing" affectedversion:"preview-1"

    - End user documentation / description:"Create end user documentation" estimate:"4h" assignee:"mkops" priority:"Critical"

    - Call back customer / issueType:"CRM-Subtask"

Pasting the text from above into the plugin would create the following subtasks for the selected issue:

  • A subtask with summary "Implementation"

  • A subtask with summary "Write unit test" and and time estimate of 3 hours

  • A subtask with summary "Write Acceptance test" a time estimate of 6 hours, two labels named "testing" and "attd" and fixversion 1.5-alpha assigned

  • A subtask with summary "Code Review" -> the missing whitespace after the "-" is no problem here, the task will be assigned to the user "mkops" and the component named "testing" will be assigned to the issue also as the version "preview-1" as affected version.

  • A subtask with summary "End user documentation", a description "Create end user documentation" and and time estimate of 4 hours, assigned to the user "mkops" and its priority set to "Critical"

  • A subtask with summary "Call back customer", the subtask issue type "CRM-Subtask" (must exist!) is assigned

Screenshots

The following screenshots might give you an expression of the plugin's features:

Issue Operation Menu Integration

quick-subtasks-issue-menu-fx.png

Creating multiple Subtasks

template-selection.png

Subtasks Created

subtasks-created.png

Managing Subtask Templates in the Administration Area

manage-templates.png

Add Workflow Function

create-new-workflow-function.png

Modify Workflow Postprocessing Function

modify-postprocessing-function.png

Disabling specific Features

Since release 4.0.0 it is possible to deactivate specific features of the Quick Subtasks plugin for the global JIRA instance.

As JIRA administrator simply go to the addons administration ("Manage add-ons"), scroll down to "Quick Subtasks Plugin for JIRA" and unfold the entry to list the modules loaded from the plugin (x of y plugins enabled).

You may disable the modules marked with "Feature" in its description (use at own risk). Afterwards the specific feature is not displayed in the usage help and will be disabled.

quick-subtasks-disable-features.png

Issue Tracker

Please feel free to use this issuetracker if you have proposals, feature requests or bugs to report!

Debugging and Logging

To gather more detailed information about what the plugin is doing behind the scenes, please feel free to modify your logging configuration in JIRA.

As an administrator please go to JIRA Administration -> System -> Logging & Profiling, click on "Configure logging level for another package." and enter com.hascode as package name and TRACE as log level as shown in the following screen:

adjusting-log-level.png

Afterwards you should be able to view detailed information about the plugin in action in your JIRA's log files (jira/home/log/atlassian-jira.log or jira_latest.log etc.).

A log excerpt could look like this one:

   [INFO] [talledLocalContainer] 2015-09-08 21:17:11,226 http-bio-2990-exec-8 DEBUG admin 1277x2369x1 1cme2jo 127.0.0.1 /rest/subtasks-create/1.0/facility/issue/DEMO-6 [plugin.quick_subtasks.rest.CreateMultipleSubtasksRestService] createSubtasks called with issueKey: DEMO-6 and template: - Log Demo / assignee:"admin"
[..]/rest/subtasks-create/1.0/facility/issue/DEMO-6 [plugin.quick_subtasks.spi.BasicQuickSubtasksExtensionRegistry] adding quick-subtasks-extension: hascode-assignee-extension - Allows to add an assignee to a sub-task (version 1.0.0)
   [INFO] [talledLocalContainer] 2015-09-08 21:17:11,230 http-bio-2990-exec-8 INFO admin 1277x2369x1 1cme2jo 127.0.0.1 /rest/subtasks-create/1.0/facility/issue/DEMO-6 [plugin.quick_subtasks.spi.BasicQuickSubtasksExtensionRegistry] 1 quick-subtask-extensions loaded
   [INFO] [talledLocalContainer] 2015-09-08 21:17:11,230 http-bio-2990-exec-8 DEBUG admin 1277x2369x1 1cme2jo 127.0.0.1 /rest/subtasks-create/1.0/facility/issue/DEMO-6 [plugin.quick_subtasks.extension.AssigneeExtension] assignee matcher does match now testing for forbidden characters
   [INFO] [talledLocalContainer] 2015-09-08 21:17:11,230 http-bio-2990-exec-8 DEBUG admin 1277x2369x1 1cme2jo 127.0.0.1 /rest/subtasks-create/1.0/facility/issue/DEMO-6 [plugin.quick_subtasks.extension.AssigneeExtension] extracted assignee: admin
   [INFO] [talledLocalContainer] 2015-09-08 21:17:11,230 http-bio-2990-exec-8 DEBUG admin 1277x2369x1 1cme2jo 127.0.0.1 /rest/subtasks-create/1.0/facility/issue/DEMO-6 [plugin.quick_subtasks.core.DslProcessorImpl] 1 dtos aggregated: [IssueDto [summary=Log Demo, estimated=null, assignee=admin, description=null, priority=null, fixVersion=null, issueType=null, affectedVersion=null, relationDto=null, dueDate=null, reporter=null, customFields={}, components=[], labels=[]]]
   [INFO] [talledLocalContainer] 2015-09-08 21:17:11,230 http-bio-2990-exec-8 DEBUG admin 1277x2369x1 1cme2jo 127.0.0.1 /rest/subtasks-create/1.0/facility/issue/DEMO-6 [plugin.quick_subtasks.core.SubTasksServiceImpl] entering phase 2: pre-processing subtask-issues
   [INFO] [talledLocalContainer] 2015-09-08 21:17:11,230 http-bio-2990-exec-8 DEBUG admin 1277x2369x1 1cme2jo 127.0.0.1 /rest/subtasks-create/1.0/facility/issue/DEMO-6 [plugin.quick_subtasks.core.SubTasksServiceImpl] phase 2: pre-processing single subtask: IssueDto [summary=Log Demo, estimated=null, assignee=admin, description=null, priority=null, fixVersion=null, issueType=null, affectedVersion=null, relationDto=null, dueDate=null, reporter=null, customFields={}, components=[], labels=[]]
   [INFO] [talledLocalContainer] 2015-09-08 21:17:11,230 http-bio-2990-exec-8 INFO admin 1277x2369x1 1cme2jo 127.0.0.1 /rest/subtasks-create/1.0/facility/issue/DEMO-6 [plugin.quick_subtasks.control.BasicDto2IssueMapper] mapping subtask context: BasicSubtasksContext [reporter=admin(admin), issue=DEMO-6, dslString=- Log Demo / assignee:"admin", issueType=com.atlassian.jira.issue.issuetype.IssueTypeImpl@f04eb6f2, prefixSubtasks=false]
   [INFO] [talledLocalContainer] 2015-09-08 21:17:11,231 http-bio-2990-exec-8 DEBUG admin 1277x2369x1 1cme2jo 127.0.0.1 /rest/subtasks-create/1.0/facility/issue/DEMO-6 [plugin.quick_subtasks.core.BasicSummaryInterpolator] trying to resolve property summary
   [INFO] [talledLocalContainer] 2015-09-08 21:17:11,251 http-bio-2990-exec-8 DEBUG admin 1277x2369x1 1cme2jo 127.0.0.1 /rest/subtasks-create/1.0/facility/issue/DEMO-6 [plugin.quick_subtasks.core.BasicSummaryInterpolator] trying to resolve property assignee
   [INFO] [talledLocalContainer] 2015-09-08 21:17:11,251 http-bio-2990-exec-8 DEBUG admin 1277x2369x1 1cme2jo 127.0.0.1 /rest/subtasks-create/1.0/facility/issue/DEMO-6 [plugin.quick_subtasks.core.BasicSummaryInterpolator] trying to resolve property key
   [INFO] [talledLocalContainer] 2015-09-08 21:17:11,251 http-bio-2990-exec-8 DEBUG admin 1277x2369x1 1cme2jo 127.0.0.1 /rest/subtasks-create/1.0/facility/issue/DEMO-6 [plugin.quick_subtasks.control.BasicDto2IssueMapper] no specialized subtask issue type set, using fallback.
   [INFO] [talledLocalContainer] 2015-09-08 21:17:11,252 http-bio-2990-exec-8 INFO admin 1277x2369x1 1cme2jo 127.0.0.1 /rest/subtasks-create/1.0/facility/issue/DEMO-6 [plugin.quick_subtasks.spi.BasicQuickSubtasksExtensionRegistry] adding quick-subtasks-extension: hascode-assignee-extension - Allows to add an assignee to a sub-task (version 1.0.0)
   [INFO] [talledLocalContainer] 2015-09-08 21:17:11,252 http-bio-2990-exec-8 INFO admin 1277x2369x1 1cme2jo 127.0.0.1 /rest/subtasks-create/1.0/facility/issue/DEMO-6 [plugin.quick_subtasks.spi.BasicQuickSubtasksExtensionRegistry] 1 quick-subtask-extensions loaded
   [INFO] [talledLocalContainer] 2015-09-08 21:17:11,252 http-bio-2990-exec-8 DEBUG admin 1277x2369x1 1cme2jo 127.0.0.1 /rest/subtasks-create/1.0/facility/issue/DEMO-6 [plugin.quick_subtasks.extension.AssigneeExtension] system setting 'allow unassigned issues' is set to false
   [INFO] [talledLocalContainer] 2015-09-08 21:17:11,252 http-bio-2990-exec-8 DEBUG admin 1277x2369x1 1cme2jo 127.0.0.1 /rest/subtasks-create/1.0/facility/issue/DEMO-6 [plugin.quick_subtasks.extension.AssigneeExtension] searching for an existing assignee with given name: admin
   [INFO] [talledLocalContainer] 2015-09-08 21:17:11,252 http-bio-2990-exec-8 DEBUG admin 1277x2369x1 1cme2jo 127.0.0.1 /rest/subtasks-create/1.0/facility/issue/DEMO-6 [plugin.quick_subtasks.extension.AssigneeExtension] existing assignee for given name found admin
   [INFO] [talledLocalContainer] 2015-09-08 21:17:11,252 http-bio-2990-exec-8 DEBUG admin 1277x2369x1 1cme2jo 127.0.0.1 /rest/subtasks-create/1.0/facility/issue/DEMO-6 [plugin.quick_subtasks.core.SubTasksServiceImpl] phase 3: persisting concrete subtask Log Demo
   [INFO] [talledLocalContainer] 2015-09-08 21:17:11,359 http-bio-2990-exec-8 INFO admin 1277x2369x1 1cme2jo 127.0.0.1 /rest/subtasks-create/1.0/facility/issue/DEMO-6 [plugin.quick_subtasks.core.SubTasksServiceImpl] subtask issue successfully created, trying to create subtask-link and to update labels and links..
   [INFO] [talledLocalContainer] 2015-09-08 21:17:11,359 http-bio-2990-exec-8 DEBUG admin 1277x2369x1 1cme2jo 127.0.0.1 /rest/subtasks-create/1.0/facility/issue/DEMO-6 [plugin.quick_subtasks.core.SubTasksServiceImpl] phase 4: post-processing persisted subtasks
   [INFO] [talledLocalContainer] 2015-09-08 21:17:11,359 http-bio-2990-exec-8 INFO admin 1277x2369x1 1cme2jo 127.0.0.1 /rest/subtasks-create/1.0/facility/issue/DEMO-6 [plugin.quick_subtasks.spi.BasicQuickSubtasksExtensionRegistry] adding quick-subtasks-extension: hascode-assignee-extension - Allows to add an assignee to a sub-task (version 1.0.0)
   [INFO] [talledLocalContainer] 2015-09-08 21:17:11,359 http-bio-2990-exec-8 INFO admin 1277x2369x1 1cme2jo 127.0.0.1 /rest/subtasks-create/1.0/facility/issue/DEMO-6 [plugin.quick_subtasks.spi.BasicQuickSubtasksExtensionRegistry] 1 quick-subtask-extensions loaded
   [INFO] [talledLocalContainer] 2015-09-08 21:17:11,390 http-bio-2990-exec-8 DEBUG admin 1277x2369x1 1cme2jo 127.0.0.1 /rest/subtasks-create/1.0/facility/issue/DEMO-6 [plugin.quick_subtasks.core.SubTasksServiceImpl] setting labels..
   [INFO] [talledLocalContainer] 2015-09-08 21:17:11,390 http-bio-2990-exec-8 DEBUG admin 1277x2369x1 1cme2jo 127.0.0.1 /rest/subtasks-create/1.0/facility/issue/DEMO-6 [plugin.quick_subtasks.core.SubTasksServiceImpl] setting relations..
   [INFO] [talledLocalContainer] 2015-09-08 21:17:11,390 http-bio-2990-exec-8 DEBUG admin 1277x2369x1 1cme2jo 127.0.0.1 /rest/subtasks-create/1.0/facility/issue/DEMO-6 [plugin.quick_subtasks.core.SubTasksServiceImpl] relation name is empty

Where are plugin settings stored in the database?

Project Templates

Values are stored in the tables propertyentry and propertytext, the property-key is com.hascode.plugin.jira:subtask-templates.

SELECT e.ID, e.ENTITY_NAME, e.ENTITY_ID, e.PROPERTY_KEY, e.propertytype, t.propertyvalue FROM propertyentry e LEFT JOIN propertytext t ON e.ID=t.ID WHERE PROPERTY_KEY='com.hascode.plugin.jira:subtask-templates';
+-------+-------------+-----------+-------------------------------------------+--------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| ID    | ENTITY_NAME | ENTITY_ID | PROPERTY_KEY                              | propertytype | propertyvalue                                                                                                                                                                                                                                                                                                                                                                              |
+-------+-------------+-----------+-------------------------------------------+--------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| 10446 | TEST        |         1 | com.hascode.plugin.jira:subtask-templates |            6 | <list>
  <subtaskTemplate>
    <text>- Subtask 1
- Subtask 2
- Subtask 3</text>
    <title>Project Template 1</title>
    <id>4DEDFA80-7F8A-44EC-8490-EA0D6B585D6A</id>
  </subtaskTemplate>
  <subtaskTemplate>
    <text>- Subtask 1
- Subtask 2
- Subtask 3</text>
    <title>Project Template 2</title>
    <id>B01E421D-4006-4330-9700-E0413C7434D7</id>
  </subtaskTemplate>
</list> |
+-------+-------------+-----------+-------------------------------------------+--------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

User Templates

Values are stored in the tables propertyentry and propertytext, the property-key is subtasks-user-admin.

SELECT e.ID, e.ENTITY_NAME, e.ENTITY_ID, e.PROPERTY_KEY, e.propertytype, t.propertyvalue FROM propertyentry e LEFT JOIN propertytext t ON e.ID=t.ID WHERE PROPERTY_KEY='subtasks-user-admin';
+-------+-----------------+-----------+---------------------+--------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| ID    | ENTITY_NAME     | ENTITY_ID | PROPERTY_KEY        | propertytype | propertyvalue                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
+-------+-----------------+-----------+---------------------+--------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| 10606 | jira.properties |         1 | subtasks-user-admin |            6 | <list>
  <com.hascode.plugin.quick__subtasks.dto.IdDecoratingSubtaskTemplate>
    <id>122bb817-71d1-406b-86a4-4d6dbefe9e46</id>
    <text>- Subtask 1
- Subtask 2
- Subtask 3</text>
    <title>User Template 1</title>
  </com.hascode.plugin.quick__subtasks.dto.IdDecoratingSubtaskTemplate>
  <com.hascode.plugin.quick__subtasks.dto.IdDecoratingSubtaskTemplate>
    <id>9923b940-b81b-4e2c-b1b2-d0a166c64043</id>
    <text>- Subtask 1
- Subtask 2
- Subtask 3</text>
    <title>User Template 2</title>
  </com.hascode.plugin.quick__subtasks.dto.IdDecoratingSubtaskTemplate>
</list> |
+-------+-----------------+-----------+---------------------+--------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

2017 Micha Kops / hasCode.com

Updated