/* store_result() - store record from database in B-tree * this function is also a valid callback for use with sqlite3_exec() * pextra is again unused * * needs to return zero (nonzero aborts SQL query) */ int store_result(void * pextra, int nfields, char ** arrvalues, char ** arrfieldnames) { int n; /* allocate record on heap */ struct s_record * prec = alloc_record(); prec->irecord = record_count+1; for (n = 0; n < nfields; n++) { if (strcasecmp(arrfieldnames[n], "MovieTitle") == 0) prec->name = strdup(arrvalues[n]); /* key */ else if (strcasecmp(arrfieldnames[n], "MovieCategory") == 0) prec->category = strdup(arrvalues[n]); else if (strcasecmp(arrfieldnames[n], "ProductionYear") == 0) prec->year = atoi(arrvalues[n]); else if (strcasecmp(arrfieldnames[n], "Format") == 0) prec->format = strdup(arrvalues[n]); else if (strcasecmp(arrfieldnames[n], "Language") == 0) prec->language = strdup(arrvalues[n]); else if (strcasecmp(arrfieldnames[n], "Web") == 0) prec->url = strdup(arrvalues[n]); } /* add record to B-tree */ if (add_element(prec->name, prec) != NULL) { /* element already exists -- don't add record */ printf("Duplicate record exists: "); /* diagnostic value only */ display_record(prec, stdout); free_record(prec); } return 0; }
record alloc_intint(val_t rec1, val_t rec2) { val_t fields[2]; fields[0] = rec1; fields[1] = rec2; return alloc_record(fields, 2); }
static ptr_t Flockrep(struct flock* flock) { val_t fields[5]; fields[0] = (val_t) flock->l_type; fields[1] = (val_t) flock->l_whence; fields[2] = (val_t) flock->l_start; fields[3] = (val_t) flock->l_len; fields[4] = (val_t) flock->l_pid; return alloc_record(fields, arraysize(fields)); }
static ptr_t Termiorep(struct termios* termios) { val_t fields[6]; fields[0] = (val_t) termios->c_iflag; fields[1] = (val_t) termios->c_oflag; fields[2] = (val_t) termios->c_cflag; fields[3] = (val_t) termios->c_lflag; fields[4] = (val_t) cfgetispeed(termios); fields[5] = (val_t) cfgetospeed(termios); return alloc_record(fields, arraysize(fields)); }
int DbDumperWriter::push_record(const char *data, int lenth) { int ret = OB_SUCCESS; RecordInfo *rec = alloc_record(data, lenth); if (rec == NULL) { TBSYS_LOG(ERROR, "Can't allocate records, len:%d", lenth); ret = OB_ERROR; } else { CThreadGuard gard(&records_lock_); pushed_lines_++; records_.push_back(rec); sem_post(&sem_empty_); } return ret; }