Sun, 16 Feb 2025 15:14:45 +0100
add function for registering classes without PK
/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright 2024 Olaf Wintermann. All rights reserved. * * 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 COPYRIGHT HOLDERS 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 COPYRIGHT HOLDER 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. */ #include "dbutils/dbutils.h" #include "class.h" #include "field.h" #include <cx/hash_map.h> DBUContext* dbuContextCreate(void) { DBUContext *ctx = malloc(sizeof(DBUContext)); ctx->classes = cxHashMapCreateSimple(CX_STORE_POINTERS); ctx->classes->collection.simple_destructor = (cx_destructor_func)dbuClassFree; return ctx; } void dbuContextFree(DBUContext *context) { cxMapFree(context->classes); free(context); } DBUClass* dbuRegisterClassWithPrimaryKeyInt32( DBUContext *context, const char *name, size_t obj_size, const char *primary_key_column, off_t primary_key_offset) { DBUClass *cls = dbuClassCreate(name); cls->context = context; cls->obj_size = obj_size; dbuClassSetPrimaryKeyInt32(cls, primary_key_column, primary_key_offset); cxMapPut(context->classes, name, cls); return cls; } DBUClass* dbuRegisterClassWithPrimaryKeyUInt32( DBUContext *context, const char *name, size_t obj_size, const char *primary_key_column, off_t primary_key_offset) { DBUClass *cls = dbuClassCreate(name); cls->context = context; cls->obj_size = obj_size; dbuClassSetPrimaryKeyUInt32(cls, primary_key_column, primary_key_offset); cxMapPut(context->classes, name, cls); return cls; } DBUClass* dbuRegisterClassWithPrimaryKeyInt64( DBUContext *context, const char *name, size_t obj_size, const char *primary_key_column, off_t primary_key_offset) { DBUClass *cls = dbuClassCreate(name); cls->context = context; cls->obj_size = obj_size; dbuClassSetPrimaryKeyInt64(cls, primary_key_column, primary_key_offset); cxMapPut(context->classes, name, cls); return cls; } DBUClass* dbuRegisterClassWithPrimaryKeyUInt64( DBUContext *context, const char *name, size_t obj_size, const char *primary_key_column, off_t primary_key_offset) { DBUClass *cls = dbuClassCreate(name); cls->context = context; cls->obj_size = obj_size; dbuClassSetPrimaryKeyUInt64(cls, primary_key_column, primary_key_offset); cxMapPut(context->classes, name, cls); return cls; } DBUClass* dbuRegisterClassWithPrimaryKeyString( DBUContext *context, const char *name, size_t obj_size, const char *primary_key_column, off_t primary_key_offset) { DBUClass *cls = dbuClassCreate(name); cls->context = context; cls->obj_size = obj_size; dbuClassSetPrimaryKeyString(cls, primary_key_column, primary_key_offset); cxMapPut(context->classes, name, cls); return cls; } DBUClass* dbuRegisterClassWithPrimaryKeyCxMutStr( DBUContext *context, const char *name, size_t obj_size, const char *primary_key_column, off_t primary_key_offset) { DBUClass *cls = dbuClassCreate(name); cls->context = context; cls->obj_size = obj_size; dbuClassSetPrimaryKeyCxMutStr(cls, primary_key_column, primary_key_offset); cxMapPut(context->classes, name, cls); return cls; } DBUClass* dbuRegisterClassWithoutPK( DBUContext *context, const char *name, size_t obj_size) { DBUClass *cls = dbuClassCreate(name); cls->context = context; cls->obj_size = obj_size; cxMapPut(context->classes, name, cls); return cls; }