MCPcopy
hub / github.com/sqlalchemy/sqlalchemy / _process_positional

Method _process_positional

lib/sqlalchemy/sql/compiler.py:1718–1775  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

1716 )
1717
1718 def _process_positional(self):
1719 assert not self.positiontup
1720 assert self.state is CompilerState.STRING_APPLIED
1721 assert not self._numeric_binds
1722
1723 if self.dialect.paramstyle == "format":
1724 placeholder = "%s"
1725 else:
1726 assert self.dialect.paramstyle == "qmark"
1727 placeholder = "?"
1728
1729 positions = []
1730
1731 def find_position(m: re.Match[str]) -> str:
1732 normal_bind = m.group(1)
1733 if normal_bind:
1734 positions.append(normal_bind)
1735 return placeholder
1736 else:
1737 # this a post-compile bind
1738 positions.append(m.group(2))
1739 return m.group(0)
1740
1741 self.string = re.sub(
1742 self._positional_pattern, find_position, self.string
1743 )
1744
1745 if self.escaped_bind_names:
1746 reverse_escape = {v: k for k, v in self.escaped_bind_names.items()}
1747 assert len(self.escaped_bind_names) == len(reverse_escape)
1748 self.positiontup = [
1749 reverse_escape.get(name, name) for name in positions
1750 ]
1751 else:
1752 self.positiontup = positions
1753
1754 if self._insertmanyvalues:
1755 positions = []
1756
1757 single_values_expr = re.sub(
1758 self._positional_pattern,
1759 find_position,
1760 self._insertmanyvalues.single_values_expr,
1761 )
1762 insert_crud_params = [
1763 (
1764 v[0],
1765 v[1],
1766 re.sub(self._positional_pattern, find_position, v[2]),
1767 v[3],
1768 )
1769 for v in self._insertmanyvalues.insert_crud_params
1770 ]
1771
1772 self._insertmanyvalues = self._insertmanyvalues._replace(
1773 single_values_expr=single_values_expr,
1774 insert_crud_params=insert_crud_params,
1775 )

Callers 1

__init__Method · 0.95

Calls 4

subMethod · 0.80
_replaceMethod · 0.80
itemsMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected