Skip to content

DbColumn

do- edited this page Jan 8, 2023 · 35 revisions

DbColumn is an object describing a column of a relation (a regular data table or some similar object like SQL view etc.) in a database.

Properties

Name Type Description
name String Name (identifier) of this column
comment String Comment for this column
type String Name of the data type
size int Maximum size of the data (length for VARCHAR, precision for DECIMAL etc.). The exact meaning (units etc.) and the mere existence meaning depends of the type.
scale int For DECIMAL, his synonyms and/or derived types, (NUMERIC etc.) means the length of the fractional part. Must be absent for other types.
default String The DEFAULT clause of the corresponding CREATE/ALTER TABLE statement. Always presented as a String, including numeric types. Explicit DEFAULT NULL is defined by a 4-letter string 'NULL'.
nullable Boolean false for NOT NULL columns, true otherwise.
min String The minimal allowed value. Corresponds to the HTML INPUT's min attribute. May be used in autogenerated validation procedures, forwarded to UI components etc.
max String The maximal allowed value. Corresponds to the HTML INPUT's max attribute. May be used in autogenerated validation procedures, forwarded to UI components etc.
pattern String The regular expression to test values against. Corresponds to the HTML INPUT's pattern attribute. May be used in autogenerated validation procedures, forwarded to UI components etc.

Domain-specific language

The class implements a tiny DSL to build DbColumn objects from formatted strings.

column    ::= ( physical | reference ) nullable? ("=" default)? range? re? ("//" comment )?

physical  ::= type dimension?
dimension ::= "(" size ("," scale)? ")"

nullable  ::= "?" | "!"

range     ::= "{" min? ".." max? "}"
re        ::= "/" pattern "/"

Where:

  • for reference, see DbReference;
  • when the range is specified, min or max may be omitted, but not both
  • default, min and max literals are not delimited, so they must not contain any special characters used by delimiters by the DSL itself (e. g. max can't contain '}', but no ordinal type allow such constants, so it's not really a restriction). Round braces (and so, function calls, compound expressions etc.) are allowed in default.
  • the nullable availability and meaning depends on default:
nullable deault example The column is...
int NULLABLE
defined int = 0 NOT NULL
! int! NOT NULL
? defined int ?= 0 NULLABLE
? int? n/a
! defined int!=0 n/a

Constructor

Can accept the 1st parameter in two forms:

  • an Object to copy to this
  • or a String to parse
const ref = new DbColumn ({type: 'int', comment: 'ID', default: '0', nullable: false})
// or
const ref = new DbColumn ('int=0')

Methods

parse ()

Parses this.src (where the constructor puts the 1st string argument) into local properties. Used by the constructor.

parseDefault ()

Slices the this.type part after = into this.default. Used by the constructor.

parsePattern ()

Slices the this.default or this.type part between the last two /s into this.default. Used by the constructor.

parseRange ()

Slices the this.default or this.type part between { and } into this.default. Used by the constructor.

parseNullable ()

Set the nullable property based on this.default and the last character of this.type. Used by the constructor.

parseDimension ()

Parses this.type into this.type per se, this.size and this.scale. Used by the constructor.

Clone this wiki locally