blackstack-deployer 1.2.6 → 1.2.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/blackstack-deployer.rb +27 -9
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: be40fc26512412ab26ca2b7d21e48c8c82f128d080f7291d00d71ddd69abaca9
4
- data.tar.gz: 308ab54f2f5a11e3cc06325308f1c0654b089f23e6f8582426d7e5b2d4b2337b
3
+ metadata.gz: c2197d07351cc7992754e1a97848f862cece1e90384b539a93d89fb765a200a7
4
+ data.tar.gz: 849d35bb7fa51c2071a9567fe2a9ab01fd75d7c50d239da9446f09c81a2db3e4
5
5
  SHA512:
6
- metadata.gz: f83b42917544ebafe681e3bc9747f32ecc8ee355de7b727b5b466ede9223a85c846885e8c91dfa6b70f045bad474ddddb7a03c2879369be3c80902015d1ef400
7
- data.tar.gz: 7165eeb3f074603b67dc2dbb2ba9f6f2a30d4f067eea595d7df103456b5bb1650d45e78760fdcdcc530231dd3b47b041eec1ddd2205705b176c4e7eedf76b498
6
+ metadata.gz: a67164cd4df13e59d5e3258700d7ebe2451b1b787e315968d7ea5647866138d90ac5acaee8ed2c4f660fcf179af5c6aeacfdb6aafa71ca1c9a1d14c8f0e71a63
7
+ data.tar.gz: 8893cf809bf4d011ac52e2cb161fe38cfbc700bcf418d6ca630d38696b8508f6ddb01e0749d8b2eaba0767b089d83830278b692167108541ee3da17fbd37cab2
@@ -1,5 +1,5 @@
1
1
  #require 'blackstack-nodes'
2
- require_relative 'blackstack-nodes'
2
+ require'blackstack-nodes'
3
3
 
4
4
  require 'sequel'
5
5
 
@@ -568,18 +568,36 @@ module BlackStack
568
568
  # Reference: https://stackoverflow.com/questions/64066344/import-large-sql-files-with-ruby-sequel-gem
569
569
  # This method is called by `BlackStack::Deployer::db_execute_file` if the filename matches with `/\.sentences\./`.
570
570
  # This method should not be called directly by user code.
571
- def self.execute_sentences(sql)
571
+ def self.execute_sentences(sql, chunk_size=200)
572
572
  tlogger = BlackStack::Deployer::logger
573
573
 
574
574
  # Fix issue: Ruby `split': invalid byte sequence in UTF-8 (ArgumentError)
575
575
  # Reference: https://stackoverflow.com/questions/11065962/ruby-split-invalid-byte-sequence-in-utf-8-argumenterror
576
- sql.encode!('UTF-8', :invalid => :replace)
577
-
578
- # Keeping only ASCII characters
579
- # Ruby: https://programming-idioms.org/idiom/147/remove-all-non-ascii-characters/1903/ruby
580
- sql.split(/;/i).each { |statement|
581
- statement = statement.to_s.strip
582
- tlogger.logs "#{statement.split("\n").first}... "
576
+ #
577
+ # Fix issue: `PG::SyntaxError: ERROR: at or near "��truncate": syntax error`
578
+ #
579
+ sql.encode!('UTF-8', :invalid => :replace, :replace => '')
580
+
581
+ # Remove null bytes to avoid error: `String contains null byte`
582
+ # Reference: https://stackoverflow.com/questions/29320369/coping-with-string-contains-null-byte-sent-from-users
583
+ sql.gsub!("\u0000", "")
584
+
585
+ # Get the array of sentences
586
+ tlogger.logs "Splitting the sql sentences... "
587
+ sentences = sql.split(/;/i)
588
+ tlogger.logf "done (#{sentences.size})"
589
+
590
+ # Chunk the array into parts of chunk_size elements
591
+ # Reference: https://stackoverflow.com/questions/2699584/how-to-split-chunk-a-ruby-array-into-parts-of-x-elements
592
+ tlogger.logs "Bunlding the array of sentences into chunks of #{chunk_size} each... "
593
+ chunks = sentences.each_slice(chunk_size).to_a
594
+ tlogger.logf "done (#{chunks.size})"
595
+
596
+ chunk_number = -1
597
+ chunks.each { |chunk|
598
+ chunk_number += 1
599
+ statement = chunk.join(";\n").to_s.strip
600
+ tlogger.logs "lines #{chunk_size*chunk_number+1} to #{chunk_size*chunk_number+chunk.size} of #{sentences.size}... "
583
601
  begin
584
602
  @@db.execute(statement) #if statement.to_s.strip.size > 0
585
603
  tlogger.done
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: blackstack-deployer
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.6
4
+ version: 1.2.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Leandro Daniel Sardi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-06-03 00:00:00.000000000 Z
11
+ date: 2022-06-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: blackstack-nodes