Annotation of 42BSD/ingres/doc/quel/quel.nr, revision 1.1.1.1

1.1       root        1: .th QUEL QUEL 2/23/79
                      2: .ds QU \s-2QUEL\s0
                      3: .sh NAME
                      4: quel \- \fBQUE\fPry \fBL\fPanguage for \*(II
                      5: .sh DESCRIPTION
                      6: The following is a description of the general syntax
                      7: of
                      8: .nh
                      9: \*(QU.
                     10: .hy
                     11: Individual 
                     12: \*(QU
                     13: statements and commands
                     14: are treated separately in the document;
                     15: this section describes the syntactic classes from which the constituent
                     16: parts of 
                     17: \*(QU
                     18: statements are drawn.
                     19: .s1
                     20: 1. Comments
                     21: .s2
                     22: A comment is an arbitrary sequence of characters
                     23: bounded on the left by
                     24: ``/\*(**''
                     25: and on the right by
                     26: ``\*(**/'':
                     27: .s3
                     28: /\*(** This is a comment \*(**/
                     29: .s1
                     30: 2. Names
                     31: .s2
                     32: Names in 
                     33: \*(QU
                     34: are sequences of no more than 12 alphanumeric
                     35: characters, starting with an alphabetic. Underscore (_) is considered
                     36: an alphabetic.
                     37: All upper-case alphabetics
                     38: appearing anywhere except in strings are automatically
                     39: and silently mapped into their
                     40: lower-case counterparts.
                     41: .s1
                     42: 3. Keywords
                     43: .s2
                     44: The following identifiers are reserved for use as keywords and
                     45: may not be used otherwise:
                     46: .s3
                     47: .ft B
                     48: .if n .ta 5 25 45
                     49: .if t .ta 0.5i 2.5i 4.5i
                     50: .de xx
                     51: \t\\$1\t\\$2\t\\$3
                     52: .br
                     53: ..
                     54: .xx abs all and 
                     55: .xx any append ascii 
                     56: .xx at atan avg 
                     57: .xx avgu by concat 
                     58: .xx copy cos count 
                     59: .xx countu create define 
                     60: .xx delete destroy exp 
                     61: .xx float4 float8 from 
                     62: .xx gamma help in 
                     63: .xx index int1 int2 
                     64: .xx int4 integrity into 
                     65: .xx is log max 
                     66: .xx min mod modify 
                     67: .xx not of on 
                     68: .xx onto or permit 
                     69: .xx print range replace 
                     70: .xx retrieve save sin 
                     71: .xx sqrt sum sumu 
                     72: .xx to unique until 
                     73: .xx view where 
                     74: .ft
                     75: .dt
                     76: .s1
                     77: 4. Constants
                     78: .s2
                     79: There are three types of constants,
                     80: corresponding to the three data types available in 
                     81: \*(QU
                     82: for data storage.
                     83: .s1
                     84: 4.1. String constants
                     85: .s2
                     86: Strings in 
                     87: \*(QU
                     88: are sequences of no more than 255 arbitrary
                     89: ASCII characters bounded by
                     90: double quotes ( " " ). Upper case alphabetics within strings
                     91: are accepted literally.
                     92: Also, in order to imbed quotes
                     93: within strings, it is necessary to prefix them with `\e' .
                     94: The same convention applies to `\e' itself.
                     95: .s3
                     96: Only printing characters are allowed within strings.
                     97: Non-printing characters (i.e. control characters)
                     98: are converted to blanks.
                     99: .s1
                    100: 4.2. Integer constants
                    101: .s2
                    102: .br
                    103: Integer constants in 
                    104: \*(QU
                    105: range from \*-2,147,483,647
                    106: to +2,147,483,647.
                    107: Integer constants beyond that range will be converted to floating point.
                    108: If the integer is greater than 32,767 or less than \*-32,767
                    109: then it will be left as a two byte integer.
                    110: Otherwise it is converted to a four byte integer.
                    111: .s1
                    112: 4.3. Floating point constants
                    113: .s2
                    114: Floating constants consist of an integer part, a decimal point, and
                    115: a fraction part or scientific notation
                    116: of the following format:
                    117: .s3
                    118:        {<dig>} [.<dig>] [e\*vE [+\*v\*-] {<dig>}]
                    119: .s3
                    120: Where <dig> is a digit, [] represents zero or one,
                    121: {} represents zero or more, and | represents alternation.
                    122: An exponent with a missing mantissa has a mantissa
                    123: of 1 inserted.
                    124: There may be no extra characters embedded in the string.
                    125: Floating constants
                    126: are taken to be double-precision quantities with a range of
                    127: approximately
                    128: .if n -10**38 to +10**38
                    129: .if t \*-10\x'-0.2v'\u\s-3\&38\s0\d to 10\u\x'-0.2v'\s-3\&38\s0\d
                    130: and a precision of 17 decimal digits.
                    131: .s1
                    132: 5. Attributes
                    133: .s2
                    134: An attribute is a construction of the form:
                    135: .s3
                    136:        variable.domain
                    137: .s3
                    138: .it Variable 
                    139: identifies a particular relation and can be thought of
                    140: as standing for the rows or tuples of that relation.
                    141: A variable is associated with a relation by means of a
                    142: .it range
                    143: statement.
                    144: .it Domain 
                    145: is the name of one of the columns of the relation
                    146: over which the variable ranges.
                    147: Together they make up an attribute, which represents
                    148: values of the named domain.
                    149: .s1
                    150: 6. Arithmetic operators
                    151: .s2
                    152: Arithmetic operators take numeric type expressions as operands.
                    153: Unary operators group right to left; binary operators group
                    154: left to right. The operators (in order of descending
                    155: precedence) are:
                    156: .s3
                    157: .nf
                    158:        +,\*-   (unary) plus, minus
                    159:        \*(**\*(**      exponentiation
                    160:        \*(**,/ multiplication, division
                    161:        +,\*-   (binary) addition, subtraction
                    162: .dt
                    163: .fi
                    164: .i0
                    165: .s3
                    166: Parentheses may be used for arbitrary grouping.
                    167: Arithmetic overflow and divide by zero are
                    168: not checked on integer operations.
                    169: Floating point operations are checked for
                    170: overflow, underflow, and divide by zero only
                    171: if the appropriate machine hardware exists
                    172: and has been enabled.
                    173: .s1
                    174: 7. Expressions (a_expr)
                    175: .s2
                    176: An expression is one of the following:
                    177: .s3
                    178: .nf
                    179: .if t .in +0.5i
                    180: .if n .in +5
                    181: constant
                    182: attribute
                    183: functional expression
                    184: aggregate or aggregate function
                    185: a combination of numeric expressions and arithmetic operators
                    186: .i0
                    187: .fi
                    188: .s3
                    189: For the purposes of this document,
                    190: an arbitrary expression will be
                    191: refered to by the name
                    192: .it a_expr.
                    193: .s1
                    194: 8. Formats
                    195: .s2
                    196: Every 
                    197: .it a_expr 
                    198: has a format
                    199: denoted by
                    200: a letter (\c
                    201: .bd c,
                    202: .bd i,
                    203: or 
                    204: .bd f,
                    205: for character, integer, or floating data
                    206: types respectively) and a number indicating the number of bytes
                    207: of storage occupied.
                    208: Formats currently supported are listed below.
                    209: The ranges of numeric types are indicated in parentheses.
                    210: .s3
                    211: .lp +20 15
                    212: c1 \- c255     character data of length 1\-255 characters
                    213: .lp +20 15
                    214: i1     1-byte integer (\*-128 to +127)
                    215: .lp +20 15
                    216: i2     2-byte integer (\*-32768 to +32767)
                    217: .lp +20 15
                    218: i4     4-byte integer  (\*-2,147,483,648 to +2,147,483,647)
                    219: .lp +20 15
                    220: .if n f4       4-byte floating (\*-10**38 to +10**38,
                    221: .if t f4       4-byte floating (\*-10\x'-0.2v'\u\s-3\&38\s0\d to +10\x'-0.2v'\u\s-3\&38\s0\d,
                    222: 7 decimal digit precision)
                    223: .lp +20 15
                    224: .if n f4       8-byte floating (\*-10**38 to +10**38,
                    225: .if t f4       8-byte floating (\*-10\u\x'-0.2v'\s-3\&38\s0\d to +10\u\x'-0.2v'\s-3\&38\s0\d,
                    226: 17 decimal digit precision)
                    227: .i0
                    228: .s3
                    229: One numeric format can be converted to
                    230: or substituted for any other numeric format. 
                    231: .s1
                    232: 9. Type Conversion.
                    233: .s2
                    234: When operating on two numeric domains of
                    235: different types,
                    236: \*(II converts as necessary to make the
                    237: types identical.
                    238: .s3
                    239: When operating on an integer and a floating
                    240: point number,
                    241: the integer is converted to a floating point
                    242: number before the operation.
                    243: When operating on two integers of different
                    244: sizes, the smaller is converted to
                    245: the size of the larger.
                    246: When operating on two floating point number
                    247: of different size,
                    248: the larger is converted to the smaller.
                    249: .s3
                    250: The following table summarizes the possible combinations:
                    251: .s3
                    252: .dt
                    253: .if n .in +4
                    254: .if t .in +1i
                    255: .nf
                    256:        i1      i2      i4      f4      f8
                    257: .s3
                    258: i1 \-  i1      i2      i4      f4      f8
                    259: i2 \-  i2      i2      i4      f4      f8
                    260: i4 \-  i4      i4      i4      f4      f8
                    261: f4 \-  f4      f4      f4      f4      f4
                    262: f8 \-  f8      f8      f8      f4      f8
                    263: .dt
                    264: .i0
                    265: .fi
                    266: .s3
                    267: \*(II provides five type conversion
                    268: operators specifically for
                    269: overriding the default actions.
                    270: The operators are:
                    271: .s3
                    272: .nf
                    273: .in +4
                    274: .if n .ta 18
                    275: .if t .ta 1.4i
                    276: int1(a_expr)   result type i1
                    277: int2(a_expr)   result type i2
                    278: int4(a_expr)   result type i4
                    279: float4(a_expr) result type f4
                    280: float8(a_expr) result type f8
                    281: .dt
                    282: .fi
                    283: .i0
                    284: .s3
                    285: The type conversion operators convert their argument
                    286: a_expr to the requested type.
                    287: .it A_expr 
                    288: can be anything including character.
                    289: If a character value cannot be converted,
                    290: an error occures and processing is halted.
                    291: This can happen only if the syntax of the
                    292: character value is incorrect.
                    293: .s3
                    294: Overflow is not checked on conversion.
                    295: .s1
                    296: 10. Target_list
                    297: .s2
                    298: .br
                    299: A target list is a parenthesized, comma separated list of one
                    300: or more elements , each of which must be of one of the following
                    301: forms:
                    302: .s3
                    303: a)
                    304: .it result_attname 
                    305: .bd is 
                    306: .it a_expr
                    307: .s3
                    308: .it Result_attname 
                    309: is the name of the attribute to be created (or an
                    310: already existing attribute name in the case of update statements.)
                    311: The equal sign (``='') may be used
                    312: interchangeably with 
                    313: .bd is.
                    314: In the case where 
                    315: .it a_expr
                    316: is anything other than
                    317: a single attribute, this form
                    318: must be used to assign a result
                    319: name to the expression.
                    320: .s3
                    321: b)  
                    322: .it attribute
                    323: .s3
                    324: In the case of a 
                    325: .it retrieve,
                    326: the resultant domain
                    327: will acquire the same name as that of the attribute being retrieved.
                    328: In the case of update statements
                    329: (\c
                    330: .it "append, replace\c"
                    331: ),
                    332: the relation being updated must have
                    333: a domain with exactly that name.
                    334: .s3
                    335: Inside the target list the keyword 
                    336: .bd all
                    337: can be used to represent all domains.
                    338: For example:
                    339: .if n .in +5
                    340: .if t .in +0.5i
                    341: .s3
                    342: range of e is employee
                    343: .br
                    344: retrieve (e.all) where e.salary > 10000
                    345: .i0
                    346: .s3
                    347: will retrieve all domains of employee for
                    348: those tuples which satisfy the qualification.
                    349: .bd All
                    350: can be used in the target list of
                    351: a 
                    352: .it retrieve 
                    353: or an 
                    354: .bd append.
                    355: The domains will be inserted in their
                    356: ``create'' order, that is,
                    357: the same order they were listed in the
                    358: .it create 
                    359: statement.
                    360: .s1
                    361: 11. Comparison operators
                    362: .s2
                    363: Comparison operators take arbitrary expressions as operands.
                    364: .s3
                    365: .dt
                    366: .nf
                    367:        <       (less than)
                    368:        <=      (less than or equal)
                    369:        >       (greater than)
                    370:        >=      (greater than or equal)
                    371:        =       (equal to)
                    372:        !=      (not equal to)
                    373: .fi
                    374: .s3
                    375: They are all of equal precedence.
                    376: When comparisons are made on
                    377: character attributes, all blanks are ignored.
                    378: .s1
                    379: 12. Logical operators
                    380: .s2
                    381: Logical operators take clauses as operands and
                    382: group left-to-right:
                    383: .s3
                    384: .nf
                    385:        not     (logical not; negation)
                    386:        and     (logical and; conjunction)
                    387:        or      (logical or; disjunction)
                    388: .fi
                    389: .i0
                    390: .dt
                    391: .s3
                    392: .bd Not
                    393: has the highest precedence of the three.
                    394: .bd And
                    395: and 
                    396: .bd or 
                    397: have equal precedence.
                    398: Parentheses may be used for arbitrary grouping.
                    399: .s1
                    400: 13. Qualification (qual)
                    401: .s2
                    402: A 
                    403: .it qualification 
                    404: consists of any number of clauses connected
                    405: by logical operators.
                    406: A clause  is a pair of expressions connected by a comparison operator:
                    407: .s3
                    408: .dt
                    409:        a_expr comparison_operator a_expr
                    410: .s3
                    411: Parentheses may be used for arbitrary
                    412: grouping.
                    413: A qualification may thus be:
                    414: .s3
                    415: .in +4
                    416: .it clause
                    417: .br
                    418: .bd not 
                    419: .it qual
                    420: .br
                    421: .it qual 
                    422: .bd or
                    423: .it qual
                    424: .br
                    425: .it qual 
                    426: .bd and
                    427: .it qual
                    428: .br
                    429: (
                    430: .it qual
                    431: )
                    432: .i0
                    433: .s1
                    434: 14. Functional expressions
                    435: .s2
                    436: A 
                    437: .it "functional expression"
                    438: consists of a function name followed
                    439: by a parenthesized (list of) operand(s).
                    440: Functional expressions can be nested to any level.
                    441: In the following list of functions supported (\c
                    442: .it n\c
                    443: )
                    444: represents an arbitrary numeric type expression.
                    445: The format of the result is indicated on the right.
                    446: .s3
                    447: .if n .ta 10 25
                    448: .if n .in 24
                    449: .if t .ta 1.0i 2.5i
                    450: .if t .in 2.5i
                    451: .de xx
                    452: .lp +20 15
                    453: \fB\\$1(\fI\\$2\fB)\fR \-\t\c
                    454: ..
                    455: .xx abs n
                    456: same as 
                    457: .it n
                    458: (absolute value)
                    459: .xx ascii n
                    460: character string (converts numeric to character)
                    461: .xx atan n
                    462: f8 (arctangent)
                    463: .xx concat a,b
                    464: character (character concatenation. See 16.2)
                    465: .xx cos n
                    466: f8 (cosine)
                    467: .xx exp n 
                    468: f8 (exponential of 
                    469: .it n\c
                    470: )
                    471: .xx gamma n 
                    472: f8 (log gamma)
                    473: .xx log n
                    474: f8 (natural logarithm)
                    475: .xx mod n,b
                    476: same as 
                    477: .it b
                    478: (\c
                    479: .it n
                    480: modulo
                    481: .it "b. n" 
                    482: and 
                    483: .it b 
                    484: must be i1, i2, or i4)
                    485: .xx sin n 
                    486: f8 (sine)
                    487: .xx sqrt n
                    488: f8 (square root)
                    489: .dt
                    490: .i0
                    491: .s1
                    492: 15. Aggregate expressions
                    493: .s2
                    494: Aggregate expressions provide a way to aggregate a computed expression
                    495: over a set of tuples.
                    496: .s1
                    497: 15.1. Aggregation operators
                    498: .s2
                    499: The definitions
                    500: of the aggregates are listed below.
                    501: .s3
                    502: .de xx
                    503: .lp +20 15
                    504: \fB\\$1\fP \-\t\c
                    505: ..
                    506: .xx count
                    507: (i4) count of occurrences
                    508: .xx countu
                    509: (i4) count of unique occurrences
                    510: .xx sum
                    511: summation
                    512: .xx sumu
                    513: summation of unique values
                    514: .xx avg
                    515: (f8) average (sum/count)
                    516: .xx avgu
                    517: (f8) unique average (sumu/countu)
                    518: .xx max
                    519: maximum
                    520: .xx min
                    521: minimum
                    522: .xx any
                    523: (i2) value is 1 if any tuples satisfy
                    524: the qualification, else it is 0
                    525: .dt
                    526: .i0
                    527: .s1
                    528: 15.2. Simple aggregate
                    529: .s2
                    530: .it "\taggregation_operator" 
                    531: (\c
                    532: .it a_expr  
                    533: [ 
                    534: .bd where
                    535: .it qual
                    536: ] )
                    537: .dt
                    538: .s3
                    539: A simple aggregate evaluates to a single scalar value.
                    540: .it A_expr 
                    541: is aggregated over the set of tuples satisfying
                    542: the qualification (or all tuples in the range of the expression if
                    543: no qualification is present).
                    544: Operators 
                    545: .it sum 
                    546: and 
                    547: .it avg 
                    548: require numeric type 
                    549: .it a_expr;
                    550: .it "count, any, max"
                    551: and 
                    552: .it min 
                    553: permit a character type attribute as well as
                    554: numeric type 
                    555: .it a_expr.
                    556: .s3
                    557: .ul 1
                    558: Simple aggregates are completely local.
                    559: That is, they are logically removed from the
                    560: query, processed separately, and replaced
                    561: by their scalar value.
                    562: .s1
                    563: 15.3. ``\c
                    564: .bd any\c
                    565: \&''
                    566: aggregate
                    567: .s2
                    568: It is sometimes useful to know if any tuples satisfy a
                    569: particular qualification.
                    570: One way of doing this is by using the aggregate 
                    571: .it count
                    572: and checking whether the return is zero or non-zero.
                    573: Using
                    574: .it any
                    575: instead of 
                    576: .it count
                    577: is more efficient since
                    578: processing is stopped, if possible, the first time a tuple
                    579: satisfies a qualification.
                    580: .s3
                    581: .it Any
                    582: returns 1 if the qualification is true
                    583: and 0 otherwise.
                    584: .s1
                    585: 15.4. Aggregate functions
                    586: .s2
                    587: .it "\taggregation_operator" 
                    588: (\c 
                    589: .it a_expr 
                    590: .bd by
                    591: .it by_domain
                    592: .br
                    593: .it "\t\t{, by_domain}" 
                    594: [
                    595: .bd where 
                    596: .it qual
                    597: ] )
                    598: .s3
                    599: Aggregate functions are extensions of simple aggregates.
                    600: The 
                    601: .it by
                    602: operator groups (i.e. partitions) the set of qualifying tuples by 
                    603: .it by_domain 
                    604: values.
                    605: For more than one 
                    606: .it by_domain, 
                    607: the values which are grouped by are the concatenation
                    608: of individual 
                    609: .it by_domain 
                    610: values.
                    611: .it A_expr 
                    612: is as in simple aggregates.
                    613: The aggregate function evaluates to a set of aggregate results,
                    614: one for each partition into which the set of qualifying
                    615: tuples has been grouped.
                    616: The aggregate value used during evaluation of the query is the
                    617: value associated with the partition into which
                    618: the tuple currently being processed would fall.
                    619: .s3
                    620: Unlike simple aggregates, aggregate functions
                    621: are not completely local.
                    622: The 
                    623: .it by_list,
                    624: which differentiates
                    625: aggregate functions from simple aggregates,
                    626: is global
                    627: to the query.
                    628: Domains in the 
                    629: .it by_list
                    630: are automatically linked to the
                    631: other domains in the query which are
                    632: in the same relation.
                    633: .s3
                    634: Example:
                    635: .ft B
                    636: .nf 
                    637:        /\*(** retrieve the average salary for the employees
                    638:        working for each manager \*(**/
                    639:        range of e is employee
                    640:        retrieve (e.manager, avesal=avg(e.salary by e.manager))
                    641: .fi
                    642: .i0
                    643: .ft
                    644: .s1
                    645: 15.5 Aggregates on Unique Values.
                    646: .s2
                    647: It is occasionally necessary to aggregate on
                    648: unique values of an expression.
                    649: The 
                    650: .it avgu\c
                    651: , 
                    652: .it sumu\c
                    653: , and 
                    654: .it countu
                    655: aggregates
                    656: all remove duplicate values before
                    657: performing the aggregation.
                    658: For example:
                    659: .s3
                    660:        count(e.manager)
                    661: .s3
                    662: would tell you how many occurrences of 
                    663: .it "e.manager"
                    664: exist.
                    665: But
                    666: .s3
                    667:        countu(e.manager)
                    668: .s3
                    669: would tell you how many unique values of
                    670: .it "e.manager"
                    671: exist.
                    672: .s1
                    673: 16. Special character operators
                    674: .s2
                    675: There are three special features which are particular
                    676: to character domains.
                    677: .s1
                    678: 16.1 Pattern matching characters
                    679: .s2
                    680: There are four characters which take
                    681: on special meaning when used in character constants
                    682: (strings):
                    683: .s3
                    684: .de xx
                    685: .lp +10 6
                    686: \\$1\t\c
                    687: ..
                    688: .xx \*(**     
                    689: matches any string of zero or more characters.
                    690: .xx ?     
                    691: matches any single character.
                    692: .xx [..]  
                    693: matches any of characters in the brackets.
                    694: .i0
                    695: .s3
                    696: These characters can be used in any combination to
                    697: form a variety of tests.
                    698: For example:
                    699: .s3
                    700: .lp +25 20
                    701: where e.name = "\*(**" \- matches any name.
                    702: .lp +25 20
                    703: where e.name = "E\*(**" \- matches any name starting with "E".
                    704: .lp +25 20
                    705: where e.name = "\*(**ein" \- matches all names ending with "ein"
                    706: .lp +25 20
                    707: where e.name = "\*(**[aeiou]\*(**" \- matches any name with at least one vowel.
                    708: .lp +25 20
                    709: where e.name = "Allman?" \- matches any seven character name starting with "Allman".
                    710: .lp +25 20
                    711: where e.name = "[A\-J]\*(**" \- matches any name starting with A,B,..,J.
                    712: .i0
                    713: .s3
                    714: The special meaning of the pattern matching characters
                    715: can be disabled by preceding them with a `\e'.
                    716: Thus ``\e\*(**'' refers to the character ``\*(**''.
                    717: When the special characters appear in the target
                    718: list they must be escaped.
                    719: For example:
                    720: .s3
                    721: .dt
                    722:        title = "\e\*(**\e\*(**\e\*(** ingres \e\*(**\e\*(**\e\*(**"
                    723: .s3
                    724: is the correct way to assign the string
                    725: ``\*(**\*(**\*(** ingres \*(**\*(**\*(**'' to the domain ``title''.
                    726: .s1
                    727: 16.2 Concatenation
                    728: .s2
                    729: There is a concatenation operator which can
                    730: form one character string from two.
                    731: Its syntax is ``concat(field1, field2)''.
                    732: The size of the new character string is the
                    733: sum of the sizes of the original two.
                    734: Trailing blanks are trimmed from the first
                    735: field, the second field is concatenated
                    736: and the remainder is blank padded. The result is never
                    737: trimmed to 0 length, however.
                    738: Concat can be arbitrarily nested inside other
                    739: concats. For example:
                    740: .s3
                    741: .dt
                    742:        name = concat(concat(x.lastname, ","), x.firstname)
                    743: .s3
                    744: will concatenate 
                    745: x.lastname with a comma and
                    746: then concatenate x.firstname to that.
                    747: .s1
                    748: 16.3 Ascii (numeric to character translation)
                    749: .s2
                    750: The 
                    751: .it ascii 
                    752: function can be used to convert a
                    753: numeric field to its character representation.
                    754: This can be useful when it is desired to compare
                    755: a numeric value with a character value.
                    756: For example:
                    757: .nf
                    758: .s3
                    759: .dt
                    760:        retrieve ( ... ) 
                    761:                where x.chardomain = ascii(x.numdomain)
                    762: .fi
                    763: .s3
                    764: .it Ascii 
                    765: can be applied to a character value.
                    766: The result is simply the character value unchanged.
                    767: The numeric conversion formats are determined by
                    768: the printing formats (see ingres(unix)).
                    769: .sh "SEE ALSO"
                    770: append(quel),
                    771: delete(quel), 
                    772: range(quel), 
                    773: replace(quel), 
                    774: retrieve(quel), 
                    775: ingres(unix)
                    776: .sh BUGS
                    777: The maximum number of variables which can
                    778: appear in one query is 10.
                    779: .s3
                    780: Numeric overflow, underflow, and divide by zero
                    781: are not detected.
                    782: .s3
                    783: When converting between numeric types, overflow is
                    784: not checked.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.