libmdb 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
+