summaryrefslogtreecommitdiff
path: root/db-mysql/mysql-client-info.lisp
blob: 9b791df2302962c26be50f2035cf0de2a747f8be (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
;;;; -*- Mode: LISP; Syntax: ANSI-Common-Lisp; Base: 10 -*-
;;;; *************************************************************************
;;;; FILE IDENTIFICATION
;;;;
;;;; Name:          mysql-client-info.lisp
;;;; Purpose:       Check mysql client version
;;;; Programmer:    Kevin M. Rosenberg
;;;; Date Started:  April 2004
;;;;
;;;; This file, part of CLSQL, is Copyright (c) 2004 by Kevin M. Rosenberg
;;;;
;;;; CLSQL users are granted the rights to distribute and use this software
;;;; as governed by the terms of the Lisp Lesser GNU Public License
;;;; (http://opensource.franz.com/preamble.html), also known as the LLGPL.
;;;; *************************************************************************

(in-package #:mysql)

(declaim (inline mysql-get-client-info))

(defvar *mysql-client-info* nil)

(eval-when (:compile-toplevel :load-toplevel :execute)
  (uffi:def-function ("mysql_get_client_info" mysql-get-client-info)
      ()
    :module "mysql"
    :returning :cstring)

  (setf *mysql-client-info* (uffi:convert-from-cstring (mysql-get-client-info)))


  (when (and (stringp *mysql-client-info*)
             (plusp (length *mysql-client-info*)))
    (cond
      ((eql (schar *mysql-client-info* 0) #\3)
       (pushnew :mysql-client-v3 cl:*features*))
      ((eql (schar *mysql-client-info* 0) #\4)
       (pushnew :mysql-client-v4 cl:*features*)
       (when (and (>= (length *mysql-client-info*) 3)
                  (string-equal "4.1" *mysql-client-info* :end2 3))
         (pushnew :mysql-client-v4.1 cl:*features*)))
      ((eql (schar *mysql-client-info* 0) #\5)
       (pushnew :mysql-client-v5 cl:*features*)
       (when (and (>= (length *mysql-client-info*) 3)
                  (string-equal "5.1" *mysql-client-info* :end2 3))
         (pushnew :mysql-client-v5.1 cl:*features*)))
      ((eql (schar *mysql-client-info* 0) #\6)
       (pushnew :mysql-client-v6 cl:*features*))
      (t
       (error "Unknown mysql client version '~A'." *mysql-client-info*)))))