Coverage report: /home/ati/workspace/perec/persistence/standard-type.lisp
Kind | Covered | All | % |
expression | 249 | 370 | 67.3 |
branch | 9 | 10 | 90.0 |
Key
Not instrumented
Conditionalized out
Executed
Not executed
Both branches taken
One branch taken
Neither branch taken
1
;; -*- mode: Lisp; Syntax: Common-Lisp; -*-
3
;;; Copyright (c) 2006 by the authors.
5
;;; See LICENCE for details.
12
;;; May be used to combine null and unbound with a primitive type and may generate an extra column.
13
;;; See compute-reader and compute-writer generic function definitions
15
(defptype or (&rest types)
18
(defmethod parse-keyword-type-parameters ((type or-type) type-parameters)
19
(append (list :types (mapcar #'parse-type (getf type-parameters :types)))
20
(call-next-method type (remove-keywords type-parameters :types))))
22
(defmethod parse-positional-type-parameters ((type or-type) type-parameters)
23
(list :types (mapcar #'parse-type type-parameters)))
30
(defptype and (&rest types)
33
(defmethod parse-keyword-type-parameters ((type and-type) type-parameters)
34
(append (list :types (mapcar #'parse-type (getf type-parameters :types)))
35
(call-next-method type (remove-keywords type-parameters :types))))
37
(defmethod parse-positional-type-parameters ((type and-type) type-parameters)
38
(list :types (mapcar #'parse-type type-parameters)))
45
(defptype not (negated-type)
48
(defmethod parse-keyword-type-parameters((type not-type) type-parameters)
49
(append (list :negated-type (parse-type (getf type-parameters :negated-type)))
50
(call-next-method type (remove-keywords type-parameters :negated-type))))
52
(defmethod parse-positional-type-parameters ((type not-type) type-parameters)
53
(list :negated-type (parse-type (first type-parameters))))
58
(defptype satisfies (function)
59
`(satisfies ,function))
64
;;; other -> (type-error)
70
#L(error 'type-error :datum (first !1) :expected-type nil)
71
#L(error 'type-error :datum !1 :expected-type nil))
76
;;; not found in members -> (type-error)
78
(defptype member (&rest members)
81
(defmapping member (sql-integer-type :bit-size 16)
82
(integer->member-reader type-specification)
83
(member->integer-writer type-specification))
85
(defmacro def-member-type (name &body members)
87
`(member ,@',members)))
98
;; this type must be used to mark slots which might be unbound (e.g. (or unbound integer))
100
`(eql ,+unbound-slot-value+))
102
(defmapping unbound (sql-boolean-type)
103
(unbound-reader #L(error 'type-error :datum (first !1) :expected-type type))
104
(unbound-writer #L(error 'type-error :datum !1 :expected-type type)))
110
;;; t -> (type-error)
115
(defmapping null (sql-boolean-type)
116
(null-reader #L(error 'type-error :datum (first !1) :expected-type type))
117
(null-writer #L(error 'type-error :datum !1 :expected-type type)))
122
;;; unbound -> NULL, NULL
123
;;; nil -> true, NULL
124
;;; other -> true, (base64)
129
(defmapping t (sql-character-large-object-type)
130
'base64->object-reader
131
'object->base64-writer)
136
;;; unbound -> (type-error)
137
;;; nil -> (type-error)
138
;;; other -> (base64)
140
(defun maximum-serialized-size-p (serialized)
141
(declare (ignore serialized))
144
(defptype serialized (&optional byte-size)
145
(declare (ignore byte-size))
148
(satisfies maximum-serialized-size-p)))
150
(defmapping serialized (if (consp type-specification)
151
(sql-character-varying-type :size (second type-specification))
152
(sql-character-large-object-type))
153
'base64->object-reader
154
'object->base64-writer)
161
;;; other -> (type-error)
166
(defmapping boolean (sql-boolean-type)
167
'object->boolean-reader
168
'boolean->string-writer)
173
;;; non integer -> (type-error)
175
(defptype integer (&optional minimum-value maximum-value bit-size)
176
(declare (ignore bit-size))
177
`(integer ,minimum-value ,maximum-value))
179
(defmapping integer (sql-integer-type)
180
'object->integer-reader
186
;;; non integer -> (type-error)
188
(defptype integer-16 ()
189
`(integer ,(- (expt 2 15)) ,(1- (expt 2 15))))
191
(defmapping integer-16 (sql-integer-type :bit-size 16)
192
'object->integer-reader
198
;;; non integer -> (type-error)
200
(defptype integer-32 ()
201
`(integer ,(- (expt 2 31)) ,(1- (expt 2 31))))
203
(defmapping integer-32 (sql-integer-type :bit-size 32)
204
'object->integer-reader
210
;;; non integer -> (type-error)
212
(defptype integer-64 ()
213
`(integer ,(- (expt 2 63)) ,(1- (expt 2 63))))
215
(defmapping integer-64 (sql-integer-type :bit-size 64)
216
'object->integer-reader
222
;;; non float -> (type-error)
224
(defptype float (&optional minimum-value maximum-value)
225
`(float ,minimum-value ,maximum-value))
227
(defmapping float (sql-float-type :bite-size 64)
228
'object->number-reader
234
;;; non float -> (type-error)
236
(defptype float-32 ()
239
(defmapping float-32 (sql-float-type :bit-size 32)
240
'object->number-reader
246
;;; non float -> (type-error)
248
(defptype float-64 ()
251
(defmapping float-64 (sql-float-type :bit-size 64)
252
'object->number-reader
258
;;; non double -> (type-error)
263
(defmapping double-float (sql-float-type :bit-size 64)
264
'object->number-reader
270
;;; non number -> (type-error)
275
(defmapping number (sql-numeric-type)
276
'object->number-reader
282
;;; non string -> (type-error)
284
(defptype string (&optional length acceptable-characters)
285
(declare (ignore acceptable-characters))
288
(defmapping string (if (consp type-specification)
289
(sql-character-type :size (second type-specification))
290
(sql-character-large-object-type))
297
;;; non string -> (type-error)
300
(defun maximum-length-p (string)
301
(declare (ignore string))
304
(defptype text (&optional maximum-length minimum-length acceptable-characters)
305
(declare (ignore maximum-length minimum-length acceptable-characters))
307
(satisfies maximum-length-p)))
309
(defmapping text (if (consp type-specification)
310
(sql-character-varying-type :size (second type-specification))
311
(sql-character-large-object-type))
318
;;; non symbol -> (type-error)
323
(defmapping symbol (sql-character-large-object-type)
324
'string->symbol-reader
325
'symbol->string-writer)
328
(defun maximum-symbol-name-length-p (symbol)
329
(declare (ignore symbol))
332
(defptype symbol* (&optional maximum-length)
333
(declare (ignore maximum-length))
335
(satisfies maximum-symbol-name-length-p)))
337
(defmapping symbol* (if (consp type-specification)
338
(sql-character-varying-type :size (second (find 'symbol* type-specification
339
:key #L(when (listp !1) (first !1)))))
340
(sql-character-large-object-type))
341
'string->symbol-reader
342
'symbol->string-writer)
347
;;; non date -> (type-error)
351
(declare (ignore date))
358
(defmapping date (sql-date-type)
359
'integer->local-time-reader
360
'local-time->string-writer)
365
;;; non date -> (type-error)
369
(declare (ignore time))
376
(defmapping time (sql-time-type)
377
'string->local-time-reader
378
'local-time->string-writer)
383
;;; non date -> (type-error)
385
(defptype timestamp ()
390
(defmapping timestamp (sql-timestamp-type)
391
'integer->local-time-reader
392
'local-time->string-writer)
397
;;; non string -> (type-error)
400
(defun duration-p (duration)
401
(declare (ignore duration))
404
(defptype duration ()
406
(satisfies duration-p)))
408
(defmapping duration (sql-character-varying-type :size 32)
415
;;; non form -> (type-error)
417
(defptype form (&optional byte-size)
418
(declare (ignore byte-size))
420
(satisfies maximum-serialized-size-p)))
422
(defmapping form (sql-character-varying-type)
424
'list->string-writer)