Skip to content

Commit 73ed4ae

Browse files
authored
Merge pull request #54 from oracle/2024/2/22
NPX command, error diagnostic fixes, issue 52
2 parents e3571dd + 239d454 commit 73ed4ae

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+746
-418
lines changed

CHANGELOG.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,13 @@ in test/profile.js (test for pk-fk chain of 333 tables, 3 column each; 268 ms fo
3131

3232
## [1.2.2] - 2024-2-15
3333

34-
Issue #47
34+
Issue #52
3535

3636
Fixed invalid 'Misaligned Table ...' error, exhibited in vscode QSQL extension (yet to be published).
3737

38+
39+
## [1.2.4] - 2024-2-22
40+
41+
NPX command
42+
43+
Error diagnostic fixes

README.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,14 @@ The Quick SQL Syntax and Grammar are documented [here](./doc/user/quick-sql-gram
4848

4949
See below for examples of how to use this library.
5050

51+
### Command Line Usage
52+
53+
NPXJS regitry already contains package with conflicting name. To disambiguate, please use command like this:
54+
55+
```
56+
npx @oracle/quicksql test/apex/department_employees.qsql > output.sql
57+
```
58+
5159
### DDL NodeJS ECMA Script Module (ESM) Example
5260

5361
```js

bin/index.js

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
#! /usr/bin/env node
2+
import {quicksql,fromJSON} from "../src/ddl.js";
3+
4+
import fs from "fs";
5+
6+
try {
7+
let file = null;
8+
9+
let args = process.argv.slice(2);
10+
if( args.length < 1 ) {
11+
console.error('Please enter input filename (.qsql, or .json)');
12+
process.exit(1);
13+
}
14+
15+
file = args[0];
16+
17+
const text = fs.readFileSync(file)
18+
let input = text.toString();
19+
20+
let output = null;
21+
if( file.endsWith('.json') ) {
22+
let key = file.substring(0,file.length-'.json'.length);
23+
const sp = file.lastIndexOf('/');
24+
if( 0 < sp )
25+
key = key.substring(sp+1);
26+
output = fromJSON(input, key);
27+
} else {
28+
output = new quicksql(input).getDDL();
29+
}
30+
console.log(output);
31+
process.exit(0);
32+
33+
} catch(e) {
34+
console.error(e);
35+
process.exit(1);
36+
};

dist/quick-erd.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -739,7 +739,7 @@ class de {
739739
e.rearrangeDiagram(3, !1), this.paperScroller.centerContent();
740740
}
741741
}
742-
const ue = "1.2.2", fe = {
742+
const ue = "1.2.6", fe = {
743743
Diagram: de,
744744
version: ue
745745
};

dist/quick-erd.umd.cjs

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

dist/quick-sql.js

Lines changed: 258 additions & 262 deletions
Large diffs are not rendered by default.

dist/quick-sql.umd.cjs

Lines changed: 53 additions & 51 deletions
Large diffs are not rendered by default.

package.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@oracle/quicksql",
3-
"version": "1.2.2",
3+
"version": "1.2.6",
44
"description": "Quick SQL to DDL and ERD translator",
55
"main": "./dist/quick-sql.umd.cjs",
66
"module": "./dist/quick-sql.js",
@@ -18,6 +18,9 @@
1818
"engines": {
1919
"node": ">=16"
2020
},
21+
"bin": {
22+
"quicksql": "bin/index.js"
23+
},
2124
"config": {
2225
"ddlLibraryName": "quickSQL",
2326
"ddlLibraryFileName": "quick-sql",

src/ddl.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ export const quicksql = (function () {
3636
overridesettings: {label: 'Ignore toDDL() second parameter', value:'no',check:['yes','no']},
3737
prefix: {label: 'Object Prefix', value:'' },
3838
//ondelete: {label: 'On Delete', value:'Cascade',check:['restrict','cascade','set null']},
39-
pk: { label: 'Primary Key Maintenance', value: identityDataType, check: [identityDataType, guid,'SEQ', 'NONE']},
39+
pk: { label: 'Primary Key Maintenance', value: guid, check: [identityDataType, guid,'SEQ', 'NONE']},
4040
prefixpkwithtname: {label:'Prefix primary keys with table name', value:'no',check:['yes','no']},
4141
rowkey: {label: 'Alphanumeric Row Identifier', value:'no',check:['yes','no']},
4242
rowversion: {label: 'Row Version Number', value:'no',check:['yes','no']},
@@ -74,6 +74,7 @@ export const quicksql = (function () {
7474
this.errors = null;
7575
this.options = JSON.parse(JSON.stringify(defaultOptions));
7676
this.input = fullInput;
77+
this.postponedAlters = [];
7778

7879
this.getOptionValue = function( kEy ) {
7980
const key = kEy.toLowerCase();
@@ -226,7 +227,7 @@ export const quicksql = (function () {
226227
if( this.getOptionValue('prefix') != null )
227228
value = this.getOptionValue('prefix');
228229
ret = ret + value;
229-
if( value != '' )
230+
if( value != '' && !value.endsWith('_') )
230231
ret = ret + '_';
231232
return ret.toLowerCase();
232233
};
@@ -369,6 +370,10 @@ export const quicksql = (function () {
369370
output += this.forest[i].toDDL()+'\n';
370371
}
371372

373+
for ( let i = 0; i < this.postponedAlters.length; i++ ) {
374+
output += this.postponedAlters[i]+'\n';
375+
}
376+
372377
let j = 0;
373378
for( let i = 0; i < descendants.length; i++ ) {
374379
let trigger = descendants[i].generateTrigger();

src/errorMsgs.js

Lines changed: 20 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -59,23 +59,14 @@ const findErrors = (function () {
5959
function ref_error_in_view( ddl, node ) {
6060
var ret = [];
6161

62-
var line = node.content.toLowerCase();
6362
if( node.parseType() == 'view' ) {
64-
var chunks = split_str(line,' '); //line.split(' ');
65-
let pos = 0;
66-
for( var j = 0; j < chunks.length; j++ ) {
67-
pos += chunks[j].length;
68-
if( chunks[j] == ' ' )
69-
continue;
70-
if( chunks[j] == 'view' )
71-
continue;
72-
if( j == 1 )
73-
continue;
74-
var tbl = ddl.find(chunks[j]);
63+
var chunks = node.src;
64+
for( var j = 2; j < chunks.length; j++ ) {
65+
var tbl = ddl.find(chunks[j].value);
7566
if( tbl == null ) {
7667
ret.push( new SyntaxError(
77-
messages.undefinedObject+chunks[j],
78-
new Offset(node.line, pos-chunks[j].length)
68+
messages.undefinedObject+chunks[j].value,
69+
new Offset(node.line, chunks[j].begin)
7970
));
8071
}
8172
}
@@ -85,32 +76,23 @@ const findErrors = (function () {
8576

8677
function fk_ref_error( ddl, node ) {
8778
var ret = [];
88-
var line = node.content.toLowerCase();
89-
if( 0 < line.indexOf("/fk") || 0 < line.indexOf("/reference") ) {
90-
let chunks = split_str(line,' '); //line.split(' ');
91-
let pos = 0;
92-
let refIsNext = false;
93-
for( var j = 0; j < chunks.length; j++ ) {
94-
pos += chunks[j].length;
95-
if( chunks[j] == ' ' )
96-
continue;
97-
if( chunks[j] == "/fk" || 0 == chunks[j].indexOf("/reference") ) {
98-
refIsNext = true;
99-
continue;
100-
}
101-
if( !refIsNext )
102-
continue;
103-
var tbl = ddl.find(chunks[j]);
104-
if( tbl == null ) {
105-
ret.push( new SyntaxError(
106-
messages.undefinedObject+chunks[j],
107-
new Offset(node.line, pos-chunks[j].length)
108-
));
109-
break;
110-
}
79+
if( node.isOption("fk") || 0 < node.indexOf('reference', true) ) {
80+
let fk = null;
81+
let pos = node.indexOf('fk');
82+
if( pos < 0 )
83+
pos = node.indexOf('reference');
84+
pos++;
85+
if( node.src.length-1 < pos )
86+
return ret;
87+
var tbl = ddl.find(node.src[pos].value);
88+
if( tbl == null ) {
89+
ret.push( new SyntaxError(
90+
messages.undefinedObject+node.src[pos].value,
91+
new Offset(node.line, node.src[pos].begin)
92+
));
11193
}
11294
}
113-
return ret;
95+
return ret;
11496
}
11597

11698
function line_mismatch( lines ) {

0 commit comments

Comments
 (0)