Module: sip-router Branch: tteras/db_sqlite Commit: 9b4f2e9912d70b75f02dede15d1e9a833bf66d8d URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=9b4f2e99...
Author: Henning Westerholt henning.westerholt@1und1.de Committer: Timo Teräs timo.teras@iki.fi Date: Thu May 26 12:18:16 2011 +0200
db_sqlite: add support for autogeneration of db scheme (make dbschema)
---
doc/stylesheets/dbschema_k/xsl/db_sqlite.xsl | 133 ++++++++++++++++++++++++++ lib/srdb1/schema/Makefile | 20 ++++- 2 files changed, 151 insertions(+), 2 deletions(-)
diff --git a/doc/stylesheets/dbschema_k/xsl/db_sqlite.xsl b/doc/stylesheets/dbschema_k/xsl/db_sqlite.xsl new file mode 100644 index 0000000..1a42bc2 --- /dev/null +++ b/doc/stylesheets/dbschema_k/xsl/db_sqlite.xsl @@ -0,0 +1,133 @@ +<?xml version='1.0'?> +<!-- + * XSL converter script for sqlite databases + * + * Copyright (C) 2001-2007 FhG Fokus + * + * This file is part of Kamailio, a free SIP server. + * + * Kamailio is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version + * + * Kamailio is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ +--> + + +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" + version='1.0' + xmlns:xi="http://www.w3.org/2001/XInclude" +> + + <xsl:import href="sql.xsl"/> + +<!-- specify the table type --> + <xsl:template name="table.close"> + xsl:text)</xsl:text> + <xsl:if test="type[@db=$db]"> + xsl:text Type=</xsl:text> + <xsl:value-of select="normalize-space(type[@db=$db])"/> + </xsl:if> + xsl:text;

</xsl:text> + </xsl:template> + + <xsl:template name="column.type"> + <xsl:variable name="type"> + <xsl:call-template name="get-type"/> + </xsl:variable> + + xsl:choose + <xsl:when test="type[@db=$db]"> + <xsl:value-of select="normalize-space(type[@db=$db])"/> + </xsl:when> + <xsl:when test="$type='char'"> + xsl:textSMALLINT</xsl:text> + <xsl:call-template name="column.trailing"/> + </xsl:when> + <xsl:when test="$type='short'"> + xsl:textSMALLINT</xsl:text> + <xsl:call-template name="column.trailing"/> + </xsl:when> + <xsl:when test="$type='int'"> + <xsl:if test="not(autoincrement)"> + xsl:textINTEGER</xsl:text> + </xsl:if> + <xsl:call-template name="column.trailing"/> + </xsl:when> + <xsl:when test="$type='long'"> + xsl:textBIGINT</xsl:text> + <xsl:call-template name="column.trailing"/> + </xsl:when> + <xsl:when test="$type='datetime'"> + xsl:textTIMESTAMP</xsl:text> + <xsl:call-template name="column.trailing"/> + </xsl:when> + <xsl:when test="$type='double'"> + xsl:textDOUBLE PRECISION</xsl:text> + <xsl:call-template name="column.trailing"/> + </xsl:when> + <xsl:when test="$type='float'"> + xsl:textREAL</xsl:text> + <xsl:call-template name="column.trailing"/> + </xsl:when> + <xsl:when test="$type='string'"> + xsl:textVARCHAR</xsl:text> + <xsl:call-template name="column.size"/> + <xsl:call-template name="column.trailing"/> + </xsl:when> + <xsl:when test="$type='binary'"> + xsl:textBYTEA</xsl:text> + <xsl:call-template name="column.size"/> + <xsl:call-template name="column.trailing"/> + </xsl:when> + <xsl:when test="$type='text'"> + xsl:textTEXT</xsl:text> + <xsl:call-template name="column.size"/> + <xsl:call-template name="column.trailing"/> + </xsl:when> + xsl:otherwise + <xsl:call-template name="type-error"/> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + + <xsl:template name="column.trailing"> + <xsl:variable name="column.type"> + <xsl:call-template name="get-type"/> + </xsl:variable> + <xsl:if test="$column.type='datetime'"> + xsl:text WITHOUT TIME ZONE</xsl:text> + </xsl:if> + <xsl:if test="autoincrement"> + xsl:textINTEGER</xsl:text> + </xsl:if> + <!-- PRIMARY KEY column definition --> + <xsl:if test="primary"> + xsl:text PRIMARY KEY</xsl:text> + </xsl:if> + </xsl:template> + + <xsl:template name="get-index-name"> + <xsl:variable name="index.name"> + <xsl:call-template name="get-name"/> + </xsl:variable> + <xsl:variable name="table.name"> + <xsl:call-template name="get-name"> + <xsl:with-param name="select" select="parent::table"/> + </xsl:call-template> + </xsl:variable> + <!-- because postgres don't like identical index names, even on table level --> + <xsl:value-of select="concat($table.name, '_', $index.name)"/> + </xsl:template> + +</xsl:stylesheet> diff --git a/lib/srdb1/schema/Makefile b/lib/srdb1/schema/Makefile index 276ba16..5fbeecd 100644 --- a/lib/srdb1/schema/Makefile +++ b/lib/srdb1/schema/Makefile @@ -21,6 +21,9 @@ DBTEXT_XSL = $(STYLESHEETS)/dbtext.xsl # Stylesheet used to generate berkeley database schema DB_BERKELEY_XSL = $(STYLESHEETS)/db_berkeley.xsl
+# Stylesheet used to generate sqlite database schema +DB_SQLITE_XSL = $(STYLESHEETS)/db_sqlite.xsl + # Stylesheet used to generate oracle database schema ORACLE_XSL = $(STYLESHEETS)/oracle.xsl
@@ -56,7 +59,7 @@ ifeq ($(VERBOSE), 1) override XSLTPROC := $(XSLTPROC) --verbose endif
-all: mysql postgres dbtext db_berkeley docbook oracle #modules dbdoc +all: mysql postgres dbtext db_berkeley db_sqlite docbook oracle #modules dbdoc
.PHONY: mysql mysql_clean mysql: @@ -148,6 +151,19 @@ db_berkeley_clean: -@rm -f $(SCHEME)/db_berkeley/kamailio/*
+.PHONY: db_sqlite db_sqlite_clean +db_sqlite: + for FILE in $(TABLES); do \ + XML_CATALOG_FILES=$(CATALOG) $(XSLTPROC) $(XSLTPROC_FLAGS) \ + --stringparam dir "$(SCHEME)/db_sqlite" \ + --stringparam prefix "$$FILE-" \ + --stringparam db "db_sqlite" \ + $(DB_SQLITE_XSL) kamailio-"$$FILE".xml ; \ + done + +db_sqlite_clean: + -@rm -f $(SCHEME)/db_sqlite/* + .PHONY: docbook docbook_clean docbook: for FILE in $(TABLES); do \ @@ -219,4 +235,4 @@ dbdoc_clean: done
.PHONY: clean -clean: mysql_clean postgres_clean oracle_clean dbtext_clean db_berkeley_clean docbook_clean # modules_clean dbdoc_clean +clean: mysql_clean postgres_clean oracle_clean dbtext_clean db_berkeley_clean db_sqlite_clean docbook_clean # modules_clean dbdoc_clean