Header And Logo

PostgreSQL
| The world's most advanced open source database.

Functions | Variables

uuid-ossp.c File Reference

#include "postgres.h"
#include "fmgr.h"
#include "utils/builtins.h"
#include "utils/uuid.h"
Include dependency graph for uuid-ossp.c:

Go to the source code of this file.

Functions

Datum uuid_nil (PG_FUNCTION_ARGS)
Datum uuid_ns_dns (PG_FUNCTION_ARGS)
Datum uuid_ns_url (PG_FUNCTION_ARGS)
Datum uuid_ns_oid (PG_FUNCTION_ARGS)
Datum uuid_ns_x500 (PG_FUNCTION_ARGS)
Datum uuid_generate_v1 (PG_FUNCTION_ARGS)
Datum uuid_generate_v1mc (PG_FUNCTION_ARGS)
Datum uuid_generate_v3 (PG_FUNCTION_ARGS)
Datum uuid_generate_v4 (PG_FUNCTION_ARGS)
Datum uuid_generate_v5 (PG_FUNCTION_ARGS)
 PG_FUNCTION_INFO_V1 (uuid_nil)
 PG_FUNCTION_INFO_V1 (uuid_ns_dns)
 PG_FUNCTION_INFO_V1 (uuid_ns_url)
 PG_FUNCTION_INFO_V1 (uuid_ns_oid)
 PG_FUNCTION_INFO_V1 (uuid_ns_x500)
 PG_FUNCTION_INFO_V1 (uuid_generate_v1)
 PG_FUNCTION_INFO_V1 (uuid_generate_v1mc)
 PG_FUNCTION_INFO_V1 (uuid_generate_v3)
 PG_FUNCTION_INFO_V1 (uuid_generate_v4)
 PG_FUNCTION_INFO_V1 (uuid_generate_v5)
static void pguuid_complain (uuid_rc_t rc)
static char * uuid_to_string (const uuid_t *uuid)
static void string_to_uuid (const char *str, uuid_t *uuid)
static Datum special_uuid_value (const char *name)
static Datum uuid_generate_internal (int mode, const uuid_t *ns, const char *name)
static Datum uuid_generate_v35_internal (int mode, pg_uuid_t *ns, text *name)

Variables

 PG_MODULE_MAGIC

Function Documentation

PG_FUNCTION_INFO_V1 ( uuid_nil   ) 
PG_FUNCTION_INFO_V1 ( uuid_generate_v1   ) 
PG_FUNCTION_INFO_V1 ( uuid_generate_v1mc   ) 
PG_FUNCTION_INFO_V1 ( uuid_generate_v3   ) 
PG_FUNCTION_INFO_V1 ( uuid_generate_v4   ) 
PG_FUNCTION_INFO_V1 ( uuid_generate_v5   ) 
PG_FUNCTION_INFO_V1 ( uuid_ns_dns   ) 
PG_FUNCTION_INFO_V1 ( uuid_ns_url   ) 
PG_FUNCTION_INFO_V1 ( uuid_ns_oid   ) 
PG_FUNCTION_INFO_V1 ( uuid_ns_x500   ) 
static void pguuid_complain ( uuid_rc_t  rc  )  [static]

Definition at line 68 of file uuid-ossp.c.

References ereport, errcode(), errmsg(), ERROR, and NULL.

Referenced by special_uuid_value(), string_to_uuid(), uuid_generate_internal(), uuid_generate_v35_internal(), and uuid_to_string().

{
    char       *err = uuid_error(rc);

    if (err != NULL)
        ereport(ERROR,
                (errcode(ERRCODE_EXTERNAL_ROUTINE_EXCEPTION),
                 errmsg("OSSP uuid library failure: %s", err)));
    else
        ereport(ERROR,
                (errcode(ERRCODE_EXTERNAL_ROUTINE_EXCEPTION),
                 errmsg("OSSP uuid library failure: error code %d", rc)));
}

static Datum special_uuid_value ( const char *  name  )  [static]

Definition at line 110 of file uuid-ossp.c.

References CStringGetDatum, DirectFunctionCall1, pguuid_complain(), uuid_in(), and uuid_to_string().

Referenced by uuid_nil(), uuid_ns_dns(), uuid_ns_oid(), uuid_ns_url(), and uuid_ns_x500().

{
    uuid_t     *uuid;
    char       *str;
    uuid_rc_t   rc;

    rc = uuid_create(&uuid);
    if (rc != UUID_RC_OK)
        pguuid_complain(rc);
    rc = uuid_load(uuid, name);
    if (rc != UUID_RC_OK)
        pguuid_complain(rc);
    str = uuid_to_string(uuid);
    rc = uuid_destroy(uuid);
    if (rc != UUID_RC_OK)
        pguuid_complain(rc);

    return DirectFunctionCall1(uuid_in, CStringGetDatum(str));
}

static void string_to_uuid ( const char *  str,
uuid_t *  uuid 
) [static]

Definition at line 99 of file uuid-ossp.c.

References pguuid_complain().

Referenced by uuid_generate_v35_internal().

{
    uuid_rc_t   rc;

    rc = uuid_import(uuid, UUID_FMT_STR, str, UUID_LEN_STR + 1);
    if (rc != UUID_RC_OK)
        pguuid_complain(rc);
}

static Datum uuid_generate_internal ( int  mode,
const uuid_t *  ns,
const char *  name 
) [static]

Definition at line 167 of file uuid-ossp.c.

References CStringGetDatum, DirectFunctionCall1, pguuid_complain(), uuid_in(), and uuid_to_string().

Referenced by uuid_generate_v1(), uuid_generate_v1mc(), uuid_generate_v35_internal(), and uuid_generate_v4().

{
    uuid_t     *uuid;
    char       *str;
    uuid_rc_t   rc;

    rc = uuid_create(&uuid);
    if (rc != UUID_RC_OK)
        pguuid_complain(rc);
    rc = uuid_make(uuid, mode, ns, name);
    if (rc != UUID_RC_OK)
        pguuid_complain(rc);
    str = uuid_to_string(uuid);
    rc = uuid_destroy(uuid);
    if (rc != UUID_RC_OK)
        pguuid_complain(rc);

    return DirectFunctionCall1(uuid_in, CStringGetDatum(str));
}

Datum uuid_generate_v1 ( PG_FUNCTION_ARGS   ) 

Definition at line 189 of file uuid-ossp.c.

References NULL, and uuid_generate_internal().

{
    return uuid_generate_internal(UUID_MAKE_V1, NULL, NULL);
}

Datum uuid_generate_v1mc ( PG_FUNCTION_ARGS   ) 

Definition at line 196 of file uuid-ossp.c.

References NULL, and uuid_generate_internal().

{
    return uuid_generate_internal(UUID_MAKE_V1 | UUID_MAKE_MC, NULL, NULL);
}

Datum uuid_generate_v3 ( PG_FUNCTION_ARGS   ) 

Definition at line 228 of file uuid-ossp.c.

References name, PG_GETARG_TEXT_P, PG_GETARG_UUID_P, and uuid_generate_v35_internal().

{
    pg_uuid_t  *ns = PG_GETARG_UUID_P(0);
    text       *name = PG_GETARG_TEXT_P(1);

    return uuid_generate_v35_internal(UUID_MAKE_V3, ns, name);
}

static Datum uuid_generate_v35_internal ( int  mode,
pg_uuid_t ns,
text name 
) [static]

Definition at line 203 of file uuid-ossp.c.

References DatumGetCString, DirectFunctionCall1, pguuid_complain(), string_to_uuid(), text_to_cstring(), uuid_generate_internal(), uuid_out(), and UUIDPGetDatum.

Referenced by uuid_generate_v3(), and uuid_generate_v5().

{
    uuid_t     *ns_uuid;
    Datum       result;
    uuid_rc_t   rc;

    rc = uuid_create(&ns_uuid);
    if (rc != UUID_RC_OK)
        pguuid_complain(rc);
    string_to_uuid(DatumGetCString(DirectFunctionCall1(uuid_out, UUIDPGetDatum(ns))),
                   ns_uuid);

    result = uuid_generate_internal(mode,
                                    ns_uuid,
                                    text_to_cstring(name));

    rc = uuid_destroy(ns_uuid);
    if (rc != UUID_RC_OK)
        pguuid_complain(rc);

    return result;
}

Datum uuid_generate_v4 ( PG_FUNCTION_ARGS   ) 

Definition at line 238 of file uuid-ossp.c.

References NULL, and uuid_generate_internal().

{
    return uuid_generate_internal(UUID_MAKE_V4, NULL, NULL);
}

Datum uuid_generate_v5 ( PG_FUNCTION_ARGS   ) 

Definition at line 245 of file uuid-ossp.c.

References name, PG_GETARG_TEXT_P, PG_GETARG_UUID_P, and uuid_generate_v35_internal().

{
    pg_uuid_t  *ns = PG_GETARG_UUID_P(0);
    text       *name = PG_GETARG_TEXT_P(1);

    return uuid_generate_v35_internal(UUID_MAKE_V5, ns, name);
}

Datum uuid_nil ( PG_FUNCTION_ARGS   ) 

Definition at line 132 of file uuid-ossp.c.

References special_uuid_value().

{
    return special_uuid_value("nil");
}

Datum uuid_ns_dns ( PG_FUNCTION_ARGS   ) 

Definition at line 139 of file uuid-ossp.c.

References special_uuid_value().

{
    return special_uuid_value("ns:DNS");
}

Datum uuid_ns_oid ( PG_FUNCTION_ARGS   ) 

Definition at line 153 of file uuid-ossp.c.

References special_uuid_value().

{
    return special_uuid_value("ns:OID");
}

Datum uuid_ns_url ( PG_FUNCTION_ARGS   ) 

Definition at line 146 of file uuid-ossp.c.

References special_uuid_value().

{
    return special_uuid_value("ns:URL");
}

Datum uuid_ns_x500 ( PG_FUNCTION_ARGS   ) 

Definition at line 160 of file uuid-ossp.c.

References special_uuid_value().

{
    return special_uuid_value("ns:X500");
}

static char* uuid_to_string ( const uuid_t *  uuid  )  [static]

Definition at line 83 of file uuid-ossp.c.

References buf, palloc(), and pguuid_complain().

Referenced by special_uuid_value(), and uuid_generate_internal().

{
    char       *buf = palloc(UUID_LEN_STR + 1);
    void       *ptr = buf;
    size_t      len = UUID_LEN_STR + 1;
    uuid_rc_t   rc;

    rc = uuid_export(uuid, UUID_FMT_STR, &ptr, &len);
    if (rc != UUID_RC_OK)
        pguuid_complain(rc);

    return buf;
}


Variable Documentation

Definition at line 39 of file uuid-ossp.c.