The R Project SVN R-packages

Rev

Rev 3435 | Rev 3456 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3435 Rev 3446
1
#include "R.h"
1
#include "R.h"
2
#include "Rdefines.h"
2
#include "Rdefines.h"
3
#include "Rinternals.h"
3
#include "Rinternals.h"
4
#include "sqlite3.h"
4
#include "sqlite3.h"
5
 
5
 
6
#ifndef __SQLITE_DATAFRAME__
6
#ifndef __SQLITE_DATAFRAME__
7
#define __SQLITE_DATAFRAME__
7
#define __SQLITE_DATAFRAME__
8
 
8
 
-
 
9
/* # of sql buffers */
-
 
10
#define NBUFS 4
-
 
11
 
-
 
12
#ifdef __SQLITE_WORKSPACE__
-
 
13
SEXP SDF_RowNamesSymbol;
-
 
14
SEXP SDF_DimSymbol;
-
 
15
SEXP SDF_DimNamesSymbol;
-
 
16
#else 
-
 
17
extern SEXP SDF_RowNamesSymbol;
-
 
18
extern SEXP SDF_DimSymbol;
-
 
19
extern SEXP SDF_DimNamesSymbol;
-
 
20
 
-
 
21
extern sqlite3 *g_workspace;
-
 
22
extern char *g_sql_buf[NBUFS];
-
 
23
extern int g_sql_buf_sz[NBUFS];
-
 
24
#endif
-
 
25
 
9
#define WORKSPACE_COLUMNS 6
26
#define WORKSPACE_COLUMNS 6
10
#define MAX_ATTACHED 30     /* 31 including workspace.db */
27
#define MAX_ATTACHED 30     /* 31 including workspace.db */
11
 
28
 
12
/* utilities for checking characteristics of arg */
29
/* utilities for checking characteristics of arg */
13
int _is_r_sym(char *sym);
30
int _is_r_sym(char *sym);
14
int _file_exists(char *filename);
31
int _file_exists(char *filename);
15
int _sdf_exists2(char *iname);
32
int _sdf_exists2(char *iname);
16
 
33
 
17
/* sdf utilities */
34
/* sdf utilities */
18
int USE_SDF1(const char *iname, int exists, int protect);  /* call this before doing anything on an SDF */
35
int USE_SDF1(const char *iname, int exists, int protect);  /* call this before doing anything on an SDF */
19
int UNUSE_SDF2(const char *iname); /* somewhat like UNPROTECT */
36
int UNUSE_SDF2(const char *iname); /* somewhat like UNPROTECT */
20
SEXP _create_sdf_sexp(const char *iname);  /* create a SEXP for an SDF */
37
SEXP _create_sdf_sexp(const char *iname);  /* create a SEXP for an SDF */
21
int _add_sdf1(char *filename, char *internal_name); /* add SDF to workspace */
38
int _add_sdf1(char *filename, char *internal_name); /* add SDF to workspace */
22
void _delete_sdf2(const char *iname); /* remove SDF from workspace */
39
void _delete_sdf2(const char *iname); /* remove SDF from workspace */
23
int _get_factor_levels1(const char *iname, const char *varname, SEXP var);
40
int _get_factor_levels1(const char *iname, const char *varname, SEXP var);
24
int _get_row_count2(const char *table, int quote);
41
int _get_row_count2(const char *table, int quote);
25
SEXP _get_rownames(const char *sdf_iname);
42
SEXP _get_rownames(const char *sdf_iname);
26
char *_get_full_pathname2(char *relpath); /* get full path given relpath, used in workspace mgmt */
43
char *_get_full_pathname2(char *relpath); /* get full path given relpath, used in workspace mgmt */
27
int _is_factor2(const char *iname, const char *factor_type, const char *colname);
44
int _is_factor2(const char *iname, const char *factor_type, const char *colname);
28
SEXP _get_rownames2(const char *sdf_iname);
45
SEXP _get_rownames2(const char *sdf_iname);
29
 
46
 
30
/* utilities for creating SDF's */
47
/* utilities for creating SDF's */
31
char *_create_sdf_skeleton1(SEXP name, int *o_namelen, int protect);
48
char *_create_sdf_skeleton1(SEXP name, int *o_namelen, int protect);
32
int _copy_factor_levels2(const char *factor_type, const char *iname_src,
49
int _copy_factor_levels2(const char *factor_type, const char *iname_src,
33
        const char *colname_src, const char *iname_dst, const char *colname_dst);
50
        const char *colname_src, const char *iname_dst, const char *colname_dst);
34
int _create_factor_table2(const char *iname, const char *factor_type, 
51
int _create_factor_table2(const char *iname, const char *factor_type, 
35
        const char *colname);
52
        const char *colname);
36
char *_create_svector1(SEXP name, const char *type, int * _namelen, int protect);
53
char *_create_svector1(SEXP name, const char *type, int * _namelen, int protect);
37
 
54
 
38
/* R utilities */
55
/* R utilities */
39
SEXP _getListElement(SEXP list, char *varname);
56
SEXP _getListElement(SEXP list, char *varname);
40
SEXP _shrink_vector(SEXP vec, int len); /* shrink vector size */
57
SEXP _shrink_vector(SEXP vec, int len); /* shrink vector size */
41
 
58
 
42
/* sqlite utilities */
59
/* sqlite utilities */
43
int _empty_callback(void *data, int ncols, char **row, char **cols);
60
int _empty_callback(void *data, int ncols, char **row, char **cols);
44
int _sqlite_error_check(int res, const char *file, int line);
61
int _sqlite_error_check(int res, const char *file, int line);
45
const char *_get_column_type(const char *class, int type); /* get sqlite type corresponding to R class & type */
62
const char *_get_column_type(const char *class, int type); /* get sqlite type corresponding to R class & type */
46
sqlite3* _is_sqlitedb(char *filename);
63
sqlite3* _is_sqlitedb(char *filename);
47
 
64
 
48
/* global buffer (g_sql_buf) utilities */
65
/* global buffer (g_sql_buf) utilities */
49
int _expand_buf(int i, int size);  /* expand ith buf if size > buf[i].size */
66
int _expand_buf(int i, int size);  /* expand ith buf if size > buf[i].size */
50
 
67
 
51
 
68
 
52
/* workspace utilities */
69
/* workspace utilities */
53
int _prepare_attach2();  /* prepare workspace before attaching a sqlite db */
70
int _prepare_attach2();  /* prepare workspace before attaching a sqlite db */
54
 
71
 
55
/* misc utilities */
72
/* misc utilities */
56
char *_r2iname(char *internal_name, char *filename);
73
char *_r2iname(char *internal_name, char *filename);
57
char *_fixname(char *rname);
74
char *_fixname(char *rname);
58
char *_str_tolower(char *out, const char *ref);
75
char *_str_tolower(char *out, const char *ref);
59
 
76
 
60
/* register functions to sqlite */
77
/* register functions to sqlite */
61
void __register_vector_math();
78
void __register_vector_math();
62
 
79
 
63
#define _sqlite_exec(sql) sqlite3_exec(g_workspace, sql, _empty_callback, NULL, NULL)
80
#define _sqlite_exec(sql) sqlite3_exec(g_workspace, sql, _empty_callback, NULL, NULL)
64
#define _sqlite_error(res) _sqlite_error_check((res), __FILE__, __LINE__)
81
#define _sqlite_error(res) _sqlite_error_check((res), __FILE__, __LINE__)
65
 
82
 
66
#ifdef __SQLITE_DEBUG__
83
#ifdef __SQLITE_DEBUG__
67
#define _sqlite_begin  { _sqlite_error(_sqlite_exec("begin")); Rprintf("begin at "  __FILE__  " line %d\n",  __LINE__); }
84
#define _sqlite_begin  { _sqlite_error(_sqlite_exec("begin")); Rprintf("begin at "  __FILE__  " line %d\n",  __LINE__); }
68
#define _sqlite_commit  { _sqlite_error(_sqlite_exec("commit")); Rprintf("commit at "  __FILE__  " line %d\n",  __LINE__); }
85
#define _sqlite_commit  { _sqlite_error(_sqlite_exec("commit")); Rprintf("commit at "  __FILE__  " line %d\n",  __LINE__); }
69
#else
86
#else
70
#define _sqlite_begin  _sqlite_error(_sqlite_exec("begin")) 
87
#define _sqlite_begin  _sqlite_error(_sqlite_exec("begin")) 
71
#define _sqlite_commit _sqlite_error(_sqlite_exec("commit"))
88
#define _sqlite_commit _sqlite_error(_sqlite_exec("commit"))
72
#endif
89
#endif
73
 
90
 
74
#ifndef SET_ROWNAMES
91
#ifndef SET_ROWNAMES
75
#define SET_ROWNAMES(x,n) setAttrib(x, R_RowNamesSymbol, n)
92
#define SET_ROWNAMES(x,n) setAttrib(x, SDF_RowNamesSymbol, n)
76
#endif
93
#endif
77
 
94
 
78
/* override R's, which does a GetRowNames which is different I believe */
95
/* override R's, which does a GetRowNames which is different I believe */
79
#undef GET_ROWNAMES
96
#undef GET_ROWNAMES
80
#define GET_ROWNAMES(x) getAttrib(x, R_RowNamesSymbol)
97
#define GET_ROWNAMES(x) getAttrib(x, R_RowNamesSymbol)
81
 
98
 
82
/* R object accessors shortcuts */
99
/* R object accessors shortcuts */
83
#define CHAR_ELT(str, i) CHAR(STRING_ELT(str,i))
100
#define CHAR_ELT(str, i) CHAR(STRING_ELT(str,i))
84
 
101
 
85
/* SDF object accessors shortcuts */
102
/* SDF object accessors shortcuts */
86
#define SDF_INAME(sdf) CHAR(STRING_ELT(_getListElement(sdf, "iname"),0))
103
#define SDF_INAME(sdf) CHAR(STRING_ELT(_getListElement(sdf, "iname"),0))
87
#define SVEC_VARNAME(sdf) CHAR(STRING_ELT(_getListElement(sdf, "varname"),0))
104
#define SVEC_VARNAME(sdf) CHAR(STRING_ELT(_getListElement(sdf, "varname"),0))
88
 
105
 
89
/* # of sql buffers */
-
 
90
#define NBUFS 4
-
 
91
 
-
 
92
/* possible var types when stored in sqlite as integer */
106
/* possible var types when stored in sqlite as integer */
93
#define VAR_INTEGER 0
107
#define VAR_INTEGER 0
94
#define VAR_FACTOR  1
108
#define VAR_FACTOR  1
95
#define VAR_ORDERED 2
109
#define VAR_ORDERED 2
96
 
110
 
97
/* detail constants (see _get_sdf_detail2 in sqlite_workspace.c) */
111
/* detail constants (see _get_sdf_detail2 in sqlite_workspace.c) */
98
#define SDF_DETAIL_EXISTS 0
112
#define SDF_DETAIL_EXISTS 0
99
#define SDF_DETAIL_FULLFILENAME 1
113
#define SDF_DETAIL_FULLFILENAME 1
100
 
114
 
101
/* R SXP type constants */
115
/* R SXP type constants */
102
#define FACTORSXP 11
116
#define FACTORSXP 11
103
#define ORDEREDSXP 12
117
#define ORDEREDSXP 12
104
 
118
 
105
#ifndef __SQLITE_WORKSPACE__
-
 
106
extern sqlite3 *g_workspace;
-
 
107
extern char *g_sql_buf[NBUFS];
-
 
108
extern int g_sql_buf_sz[NBUFS];
-
 
109
#endif
-
 
110
 
119
 
111
 
120
 
112
/* top level functions */
121
/* top level functions */
113
/* sqlite_workspace.c */
122
/* sqlite_workspace.c */
114
SEXP sdf_init_workspace();
123
SEXP sdf_init_workspace();
115
SEXP sdf_finalize_workspace();
124
SEXP sdf_finalize_workspace();
116
SEXP sdf_list_sdfs(SEXP pattern);
125
SEXP sdf_list_sdfs(SEXP pattern);
117
SEXP sdf_get_sdf(SEXP name);
126
SEXP sdf_get_sdf(SEXP name);
118
SEXP sdf_attach_sdf(SEXP filename, SEXP internal_name);
127
SEXP sdf_attach_sdf(SEXP filename, SEXP internal_name);
119
SEXP sdf_detach_sdf(SEXP internal_name);
128
SEXP sdf_detach_sdf(SEXP internal_name);
120
SEXP sdf_rename_sdf(SEXP sdf, SEXP name);
129
SEXP sdf_rename_sdf(SEXP sdf, SEXP name);
121
 
130
 
122
/* sqlite_dataframe.c */
131
/* sqlite_dataframe.c */
123
SEXP sdf_create_sdf(SEXP df, SEXP name);
132
SEXP sdf_create_sdf(SEXP df, SEXP name);
124
SEXP sdf_get_names(SEXP sdf);
133
SEXP sdf_get_names(SEXP sdf);
125
SEXP sdf_get_length(SEXP sdf);
134
SEXP sdf_get_length(SEXP sdf);
126
SEXP sdf_get_row_count(SEXP sdf);
135
SEXP sdf_get_row_count(SEXP sdf);
127
SEXP sdf_import_table(SEXP _filename, SEXP _name, SEXP _sep, SEXP _quote, 
136
SEXP sdf_import_table(SEXP _filename, SEXP _name, SEXP _sep, SEXP _quote, 
128
        SEXP _rownames, SEXP _colnames);
137
        SEXP _rownames, SEXP _colnames);
129
SEXP sdf_get_index(SEXP sdf, SEXP row, SEXP col);
138
SEXP sdf_get_index(SEXP sdf, SEXP row, SEXP col);
130
SEXP sdf_rbind(SEXP sdf, SEXP data);
139
SEXP sdf_rbind(SEXP sdf, SEXP data);
131
SEXP sdf_get_iname(SEXP sdf);
140
SEXP sdf_get_iname(SEXP sdf);
132
 
141
 
133
/* sqlite_vector.c */
142
/* sqlite_vector.c */
134
SEXP sdf_get_variable(SEXP sdf, SEXP name);
143
SEXP sdf_get_variable(SEXP sdf, SEXP name);
135
SEXP sdf_get_variable_length(SEXP svec);
144
SEXP sdf_get_variable_length(SEXP svec);
136
SEXP sdf_get_variable_index(SEXP svec, SEXP idx);
145
SEXP sdf_get_variable_index(SEXP svec, SEXP idx);
137
/* SEXP sdf_set_variable_index(SEXP svec, SEXP idx, SEXP value); */
146
/* SEXP sdf_set_variable_index(SEXP svec, SEXP idx, SEXP value); */
138
SEXP sdf_variable_summary(SEXP svec, SEXP maxsum);
147
SEXP sdf_variable_summary(SEXP svec, SEXP maxsum);
139
SEXP sdf_do_variable_math(SEXP func, SEXP vector, SEXP other_args);
148
SEXP sdf_do_variable_math(SEXP func, SEXP vector, SEXP other_args);
140
SEXP sdf_do_variable_op(SEXP func, SEXP vector, SEXP op2, SEXP arg_reversed);
149
SEXP sdf_do_variable_op(SEXP func, SEXP vector, SEXP op2, SEXP arg_reversed);
141
SEXP sdf_do_variable_summary(SEXP func, SEXP vector, SEXP na_rm);
150
SEXP sdf_do_variable_summary(SEXP func, SEXP vector, SEXP na_rm);
142
SEXP sdf_sort_variable(SEXP svec, SEXP decreasing);
151
SEXP sdf_sort_variable(SEXP svec, SEXP decreasing);
143
 
152
 
144
/* sqlite_external.c */
153
/* sqlite_external.c */
145
SEXP sdf_import_sqlite_table(SEXP _dbfilename, SEXP _tblname, SEXP _sdfiname);
154
SEXP sdf_import_sqlite_table(SEXP _dbfilename, SEXP _tblname, SEXP _sdfiname);
146
 
155
 
147
/* sqlite_matrix.c */
156
/* sqlite_matrix.c */
148
SEXP sdf_as_matrix(SEXP sdf, SEXP name);
157
SEXP sdf_as_matrix(SEXP sdf, SEXP name);
149
#endif
158
#endif