Initial commit (Clean history)
This commit is contained in:
@@ -0,0 +1,14 @@
|
||||
"""
|
||||
psycopg -- PostgreSQL database adapter for Python -- C optimization package
|
||||
"""
|
||||
|
||||
# Copyright (C) 2020 The Psycopg Team
|
||||
|
||||
import sys
|
||||
|
||||
# This package shouldn't be imported before psycopg itself, or weird things
|
||||
# will happen
|
||||
if "psycopg" not in sys.modules:
|
||||
raise ImportError("the psycopg package should be imported before psycopg_binary")
|
||||
|
||||
from .version import __version__ as __version__ # noqa
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
104300
path/to/venv/lib/python3.12/site-packages/psycopg_binary/_psycopg.c
Normal file
104300
path/to/venv/lib/python3.12/site-packages/psycopg_binary/_psycopg.c
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
@@ -0,0 +1,83 @@
|
||||
"""
|
||||
Stub representation of the public objects exposed by the _psycopg module.
|
||||
|
||||
TODO: this should be generated by mypy's stubgen but it crashes with no
|
||||
information. Will submit a bug.
|
||||
"""
|
||||
|
||||
# Copyright (C) 2020 The Psycopg Team
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Any, Sequence
|
||||
from collections import deque
|
||||
|
||||
from psycopg import BaseConnection, abc, pq
|
||||
from psycopg.rows import Row, RowMaker
|
||||
from psycopg.adapt import AdaptersMap, PyFormat
|
||||
from psycopg.pq.abc import PGcancelConn, PGconn, PGresult
|
||||
|
||||
class Transformer(abc.AdaptContext):
|
||||
types: tuple[int, ...] | None
|
||||
formats: list[pq.Format] | None
|
||||
def __init__(self, context: abc.AdaptContext | None = None): ...
|
||||
@classmethod
|
||||
def from_context(cls, context: abc.AdaptContext | None) -> "Transformer": ...
|
||||
@property
|
||||
def connection(self) -> BaseConnection[Any] | None: ...
|
||||
@property
|
||||
def encoding(self) -> str: ...
|
||||
@property
|
||||
def adapters(self) -> AdaptersMap: ...
|
||||
@property
|
||||
def pgresult(self) -> PGresult | None: ...
|
||||
def set_pgresult(
|
||||
self,
|
||||
result: "PGresult" | None,
|
||||
*,
|
||||
set_loaders: bool = True,
|
||||
format: pq.Format | None = None,
|
||||
) -> None: ...
|
||||
def set_dumper_types(self, types: Sequence[int], format: pq.Format) -> None: ...
|
||||
def set_loader_types(self, types: Sequence[int], format: pq.Format) -> None: ...
|
||||
def dump_sequence(
|
||||
self, params: Sequence[Any], formats: Sequence[PyFormat]
|
||||
) -> Sequence[abc.Buffer | None]: ...
|
||||
def as_literal(self, obj: Any) -> bytes: ...
|
||||
def get_dumper(self, obj: Any, format: PyFormat) -> abc.Dumper: ...
|
||||
def load_rows(self, row0: int, row1: int, make_row: RowMaker[Row]) -> list[Row]: ...
|
||||
def load_row(self, row: int, make_row: RowMaker[Row]) -> Row: ...
|
||||
def load_sequence(self, record: Sequence[abc.Buffer | None]) -> tuple[Any, ...]: ...
|
||||
def get_loader(self, oid: int, format: pq.Format) -> abc.Loader: ...
|
||||
|
||||
# Generators
|
||||
def connect(conninfo: str, *, timeout: float = 0.0) -> abc.PQGenConn[PGconn]: ...
|
||||
def cancel(
|
||||
cancel_conn: PGcancelConn, *, timeout: float = 0.0
|
||||
) -> abc.PQGenConn[None]: ...
|
||||
def execute(pgconn: PGconn) -> abc.PQGen[list[PGresult]]: ...
|
||||
def send(pgconn: PGconn) -> abc.PQGen[None]: ...
|
||||
def fetch_many(pgconn: PGconn) -> abc.PQGen[list[PGresult]]: ...
|
||||
def fetch(pgconn: PGconn) -> abc.PQGen[PGresult | None]: ...
|
||||
def pipeline_communicate(
|
||||
pgconn: PGconn, commands: deque[abc.PipelineCommand]
|
||||
) -> abc.PQGen[list[list[PGresult]]]: ...
|
||||
def wait_c(
|
||||
gen: abc.PQGen[abc.RV], fileno: int, interval: float | None = None
|
||||
) -> abc.RV: ...
|
||||
|
||||
# Copy support
|
||||
def format_row_text(
|
||||
row: Sequence[Any], tx: abc.Transformer, out: bytearray
|
||||
) -> None: ...
|
||||
def format_row_binary(
|
||||
row: Sequence[Any], tx: abc.Transformer, out: bytearray
|
||||
) -> None: ...
|
||||
def parse_row_text(data: abc.Buffer, tx: abc.Transformer) -> tuple[Any, ...]: ...
|
||||
def parse_row_binary(data: abc.Buffer, tx: abc.Transformer) -> tuple[Any, ...]: ...
|
||||
|
||||
# Arrays optimization
|
||||
def array_load_text(
|
||||
data: abc.Buffer, loader: abc.Loader, delimiter: bytes = b","
|
||||
) -> list[Any]: ...
|
||||
def array_load_binary(data: abc.Buffer, tx: abc.Transformer) -> list[Any]: ...
|
||||
@@ -0,0 +1,30 @@
|
||||
"""
|
||||
Internal objects to support the UUID adapters.
|
||||
"""
|
||||
|
||||
# Copyright (C) 2025 The Psycopg Team
|
||||
|
||||
import uuid
|
||||
|
||||
# Re-exports
|
||||
UUID = uuid.UUID
|
||||
SafeUUID_unknown = uuid.SafeUUID.unknown
|
||||
|
||||
|
||||
class _WritableUUID(UUID):
|
||||
"""Temporary class, with the same memory layout of UUID, but writable.
|
||||
|
||||
This class must have the same memory layout of the UUID class, so we can
|
||||
create one, setting the `int` attribute, and changing the `__class__`,
|
||||
which should be faster than calling the complex UUID.__init__ machinery.
|
||||
|
||||
u = _WritableUUID()
|
||||
u.is_safe = ...
|
||||
u.int = ...
|
||||
u.__class__ = UUID
|
||||
"""
|
||||
|
||||
__slots__ = () # Give the class the same memory layout of the base clasee
|
||||
|
||||
# Make the class writable.
|
||||
__setattr__ = object.__setattr__ # type: ignore[assignment]
|
||||
40404
path/to/venv/lib/python3.12/site-packages/psycopg_binary/pq.c
Normal file
40404
path/to/venv/lib/python3.12/site-packages/psycopg_binary/pq.c
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
@@ -0,0 +1,218 @@
|
||||
/*
|
||||
* Utilities to deal with numbers.
|
||||
*
|
||||
* Copyright (C) 2020 The Psycopg Team
|
||||
* Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*/
|
||||
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "pg_config.h"
|
||||
|
||||
|
||||
/*
|
||||
* 64-bit integers
|
||||
*/
|
||||
typedef uint64_t uint64;
|
||||
typedef int64_t int64;
|
||||
|
||||
#define UINT64CONST(x) UINT64_C(x)
|
||||
|
||||
|
||||
#if !defined(HAVE__BUILTIN_CLZ) || (SIZEOF_LONG != 8 && SIZEOF_LONG_LONG != 8)
|
||||
static const uint8_t pg_leftmost_one_pos[256] = {
|
||||
0, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,
|
||||
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
|
||||
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
|
||||
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
|
||||
6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
|
||||
6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
|
||||
6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
|
||||
6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
|
||||
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
|
||||
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
|
||||
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
|
||||
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
|
||||
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
|
||||
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
|
||||
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
|
||||
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
|
||||
};
|
||||
#endif
|
||||
|
||||
static const char DIGIT_TABLE[200] = {
|
||||
'0', '0', '0', '1', '0', '2', '0', '3', '0', '4', '0', '5', '0', '6', '0',
|
||||
'7', '0', '8', '0', '9', '1', '0', '1', '1', '1', '2', '1', '3', '1', '4',
|
||||
'1', '5', '1', '6', '1', '7', '1', '8', '1', '9', '2', '0', '2', '1', '2',
|
||||
'2', '2', '3', '2', '4', '2', '5', '2', '6', '2', '7', '2', '8', '2', '9',
|
||||
'3', '0', '3', '1', '3', '2', '3', '3', '3', '4', '3', '5', '3', '6', '3',
|
||||
'7', '3', '8', '3', '9', '4', '0', '4', '1', '4', '2', '4', '3', '4', '4',
|
||||
'4', '5', '4', '6', '4', '7', '4', '8', '4', '9', '5', '0', '5', '1', '5',
|
||||
'2', '5', '3', '5', '4', '5', '5', '5', '6', '5', '7', '5', '8', '5', '9',
|
||||
'6', '0', '6', '1', '6', '2', '6', '3', '6', '4', '6', '5', '6', '6', '6',
|
||||
'7', '6', '8', '6', '9', '7', '0', '7', '1', '7', '2', '7', '3', '7', '4',
|
||||
'7', '5', '7', '6', '7', '7', '7', '8', '7', '9', '8', '0', '8', '1', '8',
|
||||
'2', '8', '3', '8', '4', '8', '5', '8', '6', '8', '7', '8', '8', '8', '9',
|
||||
'9', '0', '9', '1', '9', '2', '9', '3', '9', '4', '9', '5', '9', '6', '9',
|
||||
'7', '9', '8', '9', '9'
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* pg_leftmost_one_pos64
|
||||
* Returns the position of the most significant set bit in "word",
|
||||
* measured from the least significant bit. word must not be 0.
|
||||
*/
|
||||
static inline int
|
||||
pg_leftmost_one_pos64(uint64_t word)
|
||||
{
|
||||
#if defined(HAVE__BUILTIN_CLZ) && SIZEOF_LONG == 8
|
||||
return 63 - __builtin_clzl(word);
|
||||
#elif defined(HAVE__BUILTIN_CLZ) && SIZEOF_LONG_LONG == 8
|
||||
return 63 - __builtin_clzll(word);
|
||||
#else
|
||||
int shift = 64 - 8;
|
||||
|
||||
while ((word >> shift) == 0)
|
||||
shift -= 8;
|
||||
|
||||
return shift + pg_leftmost_one_pos[(word >> shift) & 255];
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
static inline int
|
||||
decimalLength64(const uint64_t v)
|
||||
{
|
||||
int t;
|
||||
static const uint64_t PowersOfTen[] = {
|
||||
UINT64CONST(1), UINT64CONST(10),
|
||||
UINT64CONST(100), UINT64CONST(1000),
|
||||
UINT64CONST(10000), UINT64CONST(100000),
|
||||
UINT64CONST(1000000), UINT64CONST(10000000),
|
||||
UINT64CONST(100000000), UINT64CONST(1000000000),
|
||||
UINT64CONST(10000000000), UINT64CONST(100000000000),
|
||||
UINT64CONST(1000000000000), UINT64CONST(10000000000000),
|
||||
UINT64CONST(100000000000000), UINT64CONST(1000000000000000),
|
||||
UINT64CONST(10000000000000000), UINT64CONST(100000000000000000),
|
||||
UINT64CONST(1000000000000000000), UINT64CONST(10000000000000000000)
|
||||
};
|
||||
|
||||
/*
|
||||
* Compute base-10 logarithm by dividing the base-2 logarithm by a
|
||||
* good-enough approximation of the base-2 logarithm of 10
|
||||
*/
|
||||
t = (pg_leftmost_one_pos64(v) + 1) * 1233 / 4096;
|
||||
return t + (v >= PowersOfTen[t]);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Get the decimal representation, not NUL-terminated, and return the length of
|
||||
* same. Caller must ensure that a points to at least MAXINT8LEN bytes.
|
||||
*/
|
||||
int
|
||||
pg_ulltoa_n(uint64_t value, char *a)
|
||||
{
|
||||
int olength,
|
||||
i = 0;
|
||||
uint32_t value2;
|
||||
|
||||
/* Degenerate case */
|
||||
if (value == 0)
|
||||
{
|
||||
*a = '0';
|
||||
return 1;
|
||||
}
|
||||
|
||||
olength = decimalLength64(value);
|
||||
|
||||
/* Compute the result string. */
|
||||
while (value >= 100000000)
|
||||
{
|
||||
const uint64_t q = value / 100000000;
|
||||
uint32_t value2 = (uint32_t) (value - 100000000 * q);
|
||||
|
||||
const uint32_t c = value2 % 10000;
|
||||
const uint32_t d = value2 / 10000;
|
||||
const uint32_t c0 = (c % 100) << 1;
|
||||
const uint32_t c1 = (c / 100) << 1;
|
||||
const uint32_t d0 = (d % 100) << 1;
|
||||
const uint32_t d1 = (d / 100) << 1;
|
||||
|
||||
char *pos = a + olength - i;
|
||||
|
||||
value = q;
|
||||
|
||||
memcpy(pos - 2, DIGIT_TABLE + c0, 2);
|
||||
memcpy(pos - 4, DIGIT_TABLE + c1, 2);
|
||||
memcpy(pos - 6, DIGIT_TABLE + d0, 2);
|
||||
memcpy(pos - 8, DIGIT_TABLE + d1, 2);
|
||||
i += 8;
|
||||
}
|
||||
|
||||
/* Switch to 32-bit for speed */
|
||||
value2 = (uint32_t) value;
|
||||
|
||||
if (value2 >= 10000)
|
||||
{
|
||||
const uint32_t c = value2 - 10000 * (value2 / 10000);
|
||||
const uint32_t c0 = (c % 100) << 1;
|
||||
const uint32_t c1 = (c / 100) << 1;
|
||||
|
||||
char *pos = a + olength - i;
|
||||
|
||||
value2 /= 10000;
|
||||
|
||||
memcpy(pos - 2, DIGIT_TABLE + c0, 2);
|
||||
memcpy(pos - 4, DIGIT_TABLE + c1, 2);
|
||||
i += 4;
|
||||
}
|
||||
if (value2 >= 100)
|
||||
{
|
||||
const uint32_t c = (value2 % 100) << 1;
|
||||
char *pos = a + olength - i;
|
||||
|
||||
value2 /= 100;
|
||||
|
||||
memcpy(pos - 2, DIGIT_TABLE + c, 2);
|
||||
i += 2;
|
||||
}
|
||||
if (value2 >= 10)
|
||||
{
|
||||
const uint32_t c = value2 << 1;
|
||||
char *pos = a + olength - i;
|
||||
|
||||
memcpy(pos - 2, DIGIT_TABLE + c, 2);
|
||||
}
|
||||
else
|
||||
*a = (char) ('0' + value2);
|
||||
|
||||
return olength;
|
||||
}
|
||||
|
||||
/*
|
||||
* pg_lltoa: converts a signed 64-bit integer to its string representation and
|
||||
* returns strlen(a).
|
||||
*
|
||||
* Caller must ensure that 'a' points to enough memory to hold the result
|
||||
* (at least MAXINT8LEN + 1 bytes, counting a leading sign and trailing NUL).
|
||||
*/
|
||||
int
|
||||
pg_lltoa(int64_t value, char *a)
|
||||
{
|
||||
uint64_t uvalue = value;
|
||||
int len = 0;
|
||||
|
||||
if (value < 0)
|
||||
{
|
||||
uvalue = (uint64_t) 0 - uvalue;
|
||||
a[len++] = '-';
|
||||
}
|
||||
|
||||
len += pg_ulltoa_n(uvalue, a + len);
|
||||
a[len] = '\0';
|
||||
return len;
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
"""
|
||||
psycopg-binary distribution version file.
|
||||
"""
|
||||
|
||||
# Copyright (C) 2020 The Psycopg Team
|
||||
|
||||
from importlib import metadata
|
||||
|
||||
try:
|
||||
__version__ = metadata.version("psycopg-binary")
|
||||
except metadata.PackageNotFoundError:
|
||||
__version__ = "0.0.0.0"
|
||||
Reference in New Issue
Block a user