Restore 0.1.5 version from stash

This commit is contained in:
liaibo
2025-12-08 19:56:24 +08:00
parent de189e938d
commit 8db3f4e32d
8578 changed files with 2703426 additions and 217 deletions
@@ -0,0 +1,8 @@
from .register import register_vector
from ..utils import HalfVector, SparseVector
__all__ = [
'register_vector',
'HalfVector',
'SparseVector'
]
@@ -0,0 +1,20 @@
from psycopg2.extensions import adapt, new_type, register_adapter, register_type
from ..utils import HalfVector
class HalfvecAdapter:
def __init__(self, value):
self._value = value
def getquoted(self):
return adapt(HalfVector._to_db(self._value)).getquoted()
def cast_halfvec(value, cur):
return HalfVector._from_db(value)
def register_halfvec_info(oid, scope):
halfvec = new_type((oid,), 'HALFVEC', cast_halfvec)
register_type(halfvec, scope)
register_adapter(HalfVector, HalfvecAdapter)
@@ -0,0 +1,28 @@
import psycopg2
from psycopg2.extensions import cursor
from .halfvec import register_halfvec_info
from .sparsevec import register_sparsevec_info
from .vector import register_vector_info
# TODO make globally False by default in 0.4.0
# note: register_adapter is always global
def register_vector(conn_or_curs=None, globally=True):
conn = conn_or_curs if hasattr(conn_or_curs, 'cursor') else conn_or_curs.connection
cur = conn.cursor(cursor_factory=cursor)
scope = None if globally else conn_or_curs
# use to_regtype to get first matching type in search path
cur.execute("SELECT typname, oid FROM pg_type WHERE oid IN (to_regtype('vector'), to_regtype('halfvec'), to_regtype('sparsevec'))")
type_info = dict(cur.fetchall())
if 'vector' not in type_info:
raise psycopg2.ProgrammingError('vector type not found in the database')
register_vector_info(type_info['vector'], scope)
if 'halfvec' in type_info:
register_halfvec_info(type_info['halfvec'], scope)
if 'sparsevec' in type_info:
register_sparsevec_info(type_info['sparsevec'], scope)
@@ -0,0 +1,20 @@
from psycopg2.extensions import adapt, new_type, register_adapter, register_type
from ..utils import SparseVector
class SparsevecAdapter:
def __init__(self, value):
self._value = value
def getquoted(self):
return adapt(SparseVector._to_db(self._value)).getquoted()
def cast_sparsevec(value, cur):
return SparseVector._from_db(value)
def register_sparsevec_info(oid, scope):
sparsevec = new_type((oid,), 'SPARSEVEC', cast_sparsevec)
register_type(sparsevec, scope)
register_adapter(SparseVector, SparsevecAdapter)
@@ -0,0 +1,21 @@
import numpy as np
from psycopg2.extensions import adapt, new_type, register_adapter, register_type
from ..utils import Vector
class VectorAdapter:
def __init__(self, value):
self._value = value
def getquoted(self):
return adapt(Vector._to_db(self._value)).getquoted()
def cast_vector(value, cur):
return Vector._from_db(value)
def register_vector_info(oid, scope):
vector = new_type((oid,), 'VECTOR', cast_vector)
register_type(vector, scope)
register_adapter(np.ndarray, VectorAdapter)