The R Project SVN R-packages

Rev

Rev 3358 | Rev 3446 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3358 Rev 3397
Line 253... Line 253...
253
    loaded = sqlite3_column_int(stmt, 0);
253
    loaded = sqlite3_column_int(stmt, 0);
254
    strcpy(g_sql_buf[1], (char*)sqlite3_column_text(stmt, 1)); /* ref filename */
254
    strcpy(g_sql_buf[1], (char*)sqlite3_column_text(stmt, 1)); /* ref filename */
255
    sqlite3_finalize(stmt);
255
    sqlite3_finalize(stmt);
256
 
256
 
257
    if (!loaded) {
257
    if (!loaded) {
258
        int nloaded;
-
 
259
        char *fname = g_sql_buf[1];
258
        char *fname = g_sql_buf[1];
260
 
259
 
261
        /* test first if we will be loading valid sdf */
260
        /* test first if we will be loading valid sdf */
262
        if (exists && !_file_exists(fname)) {
261
        if (exists && !_file_exists(fname)) {
263
            Rprintf("Error: SDF %s does not exist.\n", iname);
262
            Rprintf("Error: SDF %s does not exist.\n", iname);
Line 269... Line 268...
269
            Rprintf("Error: %s is not a valid SDF.\n", fname);
268
            Rprintf("Error: %s is not a valid SDF.\n", fname);
270
            _delete_sdf2(iname);
269
            _delete_sdf2(iname);
271
            return 0;
270
            return 0;
272
        }
271
        }
273
 
272
 
274
        sqlite3_prepare(g_workspace, "select count(*) from workspace where loaded=1",
-
 
275
                -1, &stmt, NULL);
-
 
276
        sqlite3_step(stmt);
-
 
277
        nloaded = sqlite3_column_int(stmt, 0);
-
 
278
        sqlite3_finalize(stmt);
-
 
279
 
-
 
280
        /* test if we have to detach somebody */
-
 
281
        if (nloaded == MAX_ATTACHED) {
273
        /* unload sdf's if we run to the MAX_ATTACHED limit */
282
            /* have to evict */
-
 
283
            sqlite3_prepare(g_workspace, "select internal_name from workspace "
-
 
284
                    "where loaded=1 order by uses", -1, &stmt, NULL);
-
 
285
            sqlite3_step(stmt);
-
 
286
            char *iname2;
274
        _prepare_attach2();
287
            iname2 = (char *)sqlite3_column_text(stmt, 0);
-
 
288
            sprintf(g_sql_buf[2], "detach [%s]", iname2);
-
 
289
            _sqlite_exec(g_sql_buf[2]);
-
 
290
            sprintf(g_sql_buf[2], "update workspace set loaded=0 where internal_name='%s'", iname);
-
 
291
            _sqlite_exec(g_sql_buf[2]);
-
 
292
            sqlite3_finalize(stmt);
-
 
293
        }
-
 
294
 
275
 
295
        /* set loaded to true */
276
        /* set loaded to true */
296
        sprintf(g_sql_buf[2], "update workspace set loaded=1 where internal_name='%s'", iname);
277
        sprintf(g_sql_buf[2], "update workspace set loaded=1 where internal_name='%s'", iname);
297
        res = _sqlite_exec(g_sql_buf[2]);
278
        res = _sqlite_exec(g_sql_buf[2]);
298
        _sqlite_error(res);
279
        _sqlite_error(res);