blackstack-deployer 1.2.6 → 1.2.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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