240 lines
5.4 KiB
JavaScript
240 lines
5.4 KiB
JavaScript
/*
|
|
Copyright (c) 2014, Oracle and/or its affiliates. All rights
|
|
reserved.
|
|
|
|
This program is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU General Public License
|
|
as published by the Free Software Foundation; version 2 of
|
|
the License.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
|
|
02110-1301 USA
|
|
*/
|
|
|
|
"use strict";
|
|
|
|
var udebug = unified_debug.getLogger("Meta.js");
|
|
|
|
/** Meta allow users to define the metadata of a field or table to create tables.
|
|
* meta is exported and functions return a new object of type Meta.
|
|
* DBConnection pool uses meta to map metadata to database-specific schema.
|
|
*/
|
|
|
|
function Meta() {
|
|
this.isHash = false;
|
|
this.isLob = false;
|
|
this.isNullable = true;
|
|
this.isPrimaryKey = false;
|
|
this.isUniqueKey = false;
|
|
this.isUnsigned = false;
|
|
}
|
|
|
|
Meta.prototype.isMeta = function() {
|
|
return true;
|
|
};
|
|
|
|
Meta.prototype.charset = function(charset, collation) {
|
|
this.charset = charset;
|
|
this.collation = collation;
|
|
return this;
|
|
};
|
|
|
|
Meta.prototype.hash = function() {
|
|
this.isHash = true;
|
|
return this;
|
|
};
|
|
|
|
Meta.prototype.lob = function() {
|
|
this.isLob = true;
|
|
return this;
|
|
};
|
|
|
|
Meta.prototype.notNull = function() {
|
|
this.isNullable = false;
|
|
return this;
|
|
};
|
|
|
|
Meta.prototype.primaryKey = function() {
|
|
this.isPrimaryKey = true;
|
|
this.isNullable = false;
|
|
return this;
|
|
};
|
|
Meta.prototype.primary = Meta.prototype.primaryKey;
|
|
|
|
Meta.prototype.uniqueKey = function() {
|
|
this.isUniqueKey = true;
|
|
return this;
|
|
};
|
|
Meta.prototype.unique = Meta.prototype.uniqueKey;
|
|
|
|
Meta.prototype.unsigned = function() {
|
|
this.isUnsigned = true;
|
|
return this;
|
|
};
|
|
|
|
var meta = {};
|
|
|
|
meta.binary = function(length) {
|
|
var result = new Meta();
|
|
result.length = length;
|
|
result.doit = function(callback) {
|
|
return callback.binary(this.length, this.isLob, this.isNullable);
|
|
};
|
|
return result;
|
|
};
|
|
|
|
meta.char = function(length) {
|
|
var result = new Meta();
|
|
result.length = length;
|
|
result.doit = function(callback) {
|
|
return callback.char(this.length, this.isLob, this.isNullable);
|
|
};
|
|
return result;
|
|
};
|
|
|
|
meta.date = function() {
|
|
var result = new Meta();
|
|
result.doit = function(callback) {
|
|
return callback.date(this.isNullable);
|
|
};
|
|
return result;
|
|
};
|
|
|
|
meta.datetime = function(fsp) {
|
|
var result = new Meta();
|
|
result.fsp = fsp;
|
|
result.doit = function(callback) {
|
|
return callback.datetime(this.fsp, this.isNullable);
|
|
};
|
|
return result;
|
|
};
|
|
|
|
meta.decimal = function(precision, scale) {
|
|
var result = new Meta();
|
|
result.precision = precision;
|
|
result.scale = scale || 0;
|
|
result.doit = function(callback) {
|
|
return callback.decimal(this.precision, this.scale, this.isNullable);
|
|
};
|
|
return result;
|
|
};
|
|
|
|
meta.double = function() {
|
|
var result = new Meta();
|
|
result.doit = function(callback) {
|
|
return callback.double(this.isNullable);
|
|
};
|
|
return result;
|
|
};
|
|
|
|
meta.float = function() {
|
|
var result = new Meta();
|
|
result.doit = function(callback) {
|
|
return callback.float(this.isNullable);
|
|
};
|
|
return result;
|
|
};
|
|
|
|
meta.hashKey = function(columns, name) {
|
|
var result = new Meta();
|
|
result.name = name;
|
|
result.index = true;
|
|
result.hash = true;
|
|
result.columns = columns;
|
|
return result;
|
|
};
|
|
meta.hash = meta.hashKey;
|
|
|
|
meta.index = function(columns, name) {
|
|
var result = new Meta();
|
|
result.name = name;
|
|
result.index = true;
|
|
result.unique = false;
|
|
result.columns = columns;
|
|
return result;
|
|
};
|
|
|
|
meta.integer = function(bits) {
|
|
var result = new Meta();
|
|
result.bits = bits;
|
|
result.doit = function(callback) {
|
|
return callback.integer(this.bits, this.isUnsigned, this.isNullable);
|
|
};
|
|
return result;
|
|
};
|
|
meta.int = meta.integer;
|
|
|
|
meta.interval = function(fsp) {
|
|
var result = new Meta();
|
|
result.fsp = fsp;
|
|
result.doit = function(callback) {
|
|
return callback.interval(this.fsp, this.isNullable);
|
|
};
|
|
};
|
|
meta.number = meta.decimal;
|
|
|
|
meta.orderedIndex = meta.index;
|
|
|
|
meta.time = function(fsp) {
|
|
var result = new Meta();
|
|
result.fsp = fsp;
|
|
result.doit = function(callback) {
|
|
return callback.timestamp(this.fsp, this.isNullable);
|
|
};
|
|
return result;
|
|
};
|
|
|
|
meta.timestamp = function(fsp) {
|
|
var result = new Meta();
|
|
result.fsp = fsp;
|
|
result.doit = function(callback) {
|
|
return callback.timestamp(this.fsp, this.isNullable);
|
|
};
|
|
return result;
|
|
};
|
|
|
|
meta.uniqueIndex = function(columns, name) {
|
|
var result = new Meta();
|
|
result.name = name;
|
|
result.index = true;
|
|
result.unique = true;
|
|
result.columns = columns;
|
|
return result;
|
|
};
|
|
|
|
meta.varbinary = function(length) {
|
|
var result = new Meta();
|
|
result.length = length;
|
|
result.doit = function(callback) {
|
|
return callback.varbinary(this.length, this.isLob, this.isNullable);
|
|
};
|
|
return result;
|
|
};
|
|
|
|
meta.varchar = function(length) {
|
|
var result = new Meta();
|
|
result.length = length;
|
|
result.doit = function(callback) {
|
|
return callback.varchar(this.length, this.isLob, this.isNullable);
|
|
};
|
|
return result;
|
|
};
|
|
|
|
meta.year = function() {
|
|
var result = new Meta();
|
|
result.doit = function(callback) {
|
|
return callback.year(this.isNullable);
|
|
};
|
|
return result;
|
|
};
|
|
|
|
|
|
module.exports = meta;
|