Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Safe termination and rollback in dbWithTransaction() #115

Closed
krlmlr opened this issue Jun 14, 2016 · 0 comments · Fixed by #133
Closed

Safe termination and rollback in dbWithTransaction() #115

krlmlr opened this issue Jun 14, 2016 · 0 comments · Fixed by #133
Assignees
Milestone

Comments

@krlmlr
Copy link
Member

krlmlr commented Jun 14, 2016

A stop() in the transacted code is rethrown after rollback, we need a special condition that we could catch. This could be the same as for #111:

dbAbort <- function() stop(structure(list(message = "Abort"), class = c("dbi_abort", "condition"))

...
tryCatch({
  res <- code
  dbCommit(...)
  res
},
dbi_abort = function(e) { dbRollback(); message(conditionMessage(e)) },
error = function(e) { dbRollback(); stop(e) }
)

...

dbWithTransaction(con, {
  do_stuff()
  if (some_test()) dbAbort()
  do_more_stuff()
})
@krlmlr krlmlr added this to the 0.5 milestone Aug 4, 2016
@krlmlr krlmlr changed the title Safe abortion in dbWithTransaction() Safe termination and rollback in dbWithTransaction() Aug 4, 2016
@krlmlr krlmlr self-assigned this Aug 8, 2016
@krlmlr krlmlr mentioned this issue Aug 8, 2016
krlmlr added a commit that referenced this issue Aug 10, 2016
- New `dbBreak()` function which allows aborting from within `dbWithTransaction()` (#115, #133).
krlmlr added a commit that referenced this issue Aug 10, 2016
- New `dbBreak()` function which allows aborting from within `dbWithTransaction()` (#115, #133).
- Add `dbSendStatement()` generic, which forwards to `dbSendQuery()` by default. `dbExecute()` now calls `dbSendStatement()` (#20, #132).
krlmlr added a commit that referenced this issue Aug 11, 2016
- Interface changes
    - `dbDataType()` maps `character` values to `"TEXT"` by default (#102).
    - The default implementation of `dbQuoteString()` doesn't call `encodeString()` anymore: Neither SQLite nor Postgres understand e.g. `\n` in a string literal, and all of SQLite, Postgres, and MySQL accept an embedded newline (#121).

- Interface enhancements
    - New `dbSendStatement()` generic, forwards to `dbSendQuery()` by default (#20, #132).
    - New `dbExecute()`, calls `dbSendStatement()` by default (#109, @bborgesr).
    - New `dbWithTransaction()` that calls `dbBegin()` and `dbCommit()`, and `dbRollback()` on failure (#110, @bborgesr).
    - New `dbBreak()` function which allows aborting from within `dbWithTransaction()` (#115, #133).
    - Export `dbFetch()` and `dbQuoteString()` methods.

- Documentation improvements:
    - One example per function (except functions scheduled for deprecation) (#67).
    - Consistent layout and identifier naming.
    - Better documentation of generics by adding links to the class and related generics in the "See also" section under "Other DBI... generics" (#130). S4 documentation is directed to a hidden page to unclutter documentation index (#59).
    - Fix two minor vignette typos (#124, @mdsumner).
    - Add package documentation.
    - Remove misleading parts in `dbConnect()` documentation (#118).
    - Remove misleading link in `dbDataType()` documentation.
    - Remove full stop from documentation titles.
    - New help topic "DBIspec" that contains the full DBI specification (currently work in progress) (#129).
    - HTML documentation generated by `staticdocs` is now uploaded to http://rstats-db.github.io/DBI for each build of the "production" branch (#131).
    - Further minor changes and fixes.

- Internal
    - Use `contains` argument instead of `representation()` to denote base classes (#93).
    - Remove redundant declaration of transaction methods (#110, @bborgesr).
@github-actions github-actions bot locked and limited conversation to collaborators Oct 8, 2020
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant