Module:CargoQuery/doc: Difference between revisions

From Caves of Qud Wiki
Jump to navigation Jump to search
(Created page with "This module is taken from [https://help.gamepedia.com/Module:CargoQuery Gamepedia's CargoQuery module]. This module lets you get around the <code>|no html</code> bug that Car...")
 
mNo edit summary
 
(6 intermediate revisions by 2 users not shown)
Line 1: Line 1:
This module is taken from [https://help.gamepedia.com/Module:CargoQuery Gamepedia's CargoQuery module].
This module is taken from [https://lol.gamepedia.com/Module:CargoQuery Leaguepedia's CargoQuery module].


This module lets you get around the <code>|no html</code> bug that Cargo has by avoiding |format=template.
This module lets you get around the <code>|no html</code> bug that Cargo has by avoiding |format=template. This module implicitly assumed you ARE using named args in your template (corresponding to <code>|named_args=yes</code>; you do not need to specify this.)


To use, preface query arguments with <code>q?</code>. Even if you are only using one table, use <code>|q?tables=</code>.
Unlike <code>|format=template</code>, this wrapper will NOT rename parameters with underscores in them to use spaces instead.
You must specify the template that will handle each row of the query result using <code>|template=</code>.
== Parameters ==
You may additionally specify <code>|intro=</code>, <code>|outro=</code>, <code>|delimiter=</code>, and <code>|default=</code>.
* You may specify all parameters the same as if they were parameters in <code>#cargo_query</code>.
 
== One-To-Many ==
This template allows for one-to-many support, allowing you to specify a field to treat equivalently to a <code>List of ...</code> field. Syntax is as follows:
* <code>|one_to_many=</code>, a list of fields you want concatenated together.
* <code>|one_to_many_group=</code>, the thing you want our one-to-many values grouped by. UNLIKE the <code>|group by=</code> parameter, this should be the FINAL name of a field, so something on the RIGHT SIDE of the equals sign in your <code>|fields=</code> parameter.
* <code>|one_to_many_sep=</code>, defaults to comma. Currently you must pick the same separator for ''all'' of your one-to-many fields.
 
=== Example ===
<pre>
{{#invoke:CargoQuery|main
|table=Teams,ListplayerCurrent=LPC
|join on=Teams._pageName=LPC._pageName
|where=Teams.Region="North America" AND LPC._pageName IS NOT NULL
|fields=Teams._pageName=Page
|one_to_many=LPC.ID=IDs
|one_to_many_group=Page
|one_to_many_sep=,
|template=<template>
|intro={{(!}} class="wikitable"
|outro={{!)}}
|limit=10
}}
</pre>
Here, the <code>one_to_many</code> is a list of players on the team in question. For each ONE team, there are MANY players, so the field <code>IDs</code> that's sent to the template is a comma-separated list of players, grouped by team page.


Use Lua names of all query parameters, so <code>|q?join=</code>, <code>|q?groupBy</code>, etc.
== Compound Queries ==
You can also run compound queries using <code>compound</code>. It has the same syntax as <code>#cargo_compound_query</code> but with a few exceptions:
* <code>default</code> for each individual query is disabled; default must be specified outside as an additional argument, which is then applied if no queries return results.
* Each query must be numbered as in <code>|1=(query1)|2=(query2)|3=...</code>, etc.
* Because of how compound query uses <code>;</code> as a separator, strings with this character cannot be used. This can be worked around by specifying <code>metaseparator</code> to be another symbol, and splitting each query's arguments using that delimiter instead.


For simplicity of code, the named args parameter is required to be Yes, and you do not need to specify it.
=== Example ===
<pre>
{{#invoke:CargoQuery|compound
|1=table=Food=F
;fields=F._pageName=Page
;where=F.CookEffect HOLDS 'heat and fire-based' AND F._pageNamespace = '0'
|2=table=Liquids=L
;fields=L._pageName=Page
;where=L.CookEffect HOLDS 'simple heat and fire-based' AND L._pageNamespace = '0'
|default=No Results!
|template=favilink page
|delimiter = <br>
|metaseparator = ;
}}
</pre>


Unlike <code>|format=template</code>, this wrapper will NOT rename parameters with underscores in them to use spaces instead.
<includeonly>
==Parameters & Invocation==
[[Category:Modules]]
<pre>{{#invoke:CargoQuery|main
</includeonly>
|q?tables= <!-- corresponds to table / tables -->
|q?join= <!-- corresponds to join on -->
|q?fields= <!-- corresponds to fields -->
|q?where= <!-- corresponds to where -->
|q?groupBy= <!-- corresponds to group by -->
|q?having= <!-- corresponds to having -->
|q?orderBy= <!-- corresponds to order by -->
|q?limit= <!-- corresponds to limit -->
|template=      <!-- pagename of template (required) -->
|intro=
|outro=
|delimiter=
|default=
}}</pre>

Latest revision as of 11:59, 2 September 2020

This module is taken from Leaguepedia's CargoQuery module.

This module lets you get around the |no html bug that Cargo has by avoiding |format=template. This module implicitly assumed you ARE using named args in your template (corresponding to |named_args=yes; you do not need to specify this.)

Unlike |format=template, this wrapper will NOT rename parameters with underscores in them to use spaces instead.

Parameters

  • You may specify all parameters the same as if they were parameters in #cargo_query.

One-To-Many

This template allows for one-to-many support, allowing you to specify a field to treat equivalently to a List of ... field. Syntax is as follows:

  • |one_to_many=, a list of fields you want concatenated together.
  • |one_to_many_group=, the thing you want our one-to-many values grouped by. UNLIKE the |group by= parameter, this should be the FINAL name of a field, so something on the RIGHT SIDE of the equals sign in your |fields= parameter.
  • |one_to_many_sep=, defaults to comma. Currently you must pick the same separator for all of your one-to-many fields.

Example

{{#invoke:CargoQuery|main
 |table=Teams,ListplayerCurrent=LPC
 |join on=Teams._pageName=LPC._pageName
 |where=Teams.Region="North America" AND LPC._pageName IS NOT NULL
 |fields=Teams._pageName=Page
 |one_to_many=LPC.ID=IDs
 |one_to_many_group=Page
 |one_to_many_sep=,
 |template=<template>
 |intro={{(!}} class="wikitable"
 |outro={{!)}}
 |limit=10
}}

Here, the one_to_many is a list of players on the team in question. For each ONE team, there are MANY players, so the field IDs that's sent to the template is a comma-separated list of players, grouped by team page.

Compound Queries

You can also run compound queries using compound. It has the same syntax as #cargo_compound_query but with a few exceptions:

  • default for each individual query is disabled; default must be specified outside as an additional argument, which is then applied if no queries return results.
  • Each query must be numbered as in |1=(query1)|2=(query2)|3=..., etc.
  • Because of how compound query uses ; as a separator, strings with this character cannot be used. This can be worked around by specifying metaseparator to be another symbol, and splitting each query's arguments using that delimiter instead.

Example

{{#invoke:CargoQuery|compound
|1=table=Food=F
;fields=F._pageName=Page
;where=F.CookEffect HOLDS 'heat and fire-based' AND F._pageNamespace = '0'
|2=table=Liquids=L
;fields=L._pageName=Page
;where=L.CookEffect HOLDS 'simple heat and fire-based' AND L._pageNamespace = '0'
|default=No Results!
|template=favilink page
|delimiter = <br>
|metaseparator = ;
}}