Dota 2 Wiki



Dota 2 Wiki

This module processes the output of Cargo queries. Empty values are removed and in case of no results, nil is returned instead of an empty table.


The module introduces some additional overhead leading to slightly worse performance. Raw mw.ext.cargo.query queries should be used where the automatic stripping of empty strings is not needed.

Module:Cargo mw.ext.cargo
Each call was running for about 3.6e-04 seconds.
    Mean runtime for each set was 3.6e-02 seconds,
    with standard deviation of 1.8e-03 seconds,
    minimum 6.0e-06, maximum 7.0e-06.
    Total time spent was about 3.6e-01 seconds.
Relative load is estimated to 5,579.6.
Each call was running for about 2.3e-04 seconds.
    Mean runtime for each set was 2.3e-02 seconds,
    with standard deviation of 1.6e-03 seconds,
    minimum 8.0e-06, maximum 1.0e-05.
    Total time spent was about 2.3e-01 seconds.
Relative load is estimated to 2,754.4.


The syntax is identical to the one provided by mw.ext.cargo.

local Cargo = {}

local checkType = require( 'libraryUtil' ).checkType
local cargoQuery = mw.ext.cargo.query

-- Clear empty string values from a given table and all subtables.
-- @param tbl
local function clearEmptyValues( tbl )
  local newTbl = {}
  for k,v in pairs( tbl ) do
    if type( v ) == 'table' then
      newTbl[k] = clearEmptyValues( v )
    elseif v ~= '' then
      newTbl[k] = v

  return newTbl

-- Run a Cargo query.
-- @param tables
-- @param fields
-- @param args
function Cargo.query( tables, fields, args )
  checkType( 'query', 1, tables, 'string' )
  checkType( 'query', 2, fields, 'string' )
  checkType( 'query', 3, args, 'table', true )

  local results = cargoQuery( tables, fields, args )
  results = clearEmptyValues( results )

  return results

-- Store values to a Cargo table.
-- @param cargoTable
-- @param values
function cargoTable, values )
  checkType( 'store', 1, cargoTable, 'string' )
  checkType( 'store', 2, values, 'table' )

  local args = {}
  args._table = cargoTable
  for k,v in pairs( values ) do
    k = tostring( k )
    v = tostring( v )
    args[k] = v

  mw.getCurrentFrame():callParserFunction( '#cargo_store', args )

return Cargo