module Database.TokyoCabinet.TDB.Query.C where
import Data.Word
import Data.Bits
import Foreign.Ptr
import Foreign.ForeignPtr
import Foreign.C.Types
import Foreign.C.String
import Database.TokyoCabinet.TDB.C
import Database.TokyoCabinet.Map.C
import Database.TokyoCabinet.List.C
data Condition =
QCSTREQ |
QCSTRINC |
QCSTRBW |
QCSTREW |
QCSTRAND |
QCSTROR |
QCSTROREQ |
QCSTRRX |
QCNUMEQ |
QCNUMGT |
QCNUMGE |
QCNUMLT |
QCNUMLE |
QCNUMBT |
QCNUMOREQ |
QCNEGATE Condition |
QCNOIDX Condition
deriving (Eq, Ord, Show)
data OrderType =
QOSTRASC |
QOSTRDESC |
QONUMASC |
QONUMDESC
deriving (Eq, Ord, Show)
data PostTreatment m k v =
QPPUT (m k v) |
QPOUT |
QPNOP |
QPSTOP
deriving (Eq, Ord, Show)
condToCInt :: Condition -> CInt
condToCInt QCSTREQ = 0
condToCInt QCSTRINC = 1
condToCInt QCSTRBW = 2
condToCInt QCSTREW = 3
condToCInt QCSTRAND = 4
condToCInt QCSTROR = 5
condToCInt QCSTROREQ = 6
condToCInt QCSTRRX = 7
condToCInt QCNUMEQ = 8
condToCInt QCNUMGT = 9
condToCInt QCNUMGE = 10
condToCInt QCNUMLT = 11
condToCInt QCNUMLE = 12
condToCInt QCNUMBT = 13
condToCInt QCNUMOREQ = 14
condToCInt (QCNEGATE c) = (16777216) .|. (condToCInt c)
condToCInt (QCNOIDX c) = (33554432) .|. (condToCInt c)
orderToCInt :: OrderType -> CInt
orderToCInt QOSTRASC = 0
orderToCInt QOSTRDESC = 1
orderToCInt QONUMASC = 2
orderToCInt QONUMDESC = 3
ptToCInt :: PostTreatment m k v -> CInt
ptToCInt QPNOP = 0
ptToCInt QPOUT = 2
ptToCInt QPSTOP = 16777216
ptToCInt (QPPUT _) = 1
data TDBQRY = TDBQRY { unTDBQRY :: !(ForeignPtr QRY)
, unTDBOBJ :: TDB }
data QRY
foreign import ccall safe "tctdbqrynew"
c_tctdbqrynew :: Ptr TDB' -> IO (Ptr QRY)
foreign import ccall safe "tctdbqrydel"
c_tctdbqrydel :: Ptr QRY -> IO ()
foreign import ccall safe "&tctdbqrydel"
tctdbqryFinalizer :: FunPtr (Ptr QRY -> IO ())
foreign import ccall safe "tctdbqryaddcond"
c_tctdbqryaddcond :: Ptr QRY -> CString -> CInt -> CString -> IO ()
foreign import ccall safe "tctdbqrysetorder"
c_tctdbqrysetorder :: Ptr QRY -> CString -> CInt -> IO ()
foreign import ccall safe "tctdbqrysetlimit"
c_tctdbqrysetlimit :: Ptr QRY -> CInt -> CInt -> IO ()
foreign import ccall safe "tctdbqrysearch"
c_tctdbqrysearch :: Ptr QRY -> IO (Ptr LIST)
foreign import ccall safe "tctdbqrysearchout"
c_tctdbqrysearchout :: Ptr QRY -> IO Bool
foreign import ccall safe "tctdbqryhint"
c_tctdbqryhint :: Ptr QRY -> IO CString
type TDBQRYPROC' = Ptr Word8 -> CInt -> Ptr MAP -> Ptr Word8 -> IO CInt
foreign import ccall safe "tctdbqryproc"
c_tctdbqryproc :: Ptr QRY
-> FunPtr TDBQRYPROC'
-> Ptr Word8
-> IO Bool
foreign import ccall "wrapper"
mkProc :: TDBQRYPROC' -> IO (FunPtr TDBQRYPROC')