Beispiel #1
0
static void
print_col(MdbHandle *h, MdbColumn *col, char *buffer, int hex)
{
	char *s;
	dbg(1,"type=%d\n", col->col_type);
	switch (col->col_type) {
	case MDB_BOOL:
		strcpy(buffer, mdb_pg_get_byte(h, col->cur_value_start) ? "True" : "False");
		break;
	case MDB_BYTE:
		sprintf(buffer, "%d", mdb_pg_get_byte(h, col->cur_value_start));
		break;
	case MDB_LONGINT:
		if (hex)
			sprintf(buffer, "0x%lx", mdb_pg_get_int32(h, col->cur_value_start));
		else
			sprintf(buffer, "%ld", mdb_pg_get_int32(h, col->cur_value_start));
		break;
	case MDB_DOUBLE:
		sprintf(buffer, "%f", mdb_pg_get_double(h, col->cur_value_start));
		break;
	case MDB_TEXT:
		dbg(1,"pg_buf %p start %d len %d\n", h->pg_buf, col->cur_value_start, col->cur_value_len);
		if (col->cur_value_len) {
			s=mdb_col_to_string (h, h->pg_buf, col->cur_value_start, col->col_type, col->cur_value_len);
			dbg(1,"s=%p\n", s);
			sprintf(buffer, "%s", s);
		}
		break;
	default:
		sprintf(buffer, "unknown (%d)", col->col_type);
	}
}
Beispiel #2
0
static MdbProperties *
mdb_read_props(MdbHandle *mdb, GPtrArray *names, gchar *kkd, int len)
{
	guint32 record_len, name_len;
	int pos = 0;
	int elem, dtype, dsize;
	gchar *name, *value;
	MdbProperties *props;
	int i=0;

#if MDB_DEBUG
	mdb_buffer_dump(kkd, 0, len);
#endif
	pos = 0;

	record_len = mdb_get_int16(kkd, pos);
	pos += 4;
	name_len = mdb_get_int16(kkd, pos);
	pos += 2;
	props = mdb_alloc_props();
	if (name_len) {
		props->name = g_malloc(3*name_len + 1);
		mdb_unicode2ascii(mdb, kkd+pos, name_len, props->name, 3*name_len);
		mdb_debug(MDB_DEBUG_PROPS,"prop block named: %s", props->name);
	}
	pos += name_len;

	props->hash = g_hash_table_new(g_str_hash, g_str_equal);

	while (pos < len) {
		record_len = mdb_get_int16(kkd, pos);
		dtype = kkd[pos + 3];
		elem = mdb_get_int16(kkd, pos + 4);
		dsize = mdb_get_int16(kkd, pos + 6);
		value = g_malloc(dsize + 1);
		strncpy(value, &kkd[pos + 8], dsize);
		value[dsize] = '\0';
		name = g_ptr_array_index(names,elem);
		if (mdb_get_option(MDB_DEBUG_PROPS)) {
			fprintf(stderr, "%02d ",i++);
			mdb_debug(MDB_DEBUG_PROPS,"elem %d (%s) dsize %d dtype %d", elem, name, dsize, dtype);
			mdb_buffer_dump(value, 0, dsize);
		}
		if (dtype == MDB_MEMO) dtype = MDB_TEXT;
		if (dtype == MDB_BOOL) {
			g_hash_table_insert(props->hash, g_strdup(name),
				g_strdup(kkd[pos + 8] ? "yes" : "no"));
		} else {
			g_hash_table_insert(props->hash, g_strdup(name),
			  mdb_col_to_string(mdb, kkd, pos + 8, dtype, dsize));
		}
		g_free(value);
		pos += record_len;
	}
	return props;
	
}
Beispiel #3
0
static size_t
mdb_xfer_bound_data(MdbHandle *mdb, int start, MdbColumn *col, int len)
{
int ret;
	
		
	
	if (len) {
		col->cur_value_start = start;
		col->cur_value_len = len;
	} else {
		col->cur_value_start = 0;
		col->cur_value_len = 0;
	}
	if (col->bind_ptr) {
		if (!len) {
			strcpy(col->bind_ptr, "");
		} else {
			
			char *str;
			if (col->col_type == MDB_NUMERIC) {
                /*fprintf(stdout,"MDB_NUMERIC\n");*/
				str = mdb_num_to_string(mdb, start,
					col->col_type, col->col_prec,
					col->col_scale);
                /*fprintf(stdout,"mdb_num_to_string()=%d '%s'\n", strlen(str), str);*/
			} else {
                /*fprintf(stdout,"!MDB_NUMERIC : %d len=%d\n", col->col_type, len);*/
				str = mdb_col_to_string(mdb, mdb->pg_buf, start,
					col->col_type, len);
                /*if (strlen(str) > MDB_BIND_SIZE) {
                    fprintf(stdout, "!!!!!!\n");
                }
                fprintf(stdout,"mdb_col_to_string()=%d '%s'\n", strlen(str), str);*/
			}
			strcpy(col->bind_ptr, str);
			g_free(str);
		}
		ret = strlen(col->bind_ptr);
		if (col->len_ptr) {
			*col->len_ptr = ret;
		}
		return ret;
	}
	return 0;
}
Beispiel #4
0
static size_t
mdb_xfer_bound_data(MdbHandle *mdb, int start, MdbColumn *col, int len)
{
int ret;
	//if (!strcmp("Name",col->name)) {
		//printf("start %d %d\n",start, len);
	//}
	if (len) {
		col->cur_value_start = start;
		col->cur_value_len = len;
	} else {
		col->cur_value_start = 0;
		col->cur_value_len = 0;
	}
	if (col->bind_ptr) {
		if (!len) {
			strcpy(col->bind_ptr, "");
		} else {
			//fprintf(stdout,"len %d size %d\n",len, col->col_size);
			char *str;
			if (col->col_type == MDB_NUMERIC) {
				str = mdb_num_to_string(mdb, start,
					col->col_type, col->col_prec,
					col->col_scale);
			} else {
				str = mdb_col_to_string(mdb, mdb->pg_buf, start,
					col->col_type, len);
			}
			strcpy(col->bind_ptr, str);
			g_free(str);
		}
		ret = strlen(col->bind_ptr);
		if (col->len_ptr) {
			*col->len_ptr = ret;
		}
		return ret;
	}
	return 0;
}