Robert McNerney Jr
2017-07-08 14:28:31 UTC
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!
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!