blob: 7067e7da78116b836b9d615971e0274da391209e [file] [log] [blame]
/**********************************************************************
// @@@ START COPYRIGHT @@@
//
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
//
// @@@ END COPYRIGHT @@@
**********************************************************************/
/* -*-C++-*-
*****************************************************************************
*
* File: ComSmallDefs.C
* Description: Small definitions are declared here that are used throughout
* the SQL/ARK product.
*
* Created: 10/27/95
* Language: C++
*
*
*
*
*****************************************************************************
*/
#include "Platform.h"
// this file needed for getuid/getpid for UNIX implementation of ComUID
#include <sys/unistd.h>
#include <sys/time.h>
#include <stdio.h>
#include <time.h>
#include <cextdecs/cextdecs.h>
#include "BaseTypes.h"
#include "ComLocationNames.h"
#include "ComOperators.h"
#include "ComSmallDefs.h"
#include "ComASSERT.h"
#include "ComRegAPI.h"
#include "CatSQLShare.h"
#ifdef _DEBUG
#include "ComRtUtils.h"
#endif
// This function now for non-NSKLite platforms only (UNIX)
Int64 ComSmallDef_local_GetTimeStamp(void)
{
return(JULIANTIMESTAMP());
}
//**********************************************************************************
//
// UID and funny name stuff
//
//
void ComUID::make_UID(void)
{
// A UID is based on a 64-bit unique value
//
// For packaging purposes, the generation happens in CatSQLShare, see sqlshare/CatSQLShare.cpp
#ifdef _DEBUG
// Debug code, to read the UID values from a file specified by an envvar
char lineFromFile[80];
if (ComRtGetValueFromFile ("MX_FAKE_UID_FILE", lineFromFile, sizeof(lineFromFile)))
{
this->data = atoInt64 (lineFromFile);
return;
}
#endif
this->data = generateUniqueValue ();
}
// This method was adapted from the definition of function
// void convertInt64ToAscii(const Int64 &src, char* tgt)
// defined in w:/common/Int64.cpp
void ComUID::convertTo19BytesFixedWidthStringWithZeroesPrefix (ComString &tgt) const
{
Int64 temp = get_value();
char buffer[20];
char *s = &buffer[occurs(buffer) - 1];
memset(buffer, '0', occurs(buffer) - 1);
*s = '\0';
do {
unsigned char c = (unsigned char) (temp % 10);
*--s = (char)(c + '0');
temp /= 10;
} while (temp != 0);
tgt = buffer;
}
// friend
ostream & operator << (ostream &s, const ComUID &uid)
{
char buf[21];
Int64 num;
Int32 i;
Int32 digit;
// "buf" is big enough to hold the biggest num possible. We fill it
// from right to left 'cause its easier then print from the first
// (leftmost) valid character of the array
buf[20] = 0;
i=19;
num = uid.data;
while (num > 0)
{
digit = (Int32) (num % 10);
num = num / 10;
buf[i--] = digit+'0';
}
i++;
while (buf[i] != 0)
{
s << buf[i];
i++;
}
return s;
}
// Return the 2-character string literal corresponding to the ComObjectType
// argument.
const char* comObjectTypeLit(ComObjectType objType)
{
switch(objType)
{
case COM_UNKNOWN_OBJECT:
return COM_UNKNOWN_OBJECT_LIT;
case COM_BASE_TABLE_OBJECT:
return COM_BASE_TABLE_OBJECT_LIT;
case COM_CHECK_CONSTRAINT_OBJECT:
return COM_CHECK_CONSTRAINT_OBJECT_LIT;
case COM_INDEX_OBJECT:
return COM_INDEX_OBJECT_LIT;
case COM_LIBRARY_OBJECT:
return COM_LIBRARY_OBJECT_LIT;
case COM_LOCK_OBJECT:
return COM_LOCK_OBJECT_LIT;
case COM_MODULE_OBJECT:
return COM_MODULE_OBJECT_LIT;
case COM_NOT_NULL_CONSTRAINT_OBJECT:
return COM_NOT_NULL_CONSTRAINT_OBJECT_LIT;
case COM_PRIMARY_KEY_CONSTRAINT_OBJECT:
return COM_PRIMARY_KEY_CONSTRAINT_OBJECT_LIT;
case COM_REFERENTIAL_CONSTRAINT_OBJECT:
return COM_REFERENTIAL_CONSTRAINT_OBJECT_LIT;
case COM_STORED_PROCEDURE_OBJECT:
return COM_STORED_PROCEDURE_OBJECT_LIT;
case COM_UNIQUE_CONSTRAINT_OBJECT:
return COM_UNIQUE_CONSTRAINT_OBJECT_LIT;
case COM_USER_DEFINED_ROUTINE_OBJECT:
return COM_USER_DEFINED_ROUTINE_OBJECT_LIT;
case COM_VIEW_OBJECT:
return COM_VIEW_OBJECT_LIT;
case COM_MV_OBJECT:
return COM_MV_OBJECT_LIT;
case COM_MVRG_OBJECT:
return COM_MVRG_OBJECT_LIT;
case COM_TRIGGER_OBJECT:
return COM_TRIGGER_OBJECT_LIT;
case COM_LOB_TABLE_OBJECT:
return COM_LOB_TABLE_OBJECT_LIT;
case COM_TRIGGER_TABLE_OBJECT:
return COM_TRIGGER_TABLE_OBJECT_LIT;
case COM_SYNONYM_OBJECT:
return COM_SYNONYM_OBJECT_LIT;
case COM_SHARED_SCHEMA_OBJECT:
return COM_SHARED_SCHEMA_OBJECT_LIT;
case COM_EXCEPTION_TABLE_OBJECT:
return COM_EXCEPTION_TABLE_OBJECT_LIT;
case COM_PRIVATE_SCHEMA_OBJECT:
return COM_PRIVATE_SCHEMA_OBJECT_LIT;
case COM_SEQUENCE_GENERATOR_OBJECT:
return COM_SEQUENCE_GENERATOR_OBJECT_LIT;
}
ComASSERT(FALSE);
return COM_UNKNOWN_OBJECT_LIT;
}
const char* comObjectTypeName(ComObjectType objType)
{
switch(objType)
{
case COM_UNKNOWN_OBJECT:
return "UNKNOWN ";
case COM_BASE_TABLE_OBJECT:
return "TABLE ";
case COM_INDEX_OBJECT:
return "INDEX ";
case COM_LIBRARY_OBJECT:
return "LIBRARY ";
case COM_STORED_PROCEDURE_OBJECT:
return "PROCEDURE ";
case COM_USER_DEFINED_ROUTINE_OBJECT:
return "FUNCTION ";
case COM_VIEW_OBJECT:
return "VIEW ";
case COM_SHARED_SCHEMA_OBJECT:
return "SHARED SCHEMA ";
case COM_PRIVATE_SCHEMA_OBJECT:
return "PRIVATE SCHEMA ";
case COM_SEQUENCE_GENERATOR_OBJECT:
return "SEQUENCE ";
}
return "UNKNOWN ";
}