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; }
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(); }
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(); } }
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(); }
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(); } }