Class: Internationalize::Adapters::SQLite

Inherits:
Base
  • Object
show all
Defined in:
lib/internationalize/adapters/sqlite.rb

Overview

SQLite-specific SQL generation for JSON queries

Uses json_extract() function (SQLite 3.38+) LIKE for case-insensitive matching (default for ASCII) GLOB for case-sensitive matching

Instance Method Summary collapse

Methods inherited from Base

#like_pattern, #sanitize_locale

Instance Method Details

#glob_pattern(term) ⇒ String

GLOB pattern with wildcards GLOB uses * and ? instead of % and _, and is case-sensitive

Parameters:

  • term (String)

    the search term

Returns:

  • (String)

    GLOB pattern with wildcards



41
42
43
44
45
# File 'lib/internationalize/adapters/sqlite.rb', line 41

def glob_pattern(term)
  # Escape GLOB special characters: * ? [ ]
  escaped = term.to_s.gsub(/[*?\[\]]/) { |m| "[#{m}]" }
  "*#{escaped}*"
end

#json_extract(column, locale) ⇒ String

Extract a value from a JSON column using json_extract

Parameters:

  • column (String)

    the JSON column name

  • locale (String, Symbol)

    the locale key

Returns:

  • (String)

    SQL fragment



18
19
20
# File 'lib/internationalize/adapters/sqlite.rb', line 18

def json_extract(column, locale)
  "json_extract(#{column}, '$.#{sanitize_locale(locale)}')"
end

#like_insensitive(column, locale) ⇒ Array<String, Symbol>

Case-insensitive search using LIKE (default for ASCII in SQLite)

Returns:

  • (Array<String, Symbol>)

    SQL condition and pattern type



25
26
27
# File 'lib/internationalize/adapters/sqlite.rb', line 25

def like_insensitive(column, locale)
  ["#{json_extract(column, locale)} LIKE ? ESCAPE '\\'", :like]
end

#like_sensitive(column, locale) ⇒ Array<String, Symbol>

Case-sensitive search using GLOB

Returns:

  • (Array<String, Symbol>)

    SQL condition and pattern type



32
33
34
# File 'lib/internationalize/adapters/sqlite.rb', line 32

def like_sensitive(column, locale)
  ["#{json_extract(column, locale)} GLOB ?", :glob]
end