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 type s. 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
andscale
, if present, must be positive integer decimal numbers not starting with0
;- when the
range
is specified,min
ormax
may be omitted, but not both default
,min
andmax
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 indefault
.- the
nullable
availability and meaning depends ondefault
:
nullable |
deault |
example | The column is... |
---|---|---|---|
int | NULLABLE | ||
defined | int = 0 | NOT NULL | |
! |
int! | NOT NULL | |
? |
defined | int ?= 0 | NULLABLE |
? |
n/a | ||
! |
defined | 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:
- sets
qName
tolang.quoteName (this.name)
; - if
type
is defined (which is not the case withreference
):- sets
typeDef
tolang.getTypeDefinition (this.type)
; - resets
type
totypeDef.name
(so it gets normalized); - sets
typeDim
tolang.getDbColumnTypeDim (this)
.
- sets