Restore 0.1.5 version from stash
This commit is contained in:
@@ -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)
|
||||
Reference in New Issue
Block a user