The R Project SVN R-packages

Rev

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

Rev 3358 Rev 3397
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
#define WORKSPACE_COLUMNS 5
9
#define WORKSPACE_COLUMNS 5
10
#ifndef WIN32
10
#ifndef WIN32
11
#define MAX_ATTACHED 30     /* 31 including workspace.db */
11
#define MAX_ATTACHED 30     /* 31 including workspace.db */
12
#else
12
#else
13
#define MAX_ATTACHED 10     /* set to 10 until I have recompiled it to 30 */
13
#define MAX_ATTACHED 10     /* set to 10 until I have recompiled it to 30 */
14
#endif
14
#endif
15
 
15
 
16
/* utilities for checking characteristics of arg */
16
/* utilities for checking characteristics of arg */
17
int _is_r_sym(char *sym);
17
int _is_r_sym(char *sym);
18
int _file_exists(char *filename);
18
int _file_exists(char *filename);
19
int _sdf_exists2(char *iname);
19
int _sdf_exists2(char *iname);
20
 
20
 
21
/* sdf utilities */
21
/* sdf utilities */
22
int USE_SDF1(const char *iname, int exists);  /* call this before doing anything on an SDF */
22
int USE_SDF1(const char *iname, int exists);  /* call this before doing anything on an SDF */
23
SEXP _create_sdf_sexp(const char *iname);  /* create a SEXP for an SDF */
23
SEXP _create_sdf_sexp(const char *iname);  /* create a SEXP for an SDF */
24
int _add_sdf1(char *filename, char *internal_name); /* add SDF to workspace */
24
int _add_sdf1(char *filename, char *internal_name); /* add SDF to workspace */
25
void _delete_sdf2(const char *iname); /* remove SDF from workspace */
25
void _delete_sdf2(const char *iname); /* remove SDF from workspace */
26
int _get_factor_levels1(const char *iname, const char *varname, SEXP var);
26
int _get_factor_levels1(const char *iname, const char *varname, SEXP var);
27
int _get_row_count2(const char *table, int quote);
27
int _get_row_count2(const char *table, int quote);
28
SEXP _get_rownames(const char *sdf_iname);
28
SEXP _get_rownames(const char *sdf_iname);
29
char *_get_full_pathname2(char *relpath); /* get full path given relpath, used in workspace mgmt */
29
char *_get_full_pathname2(char *relpath); /* get full path given relpath, used in workspace mgmt */
30
 
30
 
31
/* utilities for creating SDF's */
31
/* utilities for creating SDF's */
32
char *_create_sdf_skeleton1(SEXP name, int *o_namelen);
32
char *_create_sdf_skeleton1(SEXP name, int *o_namelen);
33
int _copy_factor_levels2(const char *factor_type, const char *iname_src,
33
int _copy_factor_levels2(const char *factor_type, const char *iname_src,
34
        const char *colname_src, const char *iname_dst, const char *colname_dst);
34
        const char *colname_src, const char *iname_dst, const char *colname_dst);
-
 
35
int _create_factor_table2(const char *iname, const char *factor_type, 
-
 
36
        const char *colname);
35
 
37
 
36
/* R utilities */
38
/* R utilities */
37
SEXP _getListElement(SEXP list, char *varname);
39
SEXP _getListElement(SEXP list, char *varname);
38
SEXP _shrink_vector(SEXP vec, int len); /* shrink vector size */
40
SEXP _shrink_vector(SEXP vec, int len); /* shrink vector size */
39
 
41
 
40
/* sqlite utilities */
42
/* sqlite utilities */
41
int _empty_callback(void *data, int ncols, char **row, char **cols);
43
int _empty_callback(void *data, int ncols, char **row, char **cols);
42
int _sqlite_error(int res);
44
int _sqlite_error_check(int res, const char *file, int line);
43
const char *_get_column_type(const char *class, int type); /* get sqlite type corresponding to R class & type */
45
const char *_get_column_type(const char *class, int type); /* get sqlite type corresponding to R class & type */
-
 
46
sqlite3* _is_sqlitedb(char *filename);
44
 
47
 
45
/* global buffer (g_sql_buf) utilities */
48
/* global buffer (g_sql_buf) utilities */
46
int _expand_buf(int i, int size);  /* expand ith buf if size > buf[i].size */
49
int _expand_buf(int i, int size);  /* expand ith buf if size > buf[i].size */
47
 
50
 
48
 
51
 
49
/* sqlite.vector utilities */
52
/* sqlite.vector utilities */
50
SEXP sdf_get_variable(SEXP sdf, SEXP name);
53
SEXP sdf_get_variable(SEXP sdf, SEXP name);
51
SEXP sdf_detach_sdf(SEXP internal_name);
54
SEXP sdf_detach_sdf(SEXP internal_name);
52
 
55
 
-
 
56
/* workspace utilities */
-
 
57
int _prepare_attach2();  /* prepare workspace before attaching a sqlite db */
-
 
58
 
53
/* misc utilities */
59
/* misc utilities */
54
char *_r2iname(char *internal_name, char *filename);
60
char *_r2iname(char *internal_name, char *filename);
55
char *_fixname(char *rname);
61
char *_fixname(char *rname);
-
 
62
char *_str_tolower(char *out, const char *ref);
56
 
63
 
57
/* register functions to sqlite */
64
/* register functions to sqlite */
58
void __register_vector_math();
65
void __register_vector_math();
59
 
66
 
60
#define _sqlite_exec(sql) sqlite3_exec(g_workspace, sql, _empty_callback, NULL, NULL)
67
#define _sqlite_exec(sql) sqlite3_exec(g_workspace, sql, _empty_callback, NULL, NULL)
-
 
68
#define _sqlite_error(sql) _sqlite_error_check((sql), __FILE__, __LINE__)
61
#ifndef SET_ROWNAMES
69
#ifndef SET_ROWNAMES
62
#define SET_ROWNAMES(x,n) setAttrib(x, R_RowNamesSymbol, n)
70
#define SET_ROWNAMES(x,n) setAttrib(x, R_RowNamesSymbol, n)
63
#endif
71
#endif
64
 
72
 
65
/* override R's, which does a GetRowNames which is different I believe */
73
/* override R's, which does a GetRowNames which is different I believe */
66
#undef GET_ROWNAMES
74
#undef GET_ROWNAMES
67
#define GET_ROWNAMES(x) getAttrib(x, R_RowNamesSymbol)
75
#define GET_ROWNAMES(x) getAttrib(x, R_RowNamesSymbol)
68
 
76
 
69
/* R object accessors shortcuts */
77
/* R object accessors shortcuts */
70
#define CHAR_ELT(str, i) CHAR(STRING_ELT(str,i))
78
#define CHAR_ELT(str, i) CHAR(STRING_ELT(str,i))
71
 
79
 
72
/* SDF object accessors shortcuts */
80
/* SDF object accessors shortcuts */
73
#define SDF_INAME(sdf) CHAR(STRING_ELT(_getListElement(sdf, "iname"),0))
81
#define SDF_INAME(sdf) CHAR(STRING_ELT(_getListElement(sdf, "iname"),0))
74
#define SVEC_VARNAME(sdf) CHAR(STRING_ELT(_getListElement(sdf, "varname"),0))
82
#define SVEC_VARNAME(sdf) CHAR(STRING_ELT(_getListElement(sdf, "varname"),0))
75
 
83
 
76
/* # of sql buffers */
84
/* # of sql buffers */
77
#define NBUFS 4
85
#define NBUFS 4
78
 
86
 
79
/* possible var types when stored in sqlite as integer */
87
/* possible var types when stored in sqlite as integer */
80
#define VAR_INTEGER 0
88
#define VAR_INTEGER 0
81
#define VAR_FACTOR  1
89
#define VAR_FACTOR  1
82
#define VAR_ORDERED 2
90
#define VAR_ORDERED 2
83
 
91
 
84
/* detail constants (see _get_sdf_detail2 in sqlite_workspace.c) */
92
/* detail constants (see _get_sdf_detail2 in sqlite_workspace.c) */
85
#define SDF_DETAIL_EXISTS 0
93
#define SDF_DETAIL_EXISTS 0
86
#define SDF_DETAIL_FULLFILENAME 1
94
#define SDF_DETAIL_FULLFILENAME 1
87
 
95
 
88
/* R SXP type constants */
96
/* R SXP type constants */
89
#define FACTORSXP 11
97
#define FACTORSXP 11
90
#define ORDEREDSXP 12
98
#define ORDEREDSXP 12
91
 
99
 
92
#ifndef __SQLITE_WORKSPACE__
100
#ifndef __SQLITE_WORKSPACE__
93
extern sqlite3 *g_workspace;
101
extern sqlite3 *g_workspace;
94
extern char *g_sql_buf[NBUFS];
102
extern char *g_sql_buf[NBUFS];
95
extern int g_sql_buf_sz[NBUFS];
103
extern int g_sql_buf_sz[NBUFS];
96
#endif
104
#endif
97
 
105
 
98
#endif
106
#endif