Advertisement
Guest User

Untitled

a guest
Mar 14th, 2017
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. var fs = require('fs');
  3. var pg = require('pg');
  4. var promise = require('promise');
  5. var saxStream = require('sax').createStream(strict = true, opt = {lowercase: true, normalize: true});
  6.  
  7. var CONNECTION_OBJECT = {
  8.   user: "elof",
  9.   password: "driv3r",
  10.   database: "mydb",
  11.   host: "localhost"
  12. };
  13.  
  14. var knex = require('knex')({client: 'pg', connection: CONNECTION_OBJECT});
  15.  
  16. var SQL_FILE = "setupButikArtikel.sql";
  17. var FILE_TO_PARSE = "tinybutiksartikel.xml";
  18.  
  19. var client = new pg.Client(CONNECTION_OBJECT);
  20.  
  21.  
  22. client.connect(function(err) {
  23.     if(err) {
  24.         console.error("Err", err);
  25.         return;
  26.     }
  27.  
  28.     console.log("Connected to pg");
  29.  
  30.     client.query(fs.readFileSync(SQL_FILE).toString(), function(err, result) {
  31.         if(err) {
  32.             console.error("Err", err);
  33.         }
  34.  
  35.         console.log(result);
  36.  
  37.     fs.createReadStream(FILE_TO_PARSE).pipe(saxStream);    
  38.  
  39.     });
  40.  
  41. });
  42.  
  43. //
  44. // Done with setting up the database
  45. //
  46.  
  47. var curButikNr = "";
  48. var insideArtikel = false;
  49.  
  50. var butikArtikels = [];
  51.  
  52. saxStream.on("opentag", function(node) {
  53.  
  54.   //console.log(node);
  55.  
  56.     if(node.name == "Butik") {
  57.    
  58.     curButikNr = node.attributes.ButikNr;
  59.    
  60.   }
  61.  
  62.   if(node.name == "ArtikelNr") {
  63.     insideArtikel = true;
  64.   }
  65.  
  66. });
  67.  
  68. saxStream.on("text", function(text) {
  69.  
  70.  
  71.  
  72.     if(curButikNr != "" && insideArtikel) {
  73.     curArtikelNr = text;
  74.     butikArtikels.push(text);
  75.    
  76.   }
  77. });
  78.  
  79.  
  80. saxStream.on("closetag", function(tagname) {
  81.  
  82.   if(tagname == "ArtikelNr") {
  83.    
  84.       insideArtikel = false;
  85.      
  86.   }
  87.  
  88.   if(tagname == "Butik") {  
  89.    
  90.     // curButikNr = 102
  91.     // Butikartikels = [1234, 2345, 34567, ...]
  92.    
  93.     console.log(butikArtikels.length);
  94.    
  95.     var q1 = knex('butik')
  96.     .select('id', 'Nr')
  97.     .where('Nr', curButikNr);
  98.    
  99.     var q2 = knex('artikel')
  100.       .select(['id', 'nr'])
  101.       .whereIn('nr', butikArtikels);
  102.    
  103.     Promise.all([q1, q2]).then(([[butik], artikels]) => {
  104.       console.log("Butik id: " + butik.id);
  105.       console.log("Artikel length: " + artikels.length);
  106.      
  107.       var i = 0;
  108.      
  109.       var butikArtikels = [];
  110.      
  111.       artikels.forEach((artikel) => {
  112.         butikArtikels.push({
  113.           butik_id: butik.id,
  114.           butik_nr: butik.Nr,
  115.           artikel_id: artikel.id,
  116.           artikel_nr:  artikel.nr
  117.         });
  118.       });
  119.  
  120.       knex('butik_artikel').insert(butikArtikels).then(() => { console.log("Hi"); });
  121.      
  122.     })
  123.     .then(() => {
  124.       console.log("Inserted butik " + curButikNr);
  125.     });
  126.    
  127.   }
  128.  
  129. });
  130.  
  131.  
  132.  
  133. saxStream.on("error", function(e) {
  134.     console.error(e);
  135. });
  136.  
  137. saxStream.on("end", function() {
  138.   client.end();
  139.   console.log("Stream end");
  140. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement