Skip to content

Commit

Permalink
feat: add method for mode discovery
Browse files Browse the repository at this point in the history
Signed-off-by: Muhammad Aaqil <[email protected]>
  • Loading branch information
aaqilniz committed Apr 8, 2024
1 parent ae3cf25 commit 7c08a93
Showing 1 changed file with 31 additions and 0 deletions.
31 changes: 31 additions & 0 deletions lib/datasource.js
Original file line number Diff line number Diff line change
Expand Up @@ -1162,6 +1162,24 @@ DataSource.prototype.autoupdate = function(models, cb) {
return cb.promise;
};

/**
* Discover if database in strict mode.
* This method returns 0 or 1
*
* @param {Function} Callback function. Optional.
*/
DataSource.prototype.discoverIsStrict = function(cb) {
this.freeze();
cb = cb || utils.createPromiseCallback();

if (this.connector.discoverIsStrict) {
this.connector.discoverIsStrict(cb);
} else if (cb) {
process.nextTick(cb);
}
return cb.promise;
};

/**
* Discover existing database tables.
* This method returns an array of model objects, including {type, name, onwer}
Expand Down Expand Up @@ -1625,6 +1643,7 @@ DataSource.prototype.discoverSchemas = function(tableName, options, cb) {
if (followingRelations) {
tasks.push(this.discoverForeignKeys.bind(this, tableName, options));
}
tasks.push(this.discoverIsStrict.bind(this));

async.parallel(tasks, function(err, results) {
if (err) {
Expand All @@ -1633,6 +1652,10 @@ DataSource.prototype.discoverSchemas = function(tableName, options, cb) {
}

const columns = results[0];
let isStrict = results[2];
if (isStrict && isStrict[0]) {
isStrict = isStrict[0]['globalStrictMode'] | isStrict[0]['sessionStrictMode'];
}
if (!columns || columns.length === 0) {
cb(new Error(g.f('Table \'%s\' does not exist.', tableName)));
return cb.promise;
Expand Down Expand Up @@ -1664,11 +1687,19 @@ DataSource.prototype.discoverSchemas = function(tableName, options, cb) {

columns.forEach(function(item) {
const propName = nameMapper('column', item.columnName);
const jsonSchema = {
nullable: item.nullable === 'Y' || item.nullable === 'YES' ||
item.nullable === 1 || item.nullable === true,
};
if (isStrict && item.dataLength) {
jsonSchema.maxLength = item.dataLength;
}
schema.properties[propName] = {
type: item.type,
required: !item.generated && (item.nullable === 'N' || item.nullable === 'NO' ||
item.nullable === 0 || item.nullable === false),
length: item.dataLength,
jsonSchema,
precision: item.dataPrecision,
scale: item.dataScale,
generated: item.generated,
Expand Down

0 comments on commit 7c08a93

Please sign in to comment.