UNPKG

all-node-oracle

Version:

A NodeJS and Oracle DB integration, NodeJS act as http gateway for plsql server pages

116 lines (106 loc) 2.83 kB
/** * Created by cuccpkfs on 14-11-18. */ (function(exports){ function Record(attrs, vals){ var self = this; attrs.forEach(function(attr, i){ switch (attr.dataType) { case 2: /* number */ case 100: /* binary_float */ case 101: /* binary_double */ self[attr.name] = parseFloat(vals[i]); break; default: self[attr.name] = vals[i]; } }); } function Attr(name, dataType){ this.name = name.toLowerCase(); this.dataType = parseInt(dataType); } var linefeed = String.fromCharCode(30) + '\n' , colsep = String.fromCharCode(31) + ',' ; function parse(data){ var rss = {} , lines = data.split(linefeed) , line , rsHead , rsNameCur , attrsCur , rowsCur ; for (var i = 0, len = lines.length; i < len; i++) { line = lines[i]; if (line.length === 0) { rsHead = lines[++i]; if (!rsHead) return rss; // maybe there is trailing blank line attrsCur = lines[++i].split(colsep); // next line will be header line for attr names attrsCur = attrsCur.map(function(v, i){ var tp = v.split(':'); // attr should be in format attrName:attrTypeId return new Attr(tp[0], tp[1]); }); rsHead = rsHead.slice(1, -1).split('|'); // [rsName] in line if (rsHead.length > 1) { var p0 = rsHead[0].split('/') , p1 = rsHead[1].split('/') , parent , fk , pk , prows , pidx = 0 , subs = false ; rsNameCur = p0[0]; parent = p1[0]; prows = rss[parent].rows; fk = p0[1] || p1[1]; pk = p1[1] || p0[1]; rss[rsNameCur] = { name : rsNameCur, attrs : attrsCur, parent : parent, pk : pk, fk : fk }; } else { rsNameCur = rsHead[0]; parent = ''; rowsCur = []; rss[rsNameCur] = metaCur = { name : rsNameCur, attrs : attrsCur, rows : rowsCur }; } } else { if (line.charAt(0).match(/(#|;|\t| )/)) continue; var rec = new Record(attrsCur, line.split(colsep)); if (parent) { var prow = prows[pidx]; while (prow[pk] !== rec[fk]) { prow = prows[++pidx] subs = false; } if (!subs) { prow[rsNameCur] = subs = [rec]; } else { subs.push(rec); } } else { rowsCur.push(rec); } } } return rss; } exports.rsParse = parse; })((function(){ try { return window; } catch (e) { return exports; } })());