from .adapt import AdaptersMap
from ._enums import IsolationLevel
from .cursor import Cursor
-from ._compat import TypeAlias
+from ._compat import TypeAlias, LiteralString
from ._cmodule import _psycopg
from .conninfo import make_conninfo, conninfo_to_dict, ConnectionInfo
from ._pipeline import BasePipeline, Pipeline
if self._pipeline:
yield from self._pipeline._sync_gen()
- def _tpc_finish_gen(self, action: str, xid: Union[Xid, str, None]) -> PQGen[None]:
- fname = f"tpc_{action}()"
+ def _tpc_finish_gen(
+ self, action: LiteralString, xid: Union[Xid, str, None]
+ ) -> PQGen[None]:
+ fname = f"tpc_{action.lower()}()"
if xid is None:
if not self._tpc:
raise e.ProgrammingError(
if self._tpc and not self._tpc[1]:
meth: Callable[[], PQGen[None]]
- meth = getattr(self, f"_{action}_gen")
+ meth = getattr(self, f"_{action.lower()}_gen")
self._tpc = None
yield from meth()
else:
yield from self._exec_command(
- SQL("{} PREPARED {}").format(SQL(action.upper()), str(xid))
+ SQL("{} PREPARED {}").format(SQL(action), str(xid))
)
self._tpc = None
Commit a prepared two-phase transaction.
"""
with self.lock:
- self.wait(self._tpc_finish_gen("commit", xid))
+ self.wait(self._tpc_finish_gen("COMMIT", xid))
def tpc_rollback(self, xid: Union[Xid, str, None] = None) -> None:
"""
Roll back a prepared two-phase transaction.
"""
with self.lock:
- self.wait(self._tpc_finish_gen("rollback", xid))
+ self.wait(self._tpc_finish_gen("ROLLBACK", xid))
def tpc_recover(self) -> List[Xid]:
status = self.info.transaction_status
else:
return NotImplemented
- def join(self, joiner: Union["SQL", str]) -> "Composed":
+ def join(self, joiner: Union["SQL", LiteralString]) -> "Composed":
"""
Return a new `!Composed` interposing the *joiner* with the `!Composed` items.
SELECT "foo", "bar" FROM "table"
"""
- _obj: str
+ _obj: LiteralString
_formatter = string.Formatter()
def __init__(self, obj: LiteralString):
"""
rv: List[Composable] = []
autonum: Optional[int] = 0
+ # TODO: this is probably not the right way to whitelist pre
+ # pyre complains. Will wait for mypy to complain too to fix.
+ pre: LiteralString
for pre, name, spec, conv in self._formatter.parse(self._obj):
if spec:
raise ValueError("no format specification supported by SQL")