00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include <unistd.h>
00026 #include <stdlib.h>
00027 #include <pthread.h>
00028 #include <assert.h>
00029 #include <errno.h>
00030
00031 #include "base_p.h"
00032 #include "eyedb/internals/ObjectHeader.h"
00033 #include "eyedb/Exception.h"
00034 #include "eyedb/TransactionParams.h"
00035 #include "api_lib.h"
00036
00037 #include "kernel.h"
00038 #include "misc.h"
00039 #include "SchemaInfo.h"
00040 #include "Argument_code.h"
00041 #include "code.h"
00042 #include "eyedb/internals/kern_const.h"
00043
00044 #define IDB_MAXARGS 16
00045
00046 namespace eyedbsm {
00047 extern unsigned int import_xid;
00048 }
00049
00050 namespace eyedb {
00051
00052 extern void setBackendInterrupt(Bool);
00053
00054 #define status_copy(D, S) \
00055 { \
00056 (D).err = (S).err; \
00057 if ((S).err) strcpy((D).err_msg, (S).err_msg); \
00058 }
00059
00060 #define start_rpc()
00061
00062 static RPCStatusRec status_r;
00063
00064 #define SERVER_CRASH_MSG \
00065 "EyeDB server has probably crashed. " \
00066 "Contact your system administrator.\n"
00067
00068 #undef SERVER_CRASH_MSG
00069
00070 #define SERVER_CRASH_MSG \
00071 "the EyeDB server has probably crashed or timed out."
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082 #define RPC_RPCMAKE(CH, RPC, UA) \
00083 { \
00084 int r; \
00085 r = rpc_rpcMake(CH, 0, RPC, UA); \
00086 \
00087 if (r) \
00088 { \
00089 if (errno) perror("server"); \
00090 return rpcStatusMake(IDB_SERVER_FAILURE, SERVER_CRASH_MSG); \
00091 } \
00092 }
00093
00094 #define STATUS_RETURN(S) \
00095 return (((S).err == IDB_SUCCESS) ? RPCSuccess : &(S))
00096
00097 #define RDBHID_GET(DBH) \
00098 ((DBH)->ldbctx.local ? (DBH)->ldbctx.rdbhid : (DBH)->u.rdbhid)
00099
00100 #define CHECK_DBH(DBH, OP) \
00101 if (!(DBH)) return rpcStatusMake(IDB_ERROR, "operation " OP ": database must be opened")
00102
00103 #define DBH_IS_LOCAL(DBH) ((DBH)->ldbctx.local)
00104
00105 const int CONN_COUNT = 3;
00106
00107 RPCStatus
00108 connOpen(const char *hostname, const char *portname,
00109 ConnHandle **pch, int flags, std::string &errmsg)
00110 {
00111 *pch = rpc_new(ConnHandle);
00112
00113 if (!rpc_connOpen(getRpcClient(), hostname, portname,
00114 &((*pch)->ch), RPC_PROTOCOL_MAGIC, CONN_COUNT, 0,
00115 errmsg))
00116 return RPCSuccess;
00117 else {
00118 free(*pch);
00119 *pch = 0;
00120 return rpcStatusMake(IDB_CONNECTION_FAILURE,
00121 "portname '%s'", portname);
00122 }
00123 }
00124
00125 RPCStatus
00126 connClose(ConnHandle *ch)
00127 {
00128 if (ch->ch && !rpc_connClose(ch->ch))
00129 {
00130 free(ch);
00131 return RPCSuccess;
00132 }
00133 else
00134 return rpcStatusMake(IDB_CONNECTION_FAILURE, "cannot close connection");
00135 }
00136
00137
00138 RPCStatus
00139 dbOpen(ConnHandle *ch, const char *dbmdb,
00140 const char *userauth, const char *passwdauth,
00141 const char *dbname, int dbid, int flags, int oh_maph,
00142 unsigned int oh_mapwide, int *puid, void *db,
00143 char **rname, int *rdbid, unsigned int *pversion,
00144 DbHandle **dbh)
00145 {
00146 ClientArg ua[IDB_MAXARGS], *pua = ua;
00147
00148 pua++->a_string = (char *)dbmdb;
00149 pua++->a_string = (char *)userauth;
00150 pua++->a_string = (char *)passwdauth;
00151 pua++->a_string = (char *)dbname;
00152 pua++->a_int = dbid;
00153
00154 pua++->a_int = flags;
00155 pua++->a_int = oh_maph;
00156 pua++->a_int = oh_mapwide;
00157
00158 if (flags & _DBOpenLocal)
00159 {
00160 RPC_RPCMAKE(ch->ch, DBOPENLOCAL_RPC, ua);
00161
00162 status_copy(status_r, ua[14].a_status);
00163
00164 if (status_r.err == IDB_SUCCESS)
00165 {
00166 DbHandle *tdbh;
00167 RPCStatus status;
00168 rpcDB_LocalDBContext *ldbctx = &ua[12].a_ldbctx;
00169
00170
00171 eyedbsm::import_xid = ldbctx->xid;
00172
00173
00174
00175 status = IDB_dbOpen(ch, dbmdb, userauth, passwdauth, dbname, dbid,
00176 flags & ~_DBOpenLocal, oh_maph,
00177 oh_mapwide, 0, puid, db, rname,
00178 rdbid, pversion, &tdbh);
00179
00180 if (status == RPCSuccess)
00181 {
00182 *dbh = rpc_new(DbHandle);
00183 (*dbh)->ch = (ConnHandle *)ch;
00184 #ifndef LOCKMTX
00185 if ((ldbctx->semid[0] = sem_openSX(ldbctx->semkey[0]))<0 ||
00186 (ldbctx->semid[1] = sem_openSX(ldbctx->semkey[1]))<0)
00187 return rpcStatusMake(IDB_ERROR, "");
00188 #endif
00189
00190 (*dbh)->ldbctx = *ldbctx;
00191 (*dbh)->u.dbh = tdbh;
00192 (*dbh)->flags = flags & ~_DBOpenLocal;
00193 (*dbh)->sch_oid = ua[13].a_oid;
00194 }
00195 return status;
00196 }
00197 STATUS_RETURN(status_r);
00198 }
00199 else
00200 {
00201 RPC_RPCMAKE(ch->ch, DBOPEN_RPC, ua);
00202
00203 status_copy(status_r, ua[14].a_status);
00204
00205 if (status_r.err == IDB_SUCCESS)
00206 {
00207 *dbh = rpc_new(DbHandle);
00208 (*dbh)->u.rdbhid = ua[11].a_int;
00209 (*dbh)->ch = (ConnHandle *)ch;
00210 (*dbh)->flags = flags & ~_DBOpenLocal;
00211 (*dbh)->sch_oid = ua[13].a_oid;
00212 *puid = ua[8].a_int;
00213 *rname = ua[9].a_string;
00214 *rdbid = ua[10].a_int;
00215 *pversion = ua[12].a_int;
00216 }
00217 STATUS_RETURN(status_r);
00218 }
00219 }
00220
00221 RPCStatus
00222 dbClose(const DbHandle *dbh)
00223 {
00224 ClientArg ua[IDB_MAXARGS], *pua = ua;
00225
00226 CHECK_DBH(dbh, "dbClose");
00227
00228 if (DBH_IS_LOCAL(dbh))
00229 {
00230 pua++->a_int = dbh->ldbctx.rdbhid;
00231 IDB_dbCloseLocal((DbHandle *)dbh->u.dbh);
00232 }
00233 else
00234 pua++->a_int = dbh->u.rdbhid;
00235
00236 RPC_RPCMAKE(dbh->ch->ch, DBCLOSE_RPC, ua);
00237
00238 status_copy(status_r, ua[1].a_status);
00239
00240 STATUS_RETURN(status_r);
00241 }
00242
00243 RPCStatus
00244 backendInterrupt(ConnHandle *ch, int info)
00245 {
00246 ClientArg ua[IDB_MAXARGS], *pua = ua;
00247 int r;
00248
00249 setBackendInterrupt(True);
00250
00251 pua++->a_int = info;
00252
00253 r = rpc_rpcMake(ch->ch, 1, BACKEND_INTERRUPT_RPC, ua);
00254
00255 status_copy(status_r, ua[1].a_status);
00256
00257 STATUS_RETURN(status_r);
00258 }
00259
00260 RPCStatus
00261 getServerOutOfBandData(ConnHandle *ch, int * type, Data * data,
00262 unsigned int *size)
00263 {
00264 if (!ch)
00265 return IDB_getServerOutOfBandData(0, type, data, size, 0);
00266 else {
00267 ClientArg ua[IDB_MAXARGS], *pua = ua;
00268 int r, offset;
00269
00270 pua++->a_int = *type;
00271 pua->a_data.data = 0;
00272 pua++->a_data.size = 0;
00273
00274 r = rpc_rpcMake(ch->ch, 2, GET_SERVER_OUTOFBAND_DATA_RPC, ua);
00275
00276 *type = ua[0].a_int;
00277
00278 if (!r) {
00279 *data = (unsigned char *)ua[1].a_data.data;
00280 *size = ua[1].a_data.size;
00281 }
00282 else {
00283 *data = 0;
00284 *size = 0;
00285 }
00286
00287 status_copy(status_r, ua[2].a_status);
00288 STATUS_RETURN(status_r);
00289 }
00290 }
00291
00292 RPCStatus
00293 transactionBegin(DbHandle *dbh,
00294 const TransactionParams *params,
00295 TransactionId *tid)
00296 {
00297 CHECK_DBH(dbh, "transactionBegin");
00298
00299 if (DBH_IS_LOCAL(dbh))
00300 {
00301 *tid = 0;
00302 return IDB_transactionBegin((DbHandle *)dbh->u.dbh, params, True);
00303 }
00304 else
00305 {
00306 ClientArg ua[IDB_MAXARGS], *pua = ua;
00307
00308 pua++->a_int = RDBHID_GET(dbh);
00309 pua++->a_int = params->trsmode;
00310 pua++->a_int = params->lockmode;
00311 pua++->a_int = params->recovmode;
00312 pua++->a_int = params->magorder;
00313 pua++->a_int = params->ratioalrt;
00314 pua++->a_int = params->wait_timeout;
00315
00316 RPC_RPCMAKE(dbh->ch->ch, TRANSACTION_BEGIN_RPC, ua);
00317
00318 status_copy(status_r, ua[8].a_status);
00319
00320 *tid = ua[7].a_int;
00321
00322 STATUS_RETURN(status_r);
00323 }
00324 }
00325
00326 RPCStatus
00327 transactionCommit(DbHandle *dbh, TransactionId tid)
00328 {
00329 CHECK_DBH(dbh, "transactionCommit");
00330
00331 if (DBH_IS_LOCAL(dbh))
00332 return IDB_transactionCommit((DbHandle *)dbh->u.dbh, True);
00333 else
00334 {
00335 ClientArg ua[IDB_MAXARGS], *pua = ua;
00336
00337 pua++->a_int = RDBHID_GET(dbh);
00338 pua++->a_int = 0;
00339
00340 RPC_RPCMAKE(dbh->ch->ch, TRANSACTION_COMMIT_RPC, ua);
00341
00342 status_copy(status_r, ua[2].a_status);
00343
00344 STATUS_RETURN(status_r);
00345 }
00346 }
00347
00348 RPCStatus
00349 transactionAbort(DbHandle *dbh, TransactionId tid)
00350 {
00351 CHECK_DBH(dbh, "transactionAbort");
00352
00353 if (DBH_IS_LOCAL(dbh))
00354 return IDB_transactionAbort((DbHandle *)dbh->u.dbh, True);
00355 else
00356 {
00357 ClientArg ua[IDB_MAXARGS], *pua = ua;
00358
00359 pua++->a_int = RDBHID_GET(dbh);
00360 pua++->a_int = 0;
00361
00362 RPC_RPCMAKE(dbh->ch->ch, TRANSACTION_ABORT_RPC, ua);
00363
00364 status_copy(status_r, ua[2].a_status);
00365
00366 STATUS_RETURN(status_r);
00367 }
00368 }
00369
00370 RPCStatus
00371 transactionParamsSet(DbHandle *dbh, const TransactionParams *params)
00372 {
00373 CHECK_DBH(dbh, "transactionParamsSet");
00374
00375 if (DBH_IS_LOCAL(dbh))
00376 return IDB_transactionParamsSet((DbHandle *)dbh->u.dbh, params);
00377 else
00378 {
00379 ClientArg ua[IDB_MAXARGS], *pua = ua;
00380
00381 pua++->a_int = RDBHID_GET(dbh);
00382 pua++->a_int = params->trsmode;
00383 pua++->a_int = params->lockmode;
00384 pua++->a_int = params->recovmode;
00385 pua++->a_int = params->magorder;
00386 pua++->a_int = params->ratioalrt;
00387 pua++->a_int = params->wait_timeout;
00388
00389 RPC_RPCMAKE(dbh->ch->ch, TRANSACTION_PARAMS_SET_RPC, ua);
00390
00391 status_copy(status_r, ua[7].a_status);
00392
00393 STATUS_RETURN(status_r);
00394 }
00395 }
00396
00397 RPCStatus
00398 transactionParamsGet(DbHandle *dbh, TransactionParams *params)
00399 {
00400 CHECK_DBH(dbh, "transactionParamsGet");
00401
00402 if (DBH_IS_LOCAL(dbh))
00403 return IDB_transactionParamsGet((DbHandle *)dbh->u.dbh, params);
00404 else
00405 {
00406 ClientArg ua[IDB_MAXARGS], *pua = ua;
00407
00408 pua++->a_int = RDBHID_GET(dbh);
00409
00410 RPC_RPCMAKE(dbh->ch->ch, TRANSACTION_PARAMS_GET_RPC, ua);
00411
00412 params->trsmode = (TransactionMode)ua[1].a_int;
00413 params->lockmode = (TransactionLockMode)ua[2].a_int;
00414 params->recovmode = (RecoveryMode)ua[3].a_int;
00415 params->magorder = ua[4].a_int;
00416 params->ratioalrt = ua[5].a_int;
00417 params->wait_timeout = ua[6].a_int;
00418
00419 status_copy(status_r, ua[7].a_status);
00420
00421 STATUS_RETURN(status_r);
00422 }
00423 }
00424
00425 extern Data code_dbdescription(const DbCreateDescription *, int *);
00426 extern Data code_oids(const eyedbsm::Oid *, unsigned int, int *);
00427 extern Data code_datafiles(void *datafiles, unsigned int datafile_cnt,
00428 int *);
00429 extern void decode_locarr(Data, void *locarr);
00430 extern void decode_atom_array(rpc_ClientData *, void *, int);
00431 extern void decode_value(void *data, void *value);
00432 extern void decode_datinfo(Data, void *info);
00433 extern void decode_index_stats(Data, void *stats);
00434 extern void decode_index_impl(Data, void *impl);
00435
00436 RPCStatus
00437 dbmCreate(ConnHandle *ch, const char *dbmdb, const char *passwdauth,
00438 const DbCreateDescription *dbdesc)
00439 {
00440 if (!ch || !ch->ch)
00441 return IDB_dbmCreate(ch, dbmdb, passwdauth, dbdesc);
00442 else
00443 {
00444 Data dbdesc_data;
00445 ClientArg ua[IDB_MAXARGS], *pua = ua;
00446
00447 pua++->a_string = (char *)dbmdb;
00448 pua++->a_string = (char *)passwdauth;
00449 dbdesc_data = code_dbdescription(dbdesc, &pua->a_data.size);
00450 pua->a_data.data = dbdesc_data;
00451
00452 RPC_RPCMAKE(ch->ch, DBMCREATE_RPC, ua);
00453
00454 free(dbdesc_data);
00455 status_copy(status_r, ua[3].a_status);
00456
00457 STATUS_RETURN(status_r);
00458 }
00459 }
00460
00461 RPCStatus
00462 dbmUpdate(ConnHandle *ch, const char *dbmdb,
00463 const char *username, const char *passwd)
00464 {
00465 if (!ch || !ch->ch)
00466 return IDB_dbmUpdate(ch, dbmdb, username, passwd);
00467 else
00468 {
00469 ClientArg ua[IDB_MAXARGS], *pua = ua;
00470
00471 pua++->a_string = (char *)dbmdb;
00472 pua++->a_string = (char *)username;
00473 pua++->a_string = (char *)passwd;
00474
00475 RPC_RPCMAKE(ch->ch, DBMUPDATE_RPC, ua);
00476
00477 status_copy(status_r, ua[3].a_status);
00478
00479 STATUS_RETURN(status_r);
00480 }
00481 }
00482
00483 RPCStatus
00484 dbCreate(ConnHandle *ch, const char *dbmdb,
00485 const char *userauth, const char *passwdauth,
00486 const char *dbname, const DbCreateDescription *dbdesc)
00487 {
00488 if (!ch || !ch->ch)
00489 return IDB_dbCreate(ch, dbmdb, userauth, passwdauth, dbname, dbdesc);
00490 else
00491 {
00492 ClientArg ua[IDB_MAXARGS], *pua = ua;
00493 Data dbdesc_data;
00494
00495 pua++->a_string = (char *)dbmdb;
00496 pua++->a_string = (char *)userauth;
00497 pua++->a_string = (char *)passwdauth;
00498 pua++->a_string = (char *)dbname;
00499 dbdesc_data = code_dbdescription(dbdesc, &pua->a_data.size);
00500 pua->a_data.data = dbdesc_data;
00501
00502 RPC_RPCMAKE(ch->ch, DBCREATE_RPC, ua);
00503
00504 free(dbdesc_data);
00505 status_copy(status_r, ua[5].a_status);
00506
00507 STATUS_RETURN(status_r);
00508 }
00509 }
00510
00511 RPCStatus
00512 dbDelete(ConnHandle *ch, const char *dbmdb,
00513 const char *userauth, const char *passwdauth,
00514 const char *dbname)
00515 {
00516 if (!ch || !ch->ch)
00517 return IDB_dbDelete(ch, dbmdb, userauth, passwdauth, dbname);
00518 else
00519 {
00520 ClientArg ua[IDB_MAXARGS], *pua = ua;
00521
00522 pua++->a_string = (char *)dbmdb;
00523 pua++->a_string = (char *)userauth;
00524 pua++->a_string = (char *)passwdauth;
00525 pua++->a_string = (char *)dbname;
00526
00527 RPC_RPCMAKE(ch->ch, DBDELETE_RPC, ua);
00528
00529 status_copy(status_r, ua[4].a_status);
00530
00531 STATUS_RETURN(status_r);
00532 }
00533 }
00534
00535 RPCStatus
00536 dbInfo(ConnHandle *ch, const char *dbmdb,
00537 const char *userauth, const char *passwdauth, const char *dbname,
00538 int *rdbid, DbCreateDescription *pdbdesc)
00539 {
00540 if (!ch || !ch->ch)
00541 return IDB_dbInfo(ch, dbmdb, userauth, passwdauth, dbname,
00542 rdbid, pdbdesc);
00543 else
00544 {
00545 ClientArg ua[IDB_MAXARGS], *pua = ua;
00546
00547 pua++->a_string = (char *)dbmdb;
00548 pua++->a_string = (char *)userauth;
00549 pua++->a_string = (char *)passwdauth;
00550 pua++->a_string = (char *)dbname;
00551 pua++;
00552 pua++->a_data.data = 0;
00553
00554 RPC_RPCMAKE(ch->ch, DBINFO_RPC, ua);
00555
00556 if (rdbid)
00557 *rdbid = ua[4].a_int;
00558 status_copy(status_r, ua[6].a_status);
00559
00560 if (!status_r.err)
00561 decode_dbdescription((unsigned char *)ua[5].a_data.data, 0, pdbdesc);
00562
00563 free(ua[5].a_data.data);
00564 STATUS_RETURN(status_r);
00565 }
00566 }
00567
00568 RPCStatus
00569 dbMove(ConnHandle *ch, const char *dbmdb,
00570 const char *userauth, const char *passwdauth,
00571 const char *dbname, const DbCreateDescription *dbdesc)
00572 {
00573 if (!ch || !ch->ch)
00574 return IDB_dbMove(ch, dbmdb, userauth, passwdauth, dbname, dbdesc);
00575 else
00576 {
00577 ClientArg ua[IDB_MAXARGS], *pua = ua;
00578 Data dbdesc_data;
00579
00580 pua++->a_string = (char *)dbmdb;
00581 pua++->a_string = (char *)userauth;
00582 pua++->a_string = (char *)passwdauth;
00583 pua++->a_string = (char *)dbname;
00584 dbdesc_data = code_dbdescription(dbdesc, &pua->a_data.size);
00585 pua->a_data.data = dbdesc_data;
00586
00587 RPC_RPCMAKE(ch->ch, DBMOVE_RPC, ua);
00588 free(dbdesc_data);
00589
00590 status_copy(status_r, ua[5].a_status);
00591
00592 STATUS_RETURN(status_r);
00593 }
00594 }
00595
00596 RPCStatus
00597 dbCopy(ConnHandle *ch, const char *dbmdb,
00598 const char *userauth, const char *passwdauth, const char *dbname,
00599 const char *newname, Bool newdbid,
00600 const DbCreateDescription *dbdesc)
00601 {
00602 if (!ch || !ch->ch)
00603 return IDB_dbCopy(ch, dbmdb, userauth, passwdauth, dbname,
00604 newname, newdbid, dbdesc);
00605 else
00606 {
00607 ClientArg ua[IDB_MAXARGS], *pua = ua;
00608 Data dbdesc_data;
00609
00610 pua++->a_string = (char *)dbmdb;
00611 pua++->a_string = (char *)userauth;
00612 pua++->a_string = (char *)passwdauth;
00613 pua++->a_string = (char *)dbname;
00614 pua++->a_string = (char *)newname;
00615 pua++->a_int = (int)newdbid;
00616 dbdesc_data = code_dbdescription(dbdesc, &pua->a_data.size);
00617 pua->a_data.data = dbdesc_data;
00618
00619 RPC_RPCMAKE(ch->ch, DBCOPY_RPC, ua);
00620
00621 free(dbdesc_data);
00622
00623 status_copy(status_r, ua[7].a_status);
00624
00625 STATUS_RETURN(status_r);
00626 }
00627 }
00628
00629 RPCStatus
00630 dbRename(ConnHandle *ch, const char *dbmdb,
00631 const char *userauth, const char *passwdauth,
00632 const char *dbname, const char *newname)
00633 {
00634 if (!ch || !ch->ch)
00635 return IDB_dbRename(ch, dbmdb, userauth, passwdauth,
00636 dbname, newname);
00637 else
00638 {
00639 ClientArg ua[IDB_MAXARGS], *pua = ua;
00640
00641 pua++->a_string = (char *)dbmdb;
00642 pua++->a_string = (char *)userauth;
00643 pua++->a_string = (char *)passwdauth;
00644 pua++->a_string = (char *)dbname;
00645 pua++->a_string = (char *)newname;
00646
00647 RPC_RPCMAKE(ch->ch, DBRENAME_RPC, ua);
00648
00649 status_copy(status_r, ua[5].a_status);
00650
00651 STATUS_RETURN(status_r);
00652 }
00653 }
00654
00655 RPCStatus
00656 userAdd(ConnHandle *ch, const char *dbmdb,
00657 const char *userauth, const char *passwdauth,
00658 const char *user, const char *passwd, int user_type)
00659 {
00660 if (!ch || !ch->ch)
00661 return IDB_userAdd(ch, dbmdb, userauth, passwdauth,
00662 user, passwd, user_type);
00663 else
00664 {
00665 ClientArg ua[IDB_MAXARGS], *pua = ua;
00666
00667 pua++->a_string = (char *)dbmdb;
00668 pua++->a_string = (char *)userauth;
00669 pua++->a_string = (char *)passwdauth;
00670 pua++->a_string = (char *)user;
00671 pua++->a_string = (char *)(passwd ? passwd : "");
00672 pua++->a_int = user_type;
00673
00674 RPC_RPCMAKE(ch->ch, USER_ADD_RPC, ua);
00675
00676 status_copy(status_r, ua[6].a_status);
00677
00678 STATUS_RETURN(status_r);
00679 }
00680 }
00681
00682 RPCStatus
00683 userDelete(ConnHandle *ch, const char *dbmdb,
00684 const char *userauth, const char *passwdauth,
00685 const char *user)
00686 {
00687 if (!ch || !ch->ch)
00688 return IDB_userDelete(ch, dbmdb, userauth, passwdauth, user);
00689 else
00690 {
00691 ClientArg ua[IDB_MAXARGS], *pua = ua;
00692
00693 pua++->a_string = (char *)dbmdb;
00694 pua++->a_string = (char *)userauth;
00695 pua++->a_string = (char *)passwdauth;
00696 pua++->a_string = (char *)user;
00697
00698 RPC_RPCMAKE(ch->ch, USER_DELETE_RPC, ua);
00699
00700 status_copy(status_r, ua[4].a_status);
00701
00702 STATUS_RETURN(status_r);
00703 }
00704 }
00705
00706 RPCStatus
00707 userPasswdSet(ConnHandle *ch, const char *dbmdb,
00708 const char *userauth, const char *passwdauth,
00709 const char *user, const char *passwd)
00710 {
00711 if (!ch || !ch->ch)
00712 return IDB_userPasswdSet(ch, dbmdb, userauth, passwdauth,
00713 user, passwd);
00714 else
00715 {
00716 ClientArg ua[IDB_MAXARGS], *pua = ua;
00717
00718 pua++->a_string = (char *)dbmdb;
00719 pua++->a_string = (char *)userauth;
00720 pua++->a_string = (char *)passwdauth;
00721 pua++->a_string = (char *)user;
00722 pua++->a_string = (char *)passwd;
00723
00724 RPC_RPCMAKE(ch->ch, USER_PASSWD_SET_RPC, ua);
00725
00726 status_copy(status_r, ua[5].a_status);
00727
00728 STATUS_RETURN(status_r);
00729 }
00730 }
00731
00732 RPCStatus
00733 passwdSet(ConnHandle *ch, const char *dbmdb,
00734 const char *user, const char *passwd,
00735 const char *newpasswd)
00736 {
00737 if (!ch || !ch->ch)
00738 return IDB_passwdSet(ch, dbmdb, user, passwd, newpasswd);
00739 else
00740 {
00741 ClientArg ua[IDB_MAXARGS], *pua = ua;
00742
00743 start_rpc();
00744
00745 pua++->a_string = (char *)dbmdb;
00746 pua++->a_string = (char *)user;
00747 pua++->a_string = (char *)passwd;
00748 pua++->a_string = (char *)newpasswd;
00749
00750 RPC_RPCMAKE(ch->ch, PASSWD_SET_RPC, ua);
00751
00752 status_copy(status_r, ua[4].a_status);
00753
00754 STATUS_RETURN(status_r);
00755 }
00756 }
00757
00758 RPCStatus
00759 defaultDBAccessSet(ConnHandle *ch, const char *dbmdb,
00760 const char *userauth, const char *passwdauth,
00761 const char *dbname, int mode)
00762 {
00763 if (!ch || !ch->ch)
00764 return IDB_defaultDBAccessSet(ch, dbmdb, userauth, passwdauth,
00765 dbname, mode);
00766 else
00767 {
00768 ClientArg ua[IDB_MAXARGS], *pua = ua;
00769
00770 start_rpc();
00771
00772 pua++->a_string = (char *)dbmdb;
00773 pua++->a_string = (char *)userauth;
00774 pua++->a_string = (char *)passwdauth;
00775 pua++->a_string = (char *)dbname;
00776 pua++->a_int = mode;
00777
00778 RPC_RPCMAKE(ch->ch, DEFAULT_DBACCESS_SET_RPC, ua);
00779
00780 status_copy(status_r, ua[5].a_status);
00781
00782 STATUS_RETURN(status_r);
00783 }
00784 }
00785
00786 RPCStatus
00787 userDBAccessSet(ConnHandle *ch, const char *dbmdb,
00788 const char *userauth, const char *passwdauth,
00789 const char *dbname, const char *user, int mode)
00790 {
00791 if (!ch || !ch->ch)
00792 return IDB_userDBAccessSet(ch, dbmdb, userauth, passwdauth,
00793 dbname, user, mode);
00794 else
00795 {
00796 ClientArg ua[IDB_MAXARGS], *pua = ua;
00797
00798 start_rpc();
00799
00800 pua++->a_string = (char *)dbmdb;
00801 pua++->a_string = (char *)userauth;
00802 pua++->a_string = (char *)passwdauth;
00803 pua++->a_string = (char *)dbname;
00804 pua++->a_string = (char *)user;
00805 pua++->a_int = mode;
00806
00807 RPC_RPCMAKE(ch->ch, USER_DBACCESS_SET_RPC, ua);
00808
00809 status_copy(status_r, ua[6].a_status);
00810
00811 STATUS_RETURN(status_r);
00812 }
00813 }
00814
00815 RPCStatus
00816 userSysAccessSet(ConnHandle *ch, const char *dbmdb,
00817 const char *userauth, const char *passwdauth,
00818 const char *user, int mode)
00819 {
00820 if (!ch || !ch->ch)
00821 return IDB_userSysAccessSet(ch, dbmdb, userauth, passwdauth, user, mode);
00822 else
00823 {
00824 ClientArg ua[IDB_MAXARGS], *pua = ua;
00825
00826 start_rpc();
00827
00828 pua++->a_string = (char *)dbmdb;
00829 pua++->a_string = (char *)userauth;
00830 pua++->a_string = (char *)passwdauth;
00831 pua++->a_string = (char *)user;
00832 pua++->a_int = mode;
00833
00834 RPC_RPCMAKE(ch->ch, USER_SYSACCESS_SET_RPC, ua);
00835
00836 status_copy(status_r, ua[5].a_status);
00837
00838 STATUS_RETURN(status_r);
00839 }
00840 }
00841
00842
00843 RPCStatus
00844 objectCreate(DbHandle *dbh, short dspid, const Data idr, eyedbsm::Oid *oid)
00845 {
00846 start_rpc();
00847
00848 CHECK_DBH(dbh, "objectCreate");
00849
00850 if (DBH_IS_LOCAL(dbh))
00851 {
00852 Data inv_data;
00853 RPCStatus rpc_status = IDB_objectCreate((DbHandle *)dbh->u.dbh, dspid, idr,
00854 oid, 0, &inv_data, 0);
00855 if (!rpc_status)
00856 object_epilogue(dbh->db, oid, inv_data, True);
00857 return rpc_status;
00858 }
00859 else
00860 {
00861 ClientArg ua[IDB_MAXARGS], *pua = ua;
00862 ObjectHeader hdr;
00863 Offset offset = 0;
00864
00865 if (!object_header_decode(idr, &offset, &hdr))
00866 return rpcStatusMake(IDB_INVALID_OBJECT_HEADER,
00867 "objectCreate: invalid object_header");
00868
00869 pua++->a_int = RDBHID_GET(dbh);
00870 pua++->a_int = dspid;
00871 pua->a_data.data = (const Data)idr;
00872 pua++->a_data.size = hdr.size;
00873 pua++->a_oid = *oid;
00874 pua->a_data.data = 0;
00875 pua++->a_data.size = 0;
00876
00877 RPC_RPCMAKE(dbh->ch->ch, OBJECT_CREATE_RPC, ua);
00878
00879 *oid = ua[3].a_oid;
00880
00881 status_copy(status_r, ua[5].a_status);
00882
00883 if (!status_r.err)
00884 object_epilogue(dbh->db, oid, (unsigned char *)ua[4].a_data.data, True);
00885
00886 STATUS_RETURN(status_r);
00887 }
00888 }
00889
00890 RPCStatus
00891 objectDelete(DbHandle *dbh, const eyedbsm::Oid *oid, unsigned int flags)
00892 {
00893 CHECK_DBH(dbh, "objectDelete");
00894
00895 if (DBH_IS_LOCAL(dbh))
00896 {
00897 Data inv_data;
00898 RPCStatus rpc_status = IDB_objectDelete((DbHandle *)dbh->u.dbh, oid,
00899 flags, &inv_data, 0);
00900 if (!rpc_status)
00901 object_epilogue(dbh->db, oid, inv_data, False);
00902 return rpc_status;
00903 }
00904 else
00905 {
00906 ClientArg ua[IDB_MAXARGS], *pua = ua;
00907
00908 start_rpc();
00909
00910 pua++->a_int = RDBHID_GET(dbh);
00911 pua++->a_oid = *oid;
00912 pua++->a_int = flags;
00913 pua->a_data.data = 0;
00914 pua++->a_data.size = 0;
00915
00916 RPC_RPCMAKE(dbh->ch->ch, OBJECT_DELETE_RPC, ua);
00917
00918 status_copy(status_r, ua[4].a_status);
00919
00920 if (!status_r.err)
00921 object_epilogue(dbh->db, oid, (unsigned char *)ua[3].a_data.data, False);
00922
00923 STATUS_RETURN(status_r);
00924 }
00925 }
00926
00927 RPCStatus
00928 objectRead(DbHandle *dbh, Data idr, Data *pidr,
00929 short *pdspid, const eyedbsm::Oid *oid, ObjectHeader *phdr,
00930 LockMode lockmode, void **pcl)
00931 {
00932 CHECK_DBH(dbh, "objectRead");
00933
00934 if (DBH_IS_LOCAL(dbh))
00935 return IDB_objectReadLocal((DbHandle *)dbh->u.dbh, idr, pidr, pdspid, oid, phdr, lockmode, pcl);
00936 else
00937 {
00938 ClientArg ua[IDB_MAXARGS], *pua = ua;
00939 ObjectHeader hdr;
00940 char buf[IDB_OBJ_HEAD_SIZE];
00941
00942 start_rpc();
00943
00944 if (idr)
00945 {
00946 object_header_decode_head(idr, &hdr);
00947 memcpy(buf, idr, IDB_OBJ_HEAD_SIZE);
00948 }
00949 else
00950 {
00951 memset(buf, 0, IDB_OBJ_HEAD_SIZE);
00952 hdr.size = 0;
00953 }
00954
00955 pua++->a_int = RDBHID_GET(dbh);
00956 pua->a_data.data = buf;
00957 pua++->a_data.size = IDB_OBJ_HEAD_SIZE;
00958 pua++;
00959 pua++->a_oid = *oid;
00960 pua++->a_int = lockmode;
00961
00962 pua->a_data.data = idr;
00963 pua++->a_data.size = hdr.size;
00964
00965 RPC_RPCMAKE(dbh->ch->ch, OBJECT_READ_RPC, ua);
00966
00967 status_copy(status_r, ua[6].a_status);
00968
00969 if (!idr && !status_r.err)
00970 *pidr = (unsigned char *)ua[5].a_data.data;
00971 if (!status_r.err && pdspid)
00972 *pdspid = ua[2].a_int;
00973
00974 STATUS_RETURN(status_r);
00975 }
00976 }
00977
00978 RPCStatus
00979 objectWrite(DbHandle *dbh, const Data idr, const eyedbsm::Oid *oid)
00980 {
00981 CHECK_DBH(dbh, "objectWrite");
00982
00983 if (DBH_IS_LOCAL(dbh))
00984 {
00985 Data inv_data;
00986 RPCStatus rpc_status = IDB_objectWrite((DbHandle *)dbh->u.dbh, idr, oid, 0,
00987 &inv_data, 0);
00988 if (!rpc_status)
00989 object_epilogue(dbh->db, oid, inv_data, False);
00990 return rpc_status;
00991 }
00992 else
00993 {
00994 ClientArg ua[IDB_MAXARGS], *pua = ua;
00995 Offset offset = 0;
00996 ObjectHeader hdr;
00997
00998 start_rpc();
00999
01000 if (!object_header_decode(idr, &offset, &hdr))
01001 return rpcStatusMake(IDB_INVALID_OBJECT_HEADER,
01002 "objectCreate: invalid object_header");
01003
01004 pua++->a_int = RDBHID_GET(dbh);
01005
01006 pua->a_data.data = (const Data)idr;
01007 pua++->a_data.size = hdr.size;
01008 pua++->a_oid = *oid;
01009 pua->a_data.data = 0;
01010 pua++->a_data.size = 0;
01011
01012 RPC_RPCMAKE(dbh->ch->ch, OBJECT_WRITE_RPC, ua);
01013
01014 status_copy(status_r, ua[4].a_status);
01015
01016 if (!status_r.err)
01017 object_epilogue(dbh->db, oid, (unsigned char *)ua[3].a_data.data, False);
01018
01019 STATUS_RETURN(status_r);
01020 }
01021 }
01022
01023 RPCStatus
01024 objectHeaderRead(DbHandle *dbh, const eyedbsm::Oid *oid, ObjectHeader *hdr)
01025 {
01026 CHECK_DBH(dbh, "objectHeaderRead");
01027
01028 if (DBH_IS_LOCAL(dbh))
01029 return IDB_objectHeaderRead((DbHandle *)dbh->u.dbh, oid, hdr);
01030 else
01031 {
01032 ClientArg ua[IDB_MAXARGS], *pua = ua;
01033
01034 start_rpc();
01035
01036 pua++->a_int = RDBHID_GET(dbh);
01037 pua++->a_oid = *oid;
01038
01039 RPC_RPCMAKE(dbh->ch->ch, OBJECT_HEADER_READ_RPC, ua);
01040
01041 status_copy(status_r, ua[8].a_status);
01042
01043 if (status_r.err == IDB_SUCCESS)
01044 {
01045 hdr->magic = IDB_OBJ_HEAD_MAGIC;
01046 hdr->type = ua[2].a_int;
01047 hdr->size = ua[3].a_int;
01048 hdr->ctime = ua[4].a_int;
01049 hdr->mtime = ua[5].a_int;
01050 hdr->oid_cl = ua[6].a_oid;
01051 hdr->oid_prot = ua[7].a_oid;
01052 hdr->xinfo = 0;
01053 }
01054
01055 STATUS_RETURN(status_r);
01056 }
01057 }
01058
01059 RPCStatus
01060 objectSizeModify(DbHandle *dbh, unsigned int size, const eyedbsm::Oid *oid)
01061 {
01062 CHECK_DBH(dbh, "objectSizeModify");
01063
01064 if (DBH_IS_LOCAL(dbh))
01065 return IDB_objectSizeModify((DbHandle *)dbh->u.dbh, size, oid);
01066 else
01067 {
01068 ClientArg ua[IDB_MAXARGS], *pua = ua;
01069
01070 start_rpc();
01071
01072 pua++->a_int = RDBHID_GET(dbh);
01073 pua++->a_int = size;
01074 pua++->a_oid = *oid;
01075
01076 RPC_RPCMAKE(dbh->ch->ch, OBJECT_SIZE_MODIFY_RPC, ua);
01077
01078 status_copy(status_r, ua[3].a_status);
01079
01080 STATUS_RETURN(status_r);
01081 }
01082 }
01083
01084 RPCStatus
01085 objectCheck(DbHandle *dbh, const eyedbsm::Oid *oid, int *state,
01086 eyedbsm::Oid *cloid)
01087 {
01088 CHECK_DBH(dbh, "objectCheck");
01089
01090 if (DBH_IS_LOCAL(dbh))
01091 return IDB_objectCheck((DbHandle *)dbh->u.dbh, oid, state, cloid);
01092 else
01093 {
01094 ClientArg ua[IDB_MAXARGS], *pua = ua;
01095
01096 start_rpc();
01097
01098 pua++->a_int = RDBHID_GET(dbh);
01099 pua++->a_oid = *oid;
01100
01101 RPC_RPCMAKE(dbh->ch->ch, OBJECT_CHECK_RPC, ua);
01102
01103 *state = ua[2].a_int;
01104 *cloid = ua[3].a_oid;
01105
01106 status_copy(status_r, ua[4].a_status);
01107
01108 STATUS_RETURN(status_r);
01109 }
01110 }
01111
01112 RPCStatus
01113 objectProtectionSet(DbHandle *dbh, const eyedbsm::Oid *obj_oid,
01114 const eyedbsm::Oid *prot_oid)
01115 {
01116 CHECK_DBH(dbh, "objectProtectionSet");
01117
01118 if (DBH_IS_LOCAL(dbh))
01119 return IDB_objectProtectionSet((DbHandle *)dbh->u.dbh, obj_oid, prot_oid);
01120 else
01121 {
01122 ClientArg ua[IDB_MAXARGS], *pua = ua;
01123
01124 start_rpc();
01125
01126 pua++->a_int = RDBHID_GET(dbh);
01127 pua++->a_oid = *obj_oid;
01128 pua++->a_oid = *prot_oid;
01129
01130 RPC_RPCMAKE(dbh->ch->ch, OBJECT_PROTECTION_SET_RPC, ua);
01131
01132 status_copy(status_r, ua[3].a_status);
01133
01134 STATUS_RETURN(status_r);
01135 }
01136 }
01137
01138 RPCStatus
01139 objectProtectionGet(DbHandle *dbh, const eyedbsm::Oid *obj_oid,
01140 eyedbsm::Oid *prot_oid)
01141 {
01142 CHECK_DBH(dbh, "objectProtectionGet");
01143
01144 if (DBH_IS_LOCAL(dbh))
01145 return IDB_objectProtectionGet((DbHandle *)dbh->u.dbh, obj_oid, prot_oid);
01146 else
01147 {
01148 ClientArg ua[IDB_MAXARGS], *pua = ua;
01149
01150 start_rpc();
01151
01152 pua++->a_int = RDBHID_GET(dbh);
01153 pua++->a_oid = *obj_oid;
01154
01155 RPC_RPCMAKE(dbh->ch->ch, OBJECT_PROTECTION_GET_RPC, ua);
01156
01157 *prot_oid = ua[2].a_oid;
01158
01159 status_copy(status_r, ua[3].a_status);
01160
01161 STATUS_RETURN(status_r);
01162 }
01163 }
01164
01165
01166 RPCStatus
01167 oidMake(DbHandle *dbh, short dspid, const Data idr, unsigned int size,
01168 eyedbsm::Oid *oid)
01169 {
01170
01171
01172
01173
01174
01175
01176 CHECK_DBH(dbh, "oidMake");
01177
01178
01179
01180
01181
01182
01183
01184
01185
01186
01187 if (DBH_IS_LOCAL(dbh)) {
01188 #ifdef E_XDR
01189 ObjectHeader hdr;
01190 Offset offset = 0;
01191 object_header_decode(idr, &offset, &hdr);
01192 return IDB_oidMake((DbHandle *)dbh->u.dbh, &hdr, dspid, size, oid);
01193 #else
01194 return IDB_oidMake((DbHandle *)dbh->u.dbh, (ObjectHeader *)idr, dspid, size, oid);
01195 #endif
01196 }
01197 else
01198 {
01199 ClientArg ua[IDB_MAXARGS], *pua = ua;
01200
01201 start_rpc();
01202
01203
01204
01205 pua++->a_int = RDBHID_GET(dbh);
01206 pua++->a_int = dspid;
01207 pua->a_data.data = (const Data)idr;
01208 pua++->a_data.size = IDB_OBJ_HEAD_SIZE;
01209 pua++->a_int = size;
01210
01211 RPC_RPCMAKE(dbh->ch->ch, OID_MAKE_RPC, ua);
01212
01213 *oid = ua[4].a_oid;
01214
01215 status_copy(status_r, ua[5].a_status);
01216
01217 STATUS_RETURN(status_r);
01218 }
01219 }
01220
01221
01222 RPCStatus
01223 dataCreate(DbHandle *dbh, short dspid, unsigned int size, const Data idr, eyedbsm::Oid *oid)
01224 {
01225 CHECK_DBH(dbh, "dataCreate");
01226
01227 if (DBH_IS_LOCAL(dbh))
01228 return IDB_dataCreate((DbHandle *)dbh->u.dbh, dspid, size, idr, oid, 0);
01229 else
01230 {
01231 ClientArg ua[IDB_MAXARGS], *pua = ua;
01232
01233 start_rpc();
01234
01235 pua++->a_int = RDBHID_GET(dbh);
01236 pua++->a_int = dspid;
01237 pua->a_data.size = size;
01238 pua++->a_data.data = idr;
01239
01240 RPC_RPCMAKE(dbh->ch->ch, DATA_CREATE_RPC, ua);
01241
01242 *oid = ua[3].a_oid;
01243
01244 status_copy(status_r, ua[4].a_status);
01245
01246 STATUS_RETURN(status_r);
01247 }
01248 }
01249
01250 RPCStatus
01251 dataDelete(DbHandle *dbh, const eyedbsm::Oid *oid)
01252 {
01253 CHECK_DBH(dbh, "dataDelete");
01254
01255 if (DBH_IS_LOCAL(dbh))
01256 return IDB_dataDelete((DbHandle *)dbh->u.dbh, oid);
01257 else
01258 {
01259 ClientArg ua[IDB_MAXARGS], *pua = ua;
01260
01261 start_rpc();
01262
01263 pua++->a_int = RDBHID_GET(dbh);
01264 pua++->a_oid = *oid;
01265
01266 RPC_RPCMAKE(dbh->ch->ch, DATA_DELETE_RPC, ua);
01267
01268 status_copy(status_r, ua[2].a_status);
01269
01270 STATUS_RETURN(status_r);
01271 }
01272 }
01273
01274 RPCStatus
01275 dataRead(DbHandle *dbh, int offset, unsigned int size, Data idr, short *pdspid, const eyedbsm::Oid *oid)
01276 {
01277 CHECK_DBH(dbh, "dataRead");
01278
01279 if (DBH_IS_LOCAL(dbh))
01280 return IDB_dataRead((DbHandle *)dbh->u.dbh, offset, size, idr, pdspid, oid, 0);
01281 else
01282 {
01283 ClientArg ua[IDB_MAXARGS], *pua = ua;
01284
01285 start_rpc();
01286
01287 pua++->a_int = RDBHID_GET(dbh);
01288 pua++->a_int = offset;
01289 pua++->a_int = size;
01290 pua++;
01291 pua++->a_oid = *oid;
01292 pua->a_data.size = size;
01293 pua++->a_data.data = idr;
01294
01295 RPC_RPCMAKE(dbh->ch->ch, DATA_READ_RPC, ua);
01296
01297 status_copy(status_r, ua[6].a_status);
01298 if (pdspid) *pdspid = ua[3].a_int;
01299
01300 STATUS_RETURN(status_r);
01301 }
01302 }
01303
01304 RPCStatus
01305 dataWrite(DbHandle *dbh, int offset, unsigned int size, const Data idr, const eyedbsm::Oid *oid)
01306 {
01307 CHECK_DBH(dbh, "dataWrite");
01308
01309 if (DBH_IS_LOCAL(dbh))
01310 return IDB_dataWrite((DbHandle *)dbh->u.dbh, offset, size, idr, oid, 0);
01311 else
01312 {
01313 ClientArg ua[IDB_MAXARGS], *pua = ua;
01314
01315 start_rpc();
01316
01317 pua++->a_int = RDBHID_GET(dbh);
01318 pua++->a_int = offset;
01319 pua->a_data.size = size;
01320 pua++->a_data.data = idr;
01321 pua++->a_oid = *oid;
01322
01323 RPC_RPCMAKE(dbh->ch->ch, DATA_WRITE_RPC, ua);
01324
01325 status_copy(status_r, ua[4].a_status);
01326
01327 STATUS_RETURN(status_r);
01328 }
01329 }
01330
01331 RPCStatus
01332 dataSizeGet(DbHandle *dbh, const eyedbsm::Oid *oid, unsigned int *size)
01333 {
01334 CHECK_DBH(dbh, "dataSizeGet");
01335
01336 if (DBH_IS_LOCAL(dbh))
01337 return IDB_dataSizeGet((DbHandle *)dbh->u.dbh, oid, size);
01338 else
01339 {
01340 ClientArg ua[IDB_MAXARGS], *pua = ua;
01341
01342 start_rpc();
01343
01344 pua++->a_int = RDBHID_GET(dbh);
01345 pua++->a_oid = *oid;
01346
01347 RPC_RPCMAKE(dbh->ch->ch, DATA_SIZE_GET_RPC, ua);
01348
01349 *size = ua[2].a_int;
01350 status_copy(status_r, ua[3].a_status);
01351
01352 STATUS_RETURN(status_r);
01353 }
01354 }
01355
01356 RPCStatus
01357 dataSizeModify(DbHandle *dbh, unsigned int size, const eyedbsm::Oid *oid)
01358 {
01359 CHECK_DBH(dbh, "dataSizeModify");
01360
01361 if (DBH_IS_LOCAL(dbh))
01362 return IDB_dataSizeModify((DbHandle *)dbh->u.dbh, size, oid);
01363 else
01364 {
01365 ClientArg ua[IDB_MAXARGS], *pua = ua;
01366
01367 start_rpc();
01368
01369 pua++->a_int = RDBHID_GET(dbh);
01370 pua++->a_int = size;
01371 pua++->a_oid = *oid;
01372
01373 RPC_RPCMAKE(dbh->ch->ch, DATA_SIZE_MODIFY_RPC, ua);
01374
01375 status_copy(status_r, ua[3].a_status);
01376
01377 STATUS_RETURN(status_r);
01378 }
01379 }
01380
01381 RPCStatus
01382 VDdataCreate(DbHandle *dbh, short dspid, const eyedbsm::Oid *actual_oid_cl,
01383 const eyedbsm::Oid *oid_cl, int num,
01384 int count, int size, const Data data,
01385 const eyedbsm::Oid *agr_oid, eyedbsm::Oid *data_oid,
01386 Data idx_data, Size idx_size)
01387 {
01388 CHECK_DBH(dbh, "VDdataCreate");
01389
01390 if (DBH_IS_LOCAL(dbh))
01391 return IDB_VDdataCreate((DbHandle *)dbh->u.dbh, dspid, actual_oid_cl, oid_cl,
01392 num, count, size, data,
01393 agr_oid, data_oid, idx_data, idx_size, 0, 0);
01394 else
01395 {
01396 ClientArg ua[IDB_MAXARGS], *pua = ua;
01397
01398 start_rpc();
01399
01400 pua++->a_int = RDBHID_GET(dbh);
01401 pua++->a_int = dspid;
01402 pua++->a_oid = *actual_oid_cl;
01403 pua++->a_oid = *oid_cl;
01404 pua++->a_int = num;
01405 pua++->a_int = count;
01406 pua->a_data.size = size;
01407 pua++->a_data.data = data;
01408 pua->a_data.size = idx_size;
01409 pua++->a_data.data = idx_data;
01410 pua++->a_oid = *agr_oid;
01411
01412 RPC_RPCMAKE(dbh->ch->ch, VDDATA_CREATE_RPC, ua);
01413
01414 *data_oid = ua[9].a_oid;
01415
01416 status_copy(status_r, ua[10].a_status);
01417
01418 STATUS_RETURN(status_r);
01419 }
01420 }
01421
01422 RPCStatus
01423 VDdataDelete(DbHandle *dbh, const eyedbsm::Oid *actual_oid_cl,
01424 const eyedbsm::Oid *oid_cl, int num,
01425 const eyedbsm::Oid *agr_oid, const eyedbsm::Oid *data_oid,
01426 Data idx_data, Size idx_size)
01427 {
01428 CHECK_DBH(dbh, "VDdataDelete");
01429
01430 if (DBH_IS_LOCAL(dbh))
01431 return IDB_VDdataDelete((DbHandle *)dbh->u.dbh, actual_oid_cl, oid_cl,
01432 num, agr_oid, data_oid, idx_data, idx_size, 0);
01433 else
01434 {
01435 ClientArg ua[IDB_MAXARGS], *pua = ua;
01436
01437 start_rpc();
01438
01439 pua++->a_int = RDBHID_GET(dbh);
01440 pua++->a_oid = *actual_oid_cl;
01441 pua++->a_oid = *oid_cl;
01442 pua++->a_int = num;
01443 pua++->a_oid = *agr_oid;
01444 pua++->a_oid = *data_oid;
01445 pua->a_data.size = idx_size;
01446 pua++->a_data.data = idx_data;
01447
01448 RPC_RPCMAKE(dbh->ch->ch, VDDATA_DELETE_RPC, ua);
01449
01450 status_copy(status_r, ua[7].a_status);
01451
01452 STATUS_RETURN(status_r);
01453 }
01454 }
01455
01456 RPCStatus
01457 VDdataWrite(DbHandle *dbh, const eyedbsm::Oid *actual_oid_cl,
01458 const eyedbsm::Oid *oid_cl, int num,
01459 int count, unsigned int size, const Data data,
01460 const eyedbsm::Oid *agr_oid,
01461 const eyedbsm::Oid *data_oid,
01462 Data idx_data, Size idx_size)
01463 {
01464 CHECK_DBH(dbh, "VDdataWrite");
01465
01466 if (DBH_IS_LOCAL(dbh))
01467 return IDB_VDdataWrite((DbHandle *)dbh->u.dbh, actual_oid_cl, oid_cl, num,
01468 count, size, data,
01469 agr_oid, data_oid, idx_data, idx_size, 0, 0);
01470 else
01471 {
01472 ClientArg ua[IDB_MAXARGS], *pua = ua;
01473
01474 start_rpc();
01475
01476 pua++->a_int = RDBHID_GET(dbh);
01477 pua++->a_oid = *actual_oid_cl;
01478 pua++->a_oid = *oid_cl;
01479 pua++->a_int = num;
01480 pua++->a_int = count;
01481 pua->a_data.size = size;
01482 pua++->a_data.data = data;
01483 pua->a_data.size = idx_size;
01484 pua++->a_data.data = idx_data;
01485 pua++->a_oid = *agr_oid;
01486 pua++->a_oid = *data_oid;
01487
01488 RPC_RPCMAKE(dbh->ch->ch, VDDATA_WRITE_RPC, ua);
01489
01490 status_copy(status_r, ua[9].a_status);
01491
01492 STATUS_RETURN(status_r);
01493 }
01494 }
01495
01496 RPCStatus
01497 schemaComplete(DbHandle *dbh, const char *schname)
01498 {
01499 CHECK_DBH(dbh, "schemaComplete");
01500
01501 if (DBH_IS_LOCAL(dbh))
01502 return IDB_schemaComplete((DbHandle *)dbh->u.dbh, schname);
01503 else
01504 {
01505 ClientArg ua[IDB_MAXARGS], *pua = ua;
01506
01507 start_rpc();
01508
01509 pua++->a_int = RDBHID_GET(dbh);
01510 pua++->a_string = (char *)schname;
01511
01512 RPC_RPCMAKE(dbh->ch->ch, SCHEMA_COMPLETE_RPC, ua);
01513
01514 status_copy(status_r, ua[2].a_status);
01515
01516 STATUS_RETURN(status_r);
01517 }
01518 }
01519
01520
01521 RPCStatus
01522 attributeIndexCreate(DbHandle *dbh, const eyedbsm::Oid *cloid, int num,
01523 int mode, eyedbsm::Oid *multi_idx_oid,
01524 Data idx_data, Size idx_size)
01525 {
01526 CHECK_DBH(dbh, "attributeIndexCreate");
01527
01528 if (DBH_IS_LOCAL(dbh))
01529 return IDB_attributeIndexCreate((DbHandle *)dbh->u.dbh, cloid, num, mode,
01530 multi_idx_oid, idx_data, idx_size, 0);
01531 else
01532 {
01533 ClientArg ua[IDB_MAXARGS], *pua = ua;
01534
01535 start_rpc();
01536
01537 pua++->a_int = RDBHID_GET(dbh);
01538 pua++->a_oid = *cloid;
01539 pua++->a_int = num;
01540 pua++->a_int = mode;
01541 pua++->a_oid = *multi_idx_oid;
01542 pua->a_data.data = idx_data;
01543 pua++->a_data.size = idx_size;
01544
01545 RPC_RPCMAKE(dbh->ch->ch, ATTRIBUTE_INDEX_CREATE_RPC, ua);
01546
01547 status_copy(status_r, ua[6].a_status);
01548
01549 STATUS_RETURN(status_r);
01550 }
01551 }
01552
01553 RPCStatus
01554 attributeIndexRemove(DbHandle *dbh, const eyedbsm::Oid *cloid, int num,
01555 int mode, Data idx_data, Size idx_size)
01556 {
01557 CHECK_DBH(dbh, "attributeIndexRemove");
01558
01559 if (DBH_IS_LOCAL(dbh))
01560 return IDB_attributeIndexRemove((DbHandle *)dbh->u.dbh, cloid, num, mode,
01561 idx_data, idx_size, 0);
01562 else
01563 {
01564 ClientArg ua[IDB_MAXARGS], *pua = ua;
01565
01566 start_rpc();
01567
01568 pua++->a_int = RDBHID_GET(dbh);
01569 pua++->a_oid = *cloid;
01570 pua++->a_int = num;
01571 pua++->a_int = mode;
01572 pua->a_data.data = idx_data;
01573 pua++->a_data.size = idx_size;
01574
01575 RPC_RPCMAKE(dbh->ch->ch, ATTRIBUTE_INDEX_REMOVE_RPC, ua);
01576
01577 status_copy(status_r, ua[5].a_status);
01578
01579 STATUS_RETURN(status_r);
01580 }
01581 }
01582
01583 RPCStatus
01584 indexCreate(DbHandle * dbh, bool index_move, const eyedbsm::Oid * objoid)
01585 {
01586 if (DBH_IS_LOCAL(dbh))
01587 return IDB_indexCreate((DbHandle *)dbh->u.dbh, index_move, objoid);
01588 else
01589 {
01590 ClientArg ua[IDB_MAXARGS], *pua = ua;
01591 int r, offset;
01592 pua++->a_int = RDBHID_GET(dbh);
01593 pua++->a_int = index_move;
01594 pua++->a_oid = *objoid;
01595
01596 RPC_RPCMAKE(dbh->ch->ch, INDEX_CREATE_RPC, ua);
01597
01598
01599 status_copy(status_r, ua[3].a_status);
01600 STATUS_RETURN(status_r);
01601 }
01602 }
01603
01604 RPCStatus
01605 indexRemove(DbHandle * dbh, const eyedbsm::Oid * objoid, int reentrant)
01606 {
01607 if (DBH_IS_LOCAL(dbh))
01608 return IDB_indexRemove((DbHandle *)dbh->u.dbh, objoid, reentrant);
01609 else
01610 {
01611 ClientArg ua[IDB_MAXARGS], *pua = ua;
01612 int r, offset;
01613 pua++->a_int = RDBHID_GET(dbh);
01614 pua++->a_oid = *objoid;
01615 pua++->a_int = reentrant;
01616
01617 RPC_RPCMAKE(dbh->ch->ch, INDEX_REMOVE_RPC, ua);
01618
01619 status_copy(status_r, ua[3].a_status);
01620 STATUS_RETURN(status_r);
01621 }
01622 }
01623
01624 RPCStatus
01625 constraintCreate(DbHandle * dbh, const eyedbsm::Oid * objoid)
01626 {
01627 if (DBH_IS_LOCAL(dbh))
01628 return IDB_constraintCreate((DbHandle *)dbh->u.dbh, objoid);
01629 else
01630 {
01631 ClientArg ua[IDB_MAXARGS], *pua = ua;
01632 int r, offset;
01633 pua++->a_int = RDBHID_GET(dbh);
01634 pua++->a_oid = *objoid;
01635
01636 RPC_RPCMAKE(dbh->ch->ch, CONSTRAINT_CREATE_RPC, ua);
01637
01638
01639 status_copy(status_r, ua[2].a_status);
01640 STATUS_RETURN(status_r);
01641 }
01642 }
01643
01644 RPCStatus
01645 constraintDelete(DbHandle * dbh, const eyedbsm::Oid * objoid, int reentrant)
01646 {
01647 if (DBH_IS_LOCAL(dbh))
01648 return IDB_constraintDelete((DbHandle *)dbh->u.dbh, objoid, reentrant);
01649 else
01650 {
01651 ClientArg ua[IDB_MAXARGS], *pua = ua;
01652 int r, offset;
01653 pua++->a_int = RDBHID_GET(dbh);
01654 pua++->a_oid = *objoid;
01655 pua++->a_int = reentrant;
01656
01657 RPC_RPCMAKE(dbh->ch->ch, CONSTRAINT_DELETE_RPC, ua);
01658
01659 status_copy(status_r, ua[3].a_status);
01660 STATUS_RETURN(status_r);
01661 }
01662 }
01663
01664
01665 RPCStatus
01666 collectionGetByInd(DbHandle *dbh, const eyedbsm::Oid *oid, int ind,
01667 int *found, Data buf, int size)
01668 {
01669 CHECK_DBH(dbh, "collectionGetByInd");
01670
01671 if (DBH_IS_LOCAL(dbh))
01672 return IDB_collectionGetByInd((DbHandle *)dbh->u.dbh, oid, ind, found, buf, (void *)0);
01673 else
01674 {
01675 ClientArg ua[IDB_MAXARGS], *pua = ua;
01676
01677 start_rpc();
01678
01679 pua++->a_int = RDBHID_GET(dbh);
01680 pua++->a_oid = *oid;
01681 pua++->a_int = ind;
01682 pua++;
01683 pua->a_data.data = buf;
01684 pua++->a_data.size = size;
01685
01686 RPC_RPCMAKE(dbh->ch->ch, COLLECTION_GET_BY_IND_RPC, ua);
01687
01688 *found = ua[3].a_int;
01689 status_copy(status_r, ua[5].a_status);
01690
01691 STATUS_RETURN(status_r);
01692 }
01693 }
01694
01695 RPCStatus
01696 collectionGetByValue(DbHandle *dbh, const eyedbsm::Oid *oid, Data val,
01697 int size, int *found, int *ind)
01698 {
01699 CHECK_DBH(dbh, "collectionGetByValue");
01700
01701 if (DBH_IS_LOCAL(dbh))
01702 return IDB_collectionGetByValue((DbHandle *)dbh->u.dbh, oid, val, found, ind);
01703 else
01704 {
01705 ClientArg ua[IDB_MAXARGS], *pua = ua;
01706
01707 start_rpc();
01708
01709 pua++->a_int = RDBHID_GET(dbh);
01710 pua++->a_oid = *oid;
01711 pua->a_data.data = val;
01712 pua++->a_data.size = size;
01713
01714 RPC_RPCMAKE(dbh->ch->ch, COLLECTION_GET_BY_VALUE_RPC, ua);
01715
01716 *found = ua[3].a_int;
01717 *ind = ua[4].a_int;
01718 status_copy(status_r, ua[5].a_status);
01719
01720 STATUS_RETURN(status_r);
01721 }
01722 }
01723
01724 RPCStatus
01725 collectionGetByOid(DbHandle *dbh, const eyedbsm::Oid *oid,
01726 const eyedbsm::Oid *loid, int *found, int *ind)
01727 {
01728 unsigned char data[sizeof(*loid)];
01729 oid_code(data, (Data)loid);
01730 return collectionGetByValue(dbh, oid, data,
01731 sizeof(eyedbsm::Oid), found, ind);
01732
01733 return collectionGetByValue(dbh, oid, (Data)loid,
01734 sizeof(eyedbsm::Oid), found, ind);
01735 }
01736
01737
01738
01739 RPCStatus
01740 setObjectLock(DbHandle * dbh, const eyedbsm::Oid * oid, int lockmode, int * rlockmode)
01741 {
01742 CHECK_DBH(dbh, "setObjectLock");
01743
01744 if (DBH_IS_LOCAL(dbh))
01745 return IDB_setObjectLock((DbHandle *)dbh->u.dbh, oid, lockmode, rlockmode);
01746 else
01747 {
01748 ClientArg ua[IDB_MAXARGS], *pua = ua;
01749 int r, offset;
01750 start_rpc();
01751
01752 pua++->a_int = RDBHID_GET(dbh);
01753 pua++->a_int = RDBHID_GET(dbh);
01754 pua++->a_oid = *oid;
01755 pua++->a_int = lockmode;
01756 pua++;
01757
01758 RPC_RPCMAKE(dbh->ch->ch, SET_OBJECT_LOCK_RPC, ua);
01759
01760 *rlockmode = ua[4].a_int;
01761
01762 status_copy(status_r, ua[4].a_status);
01763 STATUS_RETURN(status_r);
01764 }
01765 }
01766
01767 RPCStatus
01768 getObjectLock(DbHandle * dbh, const eyedbsm::Oid * oid, int * lockmode)
01769 {
01770 CHECK_DBH(dbh, "getObjectLock");
01771
01772 if (DBH_IS_LOCAL(dbh))
01773 return IDB_getObjectLock((DbHandle *)dbh->u.dbh, oid, lockmode);
01774 else
01775 {
01776 ClientArg ua[IDB_MAXARGS], *pua = ua;
01777 int r, offset;
01778 start_rpc();
01779
01780 pua++->a_int = RDBHID_GET(dbh);
01781 pua++->a_int = RDBHID_GET(dbh);
01782 pua++->a_oid = *oid;
01783 pua++;
01784
01785 RPC_RPCMAKE(dbh->ch->ch, GET_OBJECT_LOCK_RPC, ua);
01786
01787 *lockmode = ua[3].a_int;
01788
01789 status_copy(status_r, ua[3].a_status);
01790 STATUS_RETURN(status_r);
01791 }
01792 }
01793
01794
01795 #if 0
01796 RPCStatus
01797 queryLangCreate(DbHandle *dbh, const char *str, int *qid,
01798 void *pschinfo, int *count)
01799 {
01800 CHECK_DBH(dbh, "queryLangCreate");
01801
01802 if (DBH_IS_LOCAL(dbh))
01803 return IDB_queryLangCreate((DbHandle *)dbh->u.dbh, str, qid, count, pschinfo,
01804 (void *)0, (void *)0);
01805 else
01806 {
01807 ClientArg ua[IDB_MAXARGS], *pua = ua;
01808
01809 start_rpc();
01810
01811 pua++->a_int = RDBHID_GET(dbh);
01812 pua->a_data.data = (const Data)str;
01813 pua++->a_data.size = strlen(str)+1;
01814 pua++;
01815 pua++;
01816 pua->a_data.size = 0;
01817 pua++->a_data.data = 0;
01818
01819 RPC_RPCMAKE(dbh->ch->ch, QUERY_LANG_CREATE_RPC, ua);
01820
01821 *qid = ua[2].a_int;
01822 *count = ua[3].a_int;
01823 status_copy(status_r, ua[5].a_status);
01824 if (!status_r.err)
01825 decode_sch_info((unsigned char *)ua[4].a_data.data, pschinfo);
01826
01827 free(ua[4].a_data.data);
01828
01829 STATUS_RETURN(status_r);
01830 }
01831 }
01832
01833 RPCStatus
01834 queryDatabaseCreate(DbHandle *dbh, int *qid)
01835 {
01836 CHECK_DBH(dbh, "queryDatabaseCreate");
01837
01838 if (DBH_IS_LOCAL(dbh))
01839 return IDB_queryDatabaseCreate((DbHandle *)dbh->u.dbh, qid);
01840 else
01841 {
01842 ClientArg ua[IDB_MAXARGS], *pua = ua;
01843
01844 start_rpc();
01845
01846 pua++->a_int = RDBHID_GET(dbh);
01847
01848 RPC_RPCMAKE(dbh->ch->ch, QUERY_DATABASE_CREATE_RPC, ua);
01849
01850 *qid = ua[1].a_int;
01851 status_copy(status_r, ua[2].a_status);
01852
01853 STATUS_RETURN(status_r);
01854 }
01855 }
01856
01857 RPCStatus
01858 queryClassCreate(DbHandle *dbh, const eyedbsm::Oid *cloid, int *qid)
01859 {
01860 CHECK_DBH(dbh, "queryClassCreate");
01861
01862 if (DBH_IS_LOCAL(dbh))
01863 return IDB_queryClassCreate((DbHandle *)dbh->u.dbh, cloid, qid);
01864 else
01865 {
01866 ClientArg ua[IDB_MAXARGS], *pua = ua;
01867
01868 start_rpc();
01869
01870 pua++->a_int = RDBHID_GET(dbh);
01871 pua++->a_oid = *cloid;
01872
01873 RPC_RPCMAKE(dbh->ch->ch, QUERY_CLASS_CREATE_RPC, ua);
01874
01875 *qid = ua[2].a_int;
01876 status_copy(status_r, ua[3].a_status);
01877
01878 STATUS_RETURN(status_r);
01879 }
01880 }
01881 #endif
01882
01883 RPCStatus
01884 queryCollectionCreate(DbHandle *dbh, const eyedbsm::Oid *oid, Bool index,
01885 int *qid)
01886 {
01887 CHECK_DBH(dbh, "queryCollectionCreate");
01888
01889 if (DBH_IS_LOCAL(dbh))
01890 return IDB_queryCollectionCreate((DbHandle *)dbh->u.dbh, oid, (int)index, qid);
01891 else
01892 {
01893 ClientArg ua[IDB_MAXARGS], *pua = ua;
01894
01895 start_rpc();
01896
01897 pua++->a_int = RDBHID_GET(dbh);
01898 pua++->a_oid = *oid;
01899 pua++->a_int = (int)index;
01900
01901 RPC_RPCMAKE(dbh->ch->ch, QUERY_COLLECTION_CREATE_RPC, ua);
01902
01903 *qid = ua[3].a_int;
01904 status_copy(status_r, ua[4].a_status);
01905
01906 STATUS_RETURN(status_r);
01907 }
01908 }
01909
01910 RPCStatus
01911 queryAttributeCreate(DbHandle *dbh, const eyedbsm::Oid *cloid, int num,
01912 int ind, Data start, Data end, int sexcl,
01913 int eexcl, int x_size, int *qid)
01914 {
01915 CHECK_DBH(dbh, "queryAttributeCreate");
01916
01917 if (DBH_IS_LOCAL(dbh))
01918 return IDB_queryAttributeCreate((DbHandle *)dbh->u.dbh, cloid, num, ind,
01919 start, end, sexcl, eexcl, x_size,
01920 qid);
01921 else
01922 {
01923 ClientArg ua[IDB_MAXARGS], *pua = ua;
01924
01925 start_rpc();
01926
01927 pua++->a_int = RDBHID_GET(dbh);
01928 pua++->a_oid = *cloid;
01929 pua++->a_int = num;
01930 pua++->a_int = ind;
01931 pua->a_data.data = start;
01932 pua++->a_data.size = x_size;
01933 pua->a_data.data = end;
01934 pua++->a_data.size = x_size;
01935 pua++->a_int = sexcl;
01936 pua++->a_int = eexcl;
01937
01938 RPC_RPCMAKE(dbh->ch->ch, QUERY_ATTRIBUTE_CREATE_RPC, ua);
01939
01940 *qid = ua[8].a_int;
01941 status_copy(status_r, ua[9].a_status);
01942
01943 STATUS_RETURN(status_r);
01944 }
01945 }
01946
01947 RPCStatus
01948 queryDelete(DbHandle *dbh, int qid)
01949 {
01950 CHECK_DBH(dbh, "queryDelete");
01951
01952 if (DBH_IS_LOCAL(dbh))
01953 return IDB_queryDelete((DbHandle *)dbh->u.dbh, qid);
01954 else
01955 {
01956 ClientArg ua[IDB_MAXARGS], *pua = ua;
01957
01958 start_rpc();
01959
01960 pua++->a_int = RDBHID_GET(dbh);
01961 pua++->a_int = qid;
01962
01963 RPC_RPCMAKE(dbh->ch->ch, QUERY_DELETE_RPC, ua);
01964
01965 status_copy(status_r, ua[2].a_status);
01966
01967 STATUS_RETURN(status_r);
01968 }
01969 }
01970
01971 RPCStatus
01972 queryScanNext(DbHandle *dbh, int qid, int wanted, int *found,
01973 void *atom_array)
01974 {
01975 CHECK_DBH(dbh, "queryScanNext");
01976
01977 if (DBH_IS_LOCAL(dbh))
01978 return IDB_queryScanNext((DbHandle *)dbh->u.dbh, qid, wanted, found, atom_array, 0);
01979 else
01980 {
01981 ClientArg ua[IDB_MAXARGS], *pua = ua;
01982 int r;
01983
01984 start_rpc();
01985
01986 pua++->a_int = RDBHID_GET(dbh);
01987 pua++->a_int = qid;
01988 pua++->a_int = wanted;
01989 pua++;
01990 pua->a_data.size = 0;
01991 pua++->a_data.data = 0;
01992
01993 RPC_RPCMAKE(dbh->ch->ch, QUERY_SCAN_NEXT_RPC, ua);
01994
01995 *found = ua[3].a_int;
01996 status_copy(status_r, ua[5].a_status);
01997 if (!status_r.err)
01998 decode_atom_array(&ua[4].a_data, atom_array, *found);
01999
02000 STATUS_RETURN(status_r);
02001 }
02002 }
02003
02004
02005
02006 RPCStatus
02007 oqlCreate(ConnHandle *ch, DbHandle * dbh, const char * oql,
02008 int *qid, void *schema_info)
02009 {
02010 CHECK_DBH(dbh, "oqlCreate");
02011
02012 if (DBH_IS_LOCAL(dbh))
02013 return IDB_oqlCreate((DbHandle *)(dbh ? dbh->u.dbh : 0), oql, qid, schema_info,
02014 0, 0);
02015 else
02016 {
02017 ClientArg ua[IDB_MAXARGS], *pua = ua;
02018 int r, offset;
02019 start_rpc();
02020
02021 pua++->a_int = (dbh ? RDBHID_GET(dbh) : 0);
02022 pua->a_data.data = (const Data)oql;
02023 pua++->a_data.size = strlen(oql)+1;
02024 pua++;
02025 pua->a_data.size = 0;
02026 pua++->a_data.data = 0;
02027
02028 RPC_RPCMAKE(ch->ch, OQL_CREATE_RPC, ua);
02029
02030 *qid = ua[2].a_int;
02031 status_copy(status_r, ua[4].a_status);
02032 if (!status_r.err)
02033 decode_sch_info((unsigned char *)ua[3].a_data.data, schema_info);
02034
02035 free(ua[3].a_data.data);
02036
02037 STATUS_RETURN(status_r);
02038 }
02039 }
02040
02041 RPCStatus
02042 oqlDelete(ConnHandle *ch, DbHandle * dbh, int qid)
02043 {
02044 CHECK_DBH(dbh, "oqlDelete");
02045
02046 if (DBH_IS_LOCAL(dbh))
02047 return IDB_oqlDelete((DbHandle *)(dbh ? dbh->u.dbh : 0), qid);
02048 else
02049 {
02050 ClientArg ua[IDB_MAXARGS], *pua = ua;
02051 int r, offset;
02052 start_rpc();
02053
02054 pua++->a_int = (dbh ? RDBHID_GET(dbh) : 0);
02055 pua++->a_int = qid;
02056
02057 RPC_RPCMAKE(ch->ch, OQL_DELETE_RPC, ua);
02058
02059 status_copy(status_r, ua[2].a_status);
02060 STATUS_RETURN(status_r);
02061 }
02062 }
02063
02064 RPCStatus
02065 oqlGetResult(ConnHandle *ch, DbHandle * dbh, int qid,
02066 void *value)
02067 {
02068 CHECK_DBH(dbh, "oqlGetResult");
02069
02070 if (DBH_IS_LOCAL(dbh))
02071 return IDB_oqlGetResult((DbHandle *)(dbh ? dbh->u.dbh : 0), qid, value, 0);
02072 else
02073 {
02074 ClientArg ua[IDB_MAXARGS], *pua = ua;
02075 int r, offset;
02076 start_rpc();
02077
02078 pua++->a_int = (dbh ? RDBHID_GET(dbh) : 0);
02079 pua++->a_int = qid;
02080 pua->a_data.data = 0;
02081 pua++->a_data.size = 0;
02082
02083 RPC_RPCMAKE(ch->ch, OQL_GETRESULT_RPC, ua);
02084
02085 status_copy(status_r, ua[3].a_status);
02086 if (!status_r.err)
02087 decode_value(&ua[2].a_data, value);
02088
02089 free(ua[2].a_data.data);
02090
02091 STATUS_RETURN(status_r);
02092 }
02093 }
02094
02095
02096 RPCStatus
02097 execExecute(DbHandle *dbh, const char *user, const char *passwd,
02098 const char *intname,
02099 const char *name,
02100 int exec_type,
02101 const eyedbsm::Oid *cloid,
02102 const char *extref,
02103 const void *sign,
02104 const eyedbsm::Oid *execoid,
02105 const eyedbsm::Oid *objoid,
02106 void *o,
02107 const void *argarray,
02108 void *argret)
02109 {
02110 CHECK_DBH(dbh, "execExecute");
02111
02112 if (DBH_IS_LOCAL(dbh))
02113 return IDB_execExecute((DbHandle *)dbh->u.dbh, user, passwd, intname,
02114 name, exec_type, cloid,
02115 extref, sign, 0, execoid, objoid, o,
02116 argarray, 0, argret, 0);
02117 else
02118 {
02119 ClientArg ua[IDB_MAXARGS], *pua = ua;
02120 int r, offset;
02121 unsigned char *sign_data;
02122 unsigned char *argarray_data;
02123 start_rpc();
02124
02125 code_signature(&ua[8], sign);
02126 code_arg_array(&ua[11], argarray);
02127
02128 sign_data = (unsigned char *)ua[8].a_data.data;
02129 argarray_data = (unsigned char *)ua[11].a_data.data;
02130
02131 pua++->a_int = RDBHID_GET(dbh);
02132 pua++->a_string = (char *)user;
02133 pua++->a_string = (char *)passwd;
02134 pua++->a_string = (char *)intname;
02135 pua++->a_string = (char *)name;
02136 pua++->a_int = exec_type;
02137 pua++->a_oid = *cloid;
02138 pua++->a_string = (char *)extref;
02139 pua++;
02140 pua++->a_oid = *execoid;
02141 pua++->a_oid = *objoid;
02142 pua++;
02143 pua->a_data.size = 0;
02144 pua++->a_data.data = 0;
02145
02146 RPC_RPCMAKE(dbh->ch->ch, EXECUTABLE_EXECUTE_RPC, ua);
02147
02148 status_copy(status_r, ua[13].a_status);
02149
02150 if (!status_r.err)
02151 {
02152 offset = decode_arg_array(dbh->db, &ua[12].a_data, (void **)argarray,
02153 False);
02154 decode_argument(dbh->db, &ua[12].a_data, argret, offset);
02155 }
02156
02157
02158 free(ua[12].a_data.data);
02159
02160 free(sign_data);
02161 free(argarray_data);
02162
02163 STATUS_RETURN(status_r);
02164 }
02165 }
02166
02167 RPCStatus
02168 execCheck(DbHandle *dbh, const char *intname, const eyedbsm::Oid *oid,
02169 const char *extref)
02170 {
02171 CHECK_DBH(dbh, "execCheck");
02172
02173 if (DBH_IS_LOCAL(dbh))
02174 return IDB_execCheck((DbHandle *)dbh->u.dbh, intname, oid, extref);
02175 else
02176 {
02177 ClientArg ua[IDB_MAXARGS], *pua = ua;
02178 int r;
02179
02180 start_rpc();
02181
02182 pua++->a_int = RDBHID_GET(dbh);
02183 pua++->a_string = (char *)intname;
02184 pua++->a_oid = *oid;
02185 pua++->a_string = (char *)extref;
02186
02187 RPC_RPCMAKE(dbh->ch->ch, EXECUTABLE_CHECK_RPC, ua);
02188
02189 status_copy(status_r, ua[4].a_status);
02190
02191 STATUS_RETURN(status_r);
02192 }
02193 }
02194
02195 extern RPCStatus
02196 execSetExtRefPath(ConnHandle *ch, const char *user,
02197 const char *passwd, const char *path)
02198 {
02199 if (!ch)
02200 return IDB_execSetExtRefPath(user, passwd, path);
02201 else
02202 {
02203 ClientArg ua[IDB_MAXARGS], *pua = ua;
02204 int r;
02205
02206 start_rpc();
02207
02208 pua++->a_string = (char *)user;
02209 pua++->a_string = (char *)passwd;
02210 pua++->a_string = (char *)path;
02211
02212 RPC_RPCMAKE(ch->ch, EXECUTABLE_SET_EXTREF_PATH_RPC, ua);
02213
02214 status_copy(status_r, ua[3].a_status);
02215
02216 STATUS_RETURN(status_r);
02217 }
02218 }
02219
02220 extern RPCStatus
02221 execGetExtRefPath(ConnHandle *ch, const char *user,
02222 const char *passwd, char path[], unsigned int pathlen)
02223 {
02224 if (!ch)
02225 return IDB_execGetExtRefPath(user, passwd, path, pathlen);
02226 else
02227 {
02228 ClientArg ua[IDB_MAXARGS], *pua = ua;
02229 int r, min;
02230
02231 start_rpc();
02232
02233 pua++->a_string = (char *)user;
02234 pua++->a_string = (char *)passwd;
02235 pua->a_data.size = 0;
02236 pua++->a_data.data = 0;
02237
02238 RPC_RPCMAKE(ch->ch, EXECUTABLE_GET_EXTREF_PATH_RPC, ua);
02239
02240 min = (pathlen < ua[2].a_data.size ? pathlen : ua[2].a_data.size);
02241 memcpy(path, ua[2].a_data.data, min);
02242 path[min] = 0;
02243
02244 free(ua[2].a_data.data);
02245
02246 status_copy(status_r, ua[3].a_status);
02247
02248 STATUS_RETURN(status_r);
02249 }
02250 }
02251
02252 RPCStatus
02253 checkAuth(ConnHandle *ch, const char *file)
02254 {
02255 if (!ch)
02256 return IDB_checkAuth(file);
02257 else
02258 {
02259 ClientArg ua[IDB_MAXARGS], *pua = ua;
02260 int r, offset;
02261 pua++->a_string = (char *)file;
02262
02263 RPC_RPCMAKE(ch->ch, CHECK_AUTH_RPC, ua);
02264
02265 status_copy(status_r, ua[1].a_status);
02266 STATUS_RETURN(status_r);
02267 }
02268 }
02269
02270
02271 RPCStatus
02272 set_conn_info(ConnHandle *ch, const char *hostname,
02273 int uid, const char *username, const char *progname,
02274 int *sv_pid, int *sv_uid, int sv_version, char **challenge)
02275 {
02276 if (!ch)
02277 return IDB_setConnInfo(hostname, uid, username, progname, getpid(),
02278 sv_pid, sv_uid, sv_version, challenge);
02279 else {
02280 ClientArg ua[IDB_MAXARGS], *pua = ua;
02281 int r, min;
02282
02283 start_rpc();
02284
02285 pua++->a_string = (char *)hostname;
02286 pua++->a_int = uid;
02287 pua++->a_string = (char *)username;
02288 pua++->a_string = (char *)progname;
02289 pua++->a_int = getpid();
02290 pua++;
02291 pua++;
02292 pua++->a_int = sv_version;
02293
02294 RPC_RPCMAKE(ch->ch, SET_CONN_INFO_RPC, ua);
02295
02296 *sv_pid = ua[5].a_int;
02297 *sv_uid = ua[6].a_int;
02298 *challenge = ua[8].a_string;
02299
02300 status_copy(status_r, ua[9].a_status);
02301
02302 STATUS_RETURN(status_r);
02303 }
02304 }
02305
02306 RPCStatus
02307 setLogMask(ConnHandle *ch, eyedblib::int64 logmask)
02308 {
02309 if (!ch)
02310 return IDB_setLogMask(logmask);
02311 else
02312 {
02313 ClientArg ua[IDB_MAXARGS], *pua = ua;
02314 int r, offset;
02315 start_rpc();
02316
02317 pua++->a_int64 = logmask;
02318
02319 RPC_RPCMAKE(ch->ch, SET_LOG_MASK_RPC, ua);
02320
02321 status_copy(status_r, ua[1].a_status);
02322 STATUS_RETURN(status_r);
02323 }
02324 }
02325
02326 RPCStatus
02327 getDefaultDataspace(DbHandle * dbh, int * dspid)
02328 {
02329 if (DBH_IS_LOCAL(dbh))
02330 return IDB_getDefaultDataspace((DbHandle *)dbh->u.dbh, dspid);
02331 else
02332 {
02333 ClientArg ua[IDB_MAXARGS], *pua = ua;
02334 int r, offset;
02335 start_rpc();
02336
02337 pua++->a_int = RDBHID_GET(dbh);
02338 pua++;
02339
02340 RPC_RPCMAKE(dbh->ch->ch, GET_DEFAULT_DATASPACE_RPC, ua);
02341
02342 *dspid = ua[1].a_int;
02343
02344 status_copy(status_r, ua[2].a_status);
02345 STATUS_RETURN(status_r);
02346 }
02347 }
02348
02349 RPCStatus
02350 setDefaultDataspace(DbHandle * dbh, int dspid)
02351 {
02352 if (DBH_IS_LOCAL(dbh))
02353 return IDB_setDefaultDataspace((DbHandle *)dbh->u.dbh, dspid);
02354 else
02355 {
02356 ClientArg ua[IDB_MAXARGS], *pua = ua;
02357 int r, offset;
02358 start_rpc();
02359
02360 pua++->a_int = RDBHID_GET(dbh);
02361 pua++->a_int = dspid;
02362
02363 RPC_RPCMAKE(dbh->ch->ch, SET_DEFAULT_DATASPACE_RPC, ua);
02364
02365 status_copy(status_r, ua[2].a_status);
02366 STATUS_RETURN(status_r);
02367 }
02368 }
02369
02370 RPCStatus
02371 getDefaultIndexDataspace(DbHandle * dbh, const eyedbsm::Oid *oid, int type, int * dspid)
02372 {
02373 if (DBH_IS_LOCAL(dbh))
02374 return IDB_getDefaultIndexDataspace((DbHandle *)dbh->u.dbh, oid, type, dspid);
02375 else
02376 {
02377 ClientArg ua[IDB_MAXARGS], *pua = ua;
02378 int r, offset;
02379 start_rpc();
02380
02381 pua++->a_int = RDBHID_GET(dbh);
02382 pua++->a_oid = *oid;
02383 pua++->a_int = type;
02384 pua++;
02385
02386 RPC_RPCMAKE(dbh->ch->ch, GET_DEFAULT_INDEX_DATASPACE_RPC, ua);
02387
02388 *dspid = ua[3].a_int;
02389
02390 status_copy(status_r, ua[4].a_status);
02391 STATUS_RETURN(status_r);
02392 }
02393 }
02394
02395 RPCStatus
02396 dataspaceSetCurrentDatafile(DbHandle * dbh, int dspid, int datid)
02397 {
02398 if (DBH_IS_LOCAL(dbh))
02399 return IDB_dataspaceSetCurrentDatafile((DbHandle *)dbh->u.dbh, dspid, datid);
02400 else
02401 {
02402 ClientArg ua[IDB_MAXARGS], *pua = ua;
02403 int r, offset;
02404 pua++->a_int = RDBHID_GET(dbh);
02405 pua++->a_int = dspid;
02406 pua++->a_int = datid;
02407
02408 RPC_RPCMAKE(dbh->ch->ch, DATASPACE_SET_CURRENT_DATAFILE_RPC, ua);
02409
02410
02411 status_copy(status_r, ua[3].a_status);
02412 STATUS_RETURN(status_r);
02413 }
02414 }
02415
02416 RPCStatus
02417 dataspaceGetCurrentDatafile(DbHandle * dbh, int dspid, int * datid)
02418 {
02419 if (DBH_IS_LOCAL(dbh))
02420 return IDB_dataspaceGetCurrentDatafile((DbHandle *)dbh->u.dbh, dspid, datid);
02421 else
02422 {
02423 ClientArg ua[IDB_MAXARGS], *pua = ua;
02424 int r, offset;
02425 pua++->a_int = RDBHID_GET(dbh);
02426 pua++->a_int = dspid;
02427 pua++;
02428
02429 RPC_RPCMAKE(dbh->ch->ch, DATASPACE_GET_CURRENT_DATAFILE_RPC, ua);
02430
02431 *datid = ua[2].a_int;
02432
02433 status_copy(status_r, ua[3].a_status);
02434 STATUS_RETURN(status_r);
02435 }
02436 }
02437
02438 RPCStatus
02439 setDefaultIndexDataspace(DbHandle * dbh, const eyedbsm::Oid *idxoid, int type, int dspid)
02440 {
02441 if (DBH_IS_LOCAL(dbh))
02442 return IDB_setDefaultIndexDataspace((DbHandle *)dbh->u.dbh, idxoid, type, dspid);
02443 else
02444 {
02445 ClientArg ua[IDB_MAXARGS], *pua = ua;
02446 int r, offset;
02447 start_rpc();
02448
02449 pua++->a_int = RDBHID_GET(dbh);
02450 pua++->a_oid = *idxoid;
02451 pua++->a_int = type;
02452 pua++->a_int = dspid;
02453
02454 RPC_RPCMAKE(dbh->ch->ch, SET_DEFAULT_INDEX_DATASPACE_RPC, ua);
02455
02456 status_copy(status_r, ua[4].a_status);
02457 STATUS_RETURN(status_r);
02458 }
02459 }
02460
02461 RPCStatus
02462 getIndexLocations(DbHandle * dbh, const eyedbsm::Oid * idxoid,
02463 int type, void * locarr)
02464 {
02465 if (DBH_IS_LOCAL(dbh))
02466 return IDB_getIndexLocations((DbHandle *)dbh->u.dbh, idxoid, type, (unsigned char **)locarr, 0);
02467 else
02468 {
02469 ClientArg ua[IDB_MAXARGS], *pua = ua;
02470 int r, offset;
02471 pua++->a_int = RDBHID_GET(dbh);
02472 pua++->a_oid = *idxoid;
02473 pua++->a_int = type;
02474 pua->a_data.data = 0;
02475 pua++->a_data.size = 0;
02476
02477 RPC_RPCMAKE(dbh->ch->ch, GET_INDEX_LOCATIONS_RPC, ua);
02478
02479 if (!status_r.err)
02480 decode_locarr((unsigned char *)ua[3].a_data.data, locarr);
02481
02482 free(ua[3].a_data.data);
02483
02484 status_copy(status_r, ua[4].a_status);
02485 STATUS_RETURN(status_r);
02486 }
02487 }
02488
02489
02490 RPCStatus
02491 moveIndex(DbHandle * dbh, const eyedbsm::Oid * idxoid, int type, int dspid)
02492 {
02493 if (DBH_IS_LOCAL(dbh))
02494 return IDB_moveIndex((DbHandle *)dbh->u.dbh, idxoid, type, dspid);
02495 else
02496 {
02497 ClientArg ua[IDB_MAXARGS], *pua = ua;
02498 int r, offset;
02499 pua++->a_int = RDBHID_GET(dbh);
02500 pua++->a_oid = *idxoid;
02501 pua++->a_int = type;
02502 pua++->a_int = dspid;
02503
02504 RPC_RPCMAKE(dbh->ch->ch, MOVE_INDEX_RPC, ua);
02505
02506 status_copy(status_r, ua[4].a_status);
02507 STATUS_RETURN(status_r);
02508 }
02509 }
02510
02511 RPCStatus
02512 getInstanceClassLocations(DbHandle * dbh, const eyedbsm::Oid * clsoid,
02513 int subclasses, Data * locarr)
02514 {
02515 if (DBH_IS_LOCAL(dbh))
02516 return IDB_getInstanceClassLocations((DbHandle *)dbh->u.dbh, clsoid, subclasses, locarr, 0);
02517 else
02518 {
02519 ClientArg ua[IDB_MAXARGS], *pua = ua;
02520 int r, offset;
02521 pua++->a_int = RDBHID_GET(dbh);
02522 pua++->a_oid = *clsoid;
02523 pua++->a_int = subclasses;
02524 pua->a_data.data = 0;
02525 pua++->a_data.size = 0;
02526
02527 RPC_RPCMAKE(dbh->ch->ch, GET_INSTANCE_CLASS_LOCATIONS_RPC, ua);
02528
02529 if (!status_r.err)
02530 decode_locarr((unsigned char *)ua[3].a_data.data, locarr);
02531
02532 free(ua[3].a_data.data);
02533
02534 status_copy(status_r, ua[4].a_status);
02535 STATUS_RETURN(status_r);
02536 }
02537 }
02538
02539 RPCStatus
02540 moveInstanceClass(DbHandle * dbh, const eyedbsm::Oid * clsoid,
02541 int subclasses, int dspid)
02542 {
02543 if (DBH_IS_LOCAL(dbh))
02544 return IDB_moveInstanceClass((DbHandle *)dbh->u.dbh, clsoid, subclasses, dspid);
02545 else
02546 {
02547 ClientArg ua[IDB_MAXARGS], *pua = ua;
02548 int r, offset;
02549 pua++->a_int = RDBHID_GET(dbh);
02550 pua++->a_oid = *clsoid;
02551 pua++->a_int = subclasses;
02552 pua++->a_int = dspid;
02553
02554 RPC_RPCMAKE(dbh->ch->ch, MOVE_INSTANCE_CLASS_RPC, ua);
02555
02556 status_copy(status_r, ua[4].a_status);
02557 STATUS_RETURN(status_r);
02558 }
02559 }
02560
02561 RPCStatus
02562 getObjectsLocations(DbHandle * dbh, const eyedbsm::Oid *oids, unsigned int oid_cnt, void * locarr)
02563 {
02564 if (DBH_IS_LOCAL(dbh))
02565 return IDB_getObjectsLocations((DbHandle *)dbh->u.dbh, oids, oid_cnt, 0, (unsigned char **)locarr, 0);
02566 else
02567 {
02568 ClientArg ua[IDB_MAXARGS], *pua = ua;
02569 int r, offset;
02570 Data oid_data;
02571
02572 pua++->a_int = RDBHID_GET(dbh);
02573 oid_data = code_oids(oids, oid_cnt, &pua->a_data.size);
02574 pua++->a_data.data = oid_data;
02575 pua->a_data.data = 0;
02576 pua++->a_data.size = 0;
02577
02578 RPC_RPCMAKE(dbh->ch->ch, GET_OBJECTS_LOCATIONS_RPC, ua);
02579
02580 status_copy(status_r, ua[3].a_status);
02581 if (!status_r.err)
02582 decode_locarr((unsigned char *)ua[2].a_data.data, locarr);
02583
02584 free(oid_data);
02585 free(ua[2].a_data.data);
02586
02587 STATUS_RETURN(status_r);
02588 }
02589 }
02590
02591 RPCStatus
02592 moveObjects(DbHandle * dbh, const eyedbsm::Oid * oids, unsigned int oid_cnt,
02593 int dspid)
02594 {
02595 if (DBH_IS_LOCAL(dbh))
02596 return IDB_moveObjects((DbHandle *)dbh->u.dbh, oids, oid_cnt, dspid, 0);
02597 else
02598 {
02599 ClientArg ua[IDB_MAXARGS], *pua = ua;
02600 Data oids_data;
02601
02602 int r, offset;
02603 pua++->a_int = RDBHID_GET(dbh);
02604 oids_data = code_oids(oids, oid_cnt, &pua->a_data.size);
02605 pua++->a_data.data = oids_data;
02606 pua++->a_int = dspid;
02607
02608 RPC_RPCMAKE(dbh->ch->ch, MOVE_OBJECTS_RPC, ua);
02609
02610 free(oids_data);
02611 status_copy(status_r, ua[3].a_status);
02612 STATUS_RETURN(status_r);
02613 }
02614 }
02615
02616 RPCStatus
02617 getAttributeLocations(DbHandle * dbh, const eyedbsm::Oid * clsoid, int attrnum, Data * locarr)
02618 {
02619 if (DBH_IS_LOCAL(dbh))
02620 return IDB_getAttributeLocations((DbHandle *)dbh->u.dbh, clsoid, attrnum, locarr, 0);
02621 else
02622 {
02623 ClientArg ua[IDB_MAXARGS], *pua = ua;
02624 int r, offset;
02625 pua++->a_int = RDBHID_GET(dbh);
02626 pua++->a_oid = *clsoid;
02627 pua++->a_int = attrnum;
02628 pua->a_data.data = 0;
02629 pua++->a_data.size = 0;
02630
02631 RPC_RPCMAKE(dbh->ch->ch, GET_ATTRIBUTE_LOCATIONS_RPC, ua);
02632
02633 *locarr = (unsigned char *)ua[3].a_data.data;
02634
02635 status_copy(status_r, ua[4].a_status);
02636 STATUS_RETURN(status_r);
02637 }
02638 }
02639
02640 RPCStatus
02641 moveAttribute(DbHandle * dbh, const eyedbsm::Oid * clsoid, int attrnum, int dspid)
02642 {
02643 if (DBH_IS_LOCAL(dbh))
02644 return IDB_moveAttribute((DbHandle *)dbh->u.dbh, clsoid, attrnum, dspid);
02645 else
02646 {
02647 ClientArg ua[IDB_MAXARGS], *pua = ua;
02648 int r, offset;
02649 pua++->a_int = RDBHID_GET(dbh);
02650 pua++->a_oid = *clsoid;
02651 pua++->a_int = attrnum;
02652 pua++->a_int = dspid;
02653
02654 RPC_RPCMAKE(dbh->ch->ch, MOVE_ATTRIBUTE_RPC, ua);
02655
02656
02657 status_copy(status_r, ua[4].a_status);
02658 STATUS_RETURN(status_r);
02659 }
02660 }
02661
02662 RPCStatus
02663 createDatafile(DbHandle * dbh, const char * datfile, const char * name, int maxsize, int slotsize, int dtype)
02664 {
02665 if (DBH_IS_LOCAL(dbh))
02666 return IDB_createDatafile((DbHandle *)dbh->u.dbh, datfile, name, maxsize, slotsize, dtype);
02667 else
02668 {
02669 ClientArg ua[IDB_MAXARGS], *pua = ua;
02670 int r, offset;
02671 pua++->a_int = RDBHID_GET(dbh);
02672 pua++->a_string = (char *)datfile;
02673 pua++->a_string = (char *)name;
02674 pua++->a_int = maxsize;
02675 pua++->a_int = slotsize;
02676 pua++->a_int = dtype;
02677
02678 RPC_RPCMAKE(dbh->ch->ch, CREATE_DATAFILE_RPC, ua);
02679
02680 status_copy(status_r, ua[6].a_status);
02681 STATUS_RETURN(status_r);
02682 }
02683 }
02684
02685 RPCStatus
02686 deleteDatafile(DbHandle * dbh, int datid)
02687 {
02688 if (DBH_IS_LOCAL(dbh))
02689 return IDB_deleteDatafile((DbHandle *)dbh->u.dbh, datid);
02690 else
02691 {
02692 ClientArg ua[IDB_MAXARGS], *pua = ua;
02693 int r, offset;
02694 pua++->a_int = RDBHID_GET(dbh);
02695 pua++->a_int = datid;
02696
02697 RPC_RPCMAKE(dbh->ch->ch, DELETE_DATAFILE_RPC, ua);
02698
02699
02700 status_copy(status_r, ua[2].a_status);
02701 STATUS_RETURN(status_r);
02702 }
02703 }
02704
02705 RPCStatus
02706 moveDatafile(DbHandle * dbh, int datid, const char * datafile)
02707 {
02708 if (DBH_IS_LOCAL(dbh))
02709 return IDB_moveDatafile((DbHandle *)dbh->u.dbh, datid, datafile);
02710 else
02711 {
02712 ClientArg ua[IDB_MAXARGS], *pua = ua;
02713 int r, offset;
02714 pua++->a_int = RDBHID_GET(dbh);
02715 pua++->a_int = datid;
02716 pua++->a_string = (char *)datafile;
02717
02718 RPC_RPCMAKE(dbh->ch->ch, MOVE_DATAFILE_RPC, ua);
02719
02720
02721 status_copy(status_r, ua[3].a_status);
02722 STATUS_RETURN(status_r);
02723 }
02724 }
02725
02726 RPCStatus
02727 defragmentDatafile(DbHandle * dbh, int datid)
02728 {
02729 if (DBH_IS_LOCAL(dbh))
02730 return IDB_defragmentDatafile((DbHandle *)dbh->u.dbh, datid);
02731 else
02732 {
02733 ClientArg ua[IDB_MAXARGS], *pua = ua;
02734 int r, offset;
02735 pua++->a_int = RDBHID_GET(dbh);
02736 pua++->a_int = datid;
02737
02738 RPC_RPCMAKE(dbh->ch->ch, DEFRAGMENT_DATAFILE_RPC, ua);
02739
02740
02741 status_copy(status_r, ua[2].a_status);
02742 STATUS_RETURN(status_r);
02743 }
02744 }
02745
02746 RPCStatus
02747 resizeDatafile(DbHandle * dbh, int datid, unsigned int size)
02748 {
02749 if (DBH_IS_LOCAL(dbh))
02750 return IDB_resizeDatafile((DbHandle *)dbh->u.dbh, datid, size);
02751 else
02752 {
02753 ClientArg ua[IDB_MAXARGS], *pua = ua;
02754 int r, offset;
02755 pua++->a_int = RDBHID_GET(dbh);
02756 pua++->a_int = datid;
02757 pua++->a_int = size;
02758
02759 RPC_RPCMAKE(dbh->ch->ch, RESIZE_DATAFILE_RPC, ua);
02760
02761
02762 status_copy(status_r, ua[3].a_status);
02763 STATUS_RETURN(status_r);
02764 }
02765 }
02766
02767 RPCStatus
02768 getDatafileInfo(DbHandle * dbh, int datid, void * info)
02769 {
02770 if (DBH_IS_LOCAL(dbh))
02771 return IDB_getDatafileInfo((DbHandle *)dbh->u.dbh, datid, (unsigned char **)info, 0);
02772 else
02773 {
02774 ClientArg ua[IDB_MAXARGS], *pua = ua;
02775 int r, offset;
02776 pua++->a_int = RDBHID_GET(dbh);
02777 pua++->a_int = datid;
02778 pua->a_data.data = 0;
02779 pua++->a_data.size = 0;
02780
02781 RPC_RPCMAKE(dbh->ch->ch, GET_DATAFILEI_NFO_RPC, ua);
02782
02783 if (!status_r.err)
02784 decode_datinfo((unsigned char *)ua[2].a_data.data, info);
02785
02786 free(ua[2].a_data.data);
02787 status_copy(status_r, ua[3].a_status);
02788 STATUS_RETURN(status_r);
02789 }
02790 }
02791
02792 RPCStatus
02793 renameDatafile(DbHandle * dbh, int datid, const char * name)
02794 {
02795 if (DBH_IS_LOCAL(dbh))
02796 return IDB_renameDatafile((DbHandle *)dbh->u.dbh, datid, name);
02797 else
02798 {
02799 ClientArg ua[IDB_MAXARGS], *pua = ua;
02800 int r, offset;
02801 pua++->a_int = RDBHID_GET(dbh);
02802 pua++->a_int = datid;
02803 pua++->a_string = (char *)name;
02804
02805 RPC_RPCMAKE(dbh->ch->ch, RENAME_DATAFILE_RPC, ua);
02806
02807
02808 status_copy(status_r, ua[3].a_status);
02809 STATUS_RETURN(status_r);
02810 }
02811 }
02812
02813 RPCStatus
02814 createDataspace(DbHandle * dbh, const char * dspname, void *datafiles,
02815 unsigned int datafile_cnt)
02816 {
02817 if (DBH_IS_LOCAL(dbh))
02818 return IDB_createDataspace((DbHandle *)dbh->u.dbh, dspname, datafiles, datafile_cnt, 0);
02819 else
02820 {
02821 ClientArg ua[IDB_MAXARGS], *pua = ua;
02822 int r, offset;
02823 Data datfile_data;
02824
02825 pua++->a_int = RDBHID_GET(dbh);
02826 pua++->a_string = (char *)dspname;
02827 datfile_data = code_datafiles(datafiles, datafile_cnt,
02828 &pua->a_data.size);
02829 pua++->a_data.data = datfile_data;
02830
02831 RPC_RPCMAKE(dbh->ch->ch, CREATE_DATASPACE_RPC, ua);
02832
02833 status_copy(status_r, ua[3].a_status);
02834
02835 free(datfile_data);
02836 STATUS_RETURN(status_r);
02837 }
02838 }
02839
02840 RPCStatus
02841 updateDataspace(DbHandle * dbh, int dspid, void *datafiles,
02842 unsigned int datafile_cnt, int flags, int orphan_dspid)
02843 {
02844 if (DBH_IS_LOCAL(dbh))
02845 return IDB_updateDataspace((DbHandle *)dbh->u.dbh, dspid, datafiles, datafile_cnt, 0, flags, orphan_dspid);
02846 else
02847 {
02848 ClientArg ua[IDB_MAXARGS], *pua = ua;
02849 int r, offset;
02850 Data datfile_data;
02851
02852 pua++->a_int = RDBHID_GET(dbh);
02853 pua++->a_int = dspid;
02854 datfile_data = code_datafiles(datafiles, datafile_cnt,
02855 &pua->a_data.size);
02856 pua++->a_data.data = datfile_data;
02857 pua++->a_int = flags;
02858 pua++->a_int = orphan_dspid;
02859
02860 RPC_RPCMAKE(dbh->ch->ch, UPDATE_DATASPACE_RPC, ua);
02861
02862 status_copy(status_r, ua[5].a_status);
02863 free(datfile_data);
02864 STATUS_RETURN(status_r);
02865 }
02866 }
02867
02868 RPCStatus
02869 deleteDataspace(DbHandle * dbh, int dspid)
02870 {
02871 if (DBH_IS_LOCAL(dbh))
02872 return IDB_deleteDataspace((DbHandle *)dbh->u.dbh, dspid);
02873 else
02874 {
02875 ClientArg ua[IDB_MAXARGS], *pua = ua;
02876 int r, offset;
02877 pua++->a_int = RDBHID_GET(dbh);
02878 pua++->a_int = dspid;
02879
02880 RPC_RPCMAKE(dbh->ch->ch, DELETE_DATASPACE_RPC, ua);
02881
02882
02883 status_copy(status_r, ua[2].a_status);
02884 STATUS_RETURN(status_r);
02885 }
02886 }
02887
02888 RPCStatus
02889 renameDataspace(DbHandle * dbh, int dspid, const char * name)
02890 {
02891 if (DBH_IS_LOCAL(dbh))
02892 return IDB_renameDataspace((DbHandle *)dbh->u.dbh, dspid, name);
02893 else
02894 {
02895 ClientArg ua[IDB_MAXARGS], *pua = ua;
02896 int r, offset;
02897 pua++->a_int = RDBHID_GET(dbh);
02898 pua++->a_int = dspid;
02899 pua++->a_string = (char *)name;
02900
02901 RPC_RPCMAKE(dbh->ch->ch, RENAME_DATASPACE_RPC, ua);
02902
02903 status_copy(status_r, ua[3].a_status);
02904 STATUS_RETURN(status_r);
02905 }
02906 }
02907
02908 RPCStatus
02909 indexGetCount(DbHandle * dbh, const eyedbsm::Oid * idxoid, int * cnt)
02910 {
02911 if (DBH_IS_LOCAL(dbh))
02912 return IDB_indexGetCount((DbHandle *)dbh->u.dbh, idxoid, cnt);
02913 else
02914 {
02915 ClientArg ua[IDB_MAXARGS], *pua = ua;
02916 int r, offset;
02917 pua++->a_int = RDBHID_GET(dbh);
02918 pua++->a_oid = *idxoid;
02919 pua++;
02920
02921 RPC_RPCMAKE(dbh->ch->ch, INDEX_GET_COUNT_RPC, ua);
02922
02923 *cnt = ua[2].a_int;
02924
02925 status_copy(status_r, ua[3].a_status);
02926 STATUS_RETURN(status_r);
02927 }
02928 }
02929
02930 RPCStatus
02931 indexGetStats(DbHandle * dbh, const eyedbsm::Oid * idxoid, Data * stats)
02932 {
02933 if (DBH_IS_LOCAL(dbh))
02934 return IDB_indexGetStats((DbHandle *)dbh->u.dbh, idxoid, stats, 0);
02935 else
02936 {
02937 ClientArg ua[IDB_MAXARGS], *pua = ua;
02938 int r, offset;
02939 pua++->a_int = RDBHID_GET(dbh);
02940 pua++->a_oid = *idxoid;
02941 pua->a_data.data = 0;
02942 pua++->a_data.size = 0;
02943
02944 RPC_RPCMAKE(dbh->ch->ch, INDEX_GET_STATS_RPC, ua);
02945
02946 status_copy(status_r, ua[3].a_status);
02947
02948 if (!status_r.err)
02949 decode_index_stats((unsigned char *)ua[2].a_data.data, stats);
02950
02951 free(ua[2].a_data.data);
02952 STATUS_RETURN(status_r);
02953 }
02954 }
02955
02956 RPCStatus
02957 indexSimulStats(DbHandle * dbh, const eyedbsm::Oid * idxoid,
02958 const Data impl, Size impl_size, Data * stats)
02959 {
02960 if (DBH_IS_LOCAL(dbh))
02961 return IDB_indexSimulStats((DbHandle *)dbh->u.dbh, idxoid, impl, 0, stats, 0);
02962 else
02963 {
02964 ClientArg ua[IDB_MAXARGS], *pua = ua;
02965 int r, offset;
02966 pua++->a_int = RDBHID_GET(dbh);
02967 pua++->a_oid = *idxoid;
02968 pua->a_data.data = (const Data)impl;
02969 pua++->a_data.size = impl_size;
02970 pua->a_data.data = 0;
02971 pua++->a_data.size = 0;
02972
02973 RPC_RPCMAKE(dbh->ch->ch, INDEX_SIMUL_STATS_RPC, ua);
02974
02975 status_copy(status_r, ua[4].a_status);
02976 if (!status_r.err)
02977 decode_index_stats((unsigned char *)ua[3].a_data.data, stats);
02978
02979 free(ua[3].a_data.data);
02980 STATUS_RETURN(status_r);
02981 }
02982 }
02983
02984 RPCStatus
02985 collectionGetImplStats(DbHandle * dbh, int idxtype,
02986 const eyedbsm::Oid * idxoid, Data * stats)
02987 {
02988 if (DBH_IS_LOCAL(dbh))
02989 return IDB_collectionGetImplStats((DbHandle *)dbh->u.dbh, idxtype, idxoid, stats, 0);
02990 else
02991 {
02992 ClientArg ua[IDB_MAXARGS], *pua = ua;
02993 int r, offset;
02994 pua++->a_int = RDBHID_GET(dbh);
02995 pua++->a_int = idxtype;
02996 pua++->a_oid = *idxoid;
02997 pua->a_data.data = 0;
02998 pua++->a_data.size = 0;
02999
03000 RPC_RPCMAKE(dbh->ch->ch, COLLECTION_GET_IMPLSTATS_RPC, ua);
03001
03002 status_copy(status_r, ua[4].a_status);
03003 if (!status_r.err)
03004 decode_index_stats((unsigned char *)ua[3].a_data.data, stats);
03005
03006 free(ua[3].a_data.data);
03007 STATUS_RETURN(status_r);
03008 }
03009 }
03010
03011 RPCStatus
03012 collectionSimulImplStats(DbHandle * dbh, int idxtype, const eyedbsm::Oid * idxoid, const Data impl, Size impl_size, Data * stats)
03013 {
03014 if (DBH_IS_LOCAL(dbh))
03015 return IDB_collectionSimulImplStats((DbHandle *)dbh->u.dbh, idxtype, idxoid, impl, 0,
03016 stats, 0);
03017 else
03018 {
03019 ClientArg ua[IDB_MAXARGS], *pua = ua;
03020 int r, offset;
03021 pua++->a_int = RDBHID_GET(dbh);
03022 pua++->a_int = idxtype;
03023 pua++->a_oid = *idxoid;
03024 pua->a_data.data = (const Data)impl;
03025 pua++->a_data.size = impl_size;
03026 pua->a_data.data = 0;
03027 pua++->a_data.size = 0;
03028
03029 RPC_RPCMAKE(dbh->ch->ch, COLLECTION_SIMUL_IMPLSTATS_RPC, ua);
03030
03031 status_copy(status_r, ua[5].a_status);
03032 if (!status_r.err)
03033 decode_index_stats((unsigned char *)ua[4].a_data.data, stats);
03034
03035 free(ua[4].a_data.data);
03036 STATUS_RETURN(status_r);
03037 }
03038 }
03039
03040 RPCStatus
03041 indexGetImplementation(DbHandle * dbh, const eyedbsm::Oid * idxoid, Data * impl)
03042 {
03043 if (DBH_IS_LOCAL(dbh))
03044 return IDB_indexGetImplementation((DbHandle *)dbh->u.dbh, idxoid, impl, 0);
03045 else
03046 {
03047 ClientArg ua[IDB_MAXARGS], *pua = ua;
03048 int r, offset;
03049 pua++->a_int = RDBHID_GET(dbh);
03050 pua++->a_oid = *idxoid;
03051 pua->a_data.data = 0;
03052 pua++->a_data.size = 0;
03053
03054 RPC_RPCMAKE(dbh->ch->ch, INDEX_GET_IMPL_RPC, ua);
03055
03056 status_copy(status_r, ua[3].a_status);
03057 if (!status_r.err)
03058 decode_index_impl((unsigned char *)ua[2].a_data.data, impl);
03059
03060 free(ua[2].a_data.data);
03061 STATUS_RETURN(status_r);
03062 }
03063 }
03064
03065 RPCStatus
03066 collectionGetImplementation(DbHandle * dbh, int idxtype, const eyedbsm::Oid * idxoid, Data * impl)
03067 {
03068 if (DBH_IS_LOCAL(dbh))
03069 return IDB_collectionGetImplementation((DbHandle *)dbh->u.dbh, idxtype, idxoid, impl, 0);
03070 else
03071 {
03072 ClientArg ua[IDB_MAXARGS], *pua = ua;
03073 int r, offset;
03074 pua++->a_int = RDBHID_GET(dbh);
03075 pua++->a_int = idxtype;
03076 pua++->a_oid = *idxoid;
03077 pua->a_data.data = 0;
03078 pua++->a_data.size = 0;
03079
03080 RPC_RPCMAKE(dbh->ch->ch, COLLECTION_GET_IMPL_RPC, ua);
03081
03082 status_copy(status_r, ua[4].a_status);
03083 if (!status_r.err)
03084 decode_index_impl((unsigned char *)ua[3].a_data.data, impl);
03085
03086 free(ua[3].a_data.data);
03087 STATUS_RETURN(status_r);
03088 }
03089 }
03090
03091 RPCStatus
03092 setMaxObjCount(DbHandle * dbh, int obj_cnt)
03093 {
03094 if (DBH_IS_LOCAL(dbh))
03095 return IDB_setMaxObjCount((DbHandle *)dbh->u.dbh, obj_cnt);
03096 else {
03097 ClientArg ua[IDB_MAXARGS], *pua = ua;
03098 int r, offset;
03099 pua++->a_int = RDBHID_GET(dbh);
03100 pua++->a_int = obj_cnt;
03101
03102 RPC_RPCMAKE(dbh->ch->ch, SET_MAXOBJCOUNT_RPC, ua);
03103
03104
03105 status_copy(status_r, ua[2].a_status);
03106 STATUS_RETURN(status_r);
03107 }
03108 }
03109
03110 RPCStatus
03111 getMaxObjCount(DbHandle * dbh, int * obj_cnt)
03112 {
03113 if (DBH_IS_LOCAL(dbh))
03114 return IDB_getMaxObjCount((DbHandle *)dbh->u.dbh, obj_cnt);
03115 else {
03116 ClientArg ua[IDB_MAXARGS], *pua = ua;
03117 int r, offset;
03118 pua++->a_int = RDBHID_GET(dbh);
03119 pua++;
03120
03121 RPC_RPCMAKE(dbh->ch->ch, GET_MAXOBJCOUNT_RPC, ua);
03122
03123 *obj_cnt = ua[1].a_int;
03124
03125 status_copy(status_r, ua[2].a_status);
03126 STATUS_RETURN(status_r);
03127 }
03128 }
03129
03130 RPCStatus
03131 setLogSize(DbHandle * dbh, int size)
03132 {
03133 if (DBH_IS_LOCAL(dbh))
03134 return IDB_setLogSize((DbHandle *)dbh->u.dbh, size);
03135 else {
03136 ClientArg ua[IDB_MAXARGS], *pua = ua;
03137 int r, offset;
03138 pua++->a_int = RDBHID_GET(dbh);
03139 pua++->a_int = size;
03140
03141 RPC_RPCMAKE(dbh->ch->ch, SET_LOGSIZE_RPC, ua);
03142
03143
03144 status_copy(status_r, ua[2].a_status);
03145 STATUS_RETURN(status_r);
03146 }
03147 }
03148
03149 RPCStatus
03150 getLogSize(DbHandle * dbh, int * size)
03151 {
03152 if (DBH_IS_LOCAL(dbh))
03153 return IDB_getLogSize((DbHandle *)dbh->u.dbh, size);
03154 else {
03155 ClientArg ua[IDB_MAXARGS], *pua = ua;
03156 int r, offset;
03157 pua++->a_int = RDBHID_GET(dbh);
03158 pua++;
03159
03160 RPC_RPCMAKE(dbh->ch->ch, GET_LOGSIZE_RPC, ua);
03161
03162 *size = ua[1].a_int;
03163
03164 status_copy(status_r, ua[2].a_status);
03165 STATUS_RETURN(status_r);
03166 }
03167 }
03168 }