Arithmetic / Logic: Difference between revisions
No edit summary |
Wikiservice (talk | contribs) (Refresh MemCP documentation: accuracy, operational guidance, performance profile and maintained API reference) |
||
| Line 1: | Line 1: | ||
<!-- Copyright (C) 2026 Carl-Philip Haensch --> | |||
<!-- SPDX-License-Identifier: GPL-3.0-or-later --> | |||
<span id="arithmetic--logic"></span> | |||
= Arithmetic / Logic = | = Arithmetic / Logic = | ||
The '''Arithmetic / Logic''' module provides | <!-- Generated from MemCP c42e19eba on 2026-08-27; do not edit manually. --> | ||
<div class="mw-message-box mw-message-box-notice">Generated from MemCP commit <code>c42e19eba</code> on 27 August 2026. See [[Full SCM API documentation]].</div> | |||
The '''Arithmetic / Logic''' module provides the mathematical and logical foundation of MemCP Scheme and compiled SQL expressions. It includes: | |||
* '''Type | * '''Type predicates''' for integers, numbers, NULL/nil, booleans, and related runtime values; | ||
* ''' | * '''Arithmetic''' such as addition, subtraction, multiplication, division, modulo, and numeric conversion; | ||
* '''Comparison | * '''Comparison and SQL truth''' including ordering, equality, NULL-aware predicates, and three-valued-logic helpers; | ||
* ''' | * '''Mathematical functions''' for rounding, extrema, powers, logarithms, and aggregate reduction; | ||
* ''' | * '''Bitwise and optimizer primitives''' used by generated query plans. | ||
Functions intended only for generated plans remain documented because they are part of the runtime interface, but application code should prefer the corresponding SQL or ordinary Scheme operation where one exists. | |||
<span id="int"></span> | <span id="int"></span> | ||
== int? == | == int? == | ||
| Line 27: | Line 33: | ||
=== Returns === | === Returns === | ||
<code>bool</code> | * '''value''' (<code>bool</code>) | ||
<span id="number"></span> | <span id="number"></span> | ||
| Line 44: | Line 50: | ||
=== Returns === | === Returns === | ||
<code>bool</code> | * '''value''' (<code>bool</code>) | ||
<span id="symbol"></span> | <span id="symbol"></span> | ||
| Line 61: | Line 67: | ||
=== Returns === | === Returns === | ||
<code>bool</code> | * '''value''' (<code>bool</code>) | ||
== + == | == + == | ||
| Line 77: | Line 83: | ||
=== Returns === | === Returns === | ||
<code>number</code> | * '''value''' (<code>number</code>) | ||
== sql_sum_reduce == | == sql_sum_reduce == | ||
| Line 94: | Line 100: | ||
=== Returns === | === Returns === | ||
<code>number|nil</code> | * '''value''' (<code>number|nil</code>) | ||
== - == | == - == | ||
| Line 110: | Line 116: | ||
=== Returns === | === Returns === | ||
<code>number</code> | * '''value''' (<code>number</code>) | ||
== sql_add_numeric_literals == | == sql_add_numeric_literals == | ||
| Line 127: | Line 133: | ||
=== Returns === | === Returns === | ||
<code>number</code> | * '''value''' (<code>number</code>) | ||
== sql_sub_numeric_literals == | == sql_sub_numeric_literals == | ||
| Line 144: | Line 150: | ||
=== Returns === | === Returns === | ||
<code>number</code> | * '''value''' (<code>number</code>) | ||
<span id="-1"></span> | <span id="-1"></span> | ||
| Line 161: | Line 167: | ||
=== Returns === | === Returns === | ||
<code>number</code> | * '''value''' (<code>number</code>) | ||
<span id="-2"></span> | <span id="-2"></span> | ||
| Line 178: | Line 184: | ||
=== Returns === | === Returns === | ||
<code>number</code> | * '''value''' (<code>number</code>) | ||
== mod == | == mod == | ||
| Line 195: | Line 201: | ||
=== Returns === | === Returns === | ||
<code>number</code> | * '''value''' (<code>number</code>) | ||
<span id="-3"></span> | <span id="-3"></span> | ||
| Line 213: | Line 219: | ||
=== Returns === | === Returns === | ||
<code>bool</code> | * '''value''' (<code>bool</code>) | ||
<span id="-4"></span> | <span id="-4"></span> | ||
| Line 231: | Line 237: | ||
=== Returns === | === Returns === | ||
<code>bool</code> | * '''value''' (<code>bool</code>) | ||
<span id="-5"></span> | <span id="-5"></span> | ||
| Line 249: | Line 255: | ||
=== Returns === | === Returns === | ||
<code>bool</code> | * '''value''' (<code>bool</code>) | ||
<span id="-6"></span> | <span id="-6"></span> | ||
| Line 267: | Line 273: | ||
=== Returns === | === Returns === | ||
<code>bool</code> | * '''value''' (<code>bool</code>) | ||
<span id="equal"></span> | <span id="equal"></span> | ||
| Line 285: | Line 291: | ||
=== Returns === | === Returns === | ||
<code>bool</code> | * '''value''' (<code>bool</code>) | ||
<span id="equal-1"></span> | <span id="equal-1"></span> | ||
| Line 303: | Line 309: | ||
=== Returns === | === Returns === | ||
<code>bool</code> | * '''value''' (<code>bool</code>) | ||
== sql_not == | == sql_not == | ||
| Line 319: | Line 325: | ||
=== Returns === | === Returns === | ||
<code>bool|nil</code> | * '''value''' (<code>bool|nil</code>) | ||
== equal_collate == | == equal_collate == | ||
| Line 337: | Line 343: | ||
=== Returns === | === Returns === | ||
<code>bool</code> | * '''value''' (<code>bool</code>) | ||
== notequal_collate == | == notequal_collate == | ||
| Line 355: | Line 361: | ||
=== Returns === | === Returns === | ||
<code>bool</code> | * '''value''' (<code>bool</code>) | ||
<span id="-7"></span> | <span id="-7"></span> | ||
| Line 372: | Line 378: | ||
=== Returns === | === Returns === | ||
<code>bool</code> | * '''value''' (<code>bool</code>) | ||
== not == | == not == | ||
| Line 388: | Line 394: | ||
=== Returns === | === Returns === | ||
<code>bool</code> | * '''value''' (<code>bool</code>) | ||
<span id="nil"></span> | <span id="nil"></span> | ||
| Line 405: | Line 411: | ||
=== Returns === | === Returns === | ||
<code>bool</code> | * '''value''' (<code>bool</code>) | ||
== min == | == min == | ||
| Line 421: | Line 427: | ||
=== Returns === | === Returns === | ||
<code>number|string</code> | * '''value''' (<code>number|string</code>) | ||
== max == | == max == | ||
| Line 437: | Line 443: | ||
=== Returns === | === Returns === | ||
<code>number|string</code> | * '''value''' (<code>number|string</code>) | ||
== floor == | == floor == | ||
| Line 453: | Line 459: | ||
=== Returns === | === Returns === | ||
<code>number</code> | * '''value''' (<code>number</code>) | ||
== ceil == | == ceil == | ||
| Line 469: | Line 475: | ||
=== Returns === | === Returns === | ||
<code>number</code> | * '''value''' (<code>number</code>) | ||
== round == | == round == | ||
| Line 485: | Line 491: | ||
=== Returns === | === Returns === | ||
<code>number</code> | * '''value''' (<code>number</code>) | ||
== sql_decimal_output == | == sql_decimal_output == | ||
| Line 502: | Line 508: | ||
=== Returns === | === Returns === | ||
<code>number|nil</code> | * '''value''' (<code>number|nil</code>) | ||
== sql_abs == | == sql_abs == | ||
| Line 518: | Line 524: | ||
=== Returns === | === Returns === | ||
<code>number</code> | * '''value''' (<code>number</code>) | ||
== sqrt == | == sqrt == | ||
| Line 534: | Line 540: | ||
=== Returns === | === Returns === | ||
<code>number</code> | * '''value''' (<code>number</code>) | ||
== sql_rand == | == sql_rand == | ||
| Line 550: | Line 556: | ||
=== Returns === | === Returns === | ||
<code>number</code> | * '''value''' (<code>number</code>) | ||
== parameterize_sql_select_literals == | == parameterize_sql_select_literals == | ||
| Line 561: | Line 567: | ||
=== Parameters === | === Parameters === | ||
* '''query''' (<code>string</code>) | * '''query''' (<code>string</code>) | ||
<span id="returns-32"></span> | <span id="returns-32"></span> | ||
=== Returns === | === Returns === | ||
<code>list</code> | * '''value''' (<code>list</code>) | ||
Latest revision as of 11:59, 28 August 2026
Arithmetic / Logic
The Arithmetic / Logic module provides the mathematical and logical foundation of MemCP Scheme and compiled SQL expressions. It includes:
- Type predicates for integers, numbers, NULL/nil, booleans, and related runtime values;
- Arithmetic such as addition, subtraction, multiplication, division, modulo, and numeric conversion;
- Comparison and SQL truth including ordering, equality, NULL-aware predicates, and three-valued-logic helpers;
- Mathematical functions for rounding, extrema, powers, logarithms, and aggregate reduction;
- Bitwise and optimizer primitives used by generated query plans.
Functions intended only for generated plans remain documented because they are part of the runtime interface, but application code should prefer the corresponding SQL or ordinary Scheme operation where one exists.
int?
tells if the value is a integer
Allowed number of parameters: 1–1
Parameters
- value (
any): value
Returns
- value (
bool)
number?
tells if the value is a number
Allowed number of parameters: 1–1
Parameters
- value (
any): value
Returns
- value (
bool)
symbol?
tells if the value is a symbol
Allowed number of parameters: 1–1
Parameters
- value (
any): value
Returns
- value (
bool)
+
adds two or more numbers
Allowed number of parameters: 0–10000
Parameters
- value... (
number): values to add (variadic)
Returns
- value (
number)
sql_sum_reduce
adds two SQL SUM values while treating NULL as the empty aggregate identity
Allowed number of parameters: 2–2
Parameters
- left (
number|nil): partial sum - right (
number|nil): next value
Returns
- value (
number|nil)
-
subtracts two or more numbers from the first one
Allowed number of parameters: 0–10000
Parameters
- value... (
number): values (variadic)
Returns
- value (
number)
sql_add_numeric_literals
adds two SQL numeric literals using their exact decimal spellings
Allowed number of parameters: 2–2
Parameters
- a (
number): left literal - b (
number): right literal
Returns
- value (
number)
sql_sub_numeric_literals
subtracts two SQL numeric literals using their exact decimal spellings
Allowed number of parameters: 2–2
Parameters
- a (
number): left literal - b (
number): right literal
Returns
- value (
number)
*
multiplies two or more numbers
Allowed number of parameters: 0–10000
Parameters
- value... (
number): values (variadic)
Returns
- value (
number)
/
divides two or more numbers from the first one
Allowed number of parameters: 0–10000
Parameters
- value... (
number): values (variadic)
Returns
- value (
number)
mod
returns the remainder of integer division (modulo)
Allowed number of parameters: 2–2
Parameters
- a (
number): dividend - b (
number): divisor
Returns
- value (
number)
<=
compares two numbers or strings; returns nil if either value is nil
Allowed number of parameters: 2–2
Parameters
- a (
any): first value - b (
any): second value
Returns
- value (
bool)
<
compares two numbers or strings; returns nil if either value is nil
Allowed number of parameters: 2–2
Parameters
- a (
any): first value - b (
any): second value
Returns
- value (
bool)
>
compares two numbers or strings; returns nil if either value is nil
Allowed number of parameters: 2–2
Parameters
- a (
any): first value - b (
any): second value
Returns
- value (
bool)
>=
compares two numbers or strings; returns nil if either value is nil
Allowed number of parameters: 2–2
Parameters
- a (
any): first value - b (
any): second value
Returns
- value (
bool)
equal?
compares two values of the same type, (equal? nil nil) is true
Allowed number of parameters: 2–2
Parameters
- a (
any): first value - b (
any): second value
Returns
- value (
bool)
equal??
performs a SQL compliant sloppy equality check on primitive values (number, int, string, bool. nil), strings are compared case insensitive, (equal? nil nil) is nil
Allowed number of parameters: 2–2
Parameters
- a (
any): first value - b (
any): second value
Returns
- value (
bool)
sql_not
negates a SQL predicate while preserving nil as UNKNOWN
Allowed number of parameters: 1–1
Parameters
- value (
any): SQL predicate value
Returns
- value (
bool|nil)
equal_collate
performs SQL equality with a specified collation (e.g. *_ci case-insensitive, *_bin case-sensitive); returns nil if either arg is nil
Allowed number of parameters: 3–3
Parameters
- a (
any): left side - b (
any): right side - collation (
string): collation name
Returns
- value (
bool)
notequal_collate
performs SQL inequality with a specified collation; returns nil if either arg is nil
Allowed number of parameters: 3–3
Parameters
- a (
any): left side - b (
any): right side - collation (
string): collation name
Returns
- value (
bool)
!
negates the boolean value
Allowed number of parameters: 1–1
Parameters
- value (
bool): value
Returns
- value (
bool)
not
negates the boolean value
Allowed number of parameters: 1–1
Parameters
- value (
bool): value
Returns
- value (
bool)
nil?
returns true if value is nil
Allowed number of parameters: 1–1
Parameters
- value (
any): value
Returns
- value (
bool)
min
returns the smallest value
Allowed number of parameters: 0–10000
Parameters
- value... (
number|string): value (variadic)
Returns
- value (
number|string)
max
returns the highest value
Allowed number of parameters: 0–10000
Parameters
- value... (
number|string): value (variadic)
Returns
- value (
number|string)
floor
rounds the number down
Allowed number of parameters: 1–1
Parameters
- value (
number): value
Returns
- value (
number)
ceil
rounds the number up
Allowed number of parameters: 1–1
Parameters
- value (
number): value
Returns
- value (
number)
round
rounds the number
Allowed number of parameters: 1–1
Parameters
- value (
number): value
Returns
- value (
number)
sql_decimal_output
normalizes a DECIMAL-derived result to its declared output scale
Allowed number of parameters: 2–2
Parameters
- value (
number|nil): DECIMAL-derived value - scale (
int): declared decimal scale
Returns
- value (
number|nil)
sql_abs
SQL ABS(): returns absolute value, NULL-safe
Allowed number of parameters: 1–1
Parameters
- value (
number): value
Returns
- value (
number)
sqrt
returns the square root of a number
Allowed number of parameters: 1–1
Parameters
- value (
number): value
Returns
- value (
number)
sql_rand
SQL RAND(): returns a random float in [0,1)
Allowed number of parameters: 0–0
Parameters
This function has no parameters.
Returns
- value (
number)
parameterize_sql_select_literals
replaces safe literals in a top-level MySQL SELECT and returns normalized SQL, positional runtime bindings, and its stable shape hash
Allowed number of parameters: 1–1
Parameters
- query (
string)
Returns
- value (
list)