DbColumn - do-/node-doix-db GitHub Wiki

DbColumn is an object describing a column of a relation in a database.

Properties

Name Type Description
relation DbRelation Table, view etc. which this column belongs to
name String Logical name (identifier) of this column
qName String Quoted name of this column, good for SQL (DDL etc.)
comment String Comment for this column
reference DbReference (if present)
type String Name of the data type
typeDef DbType The result of DbLang's getTypeDefinition ()
typeDim String ${type}[(${size}[,${scale}])]
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;
  • size and scale, if present, must be positive integer decimal numbers not starting with 0;
  • 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 // ID')

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.

toQueryColumn

For the given DbQuery, returns a new DbQueryColumn instance bound to it and representing this column.

setLang

With the given DbLang lang, calculates all properties specific to this language/dialect.

In the base implementation: