亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? resultset.cpp

?? 開發(fā)環(huán)境為VC++ 的數(shù)據(jù)庫管理系統(tǒng)
?? CPP
字號:
// OraLib 0.0.3 / 2002-06-30
//	resultset.cpp
//
//	http://606u.dir.bg/
//	606u@dir.bg
#include "stdafx.h"

#include "_p.h"

#include "oralib.h"


namespace oralib {


resultset::resultset (
	IN OCIStmt *rs,
	IN connection *use,
	IN OPTIONAL ub2 fetch_size) // = FETCH_SIZE
{
	initialize ();
	try
	{
		attach (
			rs,
			use,
			fetch_size);
	}
	catch (...)
	{
		cleanup ();
		throw;
	}
}


resultset::~resultset ()
{
	cleanup ();
}


void
resultset::initialize (void)
{
	conn = NULL;
	rs_handle = NULL;
	stmt = NULL;
	fetch_count = 0;
	rows_fetched = 0;
	current_row = 0;
	is_eod = false;
	is_described = false;
	is_defined = false;
}


void
resultset::cleanup (void)
{
	// free columns
	for (Columns::iterator i=columns.begin (); i!=columns.end (); ++i)
		delete (*i);
	columns.clear ();

	// when resultset is created by statement.select - freed by statement object
	// when created by parameter.as_resultset - freed by parameter object
	if (rs_handle) rs_handle = NULL;

	// statement attached to be released?
	if (stmt) stmt->release (), stmt = NULL;
}


void
resultset::attach (
	IN OCIStmt *rs,
	IN connection *use,
	IN OPTIONAL ub2 fetch_size)	// = FETCH_SIZE
{
	conn = use;
	rs_handle = rs;
	stmt = NULL;
	fetch_count = fetch_size;

	rows_fetched = 0;
	current_row = 0;
	is_eod = false;

	is_described = false;
	is_defined = false;

	describe ();
	define ();
}


ub4
resultset::columns_count (void)
{
	sword	result;
	ub4		count;

	count = 0;
	result = OCIAttrGet (
		rs_handle,
		OCI_HTYPE_STMT,
		&count,
		NULL,
		OCI_ATTR_PARAM_COUNT,
		conn->error_handle);
	if (result == OCI_SUCCESS)
		return (count);
	else
		throw (oralib::error (result, conn->error_handle, __FILE__, __LINE__));
}


ub4
resultset::rows_count (void)
{
	sword	result;
	ub4		count;

	count = 0;
	result = OCIAttrGet (
		rs_handle,
		OCI_HTYPE_STMT,
		&count,
		NULL,
		OCI_ATTR_ROW_COUNT,
		conn->error_handle);
	if (result == OCI_SUCCESS)
		return (count);
	else
		throw (oralib::error (result, conn->error_handle, __FILE__, __LINE__));
}


void
resultset::describe (void)
{
	sword		result;
	ub4			count, i;

	count = columns_count ();
	columns.reserve (count);
	for (i=0; i<count; i++)
	{
		// get next column info
		OCIParam	*param_handle = NULL;
		text		*param_name = NULL;
		ub4			name_len = 0;
		ub2			oci_type = 0;
		ub4			size = 0;

		result = OCIParamGet (
			rs_handle,
			OCI_HTYPE_STMT,
			conn->error_handle,
			reinterpret_cast <void **> (&param_handle),
			i + 1);	// first is 1

		if (result == OCI_SUCCESS)
		{
			// column name
			result = OCIAttrGet (
				param_handle,
				OCI_DTYPE_PARAM,
				&param_name,
				&name_len,
				OCI_ATTR_NAME,
				conn->error_handle);
		}

		if (result == OCI_SUCCESS)
		{
			// oci data type
			result = OCIAttrGet (
				param_handle,
				OCI_DTYPE_PARAM,
				&oci_type,
				NULL,
				OCI_ATTR_DATA_TYPE,
				conn->error_handle);
		}

		if (result == OCI_SUCCESS)
		{
			// maximum data size in bytes
			result = OCIAttrGet (
				param_handle,
				OCI_DTYPE_PARAM,
				&size,
				NULL,
				OCI_ATTR_DATA_SIZE,
				conn->error_handle);
		}

		if (param_handle)
			// ignore result code
			OCIDescriptorFree (
				param_handle,
				OCI_DTYPE_PARAM);

		// error situation?
		if (result != OCI_SUCCESS)
			throw (oralib::error (result, conn->error_handle, __FILE__, __LINE__));

		// setup new column, alloc memory for fetch buffer, indicators and data lens;
		// column.constructor could possibly throw an out-of-memory exception
		// in this case resultset will be partially initialized
		column	*c = new column (
			this,
			reinterpret_cast <const char *> (param_name),
			name_len,
			oci_type,
			size,
			fetch_count);
		
		// add to array AND to map
		// (makes possible to address columns by name AND index)
		columns.push_back (c);
		columns_map [c->col_name] = c;
	}

	is_described = true;
	is_defined = false;
}


void
resultset::define (void)
{
	Columns::iterator	i;
	sword	result;
	ub4		position;

	// define all columns
	position = 1;
	result = OCI_SUCCESS;
	for (i=columns.begin (); result == OCI_SUCCESS && i!=columns.end (); ++i)
	{
		result = OCIDefineByPos (
			rs_handle,
			&((*i)->define_handle),
			conn->error_handle,
			position++,
			(*i)->fetch_buffer,
			(*i)->size,			// fetch size for a single row (NOT for several)
			(*i)->oci_type,
			(*i)->indicators,
			(*i)->data_lens,	// will be NULL for non-text columns
			NULL,				// ptr to array of column-level return codes
			OCI_DEFAULT);

#if defined (UNICODE)
		// request text columns as unicode (2.0)
		if (result == OCI_SUCCESS &&
			(*i)->col_type == DT_TEXT)
		{
			ub4	value = OCI_UCS2ID;
			result = OCIAttrSet (
				(*i)->define_handle,
				OCI_HTYPE_DEFINE,
				&value,
				sizeof (value),
				OCI_ATTR_CHARSET_ID,
				conn->error_handle);
		}
#endif // UNICODE defined?

		if (result != OCI_SUCCESS)
			throw (oralib::error (result, conn->error_handle, __FILE__, __LINE__, (*i)->col_name.c_str ()));
	}
	is_defined = true;
}


void
resultset::attach_statement (
	IN statement *select)
{
	// prerequisites
	ASSERT (select);

	stmt = select;
}


void
resultset::fetch_rows (void)
{
	// prerequisites
	ASSERT (is_described && is_defined);

	sword	result;
	ub4		old_rows_count = rows_fetched;

	result = OCIStmtFetch (
		rs_handle,
		conn->error_handle,
		fetch_count,
		OCI_FETCH_NEXT,
		OCI_DEFAULT);
	if (result == OCI_SUCCESS ||
		result == OCI_NO_DATA ||
		result == OCI_SUCCESS_WITH_INFO)
	{
		rows_fetched = rows_count ();
		if (rows_fetched - old_rows_count != fetch_count)
			is_eod = true;
	}
	else
		throw (oralib::error (result, conn->error_handle, __FILE__, __LINE__));
}


bool
resultset::next (void)
{
	// prerequisites
	ASSERT (is_described && is_defined);

	current_row++;
	if (current_row >= rows_fetched)
		if (!is_eod)
			// fetch new block of rows; fetch_rows will set is_eod on true
			// when last block if rows has been fetched; will also update rows_fetched
			fetch_rows ();
		else
			return (false);
	if (current_row >= rows_fetched)
		return (false);

	return (true);
}


column&
resultset::operator [] (const char *column_name)
{
	ColumnsMap::iterator i = columns_map.find (column_name);
	if (i == columns_map.end ())
		// column with such name is not found
		throw (oralib::error (EC_COLUMN_NOT_FOUND, __FILE__, __LINE__, column_name));
	return (*(i->second));
}


column&
resultset::operator [] (ub2 column_index)
{
	if (column_index < FIRST_COLUMN_NO ||
		column_index > columns.size ())
		// no column with such index
		throw (oralib::error (EC_COLUMN_NOT_FOUND, __FILE__, __LINE__, "%d", (int) column_index));
	return (*(columns.at (column_index - FIRST_COLUMN_NO)));
}


}; // oralib namespace

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
丁香一区二区三区| 久久免费精品国产久精品久久久久| 成人黄色一级视频| 成人一级片网址| 成人激情文学综合网| 国产成人精品免费一区二区| 国产一区二区导航在线播放| 国产美女精品一区二区三区| 国模少妇一区二区三区| 国产乱一区二区| 国产成人在线视频网站| 成人免费看片app下载| 91亚洲精品乱码久久久久久蜜桃| 本田岬高潮一区二区三区| 91免费在线播放| 欧美日韩一级黄| 日韩视频一区在线观看| 久久午夜色播影院免费高清| 中文字幕av资源一区| 亚洲欧美日韩综合aⅴ视频| 一区二区在线观看av| 五月天激情综合| 国产专区欧美精品| 91在线码无精品| 欧美美女黄视频| 精品国产123| 中文字幕一区二区三区乱码在线| 亚洲精品国产成人久久av盗摄| 午夜精品福利视频网站| 精品一区二区久久| 91麻豆精品在线观看| 欧美精品黑人性xxxx| 久久久www免费人成精品| 亚洲色图欧美在线| 免费看日韩a级影片| 不卡高清视频专区| 91麻豆精品国产91久久久久久| 久久蜜臀精品av| 一区二区三区欧美激情| 久久精品噜噜噜成人av农村| 成人福利在线看| 欧美精品日韩精品| 国产蜜臀av在线一区二区三区| 亚洲精品菠萝久久久久久久| 精品一区二区影视| 在线观看一区不卡| 久久久久久久综合狠狠综合| 亚洲影院免费观看| 国产成人av一区| 欧美一区二区国产| 亚洲区小说区图片区qvod| 极品少妇一区二区三区精品视频 | 欧美性生活影院| 久久夜色精品国产欧美乱极品| 亚洲特级片在线| 国产在线一区观看| 欧美私模裸体表演在线观看| 国产欧美日韩另类视频免费观看| 亚洲一区在线看| www.亚洲色图.com| 精品国产一区二区三区不卡| 亚洲裸体xxx| 国产成人午夜精品5599| 777午夜精品免费视频| 最新久久zyz资源站| 久草中文综合在线| 欧美三电影在线| 亚洲婷婷在线视频| 国产xxx精品视频大全| 日韩精品最新网址| 婷婷综合五月天| 日本高清视频一区二区| 中文字幕乱码亚洲精品一区| 老司机免费视频一区二区| 欧美日韩成人综合在线一区二区| 中文字幕色av一区二区三区| 国产一区二区三区视频在线播放| 91精选在线观看| 亚洲妇女屁股眼交7| 91麻豆免费看| 成人免费小视频| 国产成都精品91一区二区三| 日韩美女在线视频| 麻豆精品在线看| 欧美一区二区三区影视| 五月天亚洲精品| 欧美精品第1页| 亚洲成人www| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 色偷偷久久人人79超碰人人澡| 中文字幕免费不卡| 国产不卡免费视频| 国产日韩av一区| 国产成人精品午夜视频免费| 久久伊人中文字幕| 国产呦萝稀缺另类资源| 精品少妇一区二区三区| 久久精品国产99久久6| 666欧美在线视频| 日本欧美一区二区| 欧美肥妇free| 蓝色福利精品导航| 欧美成人伊人久久综合网| 欧美aⅴ一区二区三区视频| 日韩欧美国产wwwww| 久久国产免费看| 久久久久久电影| 国产成人在线色| 日韩一区在线看| 在线观看日韩精品| 性欧美疯狂xxxxbbbb| 91精品中文字幕一区二区三区| 激情图片小说一区| 精品蜜桃在线看| 亚洲人成伊人成综合网小说| 精品一区二区免费| 久久免费视频一区| 精品一区二区日韩| 26uuu精品一区二区| 国产美女精品人人做人人爽| 中文幕一区二区三区久久蜜桃| 亚洲成人动漫在线观看| 精品国产乱码久久| 色爱区综合激月婷婷| 裸体健美xxxx欧美裸体表演| 国产精品久久国产精麻豆99网站| 欧美日韩www| 99精品欧美一区二区三区综合在线| 亚洲高清视频中文字幕| 欧美韩日一区二区三区| 7799精品视频| 99精品视频中文字幕| 精品在线一区二区| 亚洲第一综合色| 国产精品妹子av| 欧美本精品男人aⅴ天堂| 在线视频你懂得一区| 91精品国产综合久久小美女| 成人av资源在线| 国产美女精品在线| 日本视频免费一区| 亚洲综合男人的天堂| 国产精品女人毛片| 精品国产免费久久| 欧美一级一区二区| 欧美影院午夜播放| 99精品在线免费| 国产成人午夜精品5599| 老司机免费视频一区二区| 亚洲在线中文字幕| 亚洲欧美另类图片小说| 国产欧美精品在线观看| 亚洲精品在线观看网站| 欧美一区二区三区在线| 欧美精品第一页| 欧美色爱综合网| 在线中文字幕不卡| 色综合久久综合| av在线播放不卡| 成人黄色大片在线观看| 国产精品18久久久久| 久久av老司机精品网站导航| 日本美女一区二区| 视频一区在线播放| 亚洲6080在线| 亚洲一区二区三区四区在线观看| 最近日韩中文字幕| 自拍av一区二区三区| 国产精品传媒视频| 国产精品国产三级国产三级人妇 | 精品一区二区三区在线观看国产 | 精品美女一区二区三区| 777a∨成人精品桃花网| 欧美情侣在线播放| 欧美精选在线播放| 欧美人与z0zoxxxx视频| 7777精品伊人久久久大香线蕉经典版下载 | 欧美精三区欧美精三区| 欧美视频一区在线| 欧美天堂一区二区三区| 欧美性猛片aaaaaaa做受| 欧美体内she精高潮| 欧美喷水一区二区| 欧美一区三区四区| 欧美第一区第二区| 久久在线观看免费| 中文字幕精品一区二区三区精品| 欧美极品另类videosde| 国产精品福利一区| 悠悠色在线精品| 午夜国产精品影院在线观看| 欧美aaaaa成人免费观看视频| 日韩**一区毛片| 韩国三级电影一区二区| 成人综合日日夜夜| 色综合天天综合网天天看片| 欧美午夜片在线看| 欧美一区二区三级| 精品国产91亚洲一区二区三区婷婷| 久久久久国色av免费看影院|