Author: Dave Morris

Date last changed: 2018-02-14

Date accepted: 2018-02-22

IVOA DAL mailing list thread on July 2016 highlighted a possible issue with the description of the **MOD** function. Discussion went on also on this other thread.

Subsequently a different thread highlighted other mismatches between **Table 1** (Mathematical functions) descriptions and the ADQL-2.0 grammar.

Here follows what emerged as possible erratum content from those discussions.

**MOD function description**

Considering what current TAP-1.0 services using ADQL implement and the usual SQL definition of the modulo operator:

M % N = R

with

- R having the same sign as M
- |R| is less than |N|
- M = K * N + R for a given integer K

**RAND optional seed**

ADQL BNF grammar (page 29 of ADQL-2.0) reports the `unsigned_integer x`

to be an optional argument (the seed) to the random mathematical function. This is not made explicit in the description in Table 1.

We suggest to amend the description changing the final *"where x is a seed"* into *"where x is an optional seed"* value.

**ROUND optional places number**

ADQL BNF grammar (pages 29-30 of ADQL-2.0) reports the `signed_integer n`

of ROUND(x, n) to be an optional argument. This signed integer number of places to round the value of x to is not made explicit to be optional in Table 1 description. Also, as per SQL standard, it should default to 0 when not explicitly present.

We suggest to amend the description of round(x, n) in Table 1 by adding a final sentence reading *"The integer n is optional and its value should default to 0."*.

**TRUNCATE optional places number**

ADQL BNF grammar (page 30 of ADQL-2.0) reports the `signed_integer n`

of TRUNCATE(x, n) to be an optional argument. This signed integer number of places to truncate the value of x to is not made explicit to be optional in Table 1 description. Also, as per SQL standard, it should default to 0 when not explicitly present.

We suggest to amend the description of truncate(x, n) in Table 1 by adding a final sentence reading *"The integer n is optional and its value should default to 0."*.

This erratum changes the description of the **mod**, **rand**, **round** and **truncate** function in Table 1 on page 8 of the ADQL-2.0 recommendation from

mod(x, y) Returns the remainder of y/x. rand(x) Returns a random value between 0.0 and 1.0, where x is a seed value. round(x, n) Rounds double value x to n number of decimal places, with the default being to round to the nearest integer. To round to the left of the decimal point, a negative number should be provided. truncate(x, n) Returns the result of truncating the argument x to n decimal places.

to

mod(x, y) Returns the remainder of x/y. rand(x) Returns a random value between 0.0 and 1.0. The optional argument, originally intended to provide a random seed, has undefined semantics. Query writers are advised to use the form without the argument. round(x, n) Rounds double value x to n number of decimal places, with the default being to round to the nearest integer. To round to the left of the decimal point, a negative number should be provided. The integer n is optional and its value should default to 0. truncate(x, n) Returns the result of truncating the argument x to n decimal places. The integer n is optional and its value should default to 0.

The changes proposed by this erratum should impact no existing IVOA resource. Checks against the major TAP services show they already act following the behaviour here above described for the modulo function, while for the remaining 3 issues, all of them simply require some explicit wording in the description to follow the grammar constraints. Checks against a choice of RDBMS-es (PostgreSQL, MySQL, MariaDB, Apache Derby, HyperSQL and Oracle) shows the same behaviour too. See the mail threads referenced in the introduction of this page for details.

Topic revision: r10 - 2018-02-23 - MarcoMolinaro

**IVOA.net**

Wiki Home

WebChanges

WebTopicList

WebStatistics

**Twiki Meta & Help**

IVOA

Know

Main

Sandbox

TWiki

TWiki intro

TWiki tutorial

User registration

Notify me

**Working Groups**

Data Access

Data Model

GWS

Query Language

Registry

Stds&Procs

Semantics

VOTable

Applications

**Interest Groups**

Data Curation

Theory

Education

Operations

Time Domain

Knowledge Discovery in Database

Solar System

Copyright © 2008-2019 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.

Ideas, requests, problems regarding TWiki? Send feedback

Ideas, requests, problems regarding TWiki? Send feedback