Discussion:
[Semediawiki-user] Expression error when computing with {{#expr: }} on an integer argument obtained from a Cargo query
Robert McNerney Jr
2017-07-08 14:28:31 UTC
Permalink
I've been getting the following error when attempting to compute arithmetic expressions using the parser function {{#expr: }} on a numerical argument obtained as the singular output of a Cargo query:
Expression error: Unrecognized punctuation character "".
Note: When I copied and pasted the error message from my wikipage into this email, I see the strange character between the quotes above. However, when viewed on my wiki page (local development version, nothing online yet), I just see:
Expression error: Unrecognized punctuation character "".
I checked
https://meta.wikimedia.org/wiki/Help:Calculation
and
https://www.mediawiki.org/wiki/Help:Extension:ParserFunctions
but did not see something with a blank or unprintable character listed among known errors with {{#expr: }}.
So it appears there is some unprintable character included in the {{#expr: }} causing an error, which may be an artifact(?) of the Cargo query result format.
I've included a simplified test case example below along with the behavior I've observed. Thank you in advance for any suggestions!

My Mediawiki installation is using XAMPP on a Windows 10 laptop. I am running:
Installed software
Product

Version

MediaWiki<https://www.mediawiki.org/>

1.28.2

PHP<https://php.net/>

5.6.30 (apache2handler)

MariaDB<https://mariadb.org/>

10.1.21-MariaDB

Some relevant extensions:
SMW 2.5.2
Page Forms 4.1.2
Cargo 1.3.1
Parser Functions 1.6.0
Variables 2.1.0
Also, from my Local Settings file:
# MySQL table options to use during installation or update
$wgDBTableOptions = "ENGINE=InnoDB, DEFAULT CHARSET=binary";

Here are the details of a simplified test case to illustrate the behavior.
Given Cargo table testExpr containing a single data entry row:
Page

someNumber

someKeyString

Test Expr

17

BLAH

The above table testExpr is defined by the following code, contained within the template Template:Test_expr:
<noinclude> {{#cargo_declare:_table=testExpr|someNumber=Integer|someKeyString=String}}< /noinclude>
<includeonly> {{#cargo_store:_table=testExpr|someNumber={{{SomeNumber|}}}|someKeyString={{{SomeKeyString|}}} }}< /includeonly>
The single data entry in the above table was created via the following template call:
{{Test expr|SomeNumber=17|SomeKeyString=BLAH}}

Let's use a Cargo query to obtain the value of the numerical field 'someNumber' from the testExpr table row corresponding to the key string = 'BLAH':
{{#cargo_query:tables=testExpr|fields=someNumber|where=testExpr.someKeyString='BLAH'|format=list}}
RESULT ==> 17
This result looks like a normal number value. However, we cannot compute with it using #expr parser function. For clarity, first store the value returned from the above Cargo query in a variable 'x', using the 'list' results format for the query:
{{#vardefineecho:x|{{#cargo_query:tables=testExpr|fields=someNumber|where=testExpr.someKeyString='BLAH'|format=list}} }}
RESULT ==> 17
Now try to compute some expression using this variable:
{{#expr:{{#var:x}}+1}}
RESULT ==> Expression error: Unrecognized punctuation character "".
Try again, but first apply formatnum with raw number parameter R to the variable 'x':
{{#expr:{{formatnum:{{#var:x}} |R}} + 1 }}
RESULT ==> Expression error: Unrecognized punctuation character "".
Same error. So it appears that there is some unprintable character attached to the number value 17 returned by the Cargo query.
Now try once more, but this time pass the result of the Cargo query through an "Identity" template (1 => {{{1}}} ) which returns the identical parameter it receives:
{{#vardefineecho:y|{{#cargo_query:tables=testExpr|fields=someNumber|where=testExpr.someKeyString='BLAH'|format=template|template=Identity }} }}
RESULT ==> 17
As per printable output, this appears identical to the value stored in variable 'x' above. However, we can compute expressions using variable 'y':
{{#expr:{{#var:y}}+1}}
RESULT ==> 18
Can anyone explain this behavior to me? How should I tweak my original cargo query so that the resulting "number" does not have to be passed through a template to remove whatever mysterious invisible baggage it is carrying? Thank you in advance!
Yaron Koren
2017-07-09 13:43:30 UTC
Permalink
Hi Robert,

Fixing this could be as simple as adding a "|no html" parameter to the
#cargo_query call; see here:

https://www.mediawiki.org/wiki/Extension:Cargo/Querying_data#.23cargo_query

Please let me know if that doesn't work.

-Yaron

On Sat, Jul 8, 2017 at 10:28 AM, Robert McNerney Jr <
Post by Robert McNerney Jr
I've been getting the following error when attempting to compute
arithmetic expressions using the parser function {{#expr: }} on a numerical
Expression error: Unrecognized punctuation character " ".
Note: When I copied and pasted the error message from my wikipage into
this email, I see the strange character between the quotes above. However,
when viewed on my wiki page (local development version, nothing online
Expression error: Unrecognized punctuation character "".
I checked
https://meta.wikimedia.org/wiki/Help:Calculation
and
https://www.mediawiki.org/wiki/Help:Extension:ParserFunctions
but did not see something with a blank or unprintable character listed
among known errors with {{#expr: }}.
}} causing an error, which may be an artifact(?) of the Cargo query result
format.
I've included a simplified test case example below along with the behavior
I've observed. Thank you in advance for any suggestions!
Installed software
Product
Version
MediaWiki<https://www.mediawiki.org/>
1.28.2
PHP<https://php.net/>
5.6.30 (apache2handler)
MariaDB<https://mariadb.org/>
10.1.21-MariaDB
SMW 2.5.2
Page Forms 4.1.2
Cargo 1.3.1
Parser Functions 1.6.0
Variables 2.1.0
# MySQL table options to use during installation or update
$wgDBTableOptions = "ENGINE=InnoDB, DEFAULT CHARSET=binary";
Here are the details of a simplified test case to illustrate the behavior.
Page
someNumber
someKeyString
Test Expr
17
BLAH
The above table testExpr is defined by the following code, contained
<noinclude> {{#cargo_declare:_table=testExpr|someNumber=Integer|someKeyString=String}}<
/noinclude>
<includeonly> {{#cargo_store:_table=testExpr|someNumber={{{
SomeNumber|}}}|someKeyString={{{SomeKeyString|}}} }}< /includeonly>
{{Test expr|SomeNumber=17|SomeKeyString=BLAH}}
Let's use a Cargo query to obtain the value of the numerical field
'someNumber' from the testExpr table row corresponding to the key string =
{{#cargo_query:tables=testExpr|fields=someNumber|
where=testExpr.someKeyString='BLAH'|format=list}}
RESULT ==> 17
This result looks like a normal number value. However, we cannot compute
with it using #expr parser function. For clarity, first store the value
returned from the above Cargo query in a variable 'x', using the 'list'
{{#vardefineecho:x|{{#cargo_query:tables=testExpr|fields=
someNumber|where=testExpr.someKeyString='BLAH'|format=list}} }}
RESULT ==> 17
{{#expr:{{#var:x}}+1}}
RESULT ==> Expression error: Unrecognized punctuation character " ".
{{#expr:{{formatnum:{{#var:x}} |R}} + 1 }}
RESULT ==> Expression error: Unrecognized punctuation character " ".
Same error. So it appears that there is some unprintable character
attached to the number value 17 returned by the Cargo query.
Now try once more, but this time pass the result of the Cargo query
through an "Identity" template (1 => {{{1}}} ) which returns the identical
{{#vardefineecho:y|{{#cargo_query:tables=testExpr|fields=
someNumber|where=testExpr.someKeyString='BLAH'|format=template|template=Identity
}} }}
RESULT ==> 17
As per printable output, this appears identical to the value stored in
{{#expr:{{#var:y}}+1}}
RESULT ==> 18
Can anyone explain this behavior to me? How should I tweak my original
cargo query so that the resulting "number" does not have to be passed
through a template to remove whatever mysterious invisible baggage it is
carrying? Thank you in advance!
------------------------------------------------------------
------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Semediawiki-user mailing list
https://lists.sourceforge.net/lists/listinfo/semediawiki-user
--
WikiWorks · MediaWiki Consulting · http://wikiworks.com
Loading...