Class: AutoREST::MySQLDB

Inherits:
DBAdapter show all
Defined in:
lib/autorest/db/mysql.rb

Overview

MySQL adapter for AutoREST.

Uses the ‘mysql2` gem to connect and interact with a MySQL database. Automatically detects tables and primary key columns.

Examples:

Initialize adapter

db = AutoREST::MySQLDB.new("localhost", 3306, "root", "password", "mydb")

Instance Method Summary collapse

Methods inherited from DBAdapter

#close, #columns, #del_row, #insert, #row, #rows, #set_access_tables, #tables, #update

Constructor Details

#initialize(host, port, user, passwd, dbname) ⇒ MySQLDB

Returns a new instance of MySQLDB.

Parameters:

  • host (String)

    Hostname of the MySQL server

  • port (Integer)

    Port number

  • user (String)

    Username

  • passwd (String)

    Password

  • dbname (String)

    Name of the MySQL database



25
26
27
28
# File 'lib/autorest/db/mysql.rb', line 25

def initialize(host, port, user, passwd, dbname)
    conn = Mysql2::Client.new(host: host, port: port, username: user, password: passwd, database: dbname)
    super(:mysql, dbname, conn)
end

Instance Method Details

#escape(input) ⇒ String

Escapes identifiers or values for safe usage in queries.

Parameters:

  • input (String)

    Table or column name

Returns:

  • (String)

    Escaped string



54
55
56
# File 'lib/autorest/db/mysql.rb', line 54

def escape(input)
    @db_conn.escape(input)
end

#exec_sql(sql) ⇒ Array<Hash>

Executes a raw SQL query.

Parameters:

  • sql (String)

    The SQL query to run

Returns:

  • (Array<Hash>)

    Resulting rows



47
48
49
# File 'lib/autorest/db/mysql.rb', line 47

def exec_sql(sql)
    @db_conn.query(sql).to_a
end

#preparevoid

This method returns an undefined value.

Loads table metadata including columns and primary keys.



32
33
34
35
36
37
38
39
40
41
42
# File 'lib/autorest/db/mysql.rb', line 32

def prepare
    @tables = {}
    @db_conn.query("show tables").each do |t|
        tname = t["Tables_in_#{@dbname}"]
        row_details = @db_conn.query("desc #{tname}")
        @tables[tname] = {}
        row_details.each do |row|
            @tables[tname][row["Field"]] = {type: row["Type"], pk: row["Key"] == "PRI"}
        end
    end
end