Skip to content

Commit

Permalink
fix: mark a property generated if it is STORED or VIRTUAL
Browse files Browse the repository at this point in the history
Signed-off-by: Muhammad Aaqil <aaqilcs102@gmail.com>
  • Loading branch information
aaqilniz committed Sep 1, 2024
1 parent b057c20 commit 7f5c02f
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 3 deletions.
18 changes: 16 additions & 2 deletions lib/discovery.js
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,14 @@ function mixinDiscovery(MySQL, mysql) {
' numeric_scale AS "dataScale",' +
' column_type AS "columnType",' +
' is_nullable = \'YES\' AS "nullable",' +
' CASE WHEN extra LIKE \'%auto_increment%\' THEN 1 ELSE 0 END AS "generated"' +
`
case
when extra like '%virtual%' then 1
when extra like '%stored%' then 1
when extra LIKE '%auto_increment%' THEN 1
else 0
end as "generated"
` +
' FROM information_schema.columns' +
' WHERE table_schema=' + mysql.escape(schema) +
(table ? ' AND table_name=' + mysql.escape(table) : ''),
Expand All @@ -181,7 +188,14 @@ function mixinDiscovery(MySQL, mysql) {
' numeric_scale AS "dataScale",' +
' column_type AS "columnType",' +
' is_nullable = \'YES\' AS "nullable",' +
' CASE WHEN extra LIKE \'%auto_increment%\' THEN 1 ELSE 0 END AS "generated"' +
`
case
when extra like '%virtual%' then 1
when extra like '%stored%' then 1
when extra LIKE '%auto_increment%' THEN 1
else 0
end as "generated"
` +
' FROM information_schema.columns' +
(table ? ' WHERE table_name=' + mysql.escape(table) : ''),
'table_name, ordinal_position', {});
Expand Down
36 changes: 36 additions & 0 deletions test/mysql.discover.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -251,6 +251,42 @@ describe('Discover model generated columns', function() {
done();
});
});
it('should mark STORED column as generated', function(done) {
db.discoverModelProperties('testgen', function(err, models) {
if (err) return done(err);
models.forEach(function(model) {
assert(model.tableName.toLowerCase() === 'testgen');
if (model.columnName === 'TOKEN') {
assert(model.generated, 'STRONGLOOP.TESTGEN.TOKEN should be a generated (identity) column');
}
});
done();
});
});
it('should mark STORED column as generated', function(done) {

Check failure on line 266 in test/mysql.discover.test.js

View workflow job for this annotation

GitHub Actions / build (18)

Test title is used multiple times in the same test suite

Check failure on line 266 in test/mysql.discover.test.js

View workflow job for this annotation

GitHub Actions / Code Lint

Test title is used multiple times in the same test suite

Check failure on line 266 in test/mysql.discover.test.js

View workflow job for this annotation

GitHub Actions / build (20)

Test title is used multiple times in the same test suite
db.discoverModelProperties('testgen', function(err, models) {
if (err) return done(err);
models.forEach(function(model) {
assert(model.tableName.toLowerCase() === 'testgen');
if (model.columnName === 'TOKEN') {
assert(model.generated, 'STRONGLOOP.TESTGEN.TOKEN should be a generated (identity) column');
}
});
done();
});
});
it('should mark VIRTUAL column as generated', function(done) {
db.discoverModelProperties('testgen', function(err, models) {
if (err) return done(err);
models.forEach(function(model) {
assert(model.tableName.toLowerCase() === 'testgen');
if (model.columnName === 'VIRTUAL_TOKEN') {
assert(model.generated, 'STRONGLOOP.TESTGEN.VIRTUAL_TOKEN should be a generated (identity) column');
}
});
done();
});
});
});

describe('Discover LDL schema from a table', function() {
Expand Down
4 changes: 3 additions & 1 deletion test/schema.sql
Original file line number Diff line number Diff line change
Expand Up @@ -217,8 +217,10 @@ DROP TABLE IF EXISTS `TESTGEN`;
CREATE TABLE `TESTGEN` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`NAME` varchar(64) DEFAULT NULL,
`TOKEN` CHAR(32) GENERATED ALWAYS AS (MD5(NAME)) STORED,
`VIRTUAL_TOKEN` CHAR(32) GENERATED ALWAYS AS (MD5(NAME)) VIRTUAL,
PRIMARY KEY (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;

--
Expand Down

0 comments on commit 7f5c02f

Please sign in to comment.