in database-jones/Adapter/common/SQLBuilder.js [448:515]
SQLBuilder.prototype.getSqlForTableCreation = function (tableMapping, engine) {
udebug.log_detail('sqlForTableCreation tableMapping', tableMapping, engine);
var i, field, delimiter = '';
var fieldMeta, tableMeta, columnMeta;
var sparseField;
var sql = 'CREATE TABLE ';
sql += tableMapping.database;
sql += '.';
sql += tableMapping.table;
sql += '(';
// append SQL for a field
function appendFieldDefinition(field) {
sql += delimiter;
delimiter = ', ';
sql += field.columnName || field.fieldName;
sql += ' ';
fieldMeta = field.meta;
if (fieldMeta) {
columnMeta = fieldMeta.doit(translateMeta);
if(fieldMeta.defaultVal) {
columnMeta += ' DEFAULT "' + fieldMeta.defaultVal + '"';
}
sql += columnMeta;
if(fieldMeta.hasIndex) {
sql += fieldMeta.isUnique ? ' UNIQUE' : '';
sql += ' KEY ';
} else {
sql += fieldMeta.isPrimaryKey? ' PRIMARY KEY' : '';
}
udebug.log_detail('sqlForTableCreation field:', field.fieldName, 'column:', field.columnName, 'fieldMeta:', fieldMeta, 'columnMeta:', columnMeta);
} else {
sql += defaultFieldMeta(field);
}
}
// append SQL for each defined field
for (i = 0; i < tableMapping.fields.length; ++i) {
field = tableMapping.fields[i];
appendFieldDefinition(field);
}
// append SQL for the optional sparse field container
sparseField = tableMapping.sparseContainer;
if (sparseField) {
appendFieldDefinition(sparseField);
}
// process meta for the table
// need to support PRIMARY and HASH
for (i = 0; i < tableMapping.meta.length; ++i) {
tableMeta = tableMapping.meta[i];
if (tableMeta.isIndex) {
sql += delimiter;
if(tableMeta.isPrimaryKey) {
sql += ' PRIMARY KEY ';
} else {
sql += (tableMeta.isUnique?' UNIQUE ': ' ') + 'INDEX ';
sql += tableMeta.name || "";
}
if(tableMeta.isHash) { sql += ' USING HASH'; }
sql += ' ( ' + tableMeta.columns + ') ';
}
}
sql += ")";
if(engine) {
sql += ' ENGINE=' + engine;
}
sql += ";";
udebug.log('sqlForTableMapping sql: ', sql);
return sql;
};