SQLBuilder.prototype.getSqlForTableCreation = function()

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;
};