anchor.diff:      ?assertEqual(lists:sort(Rows), lists:sort(NewRows)),
       ?assertEqual(ok, SelStmt1:close()).
   
  +asc_desc_test(OciSession) ->
  +    io:format(user, "------------------------------------------------------------------~n", []),
  +    io:format(user, "|                          asc_desc_test                         |~n", []),
  +    io:format(user, "------------------------------------------------------------------~n", []),
  +    TmpTable = "erloci_test_1",
  +    RowCount = 10,
  +
  +    DropTableQryStr = list_to_binary(["drop table ", TmpTable]),
  +    CreateTableQueryStr = list_to_binary(["create table ", TmpTable, " (pkey number,"
  +                                       "publisher varchar2(30),"
  +                                       "rank float,"
  +                                       "hero varchar2(30),"
  +                                       "reality varchar2(30),"
  +                                       "votes number,"
  +                                       "createdate date default sysdate,"
  +                                       "votes_first_rank number)"]),
  +    BindInsQryStr = list_to_binary(["insert into ", TmpTable,
  +                                    " (pkey,publisher,rank,hero,reality,votes,createdate,votes_first_rank) values (",
  +                                    ":pkey",
  +                                    ", :publisher",
  +                                    ", :rank",
  +                                    ", :hero",
  +                                    ", :reality",
  +                                    ", :votes",
  +                                    ", :createdate"
  +                                    ", :votes_first_rank)"]),
  +    VarBindList = [ {<<":pkey">>, 'SQLT_INT'}
  +                  , {<<":publisher">>, 'SQLT_CHR'}
  +                  , {<<":rank">>, 'SQLT_FLT'}
  +                  , {<<":hero">>, 'SQLT_CHR'}
  +                  , {<<":reality">>, 'SQLT_CHR'}
  +                  , {<<":votes">>, 'SQLT_INT'}
  +                  , {<<":createdate">>, 'SQLT_DAT'}
  +                  , {<<":votes_first_rank">>, 'SQLT_INT'}
  +                  ],
  +    SelQryStr = list_to_binary(["select pkey from ", TmpTable, " order by pkey desc"]),
  +    BindUpdQryStr = list_to_binary(["update ", TmpTable, " set ",
  +                                    "pkey = :pkey",
  +                                    ", publisher = :publisher",
  +                                    ", rank = :rank",
  +                                    ", hero = :hero",
  +                                    ", reality = :reality",
  +                                    ", votes = :votes",
  +                                    ", createdate = :createdate"
  +                                    ", votes_first_rank = :votes_first_rank where ", TmpTable, ".rowid = :pri_rowid1"]),
  +    VarUdpBindList = [ {<<":pkey">>, 'SQLT_INT'}
  +                     , {<<":publisher">>, 'SQLT_CHR'}
  +                     , {<<":rank">>, 'SQLT_FLT'}
  +                     , {<<":hero">>, 'SQLT_CHR'}
  +                     , {<<":reality">>, 'SQLT_CHR'}
  +                     , {<<":votes">>, 'SQLT_STR'}
  +                     , {<<":createdate">>, 'SQLT_DAT'}
  +                     , {<<":votes_first_rank">>, 'SQLT_INT'}
  +                     , {<<":pri_rowid1">>, 'SQLT_STR'}
  +                     ],
  +
  +    io:format(user, "dropping table ~s~n", [TmpTable]),
  +    DropStmt = OciSession:prep_sql(DropTableQryStr),
  +    ?assertMatch({?MODULE, statement, _, _}, DropStmt),
  +    DropStmt:exec_stmt(),
  +    ?assertEqual(ok, DropStmt:close()),
  +
  +    io:format(user, "creating table ~s~n", [TmpTable]),
  +    StmtCreate = OciSession:prep_sql(CreateTableQueryStr),
  +    ?assertMatch({?MODULE, statement, _, _}, StmtCreate),
  +    ?assertEqual({executed, 0}, StmtCreate:exec_stmt()),
  +    ?assertEqual(ok, StmtCreate:close()),
  +
  +    io:format(user, "inserting into table ~s~n", [TmpTable]),
  +    BoundInsStmt = OciSession:prep_sql(BindInsQryStr),
  +    ?assertMatch({?MODULE, statement, _, _}, BoundInsStmt),
  +    BoundInsStmtRes = BoundInsStmt:bind_vars(VarBindList),
  +    ?assertMatch(ok, BoundInsStmtRes),
  +    ?assertMatch({executed, RowCount},
  +    BoundInsStmt:exec_stmt([{ I
  +                            , list_to_binary(["_publisher_",integer_to_list(I),"_"])
  +                            , I+I/2
  +                            , list_to_binary(["_hero_",integer_to_list(I),"_"])
  +                            , list_to_binary(["_reality_",integer_to_list(I),"_"])
  +                            , I
  +                            , oci_test:edatetime_to_ora(erlang:now())
  +                            , I
  +                            } || I <- lists:seq(1, RowCount)], 1)),
  +    ?assertEqual(ok, BoundInsStmt:close()),
  +
  +    io:format(user, "selecting from table ~s~n", [TmpTable]),
  +    SelStmt = OciSession:prep_sql(SelQryStr),
  +    ?assertMatch({?MODULE, statement, _, _}, SelStmt),
  +    {ok, Cols} = SelStmt:exec_stmt(),
  +    ?assertEqual(1, length(Cols)),
  +
  +    {{rows, Rows1}, false} = SelStmt:fetch_rows(5),
  +    {{rows, Rows2}, true} = SelStmt:fetch_rows(5),
  +
  +    ?assertEqual([binary_to_integer(R) || [R] <- Rows1++Rows2], lists:reverse(lists:seq(1,10))),
  +
  +    ?assertEqual(ok, SelStmt:close()).
  +
   describe_test(OciSession) ->
       io:format(user, "------------------------------------------------------------------~n", []),
       io:format(user, "|                         describe_test                          |~n", []),
       io:format(user, "------------------------------------------------------------------~n", []),
  -    timer:sleep(5000),
  +    timer:sleep(1000),
       OciSession:describe(<<"ALL_TABLES">>, 'OCI_PTYPE_VIEW'),
       ok.
   
  
positive.code:             fun drop_create_insert_select_update/1
              , fun auto_rollback_test/1
              , fun commit_rollback_test/1
              , fun describe_test/1
          ]}
      }}.
  
negative.code:     end.
  
  fetch_rows(Count, {?MODULE, statement, PortPid, StmtId}) ->
      case gen_server:call(PortPid, {port_call, [?FTCH_ROWS, StmtId, Count]}, ?PORT_TIMEOUT) of
          {{rows, Rows}, Completed} -> {{rows, lists:reverse(Rows)}, Completed};
          Other -> Other
      end.
  
  
  %% Callbacks
  