diff --git a/CHANGES.md b/CHANGES.md index e23783f4..609beddc 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,3 +1,15 @@ +2024-01-10, Version 7.0.6 +========================= + + * chore: update dependency loopback-datasource-juggler to ^5.0.5 (renovate[bot]) + + * chore: update dependency loopback-connector to ^6.1.1 (renovate[bot]) + + * chore: update dependency @commitlint/config-conventional to ^18.4.4 (renovate[bot]) + + * chore: update dependency eslint to ^8.56.0 (renovate[bot]) + + 2023-12-07, Version 7.0.5 ========================= diff --git a/lib/discovery.js b/lib/discovery.js index a9cf6c2c..70144dbb 100644 --- a/lib/discovery.js +++ b/lib/discovery.js @@ -298,6 +298,15 @@ function mixinDiscovery(MySQL, mysql) { return sql; }; + /** + * Build query to determine is strict mode + */ + + MySQL.prototype.buildQueryIsStrict = function() { + return 'SELECT @@GLOBAL.sql_mode LIKE \'%STRICT%\' AS globalStrictMode,' + + '@@SESSION.sql_mode LIKE \'%STRICT%\' AS sessionStrictMode;'; + }; + /** * Discover foreign keys that reference to the primary key of this table * @param {String} table The table name diff --git a/package-lock.json b/package-lock.json index 7384fd7a..6db762fc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "loopback-connector-mysql", - "version": "7.0.5", + "version": "7.0.6", "lockfileVersion": 3, "requires": true, "packages": { @@ -13,16 +13,16 @@ "async": "^3.2.5", "debug": "^4.3.4", "lodash": "^4.17.21", - "loopback-connector": "^6.1.0", + "loopback-connector": "^6.1.1", "mysql2": "^3.6.3", "patch-package": "^8.0.0", "strong-globalize": "^6.0.6" }, "devDependencies": { - "@commitlint/config-conventional": "^18.4.3", + "@commitlint/config-conventional": "^18.4.4", "eslint": "^8.56.0", "eslint-config-loopback": "^13.1.0", - "loopback-datasource-juggler": "^5.0.4", + "loopback-datasource-juggler": "^5.0.5", "mocha": "^10.2.0", "rc": "^1.2.8", "should": "^13.2.3", @@ -42,9 +42,9 @@ } }, "node_modules/@commitlint/config-conventional": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-18.4.3.tgz", - "integrity": "sha512-729eRRaNta7JZF07qf6SAGSghoDEp9mH7yHU0m7ff0q89W97wDrWCyZ3yoV3mcQJwbhlmVmZPTkPcm7qiAu8WA==", + "version": "18.4.4", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-18.4.4.tgz", + "integrity": "sha512-Bz3sPQSboBN+Et/KyZrR+OJ3z9PrHDw7Bls0/hv94PmuHBtMq1dCGxS9XzTGzxeMNlytCC4kxF083tbhPljl3Q==", "dev": true, "dependencies": { "conventional-changelog-conventionalcommits": "^7.0.2" @@ -1737,9 +1737,9 @@ "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" }, "node_modules/loopback-connector": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/loopback-connector/-/loopback-connector-6.1.0.tgz", - "integrity": "sha512-BZOeO0EBKGVEfkZjeWm2y6BT9/J0BcDPK2mtlZDMNNCxe+LpPqiBghOkD2D2cze3TShSYYBAX7IAoyRiqDdMZA==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/loopback-connector/-/loopback-connector-6.1.1.tgz", + "integrity": "sha512-SczQptf7YZ0jNQfj/moe4owiQGtfeWQ4wHpRf8F9W9PTYs6L7j0iUJ+PMsURFFEiMYKigQXuh4tNw8d9EGjLaQ==", "dependencies": { "async": "^3.2.5", "bluebird": "^3.7.2", @@ -1753,9 +1753,9 @@ } }, "node_modules/loopback-datasource-juggler": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/loopback-datasource-juggler/-/loopback-datasource-juggler-5.0.4.tgz", - "integrity": "sha512-zAXNiygA5IcPoVurnNrW82TgvYwrgQv6y8tDNziGTQfb+ZSQDub97U5vi9AdJQmCEo/j5vDvvEqg31Crr2H69g==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/loopback-datasource-juggler/-/loopback-datasource-juggler-5.0.5.tgz", + "integrity": "sha512-w4sP0KV9KS+eesvgVpdJSohFL2z8RVFfXkCqnN/bWH1MyEe3ob0cirslP0pqom9wNpmxeV5DYKlQThmV9oErPg==", "dev": true, "dependencies": { "async": "^3.2.5", @@ -1769,7 +1769,7 @@ "nanoid": "^3.3.7", "qs": "^6.11.2", "strong-globalize": "^6.0.6", - "traverse": "^0.6.7", + "traverse": "^0.6.8", "uuid": "^9.0.1" }, "engines": { @@ -2990,10 +2990,13 @@ } }, "node_modules/traverse": { - "version": "0.6.7", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.7.tgz", - "integrity": "sha512-/y956gpUo9ZNCb99YjxG7OaslxZWHfCHAUUfshwqOXmxUIvqLjVO581BT+gM59+QV9tFe6/CGG53tsA1Y7RSdg==", + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.8.tgz", + "integrity": "sha512-aXJDbk6SnumuaZSANd21XAo15ucCDE38H4fkqiGsc3MhCK+wOlZvLP9cB/TvpHT0mOyWgC4Z8EwRlzqYSUzdsA==", "dev": true, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } diff --git a/package.json b/package.json index 942137b7..80296be2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "loopback-connector-mysql", - "version": "7.0.5", + "version": "7.0.6", "description": "MySQL connector for loopback-datasource-juggler", "engines": { "node": ">=18" @@ -24,16 +24,16 @@ "async": "^3.2.5", "debug": "^4.3.4", "lodash": "^4.17.21", - "loopback-connector": "^6.1.0", + "loopback-connector": "^6.1.1", "mysql2": "^3.6.3", "patch-package": "^8.0.0", "strong-globalize": "^6.0.6" }, "devDependencies": { - "@commitlint/config-conventional": "^18.4.3", + "@commitlint/config-conventional": "^18.4.4", "eslint": "^8.56.0", "eslint-config-loopback": "^13.1.0", - "loopback-datasource-juggler": "^5.0.4", + "loopback-datasource-juggler": "^5.0.5", "mocha": "^10.2.0", "rc": "^1.2.8", "should": "^13.2.3", diff --git a/test/mysql.discover.test.js b/test/mysql.discover.test.js index 4fd1f290..01824c7b 100644 --- a/test/mysql.discover.test.js +++ b/test/mysql.discover.test.js @@ -6,6 +6,7 @@ 'use strict'; process.env.NODE_ENV = 'test'; const should = require('should'); +const async = require('async'); const assert = require('assert'); const DataSource = require('loopback-datasource-juggler').DataSource; @@ -542,3 +543,25 @@ describe('Discover and build models', function() { }); }); }); + +describe('Discover schema with strict mode on', function() { + let schema; + before(function(done) { + async.series([ + db.execute('SET GLOBAL sql_mode = \'STRICT_ALL_TABLES\';'), + db.discoverSchema('INVENTORY', {owner: 'STRONGLOOP'}, function(err, schema_) { + schema = schema_; + done(err); + }), + ]); + }); + it('should return an LDL schema for INVENTORY with strict mode on', function() { + assert.strictEqual(schema.name, 'Inventory'); + Object.keys(schema.properties).forEach(property => { + if (schema.properties.length) { + assert.strictEqual(property.jsonSchema.maxLength, property.length); + } + }); + async.series([db.execute('SET GLOBAL sql_mode = \'\';')]); + }); +}); diff --git a/test/schema.sql b/test/schema.sql index 589b3d1b..32f071b1 100644 --- a/test/schema.sql +++ b/test/schema.sql @@ -254,3 +254,11 @@ USE `STRONGLOOP`; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; -- Dump completed on 2016-08-09 19:14:01 + +-- +-- Current Database: `STRONGLOOP` +-- + +/*!40000 DROP DATABASE IF EXISTS `STRONGLOOP-STRICT`*/; + +CREATE DATABASE /*!32312 IF NOT EXISTS*/ `STRONGLOOP-STRICT` /*!40100 DEFAULT CHARACTER SET utf8 */; \ No newline at end of file