Ejemplo n.º 1
0
int
main(int argc, char **argv)
{
	SQLRETURN rcode;
	SQLHSTMT m_hstmt1;
	SQLSMALLINT cnt = 0;
	int failed = 0;

	use_odbc_version3 = 1;
	Connect();

	Command(Statement, "CREATE TABLE #t1 ( k INT, c CHAR(10), vc VARCHAR(10) )");
	Command(Statement, "CREATE TABLE #tmp1 (i NUMERIC(10,0) IDENTITY PRIMARY KEY, b VARCHAR(20) NULL, c INT NOT NULL)");

	/* test hidden column with FOR BROWSE */
	ResetStatement();

	m_hstmt1 = Statement;

	rcode = SQLExecDirect(m_hstmt1, (SQLCHAR *) "SELECT c, b FROM #tmp1", SQL_NTS);
	CHECK_RCODE(SQL_HANDLE_STMT, m_hstmt1, "SQLExecDirect");

	rcode = SQLNumResultCols(m_hstmt1, &cnt);
	CHECK_RCODE(SQL_HANDLE_STMT, m_hstmt1, "SQLNumResultCols 1");

	if (cnt != 2) {
		fprintf(stderr, "Wrong number of columns in result set: %d\n", (int) cnt);
		failed = 1;
	}
	ResetStatement();

	/* test hidden column with cursors*/
	CheckCursor();
	m_hstmt1 = Statement;

	rcode = SQLSetStmtAttr(m_hstmt1, SQL_ATTR_CURSOR_SCROLLABLE, (SQLPOINTER) SQL_NONSCROLLABLE, SQL_IS_UINTEGER);
	CHECK_RCODE(SQL_HANDLE_STMT, m_hstmt1, "SQLSetStmtAttr SQL_ATTR_CURSOR_SCROLLABLE");
	rcode = SQLSetStmtAttr(m_hstmt1, SQL_ATTR_CURSOR_SENSITIVITY, (SQLPOINTER) SQL_SENSITIVE, SQL_IS_UINTEGER);
	CHECK_RCODE(SQL_HANDLE_STMT, m_hstmt1, "SQLSetStmtAttr SQL_ATTR_CURSOR_SENSITIVITY");

	rcode = SQLPrepare(m_hstmt1, (SQLCHAR *) "SELECT * FROM #t1", SQL_NTS);
	CHECK_RCODE(SQL_HANDLE_STMT, m_hstmt1, "SQLPrepare 1");

	rcode = SQLExecute(m_hstmt1);
	CHECK_RCODE(SQL_HANDLE_STMT, m_hstmt1, "SQLExecute 1");

	rcode = SQLNumResultCols(m_hstmt1, &cnt);
	CHECK_RCODE(SQL_HANDLE_STMT, m_hstmt1, "SQLNumResultCols 1");

	if (cnt != 3) {
		fprintf(stderr, "Wrong number of columns in result set: %d\n", (int) cnt);
		failed = 1;
	}

	Disconnect();

	return failed ? 1: 0;
}
Ejemplo n.º 2
0
void CursorRight(int character)
{
	int rows;
	/*may be used as the extension of direction keys
	while(screen.cur_col < screen.row_end[screen.cur_row] && character > 0)
	{
		screen.cur_col++;
		CURSOR_RIGHT();
		character--;
	}
	*/
	while(character > 0 && file.cur_index < file.line[file.cur_line].line_end)
	{
		if(screen.cur_col < screen.win_width)
		{
			if(file.line[file.cur_line].character[file.cur_index] == '\t')
				screen.cur_col = (screen.cur_col - screen.start_pos + TABLEN ) / TABLEN * TABLEN + screen.start_pos;	
			else
				screen.cur_col++;
			CursorMove();
		}
		else
		{
			//if the last character is right in the last column,the newline won't occupy a new line.
			if(screen.cur_row < screen.win_height - 1 && file.cur_index < file.line[file.cur_line].line_end - 1)
			{
				screen.cur_col = screen.start_pos;
				screen.cur_row ++;
				CursorMove();
			}
			else if(screen.cur_row == screen.win_height - 1)
			{
				rows = file.line[file.start_line].line_row - 1;
				file.start_line++;//not checked,in fact it will cause bugs but I don't want to deal now.
				display(file.start_line);
				screen.cur_row -= rows;
				screen.cur_col = screen.start_pos;
				CursorMove();
			}
		}
		character--;
	}

	if(file.cur_index < file.line[file.cur_line].line_end)
		file.cur_index ++;
	offset();
	CheckCursor();
}
Ejemplo n.º 3
0
void CursorUp(int line)
{
	int rows;
	if(file.cur_line > 1)
	{
		if(file.cur_line > file.start_line)
		{
			if(file.line[file.cur_line - 1].line_row < screen.row_offset)
			{
				rows = screen.row_rank[screen.cur_row ];
				screen.cur_col = screen.win_width;
			}
			else
			{
				rows = screen.row_rank[screen.cur_row] + file.line[file.cur_line-1].line_row - screen.row_offset;
				screen.cur_col = screen.col_offset;
			}
			while(rows--)

				screen.cur_row--;
		}	//not preread the former line,may cause bug.
		else
		{
			file.start_line--;
			display(file.start_line);
			if(file.line[file.start_line].line_row < screen.row_offset)
			{
				screen.cur_row = file.line[file.start_line].line_row;
				screen.cur_col = screen.win_width;
			}	
			else
			{
				screen.cur_row = screen.row_offset;
				screen.cur_col = screen.col_offset;	
			}
		}
		CursorMove();
		getpos();
		CheckCursor();
	}
}
Ejemplo n.º 4
0
void CursorLeft(int character)
{
	int k;
	while(file.cur_index > 1 && character > 0)
	{
		if(screen.map[screen.cur_row][screen.start_pos] == file.cur_index)	//the first word of the line
		{
			screen.cur_col = screen.win_width;//D:to be extended if direction keys are used since the first row not the fisrt.	
			screen.cur_row--;
		}
		else
		{
			if(file.line[file.cur_line].character[file.cur_index] != '\t')
			{
				CURSOR_LEFT();
				screen.cur_col--;
				}
			else
			{
				for(k = 1; k < TABLEN; k++)
				{
					if(screen.map[screen.cur_row][screen.cur_col-k+1] == screen.map[screen.cur_row][screen.cur_col-k])
					{
						CURSOR_LEFT();
					}
					else
						break;
				}
				screen.cur_col -= k;
			}
		}

		character--;

		if(file.cur_index > 1)
			file.cur_index --;
	}
	offset();
	CheckCursor();
}
Ejemplo n.º 5
0
void CursorDown(int line)
{
	int rows;
	int lines;
	if(file.cur_line < file.total_line)
	{
		if(screen.row_offset > file.line[file.cur_line+1].line_row)
		{
			screen.cur_col = screen.win_width;
			lines = file.line[file.cur_line].line_row - screen.row_rank[screen.cur_row] + file.line[file.cur_line + 1].line_row;
		}
		else
		{
			screen.cur_col = screen.col_offset;
			lines = file.line[file.cur_line].line_row - screen.row_rank[screen.cur_row] + screen.row_offset;
		}
		while(lines--)
		{
			if(screen.cur_row < screen.win_height - 1)
			{
				screen.cur_row++;
			}
			else
			{
				if(file.start_line  <= file.total_line)
				{
					rows = file.line[file.start_line].line_row;	//start_line.row > 1 ,so move back the cursor
					file.start_line++;
					display(file.start_line);
					screen.cur_row = screen.win_height-rows;
				}
			}
		}
		CursorMove();
		getpos();
		CheckCursor();
	 }
}