Skip to content

Commit 6929761

Browse files
resolves issue 65
1 parent cb2b2a2 commit 6929761

File tree

8 files changed

+125
-84
lines changed

8 files changed

+125
-84
lines changed

dist/quick-erd.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -365,7 +365,7 @@ class T {
365365
});
366366
}
367367
}
368-
const _ = "1.2.12", R = {
368+
const _ = "1.2.13", R = {
369369
Diagram: T,
370370
version: _
371371
};

dist/quick-erd.umd.cjs

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

dist/quick-sql.js

Lines changed: 76 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ function be(u, m) {
2222
}
2323
return (u.startsWith("_") || u.startsWith("$") || u.startsWith("#")) && (R = !0), R || (D = ""), D + u + D;
2424
}
25-
function X(u) {
25+
function Q(u) {
2626
if (u == null)
2727
return null;
2828
if (u.indexOf('"') == 0)
@@ -7213,57 +7213,6 @@ var ie = { exports: {} };
72137213
})(ie, ie.exports);
72147214
var Ce = ie.exports;
72157215
const ve = /* @__PURE__ */ ge(Ce);
7216-
function se(u, m, D, R) {
7217-
var k = new ve(te);
7218-
D == null && console.log();
7219-
let N = D.toUpperCase(), v = u.toUpperCase(), g = m.toUpperCase();
7220-
if (R != null && 0 < R.length) {
7221-
let l = 0, p = R.length, r = R[Math.floor(Z() * (p - l)) + l];
7222-
return !N.startsWith("INTEGER") && !N.startsWith("NUMBER") && !N.startsWith("DATE") && (!r.toLowerCase || r.toLowerCase() != "null") && (!r.charAt || r.charAt(0) != "q" && r.charAt(1) != "'") && (r.charAt && r.charAt(0) == "'" && (r = r.substring(1, r.length - 1)), r = r.replaceAll("'", "''"), r = "'" + r + "'"), r;
7223-
}
7224-
if (g == "NAME" && 0 <= v.indexOf("DEPARTMENT")) {
7225-
var S = ["Sales", "Finance", "Delivery", "Manufacturing"];
7226-
let l = 0, p = S.length;
7227-
return "'" + S[Math.floor(Z() * (p - l)) + l] + "'";
7228-
}
7229-
if (k[g.toLowerCase()] != null && g.indexOf("NAME") < 0)
7230-
return "'" + k[g.toLowerCase()]() + "'";
7231-
if (g == "FIRST_NAME")
7232-
return "'" + k.first() + "'";
7233-
if (g == "LAST_NAME")
7234-
return "'" + k.last() + "'";
7235-
if (0 <= g.indexOf("NAME"))
7236-
return "'" + k.name() + "'";
7237-
if (0 < g.indexOf("ADDRESS"))
7238-
return "'" + k.address() + "'";
7239-
if (g == "LOCATION")
7240-
return "'" + k.city() + "'";
7241-
if (g == "DESCRIPTION")
7242-
return "'" + k.paragraph({ sentences: 2 }) + "'";
7243-
if (g == "JOB") {
7244-
var E = ["Engineer", "Consultant", "Architect", "Manager", "Analyst", "Specialist", "Evangelist", "Salesman"];
7245-
let l = 0, p = E.length;
7246-
return "'" + E[Math.floor(Z() * (p - l)) + l] + "'";
7247-
}
7248-
if (N.startsWith("INTEGER") || N.startsWith("NUMBER")) {
7249-
let l = 0, p = 100;
7250-
return Math.floor(Z() * (p - l)) + l;
7251-
}
7252-
if (N.startsWith("DATE") || N.startsWith("TIMESTAMP")) {
7253-
let l = 0, p = 100;
7254-
var i = Math.floor(Z() * (p - l)) + l;
7255-
return "sysdate-" + i;
7256-
}
7257-
return "'N/A'";
7258-
}
7259-
var te = 1;
7260-
function Ae() {
7261-
te = 1;
7262-
}
7263-
function Z() {
7264-
var u = Math.sin(te++) * 1e4;
7265-
return u - Math.floor(u);
7266-
}
72677216
var re = function() {
72687217
function u(m, D) {
72697218
for (var R = [], k = "", N = 0; N < m.length; N++) {
@@ -7279,7 +7228,7 @@ var re = function() {
72797228
return 0 < k.length && R.push(k), R;
72807229
}
72817230
return u;
7282-
}(), Q = function() {
7231+
}(), Z = function() {
72837232
function u(k, N, v, g, S, E) {
72847233
this.type = g, this.value = k, this.begin = N, this.end = v, this.line = S, this.col = E, this.toString = function() {
72857234
return "{type:" + g + ",value:" + k + "}";
@@ -7450,6 +7399,69 @@ var re = function() {
74507399
}
74517400
return R;
74527401
}();
7402+
function se(u, m, D, R) {
7403+
var k = new ve(te);
7404+
let N = D.toUpperCase(), v = u.toUpperCase(), g = m.toUpperCase();
7405+
if (R != null && 0 < R.length) {
7406+
let l = 0, p = R.length, r = R[Math.floor(X() * (p - l)) + l];
7407+
return !N.startsWith("INTEGER") && !N.startsWith("NUMBER") && !N.startsWith("DATE") && (!r.toLowerCase || r.toLowerCase() != "null") && (!r.charAt || r.charAt(0) != "q" && r.charAt(1) != "'") && (r.charAt && r.charAt(0) == "'" && (r = r.substring(1, r.length - 1)), r = r.replaceAll("'", "''"), r = "'" + r + "'"), r;
7408+
}
7409+
if (g == "NAME" && 0 <= v.indexOf("DEPARTMENT")) {
7410+
var S = ["Sales", "Finance", "Delivery", "Manufacturing"];
7411+
let l = 0, p = S.length;
7412+
return "'" + S[Math.floor(X() * (p - l)) + l] + "'";
7413+
}
7414+
if (k[g.toLowerCase()] != null && g.indexOf("NAME") < 0)
7415+
return "'" + k[g.toLowerCase()]() + "'";
7416+
if (g == "FIRST_NAME")
7417+
return "'" + k.first() + "'";
7418+
if (g == "LAST_NAME")
7419+
return "'" + k.last() + "'";
7420+
if (0 <= g.indexOf("NAME"))
7421+
return "'" + k.name() + "'";
7422+
if (0 < g.indexOf("ADDRESS"))
7423+
return "'" + k.address() + "'";
7424+
if (g == "LOCATION")
7425+
return "'" + k.city() + "'";
7426+
if (g == "DESCRIPTION") {
7427+
let l = k.paragraph({ sentences: 2 }), p = Z(D, !1, !0, ""), r = 400, t = -1;
7428+
for (let o = 0; o < p.length; o++) {
7429+
const s = p[o].value;
7430+
if (s == "(") {
7431+
t = o + 1;
7432+
continue;
7433+
}
7434+
if (0 < t && s == ")") {
7435+
r = parseInt(p[t].value);
7436+
break;
7437+
}
7438+
}
7439+
return r < l.length && (l = l.substring(0, r)), "'" + l + "'";
7440+
}
7441+
if (g == "JOB") {
7442+
var E = ["Engineer", "Consultant", "Architect", "Manager", "Analyst", "Specialist", "Evangelist", "Salesman"];
7443+
let l = 0, p = E.length;
7444+
return "'" + E[Math.floor(X() * (p - l)) + l] + "'";
7445+
}
7446+
if (N.startsWith("INTEGER") || N.startsWith("NUMBER")) {
7447+
let l = 0, p = 100;
7448+
return Math.floor(X() * (p - l)) + l;
7449+
}
7450+
if (N.startsWith("DATE") || N.startsWith("TIMESTAMP")) {
7451+
let l = 0, p = 100;
7452+
var i = Math.floor(X() * (p - l)) + l;
7453+
return "sysdate-" + i;
7454+
}
7455+
return N == "BLOB" || N == "LONG" ? "null" : "'N/A'";
7456+
}
7457+
var te = 1;
7458+
function Ae() {
7459+
te = 1;
7460+
}
7461+
function X() {
7462+
var u = Math.sin(te++) * 1e4;
7463+
return u - Math.floor(u);
7464+
}
74537465
function ce(u) {
74547466
const m = {
74557467
ACCESS: "N",
@@ -7659,14 +7671,14 @@ let ue = function() {
76597671
let s = "", M = "_";
76607672
for (let C = r; C < t; C++) {
76617673
const I = this.src[C].value, L = '"' + I + '"';
7662-
if (this.src[C].type != "constant.numeric" && I != X(L))
7663-
return s = this.content.substring(this.src[r].begin, this.src[t - 1].end), this.parsedName = o + ce(X(s)), this.parsedName;
7674+
if (this.src[C].type != "constant.numeric" && I != Q(L))
7675+
return s = this.content.substring(this.src[r].begin, this.src[t - 1].end), this.parsedName = o + ce(Q(s)), this.parsedName;
76647676
}
76657677
for (let C = r; C < t; C++)
76667678
r < C && (s += M), s += this.src[C].value;
76677679
var d = s.charAt(0);
7668-
return d >= "0" && d <= "9" && (s = "x" + s), this.parsedName = o + ce(X(s)), this.parsedName;
7669-
}, this.src = Q(this.content, !1, !0, "`");
7680+
return d >= "0" && d <= "9" && (s = "x" + s), this.parsedName = o + ce(Q(s)), this.parsedName;
7681+
}, this.src = Z(this.content, !1, !0, "`");
76707682
const p = this.getOptionValue("colprefix");
76717683
p != null && (this.colprefix = p), this.parsedName = null, this.parseName = function() {
76727684
if (this.parsedName != null)
@@ -8551,7 +8563,7 @@ modify ` + C + " generated always as identity restart start with " + (this.card
85518563
u = S;
85528564
const E = S.input;
85538565
let i = [], l = [];
8554-
const p = Q(E + `
8566+
const p = Z(E + `
85558567
`, !0, !0, "`");
85568568
u.data = null;
85578569
let r = null, t = "";
@@ -8599,7 +8611,7 @@ modify ` + C + " generated always as identity restart start with " + (this.card
85998611
if (r += s.value, s.value != `
86008612
` && s.value != "}")
86018613
continue;
8602-
const M = Q(r, !1, !0, "");
8614+
const M = Z(r, !1, !0, "");
86038615
if (M.length % 4 == 3 && M[1].value == ":") {
86048616
S.setOptions(r), r = null, t = "";
86058617
continue;
@@ -9124,20 +9136,20 @@ const Y = {
91249136
return this.optionEQvalue("semantics", "CHAR") ? v = " char" : this.optionEQvalue("semantics", "BYTE") && (v = " byte"), v;
91259137
}, this.name2node = null, this.find = function(v) {
91269138
if (this.name2node != null)
9127-
return this.name2node[X(v)];
9139+
return this.name2node[Q(v)];
91289140
this.name2node = {};
91299141
for (var g = 0; g < this.forest.length; g++)
91309142
for (var S = this.forest[g].descendants(), E = 0; E < S.length; E++) {
91319143
var i = S[E];
91329144
this.name2node[i.parseName()] = i;
91339145
}
9134-
return this.name2node[X(v)];
9146+
return this.name2node[Q(v)];
91359147
}, this.setOptions = function(v) {
91369148
v = v.trim(), v.startsWith("#") && (v = v.substring(1).trim());
91379149
const g = v.indexOf("=");
91389150
let S = v.substring(g + 1).trim();
91399151
S.indexOf("{") < 0 && (S = "{" + v + "}");
9140-
let E = "", i = Q(S, !0, !0, "");
9152+
let E = "", i = Z(S, !0, !0, "");
91419153
for (let p in i) {
91429154
let r = i[p];
91439155
r.type == "identifier" && r.value != "true" && r.value != "false" && r.value != "null" ? E += '"' + r.value + '"' : E += r.value;
@@ -9357,14 +9369,14 @@ function Ne(u, m) {
93579369
return new j(u, m).getErrors();
93589370
}
93599371
function oe() {
9360-
return "1.2.12";
9372+
return "1.2.13";
93619373
}
93629374
j.version = oe;
93639375
j.toDDL = Le;
93649376
j.toERD = Ee;
93659377
j.toErrors = Ne;
93669378
j.fromJSON = ke;
9367-
j.lexer = Q;
9379+
j.lexer = Z;
93689380
export {
93699381
j as default,
93709382
ke as fromJSON,

dist/quick-sql.umd.cjs

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

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@oracle/quicksql",
3-
"version": "1.2.12",
3+
"version": "1.2.13",
44
"description": "Quick SQL to DDL and ERD translator",
55
"main": "./dist/quick-sql.umd.cjs",
66
"module": "./dist/quick-sql.js",

src/sample.js

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
import Chance from 'chance';
2-
//import lexer from './lexer.js';
2+
import lexer from './lexer.js';
33

44

55
export function generateSample( lTable, lColumn, lType, values ) {
66
var chance = new Chance(seed);
7-
if( lType == null )
8-
console.log();
97
let type = lType.toUpperCase();
108
let table = lTable.toUpperCase();
119
let column = lColumn.toUpperCase();
@@ -57,7 +55,25 @@ export function generateSample( lTable, lColumn, lType, values ) {
5755
}
5856

5957
if( column == 'DESCRIPTION') {
60-
return '\''+chance.paragraph({sentences: 2})+'\'';
58+
let descr = chance.paragraph({sentences: 2});
59+
let tSrc = lexer(lType,false,true,'');
60+
let len = 400
61+
let pos = -1;
62+
for( let i = 0; i < tSrc.length; i++ ) {
63+
const t = tSrc[i].value;
64+
if( t == '(' ) {
65+
pos = i+1;
66+
continue;
67+
}
68+
if( 0 < pos && t == ')' ) {
69+
len = parseInt(tSrc[pos].value);
70+
break;
71+
}
72+
}
73+
74+
if( len < descr.length )
75+
descr = descr.substring(0,len);
76+
return '\''+descr+'\'';
6177
}
6278

6379
if( column == 'JOB' ) {
@@ -78,6 +94,10 @@ export function generateSample( lTable, lColumn, lType, values ) {
7894
var offset = Math.floor(seededRandom() * (max - min)) + min;
7995
return 'sysdate-'+offset;
8096
}
97+
if( type == 'BLOB' || type == 'LONG' ) {
98+
return 'null';
99+
}
100+
81101
return '\'N/A\'';
82102
}
83103

test/single_test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ try {
88
let file = '//bugs/Bug35063257.quicksql';
99
//file = '//experimental/food_product.json';
1010
file = '//erd/Bug35814250/1-3.qsql';
11-
file = '//star/sales_product_customers.qsql';
11+
file = '//apex/project_management.quicksql';
1212

1313
let args = process.argv.slice(2);
1414
if( 0 < args.length )

test/small_tests.js

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,6 @@ Bug_35677301
163163
# settings = { semantics: "CHAR", auditCols: true, language: "EN", APEX: true, createdCol: "created_col", createdByCol: "created_by_col", updatedCol: "updated_col", updatedByCol: "updated_by_col" }
164164
`).getDDL();
165165

166-
//console.log(output);
167166
assert( "0 < output.indexOf('created_col')" );
168167
assert( "0 < output.indexOf('created_by_col')" );
169168
assert( "0 < output.indexOf('updated_col')" );
@@ -405,7 +404,6 @@ projects /insert 1
405404
important2 bool
406405
is_important
407406
`).getDDL();
408-
//console.log(output);
409407
assert( " 0 < output.indexOf('important_yn varchar2(1') " );
410408
assert( " 0 < output.indexOf('constraint bug35814922_important_yn') " );
411409
assert( " 0 < output.indexOf('important1 varchar2(1')" );
@@ -724,13 +722,24 @@ addreess
724722
#prefix: e01
725723
`).getDDL();
726724
output = output.substring(0, output.indexOf("-- Generated by Quick SQL"));
727-
//console.log(output);
728725
assert( "0 < output.indexOf(\"e01_t_id_pk\")" );
729726
assert( "0 < output.indexOf(\"e01_t_s_unq\")" );
730727

728+
// https://github.com/oracle/quicksql/issues/65
729+
output = new quicksql(`reports /insert 1
730+
created date
731+
description vc20
732+
pdf blob
733+
`).getDDL();
734+
output = output.substring(0, output.indexOf("-- Generated by Quick SQL"));
735+
//console.log(output);
736+
assert( "output.indexOf(\"N/A\") < 0" );
737+
assert( "output.indexOf(\"efum ji ga sefze figi pomlot dadeziguz seak nigamu luv\") < 0" );
738+
assert( "0 < output.indexOf(\"Om pikawo pe amopi w\")" );
731739

732740
}
733741

742+
734743

735744
small_tests();
736745

0 commit comments

Comments
 (0)