libmdb 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. data/README +4 -0
  2. data/lib/mdb.rb +389 -0
  3. data/lib/mdbsql.rb +83 -0
  4. metadata +84 -0
data/README ADDED
@@ -0,0 +1,4 @@
1
+ Low level native bindings for mdbtools
2
+ --------------------------------------
3
+
4
+ Just the basic low level bindings, suitable for building a more Ruby-like library on top
data/lib/mdb.rb ADDED
@@ -0,0 +1,389 @@
1
+ require 'ffi'
2
+
3
+ module MDB
4
+ extend FFI::Library
5
+ ffi_lib "mdb"
6
+
7
+ BIND_SIZE = 16384
8
+ MAX_IDX_COLS = 10
9
+ MAX_INDEX_DEPTH = 10
10
+ MAX_OBJ_NAME = 256
11
+ PGSIZE = 4096
12
+
13
+ enum :file_flags, [:no_flags, 0x00, :writeable, 0x01]
14
+
15
+ enum :obj_type, [:form, 0, :table, :macro, :system_table, :report, :query, :linked_table, :module,
16
+ :relationship, :unknown_09, :unknown_0a, :database_property, :any, -1]
17
+
18
+ enum :strategy, [:table_scan, :leaf_scan, :index_scan]
19
+
20
+ enum :column_type, [:bool, 0x01, :byte, 0x02, :int, 0x03, :longint, 0x04, :money, 0x05,
21
+ :float, 0x06, :double, 0x07, :datetime, 0x08, :binary, 0x09,
22
+ :text, 0x0a, :ole, 0x0b, :memo, 0x0c, :repid, 0x0f,
23
+ :numeric, 0x10, :complex, 0x12]
24
+
25
+ callback :quote_schema_name, [:string, :string], :string
26
+
27
+ class MdbAny < FFI::Union
28
+ layout :i, :int,
29
+ :d, :double,
30
+ :s, [:char, 256]
31
+ end
32
+
33
+ class PtrArray < FFI::Struct
34
+ layout :pdata, :pointer,
35
+ :len, :uint
36
+ end
37
+
38
+ class MdbBackendType < FFI::Struct
39
+ layout :name, :string,
40
+ :needs_length, :uchar,
41
+ :needs_scale, :uchar,
42
+ :needs_quotes, :uchar
43
+ end
44
+
45
+ class MdbBackend < FFI::Struct
46
+ layout :capabilities, :uint32,
47
+ :types_table, MdbBackendType,
48
+ :type_shortdate, MdbBackendType,
49
+ :type_autonum, MdbBackendType,
50
+ :short_now, :string,
51
+ :long_now, :string,
52
+ :charset_statement, :string,
53
+ :drop_statement, :string,
54
+ :constaint_not_empty_statement, :string,
55
+ :column_comment_statement, :string,
56
+ :table_comment_statement, :string,
57
+ :quote_schema_name, :string
58
+ end
59
+
60
+ class MdbStatistics < FFI::Struct
61
+ layout :collect, :bool,
62
+ :pg_reads, :ulong
63
+ end
64
+
65
+ class MdbFile < FFI::Struct
66
+ layout :fd, :int,
67
+ :writable, :bool,
68
+ :filename, :string,
69
+ :jet_version, :uint32,
70
+ :db_key, :uint32,
71
+ :db_passwd, [:char, 14],
72
+ :default_backend, MdbBackend,
73
+ :backend_name, :string,
74
+ :stats, MdbStatistics,
75
+ :map_sz, :int,
76
+ :free_map, :pointer,
77
+ :refs, :int
78
+ end
79
+
80
+ class MdbFormatConstants < FFI::Struct
81
+ layout :pg_size, :size_t,
82
+ :row_count_offset, :uint16,
83
+ :tab_num_rows_offset, :uint16,
84
+ :tab_num_cols_offset, :uint16,
85
+ :tab_num_idxs_offset, :uint16,
86
+ :tab_num_ridxs_offset, :uint16,
87
+ :tab_usage_map_offset, :uint16,
88
+ :tab_first_dpg_offset, :uint16,
89
+ :tab_cols_start_offset, :uint16,
90
+ :tab_ridx_entry_size, :uint16,
91
+ :col_flags_offset, :uint16,
92
+ :col_size_offset, :uint16,
93
+ :col_num_offset, :uint16,
94
+ :tab_col_entry_size, :uint16,
95
+ :tab_free_map_offset, :uint16,
96
+ :tab_col_offset_var, :uint16,
97
+ :tab_col_offset_fixed, :uint16,
98
+ :tab_row_col_num_offset, :uint16
99
+ end
100
+
101
+ class MdbHandle < FFI::Struct
102
+ layout :f, MdbFile,
103
+ :cur_pg, :uint32,
104
+ :row_num, :uint16,
105
+ :cur_pos, :uint,
106
+ :pg_buf, [:uchar, PGSIZE],
107
+ :alt_pg_buf, [:uchar, PGSIZE],
108
+ :num_catalog, :uint,
109
+ :catalog, PtrArray,
110
+ :default_backend, MdbBackend,
111
+ :backend_name, :string,
112
+ :fmt, MdbFormatConstants,
113
+ :stats, MdbStatistics
114
+ end
115
+
116
+ class MdbCatalogEntry < FFI::Struct
117
+ layout :mdb, MdbHandle,
118
+ :object_name, [:char, MAX_OBJ_NAME+1],
119
+ :object_type, :int,
120
+ :table_pg, :ulong,
121
+ :props, :pointer, # PtrArray,
122
+ :columns, :pointer, # PtrArray,
123
+ :flags, :int
124
+ end
125
+
126
+ class MdbProperties < FFI::Struct
127
+ layout :name, :string,
128
+ :hash, :pointer # GHashTable, not implementing for now
129
+ end
130
+
131
+ class MdbColumn < FFI::Struct
132
+ layout :table, :pointer, #MdbTableDef,
133
+ :name, [:char, MAX_OBJ_NAME+1],
134
+ :col_type, :column_type,
135
+ :col_size, :int,
136
+ :bind_ptr, :pointer, # void *
137
+ :len_ptr, :pointer, # int *
138
+ :properties, :pointer, #GHashTable
139
+ :num_sargs, :uint,
140
+ :sargs, :pointer, #PtrArray,
141
+ :idx_sarg_cache, :pointer, #PtrArray,
142
+ :is_fixed, :uchar,
143
+ :query_order, :int,
144
+ :col_num, :int,
145
+ :cur_value_start, :int,
146
+ :cur_value_len, :int,
147
+ :cur_blob_pg_row, :uint32,
148
+ :chunk_size, :int,
149
+ :col_prec, :int,
150
+ :col_scale, :int,
151
+ :is_long_auto, :uchar,
152
+ :is_uuid_auto, :uchar,
153
+ :props, :pointer, #MdbProperties,
154
+ :fixed_offset, :int,
155
+ :var_col_num, :uint,
156
+ :row_col_num, :int
157
+ end
158
+
159
+ class MdbSargNode < FFI::Struct
160
+ layout :op, :int,
161
+ :col, MdbColumn,
162
+ :value, MdbAny,
163
+ :parent, :pointer,
164
+ :left, :pointer,
165
+ :right, :pointer
166
+ end
167
+
168
+ class MdbIndex < FFI::Struct
169
+ layout :index_num, :int,
170
+ :name, [:char, MAX_OBJ_NAME+1],
171
+ :index_type, :uchar,
172
+ :first_pg, :uint32,
173
+ :num_rows, :int,
174
+ :num_keys, :uint,
175
+ :key_col_num, [:short, MAX_IDX_COLS],
176
+ :key_col_order, [:uchar, MAX_IDX_COLS],
177
+ :flags, :uchar,
178
+ :table, :pointer
179
+ end
180
+
181
+ class MdbIndexPage < FFI::Struct
182
+ layout :pg, :uint32,
183
+ :start_pos, :int,
184
+ :offset, :int,
185
+ :len, :int,
186
+ :idx_starts, [:uint16, 2000],
187
+ :cache_value, [:uchar, 256]
188
+ end
189
+
190
+ class MdbIndexChain < FFI::Struct
191
+ layout :cur_depth, :int,
192
+ :last_leaf_found, :uint32,
193
+ :clean_up_mode, :int,
194
+ :pages, [MdbIndexPage, MAX_INDEX_DEPTH]
195
+ end
196
+
197
+ class MdbTableDef < FFI::Struct # The real deal
198
+ layout :entry, :pointer, #MdbCatalogEntry,
199
+ :name, [:char, MAX_OBJ_NAME+1],
200
+ :num_cols, :uint,
201
+ :columns, :pointer,
202
+ :num_rows, :uint,
203
+ :index_start, :int,
204
+ :num_real_idxs, :uint,
205
+ :num_idxs, :uint,
206
+ :indices, :pointer, #PtrArray,
207
+ :first_data_pg, :uint32,
208
+ :cur_pg_num, :uint32,
209
+ :cur_phys_pg, :uint32,
210
+ :cur_row, :uint,
211
+ :noskip_del, :int,
212
+ :map_base_pg, :uint32,
213
+ :map_sz, :size_t,
214
+ :usage_map, :pointer, # unsigned char *
215
+ :freemap_base_pg, :uint32,
216
+ :freemap_sz, :size_t,
217
+ :free_usage_map, :pointer, # unsigned char *
218
+ :sarg_tree, :pointer, # MdbSargNode,
219
+ :strategy, :strategy,
220
+ :scan_idx, :pointer, # MdbIndex,
221
+ :mdbidx, :pointer, # MdbHandle,
222
+ :chain, :pointer, # MdbIndexChain,
223
+ :props, :pointer, # MdbProperties,
224
+ :num_var_cols, :uint,
225
+ :is_temp_table, :uint,
226
+ :temp_table_pages, :pointer # PtrArray
227
+ end
228
+
229
+ class BoundValue < FFI::Struct
230
+ layout :value, [:char, 256]
231
+ end
232
+
233
+ class BoundLength < FFI::Struct
234
+ layout :len, :uint
235
+ end
236
+
237
+
238
+ # file
239
+ #extern ssize_t mdb_read_pg(MdbHandle *mdb, unsigned long pg);
240
+ #extern ssize_t mdb_read_alt_pg(MdbHandle *mdb, unsigned long pg);
241
+ #extern unsigned char mdb_get_byte(void *buf, int offset);
242
+ #extern int mdb_get_int16(void *buf, int offset);
243
+ #extern long mdb_get_int32(void *buf, int offset);
244
+ #extern long mdb_get_int32_msb(void *buf, int offset);
245
+ #extern float mdb_get_single(void *buf, int offset);
246
+ #extern double mdb_get_double(void *buf, int offset);
247
+ #extern unsigned char mdb_pg_get_byte(MdbHandle *mdb, int offset);
248
+ #extern int mdb_pg_get_int16(MdbHandle *mdb, int offset);
249
+ #extern long mdb_pg_get_int32(MdbHandle *mdb, int offset);
250
+ #extern float mdb_pg_get_single(MdbHandle *mdb, int offset);
251
+ #extern double mdb_pg_get_double(MdbHandle *mdb, int offset);
252
+ attach_function :mdb_open, [:string, :file_flags], MdbHandle.by_ref
253
+ attach_function :mdb_close, [MdbTableDef], :void
254
+ #extern MdbHandle *mdb_clone_handle(MdbHandle *mdb);
255
+ #extern void mdb_swap_pgbuf(MdbHandle *mdb);
256
+
257
+ # catalog
258
+ #extern void mdb_free_catalog(MdbHandle *mdb);
259
+ #extern GPtrArray *mdb_read_catalog(MdbHandle *mdb, int obj_type);
260
+ #MdbCatalogEntry *mdb_get_catalogentry_by_name(MdbHandle *mdb, const gchar* name);
261
+ #extern void mdb_dump_catalog(MdbHandle *mdb, int obj_type);
262
+ #extern char *mdb_get_objtype_string(int obj_type);
263
+
264
+ # table
265
+ #extern MdbTableDef *mdb_alloc_tabledef(MdbCatalogEntry *entry);
266
+ attach_function :mdb_free_tabledef, [MdbTableDef], :void
267
+ #extern MdbTableDef *mdb_read_table(MdbCatalogEntry *entry);
268
+ attach_function :mdb_read_table_by_name, [MdbHandle, :string, :obj_type], MdbTableDef.by_ref
269
+ #extern void mdb_append_column(GPtrArray *columns, MdbColumn *in_col);
270
+ #extern void mdb_free_columns(GPtrArray *columns);
271
+ attach_function :mdb_read_columns, [MdbTableDef], :pointer
272
+ #extern void mdb_table_dump(MdbCatalogEntry *entry);
273
+ #extern guint8 read_pg_if_8(MdbHandle *mdb, int *cur_pos);
274
+ #extern guint16 read_pg_if_16(MdbHandle *mdb, int *cur_pos);
275
+ #extern guint32 read_pg_if_32(MdbHandle *mdb, int *cur_pos);
276
+ #extern void *read_pg_if_n(MdbHandle *mdb, void *buf, int *cur_pos, size_t len);
277
+ #extern int mdb_is_user_table(MdbCatalogEntry *entry);
278
+ #extern int mdb_is_system_table(MdbCatalogEntry *entry);
279
+ #extern const char *mdb_table_get_prop(const MdbTableDef *table, const gchar *key);
280
+ #extern const char *mdb_col_get_prop(const MdbColumn *col, const gchar *key);
281
+
282
+ #/* data.c */
283
+ #extern int mdb_bind_column_by_name(MdbTableDef *table, gchar *col_name, void *bind_ptr, int *len_ptr);
284
+ #extern void mdb_data_dump(MdbTableDef *table);
285
+ #extern void mdb_date_to_tm(double td, struct tm *t);
286
+ attach_function :mdb_bind_column, [MdbTableDef, :int, :pointer, :pointer], :void
287
+ attach_function :mdb_rewind_table, [MdbTableDef], :int
288
+ attach_function :mdb_fetch_row, [MdbTableDef], :int
289
+ #extern int mdb_is_fixed_col(MdbColumn *col);
290
+ #extern char *mdb_col_to_string(MdbHandle *mdb, void *buf, int start, int datatype, int size);
291
+ #extern int mdb_find_pg_row(MdbHandle *mdb, int pg_row, void **buf, int *off, size_t *len);
292
+ #extern int mdb_find_row(MdbHandle *mdb, int row, int *start, size_t *len);
293
+ #extern int mdb_find_end_of_row(MdbHandle *mdb, int row);
294
+ #extern int mdb_col_fixed_size(MdbColumn *col);
295
+ #extern int mdb_col_disp_size(MdbColumn *col);
296
+ #extern size_t mdb_ole_read_next(MdbHandle *mdb, MdbColumn *col, void *ole_ptr);
297
+ #extern size_t mdb_ole_read(MdbHandle *mdb, MdbColumn *col, void *ole_ptr, int chunk_size);
298
+ attach_function :mdb_ole_read_full, [MdbHandle, MdbColumn, :pointer], :string
299
+ attach_function :mdb_set_date_fmt, [:string], :void
300
+ #extern int mdb_read_row(MdbTableDef *table, unsigned int row);
301
+
302
+ #/* dump.c */
303
+ #extern void mdb_buffer_dump(const void *buf, int start, size_t len);
304
+
305
+ #/* backend.c */
306
+ #extern char* __attribute__((deprecated)) mdb_get_coltype_string(MdbBackend *backend, int col_type);
307
+ #extern int __attribute__((deprecated)) mdb_coltype_takes_length(MdbBackend *backend, int col_type);
308
+ #extern const MdbBackendType* mdb_get_colbacktype(const MdbColumn *col);
309
+ #extern const char* mdb_get_colbacktype_string(const MdbColumn *col);
310
+ #extern int mdb_colbacktype_takes_length(const MdbColumn *col);
311
+ #extern void __attribute__((deprecated)) mdb_init_backends();
312
+ #extern void mdb_register_backend(char *backend_name, guint32 capabilities, MdbBackendType *backend_type, MdbBackendType *type_shortdate, MdbBackendType *type_autonum, const char *short_now, const char *long_now, const char *charset_statement, const char *drop_statement, const char *constaint_not_empty_statement, const char *column_comment_statement, const char *table_comment_statement, gchar* (*quote_schema_name)(const gchar*, const gchar*));
313
+ #extern void __attribute__((deprecated)) mdb_remove_backends();
314
+ attach_function :mdb_set_default_backend, [MdbHandle, :string], :int
315
+ #extern void mdb_print_schema(MdbHandle *mdb, FILE *outfile, char *tabname, char *dbnamespace, guint32 export_options);
316
+
317
+ #/* sargs.c */
318
+ #extern int mdb_test_sargs(MdbTableDef *table, MdbField *fields, int num_fields);
319
+ #extern int mdb_test_sarg(MdbHandle *mdb, MdbColumn *col, MdbSargNode *node, MdbField *field);
320
+ #extern void mdb_sql_walk_tree(MdbSargNode *node, MdbSargTreeFunc func, gpointer data);
321
+ #extern int mdb_find_indexable_sargs(MdbSargNode *node, gpointer data);
322
+ #extern int mdb_add_sarg_by_name(MdbTableDef *table, char *colname, MdbSarg *in_sarg);
323
+ #extern int mdb_test_string(MdbSargNode *node, char *s);
324
+ #extern int mdb_test_int(MdbSargNode *node, gint32 i);
325
+ #extern int mdb_add_sarg(MdbColumn *col, MdbSarg *in_sarg);
326
+
327
+ #/* index.c */
328
+ #extern GPtrArray *mdb_read_indices(MdbTableDef *table);
329
+ #extern void mdb_index_dump(MdbTableDef *table, MdbIndex *idx);
330
+ #extern void mdb_index_scan_free(MdbTableDef *table);
331
+ #extern int mdb_index_find_next_on_page(MdbHandle *mdb, MdbIndexPage *ipg);
332
+ #extern int mdb_index_find_next(MdbHandle *mdb, MdbIndex *idx, MdbIndexChain *chain, guint32 *pg, guint16 *row);
333
+ #extern void mdb_index_hash_text(char *text, char *hash);
334
+ #extern void mdb_index_scan_init(MdbHandle *mdb, MdbTableDef *table);
335
+ #extern int mdb_index_find_row(MdbHandle *mdb, MdbIndex *idx, MdbIndexChain *chain, guint32 pg, guint16 row);
336
+ #extern void mdb_index_swap_n(unsigned char *src, int sz, unsigned char *dest);
337
+ #extern void mdb_free_indices(GPtrArray *indices);
338
+ #void mdb_index_page_reset(MdbIndexPage *ipg);
339
+ #extern int mdb_index_pack_bitmap(MdbHandle *mdb, MdbIndexPage *ipg);
340
+
341
+ # stats
342
+ attach_function :mdb_stats_on, [MdbHandle], :void
343
+ attach_function :mdb_stats_off, [MdbHandle], :void
344
+ attach_function :mdb_dump_stats, [MdbHandle], :void
345
+
346
+ #/* like.c */
347
+ #extern int mdb_like_cmp(char *s, char *r);
348
+
349
+ #/* write.c */
350
+ #extern void mdb_put_int16(void *buf, guint32 offset, guint32 value);
351
+ #extern void mdb_put_int32(void *buf, guint32 offset, guint32 value);
352
+ #extern void mdb_put_int32_msb(void *buf, guint32 offset, guint32 value);
353
+ #extern int mdb_crack_row(MdbTableDef *table, int row_start, int row_end, MdbField *fields);
354
+ #extern guint16 mdb_add_row_to_pg(MdbTableDef *table, unsigned char *row_buffer, int new_row_size);
355
+ #extern int mdb_update_index(MdbTableDef *table, MdbIndex *idx, unsigned int num_fields, MdbField *fields, guint32 pgnum, guint16 rownum);
356
+ #extern int mdb_insert_row(MdbTableDef *table, int num_fields, MdbField *fields);
357
+ #extern int mdb_pack_row(MdbTableDef *table, unsigned char *row_buffer, unsigned int num_fields, MdbField *fields);
358
+ #extern int mdb_replace_row(MdbTableDef *table, int row, void *new_row, int new_row_size);
359
+ #extern int mdb_pg_get_freespace(MdbHandle *mdb);
360
+ #extern int mdb_update_row(MdbTableDef *table);
361
+ #extern void *mdb_new_data_pg(MdbCatalogEntry *entry);
362
+
363
+ #/* map.c */
364
+ #extern guint32 mdb_map_find_next_freepage(MdbTableDef *table, int row_size);
365
+ #extern gint32 mdb_map_find_next(MdbHandle *mdb, unsigned char *map, unsigned int map_sz, guint32 start_pg);
366
+
367
+ #/* props.c */
368
+ #extern void mdb_free_props(MdbProperties *props);
369
+ #extern void mdb_dump_props(MdbProperties *props, FILE *outfile, int show_name);
370
+ #extern GArray* mdb_kkd_to_props(MdbHandle *mdb, void *kkd, size_t len);
371
+
372
+ #/* worktable.c */
373
+ #extern MdbTableDef *mdb_create_temp_table(MdbHandle *mdb, char *name);
374
+ #extern void mdb_temp_table_add_col(MdbTableDef *table, MdbColumn *col);
375
+ #extern void mdb_fill_temp_col(MdbColumn *tcol, char *col_name, int col_size, int col_type, int is_fixed);
376
+ #extern void mdb_fill_temp_field(MdbField *field, void *value, int siz, int is_fixed, int is_null, int start, int column);
377
+ #extern void mdb_temp_columns_end(MdbTableDef *table);
378
+
379
+ ## options.c
380
+ #extern int mdb_get_option(unsigned long optnum);
381
+ #extern void mdb_debug(int klass, char *fmt, ...);
382
+
383
+ # iconv
384
+ #extern int mdb_unicode2ascii(MdbHandle *mdb, char *src, size_t slen, char *dest, size_t dlen);
385
+ #extern int mdb_ascii2unicode(MdbHandle *mdb, char *src, size_t slen, char *dest, size_t dlen);
386
+ #extern void mdb_iconv_init(MdbHandle *mdb);
387
+ #extern void mdb_iconv_close(MdbHandle *mdb);
388
+ #extern const char* mdb_target_charset(MdbHandle *mdb);
389
+ end
data/lib/mdbsql.rb ADDED
@@ -0,0 +1,83 @@
1
+ require 'ffi'
2
+ require "#{File.dirname(__FILE__)}/mdb"
3
+
4
+ module MDB
5
+ module SQL
6
+ extend FFI::Library
7
+ ffi_lib "mdbsql"
8
+
9
+ class MdbSQL < FFI::Struct
10
+ layout :mdb, :pointer,
11
+ :all_columns, :int,
12
+ :num_columns, :uint,
13
+ :columns, :pointer, # PtrArray,
14
+ :num_tables, :uint,
15
+ :tables, :pointer, # PtrArray,
16
+ :cur_table, :pointer, # MdbTableDef
17
+ :sarg_tree, :pointer, # MdbSargNode
18
+ :sarg_stack, :pointer, # GList
19
+ :bound_values, [:pointer, 256],
20
+ :kludge_ttable_pg, :pointer,
21
+ :max_rows, :int,
22
+ :error_msg, [:char, 256]
23
+ end
24
+
25
+ class MdbSQLColumn < FFI::Struct
26
+ layout :name, :string,
27
+ :disp_size, :int,
28
+ :bind_addr, :pointer, # void*
29
+ :bind_type, :int,
30
+ :bind_len, :pointer, # int
31
+ :bind_max, :int
32
+ end
33
+
34
+ #typedef struct {
35
+ # char *name;
36
+ # char *alias;
37
+ #} MdbSQLTable;
38
+
39
+ #typedef struct {
40
+ # char *col_name;
41
+ # MdbSarg *sarg;
42
+ #} MdbSQLSarg;
43
+
44
+ #extern char *g_input_ptr;
45
+
46
+ ##undef YY_INPUT
47
+ ##define YY_INPUT(b, r, ms) (r = mdb_sql_yyinput(b, ms));
48
+
49
+ def self.mdb_sql_has_error?(sql)
50
+ sql[:error_msg][0] > 0
51
+ end
52
+
53
+ ##define mdb_sql_last_error(sql) ((sql)->error_msg)
54
+
55
+ #void mdb_sql_error(MdbSQL* sql, char *fmt, ...);
56
+ #extern MdbSQL *_mdb_sql(MdbSQL *sql);
57
+ attach_function :mdb_sql_init, [], MdbSQL.by_ref
58
+ #extern MdbSQLSarg *mdb_sql_alloc_sarg();
59
+ attach_function :mdb_sql_open, [MdbSQL, :string], MdbHandle.by_ref
60
+ #extern int mdb_sql_add_sarg(MdbSQL *sql, char *col_name, int op, char *constant);
61
+ #extern void mdb_sql_all_columns(MdbSQL *sql);
62
+ #extern int mdb_sql_add_column(MdbSQL *sql, char *column_name);
63
+ #extern int mdb_sql_add_table(MdbSQL *sql, char *table_name);
64
+ attach_function :mdb_sql_dump, [MdbSQL], :void
65
+ attach_function :mdb_sql_exit, [MdbSQL], :void
66
+ attach_function :mdb_sql_reset, [MdbSQL], :void
67
+ #extern void mdb_sql_listtables(MdbSQL *sql);
68
+ #extern void mdb_sql_select(MdbSQL *sql);
69
+ attach_function :mdb_sql_dump_node, [MDB::MdbSargNode, :int], :void
70
+ #extern void mdb_sql_close(MdbSQL *sql);
71
+ #extern void mdb_sql_add_or(MdbSQL *sql);
72
+ #extern void mdb_sql_add_and(MdbSQL *sql);
73
+ #extern void mdb_sql_add_not(MdbSQL *sql);
74
+ #extern void mdb_sql_describe_table(MdbSQL *sql);
75
+ attach_function :mdb_sql_run_query, [MdbSQL, :string], MdbSQL.by_ref
76
+ #extern void mdb_sql_set_maxrow(MdbSQL *sql, int maxrow);
77
+ #extern int mdb_sql_eval_expr(MdbSQL *sql, char *const1, int op, char *const2);
78
+ attach_function :mdb_sql_bind_all, [MdbSQL], :void
79
+ #extern int mdb_sql_fetch_row(MdbSQL *sql, MdbTableDef *table);
80
+ #extern int mdb_sql_add_temp_col(MdbSQL *sql, MdbTableDef *ttable, int col_num, char *name, int col_type, int col_size, int is_fixed);
81
+ #extern void mdb_sql_bind_column(MdbSQL *sql, int colnum, void *varaddr, int *len_ptr);
82
+ end
83
+ end
metadata ADDED
@@ -0,0 +1,84 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: libmdb
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 0
10
+ version: 0.1.0
11
+ platform: ruby
12
+ authors:
13
+ - Wesley Moxam
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2012-10-09 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: ffi
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ hash: 25
29
+ segments:
30
+ - 1
31
+ - 1
32
+ - 5
33
+ version: 1.1.5
34
+ type: :runtime
35
+ version_requirements: *id001
36
+ description: A low level Ruby wrapper for mdbtools
37
+ email: wesley.moxam@learnhub.com
38
+ executables: []
39
+
40
+ extensions: []
41
+
42
+ extra_rdoc_files: []
43
+
44
+ files:
45
+ - README
46
+ - lib/mdb.rb
47
+ - lib/mdbsql.rb
48
+ homepage: https://github.com/wmoxam/libmdb
49
+ licenses: []
50
+
51
+ post_install_message:
52
+ rdoc_options: []
53
+
54
+ require_paths:
55
+ - lib
56
+ required_ruby_version: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ hash: 57
62
+ segments:
63
+ - 1
64
+ - 8
65
+ - 7
66
+ version: 1.8.7
67
+ required_rubygems_version: !ruby/object:Gem::Requirement
68
+ none: false
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ hash: 3
73
+ segments:
74
+ - 0
75
+ version: "0"
76
+ requirements: []
77
+
78
+ rubyforge_project:
79
+ rubygems_version: 1.8.10
80
+ signing_key:
81
+ specification_version: 3
82
+ summary: MS Access DB raw API
83
+ test_files: []
84
+