This file is indexed.

/usr/lib/ruby/vendor_ruby/dbd/odbc/database.rb is in ruby-dbd-odbc 0.2.5+gem2deb-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#
# See DBI::BaseDatabase.
#
class DBI::DBD::ODBC::Database < DBI::BaseDatabase
    def disconnect
        @handle.rollback
        @handle.disconnect 
    rescue DBI::DBD::ODBC::ODBCErr => err
        raise DBI::DatabaseError.new(err.message)
    end

    def database_name
        @handle.get_info('SQL_DATABASE_NAME')
    end

    def ping
        @handle.connected?
    end

    #
    # See DBI::BaseDatabase#columns. Additional Attributes:
    #
    # * nullable: boolean, true if NULLs are allowed in this column.
    #
    def columns(table)
        cols = []

        stmt = @handle.columns(table)
        stmt.ignorecase = true

        stmt.each_hash do |row|
            info = Hash.new
            cols << info

            info['name']      = row['COLUMN_NAME']
            info['type_name'] = row['TYPE_NAME']
            info['sql_type']  = row['DATA_TYPE']
            info['nullable']  = 
                case row['NULLABLE']
                when 1
                    true
                when 0
                    false
                else
                    nil
                end
            info['precision'] = row['PRECISION']
            info['scale']     = row['SCALE']
        end

        stmt.drop
        cols
    rescue DBI::DBD::ODBC::ODBCErr => err
        raise DBI::DatabaseError.new(err.message)
    end

    def tables
        stmt = @handle.tables
        stmt.ignorecase = true
        tabs = [] 
        stmt.each_hash {|row|
            tabs << row["TABLE_NAME"]
        }
        stmt.drop
        tabs
    rescue DBI::DBD::ODBC::ODBCErr => err
        raise DBI::DatabaseError.new(err.message)
    end

    def prepare(statement)
        DBI::DBD::ODBC::Statement.new(@handle.prepare(statement), statement)
    rescue DBI::DBD::ODBC::ODBCErr => err
        raise DBI::DatabaseError.new(err.message)
    end

    def do(statement, *bindvars)
        @handle.do(statement, *bindvars) 
    rescue DBI::DBD::ODBC::ODBCErr => err
        raise DBI::DatabaseError.new(err.message)
    end

    def execute(statement, *bindvars)
        stmt = @handle.run(statement, *bindvars) 
        DBI::DBD::ODBC::Statement.new(stmt, statement)
    rescue DBI::DBD::ODBC::ODBCErr => err
        raise DBI::DatabaseError.new(err.message)
    end

    #
    # Additional Attributes on the DatabaseHandle:
    #
    # * AutoCommit: force a commit after each statement execution.
    # * odbc_ignorecase: Be case-insensitive in operations. 
    # * odbc_timeout: Return after a certain time regardless of whether the operation returned anything.
    #
    def []=(attr, value)
        case attr
        when 'AutoCommit'
            @handle.autocommit(value)
        when 'odbc_ignorecase'
            @handle.ignorecase(value)
        when 'odbc_timeout'
            @handle.timeout(value)
        else
            if attr =~ /^odbc_/ or attr != /_/
                raise DBI::NotSupportedError, "Option '#{attr}' not supported"
            else # option for some other driver - quitly ignore
                return
            end
        end
        @attr[attr] = value
    rescue DBI::DBD::ODBC::ODBCErr => err
        raise DBI::DatabaseError.new(err.message)
    end

    def commit
        @handle.commit
    rescue DBI::DBD::ODBC::ODBCErr => err
        raise DBI::DatabaseError.new(err.message)
    end

    def rollback
        @handle.rollback
    rescue DBI::DBD::ODBC::ODBCErr => err
        raise DBI::DatabaseError.new(err.message)
    end

end # class Database