Sha256: 5203df1e43cd73231001fbe43fb85f15808760c8c76232f0fc3987a3bce7d7ba

Contents?: true

Size: 1.64 KB

Versions: 1

Compression:

Stored size: 1.64 KB

Contents

require 'sequel'

module FBTiles
  class Database
  
    #
    attr_reader :path

    def initialize(path = nil)
      storage_type = path ? "//#{path}" : ':memory:'

      @path = path
      @db = Sequel.connect("#{self.class.driver}:#{storage_type}")

      create_schema!
    end # def initialize

    def self.driver
      @driver ||= RUBY_PLATFORM == 'java' ? 'jdbc:sqlite' : 'sqlite'
    end # def self.driver

    def adapter
      @db
    end # def adapter

    def insert_bounds(records)
      @db[:bounds].multi_insert(records)
    end # def insert_bounds

    def insert_datatypes(records)
      @db[:datatypes].multi_insert(records)
    end # def insert_datatypes

    def insert_tiles(records)
      @db[:tiles].multi_insert(records)
    end # def insert_tiles

    def create_schema!
      @db.create_table :bounds do
        Integer :zoom
        Integer :collared
        Integer :maxX
        Integer :maxY
        Integer :minX
        Integer :minY

        primary_key [:zoom, :collared]
      end

      @db.create_table :datatypes do
        Integer :id, :primary_key => true
        Text :datatype # PNG or JPG only!

        index :datatype, unique: true, name: 'datatypes_idx'
      end

      @db.create_table :tiles do
        Integer :tilekey, :primary_key => true
        Integer :zoom_level
        Integer :tile_row
        Integer :tile_column
        Blob    :tile_data
        Integer :tile_datatypes_id
        Blob    :tile_collar_data
        Integer :tile_collar_datatypes_id

        index [:zoom_level, :tile_row, :tile_column], name: 'tiles_idx'        
      end
    end # def create_schema!

  end # class Database
end # module FBTiles

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
fbtiles-0.1.0 lib/fbtiles/database.rb