anchor.diff:      exec(Connection, Sql, undefined, MaxRowCount).
   
   -spec exec(tuple(), binary(), tuple(), integer()) -> ok | {ok, pid()} | {error, term()}.
  -exec({oci_port, _, _} = Connection, Sql, Binds, MaxRowCount) ->
  -    case sqlparse:parsetree(Sql) of
  -        {ok,[{{select, SelectSections},_}]} ->
  -            {TableName, NewSql, RowIdAdded} = inject_rowid(select_type(SelectSections), SelectSections, Sql);
  -        {ok, [{{'begin procedure', _},_}]} ->
  -            TableName = <<"">>,
  -            NewSql = append_semicolon(Sql, binary:last(Sql)),
  -            RowIdAdded = false,
  -            SelectSections = [];
  -        _ ->
  -            TableName = <<"">>,
  -            NewSql = Sql,
  -            RowIdAdded = false,
  -            SelectSections = []
  -    end,
  +exec({oci_port, _, _} = Connection, OrigSql, Binds, MaxRowCount) ->
  +    {Sql, NewSql, TableName, RowIdAdded, SelectSections} =
  +        parse_sql(sqlparse:parsetree(OrigSql), OrigSql),
       case catch run_query(Connection, Sql, Binds, NewSql, RowIdAdded, SelectSections) of
           {'EXIT', {Error, ST}} ->
               ?Error("run_query(~s,~p,~s)~n{~p,~p}", [Sql, Binds, NewSql, Error, ST]),
  
positive.code:             {ResultName, ReadOnly, RestFields} = find_original_field(Alias, Fields),
              {ResultName, ReadOnly, [OrigField | RestFields]}
      end.
  
negative.code:     ?Debug("Binds ~p", [Binds]),
      Statement:close(),
      {ok, NewValues};
  result_exec_stmt(Error, Statement, Sql, _Binds, Sql, _RowIdAdded, _Connection, _SelectSections) ->
      Statement:close(),
      error(Error);
  result_exec_stmt(RowIdError, Statement, Sql, Binds, _NewSql, _RowIdAdded, Connection, SelectSections) ->
      ?Info("RowIdError ~p", [RowIdError]),
      Statement:close(),
  