/* $Id: drydb.h,v 1.39 2009/05/07 21:22:52 imil Exp $ */ /* * Copyright (c) 2009 The NetBSD Foundation, Inc. * All rights reserved. * * This code is derived from software contributed to The NetBSD Foundation * by Emile "iMil" Heitor . * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * */ #ifndef _DRYDB_H #define _DRYDB_H #include "ddb_create.h" #define DROP_LOCAL_TABLES " \ DROP TABLE IF EXISTS LOCAL_DEPS; \ DROP TABLE IF EXISTS LOCAL_PKG; \ DROP TABLE IF EXISTS LOCAL_CONFLICTS; \ DROP TABLE IF EXISTS LOCAL_REQUIRES; \ DROP TABLE IF EXISTS LOCAL_PROVIDES; \ " #define DROP_REMOTE_TABLES " \ DROP TABLE IF EXISTS REMOTE_DEPS; \ DROP TABLE IF EXISTS REMOTE_PKG; \ DROP TABLE IF EXISTS REMOTE_CONFLICTS; \ DROP TABLE IF EXISTS REMOTE_REQUIRES; \ DROP TABLE IF EXISTS REMOTE_PROVIDES; \ " #define PKGPATH_DEPS " \ SELECT REMOTE_DEPS.REMOTE_DEPS_PKGNAME \ FROM REMOTE_DEPS,REMOTE_PKG \ WHERE REMOTE_PKG.PKGPATH GLOB \'*/%s\' \ AND REMOTE_DEPS.PKG_ID = REMOTE_PKG.PKG_ID; \ " #define DIRECT_DEPS " \ SELECT REMOTE_DEPS.REMOTE_DEPS_PKGNAME \ FROM REMOTE_DEPS,REMOTE_PKG \ WHERE REMOTE_PKG.PKGNAME GLOB \'%s-[0-9]*\' \ AND REMOTE_DEPS.PKG_ID = REMOTE_PKG.PKG_ID; \ " #define LOCAL_DIRECT_DEPS " \ SELECT LOCAL_DEPS.LOCAL_DEPS_PKGNAME \ FROM LOCAL_DEPS,LOCAL_PKG \ WHERE LOCAL_PKG.PKGNAME GLOB \'%s-[0-9]*\' \ AND LOCAL_DEPS.PKG_ID = LOCAL_PKG.PKG_ID; \ " #define EXACT_DIRECT_DEPS " \ SELECT REMOTE_DEPS.REMOTE_DEPS_PKGNAME \ FROM REMOTE_DEPS,REMOTE_PKG \ WHERE REMOTE_PKG.PKGNAME GLOB \'%s*\' \ AND REMOTE_DEPS.PKG_ID = REMOTE_PKG.PKG_ID; \ " #define LOCAL_REVERSE_DEPS " \ SELECT LOCAL_PKG.PKGNAME,LOCAL_PKG.PKG_KEEP \ FROM LOCAL_PKG,LOCAL_DEPS \ WHERE LOCAL_DEPS.LOCAL_DEPS_PKGNAME GLOB \'%s*\' \ AND LOCAL_PKG.PKG_ID = LOCAL_DEPS.PKG_ID; \ " #define REMOTE_REVERSE_DEPS " \ SELECT REMOTE_PKG.PKGNAME FROM REMOTE_PKG,REMOTE_DEPS \ WHERE REMOTE_DEPS.REMOTE_DEPS_PKGNAME GLOB \'%s*\' \ AND REMOTE_PKG.PKG_ID = REMOTE_DEPS.PKG_ID; \ " #define LOCAL_CONFLICTS "SELECT LOCAL_CONFLICTS_PKGNAME FROM LOCAL_CONFLICTS;" #define GET_CONFLICT_QUERY " \ SELECT LOCAL_PKG.PKGNAME FROM LOCAL_CONFLICTS,LOCAL_PKG \ WHERE LOCAL_CONFLICTS.LOCAL_CONFLICTS_PKGNAME = '%s' \ AND LOCAL_CONFLICTS.PKG_ID = LOCAL_PKG.PKG_ID; \ " /* naming dirt, this is not really a PKGNAME, but this shortcut permits * the use of a generic function in summary.c (child_table) */ #define GET_REQUIRES_QUERY " \ SELECT REMOTE_REQUIRES.REMOTE_REQUIRES_PKGNAME \ FROM REMOTE_REQUIRES,REMOTE_PKG \ WHERE REMOTE_PKG.PKGNAME = \'%s\' \ AND REMOTE_REQUIRES.PKG_ID = REMOTE_PKG.PKG_ID; \ " #define GET_PROVIDES_QUERY " \ SELECT REMOTE_PROVIDES.REMOTE_PROVIDES_PKGNAME \ FROM REMOTE_PROVIDES,REMOTE_PKG \ WHERE REMOTE_PKG.PKGNAME = \'%s\' \ AND REMOTE_PROVIDES.PKG_ID = REMOTE_PKG.PKG_ID; \ " #define LOCAL_PROVIDES "SELECT LOCAL_PROVIDES_PKGNAME FROM LOCAL_PROVIDES;" #define KEEP_PKG "UPDATE LOCAL_PKG SET PKG_KEEP = 1 WHERE PKGNAME = \'%s\';" #define UNKEEP_PKG \ "UPDATE LOCAL_PKG SET PKG_KEEP = NULL WHERE PKGNAME = \'%s\';" #define LOCAL_PKGS_QUERY \ "SELECT PKGNAME,COMMENT,FILE_SIZE,SIZE_PKG FROM LOCAL_PKG;" #define REMOTE_PKGS_QUERY \ "SELECT PKGNAME,COMMENT,FILE_SIZE,SIZE_PKG FROM REMOTE_PKG;" #define NOKEEP_LOCAL_PKGS " \ SELECT PKGNAME FROM LOCAL_PKG WHERE PKG_KEEP IS NULL; \ " #define KEEP_LOCAL_PKGS " \ SELECT PKGNAME FROM LOCAL_PKG WHERE PKG_KEEP IS NOT NULL; \ " #define PKG_URL "SELECT REPOSITORY FROM REMOTE_PKG WHERE PKGNAME = \'%s\';" #define DELETE_EMPTY_ROWS \ "DELETE FROM REMOTE_PKG WHERE PKGNAME IS NULL;" #define DDB PKG_DRY_DB"/pkg_dry.db" void drydb_init(void); void drydb_close(void); int drydb_doquery(const char *, int (*drydb_callback)(void *, int, char **, char **), void *); int ddb_get_value(void *, int, char **, char **); #define DDB_OK 0 #define DDB_ERR -1 #endif