should be it

This commit is contained in:
2025-10-24 19:21:19 -05:00
parent a4b23fc57c
commit f09560c7b1
14047 changed files with 3161551 additions and 1 deletions

View File

@@ -0,0 +1,148 @@
/*
* Copyright owned by the Transaction Processing Performance Council.
*
* A copy of the license is included under extension/tpch/dbgen/LICENSE
* in this repository.
*
* You may not use this file except in compliance with the License.
*
* THE TPC SOFTWARE IS AVAILABLE WITHOUT CHARGE FROM TPC.
*/
/*
* this file allows the compilation of DBGEN to be tailored to specific
* architectures and operating systems. Some options are grouped
* together to allow easier compilation on a given vendor's hardware.
*
* The following #defines will effect the code:
* SEPARATOR -- character used to separate fields in flat files
* STDLIB_HAS_GETOPT -- to prevent confilcts with gloabal getopt()
* MDY_DATE -- generate dates as MM-DD-YY
* WIN32 -- support for WindowsNT
* DSS_HUGE -- 64 bit data type
* HUGE_FORMAT -- printf string for 64 bit data type
* EOL_HANDLING -- flat files don't need final column separator
*
* Certain defines must be provided in the makefile:
* MACHINE defines
* ==========
* ATT -- getopt() handling
* HP -- posix source inclusion differences
* IBM -- posix source inclusion differences
* SGI -- getopt() handling
* SUN -- getopt() handling
* LINUX
* WIN32 -- for WINDOWS
*
* DATABASE defines
* ================
* DB2 -- use DB2 dialect in QGEN
* INFORMIX -- use Informix dialect in QGEN
* SQLSERVER -- use SQLSERVER dialect in QGEN
* SYBASE -- use Sybase dialect in QGEN
* TDAT -- use Teradata dialect in QGEN
*
* WORKLOAD defines
* ================
* TPCH -- make will create TPCH (set in makefile)
*/
#pragma once
#ifndef DBNAME
#define DBNAME "dss"
#endif
#ifndef MAC
#define MAC
#endif
#ifndef ORACLE
#define ORACLE
#endif
#ifndef TPCH
#define TPCH
#endif
#ifdef ATT
#define STDLIB_HAS_GETOPT
#ifdef SQLSERVER
#define WIN32
#else
#define DSS_HUGE long long
#define RNG_A 6364136223846793005ull
#define RNG_C 1ull
#define HUGE_FORMAT "%LLd"
#define HUGE_DATE_FORMAT "%02LLd"
#endif /* SQLSERVER or MP/RAS */
#endif /* ATT */
#ifdef HP
#define _INCLUDE_POSIX_SOURCE
#define STDLIB_HAS_GETOPT
#define DSS_HUGE long
#define HUGE_COUNT 2
#define HUGE_FORMAT "%ld"
#define HUGE_DATE_FORMAT "%02lld"
#define RNG_C 1ull
#define RNG_A 6364136223846793005ull
#endif /* HP */
#ifdef IBM
#define STDLIB_HAS_GETOPT
#define DSS_HUGE long long
#define HUGE_FORMAT "%lld"
#define HUGE_DATE_FORMAT "%02lld"
#define RNG_A 6364136223846793005ull
#define RNG_C 1ull
#endif /* IBM */
#ifdef LINUX
#define STDLIB_HAS_GETOPT
#define DSS_HUGE long long int
#define HUGE_FORMAT "%lld"
#define HUGE_DATE_FORMAT "%02lld"
#define RNG_A 6364136223846793005ull
#define RNG_C 1ull
#endif /* LINUX */
#ifdef MAC
//#define _POSIX_C_SOURCE 200112L
//#define _POSIX_SOURCE
#define STDLIB_HAS_GETOPT
#define SUPPORT_64BITS
#define DSS_HUGE long long
#define HUGE_FORMAT "%ld"
#define HUGE_DATE_FORMAT "%02ld"
#define RNG_A 6364136223846793005ull
#define RNG_C 1ull
#endif /* MAC */
#ifdef SUN
#define STDLIB_HAS_GETOPT
#define RNG_A 6364136223846793005ull
#define RNG_C 1ull
#define DSS_HUGE long long
#define HUGE_FORMAT "%lld"
#define HUGE_DATE_FORMAT "%02lld"
#endif /* SUN */
#ifdef SGI
#define STDLIB_HAS_GETOPT
#define DSS_HUGE __int64_t
#endif /* SGI */
#if (defined(WIN32) && !defined(_POSIX_))
#define PATH_SEP '\\'
#define DSS_HUGE __int64
#define RNG_A 6364136223846793005uI64
#define RNG_C 1uI64
#define HUGE_FORMAT "%I64d"
#define HUGE_DATE_FORMAT "%02I64d"
/* requried by move to Visual Studio 2005 */
#define strdup(x) _strdup(x)
#endif /* WIN32 */
#ifndef PATH_SEP
#define PATH_SEP '/'
#endif /* PATH_SEP */

View File

@@ -0,0 +1,36 @@
//===----------------------------------------------------------------------===//
//
// DuckDB
//
// dbgen.hpp
//
//
//===----------------------------------------------------------------------===//
#pragma once
#include "duckdb.hpp"
#include "duckdb/catalog/catalog.hpp"
#include "duckdb/common/types/data_chunk.hpp"
namespace duckdb {
class ClientContext;
}
namespace tpch {
struct DBGenWrapper {
//! Create the TPC-H tables in the given catalog / schema with the given suffix
static void CreateTPCHSchema(duckdb::ClientContext &context, std::string catalog, std::string schema,
std::string suffix);
//! Load the TPC-H data of the given scale factor
static void LoadTPCHData(duckdb::ClientContext &context, double sf, std::string catalog, std::string schema,
std::string suffix, int children, int step);
//! Gets the specified TPC-H Query number as a string
static std::string GetQuery(int query);
//! Returns the CSV answer of a TPC-H query
static std::string GetAnswer(double sf, int query);
};
} // namespace tpch

View File

@@ -0,0 +1,16 @@
/*
* Copyright owned by the Transaction Processing Performance Council.
*
* A copy of the license is included under extension/tpch/dbgen/LICENSE
* in this repository.
*
* You may not use this file except in compliance with the License.
*
* THE TPC SOFTWARE IS AVAILABLE WITHOUT CHARGE FROM TPC.
*/
#pragma once
struct DBGenContext;
void load_dists(long textBufferSize, DBGenContext *ctx);
void cleanup_dists(void);

View File

@@ -0,0 +1,850 @@
/*
* Copyright owned by the Transaction Processing Performance Council.
*
* A copy of the license is included under extension/tpch/dbgen/LICENSE
* in this repository.
*
* You may not use this file except in compliance with the License.
*
* THE TPC SOFTWARE IS AVAILABLE WITHOUT CHARGE FROM TPC.
*/
const char *dists_dss = "#\n"
"# $Id: dists.dss,v 1.2 2005/01/03 20:08:58 jms Exp $\n"
"#\n"
"# Revision History\n"
"# ===================\n"
"# $Log: dists.dss,v $\n"
"# Revision 1.2 2005/01/03 20:08:58 jms\n"
"# change line terminations\n"
"#\n"
"# Revision 1.1.1.1 2004/11/24 23:31:46 jms\n"
"# re-establish external server\n"
"#\n"
"# Revision 1.1.1.1 2003/04/03 18:54:21 jms\n"
"# recreation after CVS crash\n"
"#\n"
"# Revision 1.1.1.1 2003/04/03 18:54:21 jms\n"
"# initial checkin\n"
"#\n"
"#\n"
"#\n"
"#\n"
"# distributions have the following format:\n"
"#\n"
"# <token> | <weight> # comment\n"
"#\n"
"# Distributions are used to bias the selection of a token \n"
"# based on its associated weight. The list of tokens and values \n"
"# between the keywords BEGIN and END define the distribution named after\n"
"# the BEGIN. A uniformly random value from [0, sum(weights)]\n"
"# will be chosen and the first token whose cumulative weight is greater "
"than\n"
"# or equal to the result will be returned. In essence, the weights for "
"each\n"
"# token represent its relative weight within a distribution.\n"
"#\n"
"# one special token is defined: count (number of data points in the \n"
"# distribution). It MUST be defined for each named distribution.\n"
"#-----------------------------------------------------------------------\n"
"# currently defined distributions and their use:\n"
"# NAME FIELD/NOTES\n"
"# ======== ==============\n"
"# category parts.category\n"
"# container parts.container\n"
"# instruct shipping instructions\n"
"# msegmnt market segment\n"
"# names parts.name\n"
"# nations must be ordered along with regions\n"
"# nations2 stand alone nations set for use with qgen\n"
"# o_prio order priority\n"
"# regions must be ordered along with nations\n"
"# rflag lineitems.returnflag\n"
"# types parts.type\n"
"# colors embedded string creation; CANNOT BE USED FOR pick_str(), "
"agg_str() perturbs order\n"
"# articles comment generation \n"
"# nouns \n"
"# verbs \n"
"# adverbs \n"
"# auxillaries \n"
"# prepositions\n"
"# terminators\n"
"# grammar sentence formation\n"
"# np\n"
"# vp\n"
"###\n"
"# category\n"
"###\n"
"BEGIN category\n"
"COUNT|5\n"
"FURNITURE|1\n"
"STORAGE EQUIP|1\n"
"TOOLS|1\n"
"MACHINE TOOLS|1\n"
"OTHER|1\n"
"END category\n"
"###\n"
"# container\n"
"###\n"
"begin p_cntr\n"
"count|40\n"
"SM CASE|1\n"
"SM BOX|1\n"
"SM BAG|1\n"
"SM JAR|1\n"
"SM PACK|1\n"
"SM PKG|1\n"
"SM CAN|1\n"
"SM DRUM|1\n"
"LG CASE|1\n"
"LG BOX|1\n"
"LG BAG|1\n"
"LG JAR|1\n"
"LG PACK|1\n"
"LG PKG|1\n"
"LG CAN|1\n"
"LG DRUM|1\n"
"MED CASE|1\n"
"MED BOX|1\n"
"MED BAG|1\n"
"MED JAR|1\n"
"MED PACK|1\n"
"MED PKG|1\n"
"MED CAN|1\n"
"MED DRUM|1\n"
"JUMBO CASE|1\n"
"JUMBO BOX|1\n"
"JUMBO BAG|1\n"
"JUMBO JAR|1\n"
"JUMBO PACK|1\n"
"JUMBO PKG|1\n"
"JUMBO CAN|1\n"
"JUMBO DRUM|1\n"
"WRAP CASE|1\n"
"WRAP BOX|1\n"
"WRAP BAG|1\n"
"WRAP JAR|1\n"
"WRAP PACK|1\n"
"WRAP PKG|1\n"
"WRAP CAN|1\n"
"WRAP DRUM|1\n"
"end p_cntr\n"
"###\n"
"# instruct\n"
"###\n"
"begin instruct\n"
"count|4\n"
"DELIVER IN PERSON|1\n"
"COLLECT COD|1\n"
"TAKE BACK RETURN|1\n"
"NONE|1\n"
"end instruct\n"
"###\n"
"# msegmnt\n"
"###\n"
"begin msegmnt\n"
"count|5\n"
"AUTOMOBILE|1\n"
"BUILDING|1\n"
"FURNITURE|1\n"
"HOUSEHOLD|1\n"
"MACHINERY|1\n"
"end msegmnt\n"
"###\n"
"# names\n"
"###\n"
"begin p_names\n"
"COUNT|4\n"
"CLEANER|1\n"
"SOAP|1\n"
"DETERGENT|1\n"
"EXTRA|1\n"
"end p_names\n"
"###\n"
"# nations\n"
"# NOTE: this is a special case; the weights here are adjustments to\n"
"# map correctly into the regions table, and are *NOT* cummulative\n"
"# values to mimic a distribution\n"
"###\n"
"begin nations\n"
"count|25\n"
"ALGERIA|0\n"
"ARGENTINA|1\n"
"BRAZIL|0\n"
"CANADA|0\n"
"EGYPT|3\n"
"ETHIOPIA|-4\n"
"FRANCE|3\n"
"GERMANY|0\n"
"INDIA|-1\n"
"INDONESIA|0\n"
"IRAN|2\n"
"IRAQ|0\n"
"JAPAN|-2\n"
"JORDAN|2\n"
"KENYA|-4\n"
"MOROCCO|0\n"
"MOZAMBIQUE|0\n"
"PERU|1\n"
"CHINA|1\n"
"ROMANIA|1\n"
"SAUDI ARABIA|1\n"
"VIETNAM|-2\n"
"RUSSIA|1\n"
"UNITED KINGDOM|0\n"
"UNITED STATES|-2\n"
"end nations\n"
"###\n"
"# nations2\n"
"###\n"
"begin nations2\n"
"count|25\n"
"ALGERIA|1\n"
"ARGENTINA|1\n"
"BRAZIL|1\n"
"CANADA|1\n"
"EGYPT|1\n"
"ETHIOPIA|1\n"
"FRANCE|1\n"
"GERMANY|1\n"
"INDIA|1\n"
"INDONESIA|1\n"
"IRAN|1\n"
"IRAQ|1\n"
"JAPAN|1\n"
"JORDAN|1\n"
"KENYA|1\n"
"MOROCCO|1\n"
"MOZAMBIQUE|1\n"
"PERU|1\n"
"CHINA|1\n"
"ROMANIA|1\n"
"SAUDI ARABIA|1\n"
"VIETNAM|1\n"
"RUSSIA|1\n"
"UNITED KINGDOM|1\n"
"UNITED STATES|1\n"
"end nations2\n"
"###\n"
"# regions\n"
"###\n"
"begin regions\n"
"count|5\n"
"AFRICA|1\n"
"AMERICA|1\n"
"ASIA|1\n"
"EUROPE|1\n"
"MIDDLE EAST|1\n"
"end regions\n"
"###\n"
"# o_prio\n"
"###\n"
"begin o_oprio\n"
"count|5\n"
"1-URGENT|1\n"
"2-HIGH|1\n"
"3-MEDIUM|1\n"
"4-NOT SPECIFIED|1\n"
"5-LOW|1\n"
"end o_oprio\n"
"###\n"
"# rflag\n"
"###\n"
"begin rflag\n"
"count|2\n"
"R|1\n"
"A|1\n"
"end rflag\n"
"###\n"
"# smode\n"
"###\n"
"begin smode\n"
"count|7\n"
"REG AIR|1\n"
"AIR|1\n"
"RAIL|1\n"
"TRUCK|1\n"
"MAIL|1\n"
"FOB|1\n"
"SHIP|1\n"
"end smode\n"
"###\n"
"# types\n"
"###\n"
"begin p_types\n"
"COUNT|150\n"
"STANDARD ANODIZED TIN|1\n"
"STANDARD ANODIZED NICKEL|1\n"
"STANDARD ANODIZED BRASS|1\n"
"STANDARD ANODIZED STEEL|1\n"
"STANDARD ANODIZED COPPER|1\n"
"STANDARD BURNISHED TIN|1\n"
"STANDARD BURNISHED NICKEL|1\n"
"STANDARD BURNISHED BRASS|1\n"
"STANDARD BURNISHED STEEL|1\n"
"STANDARD BURNISHED COPPER|1\n"
"STANDARD PLATED TIN|1\n"
"STANDARD PLATED NICKEL|1\n"
"STANDARD PLATED BRASS|1\n"
"STANDARD PLATED STEEL|1\n"
"STANDARD PLATED COPPER|1\n"
"STANDARD POLISHED TIN|1\n"
"STANDARD POLISHED NICKEL|1\n"
"STANDARD POLISHED BRASS|1\n"
"STANDARD POLISHED STEEL|1\n"
"STANDARD POLISHED COPPER|1\n"
"STANDARD BRUSHED TIN|1\n"
"STANDARD BRUSHED NICKEL|1\n"
"STANDARD BRUSHED BRASS|1\n"
"STANDARD BRUSHED STEEL|1\n"
"STANDARD BRUSHED COPPER|1\n"
"SMALL ANODIZED TIN|1\n"
"SMALL ANODIZED NICKEL|1\n"
"SMALL ANODIZED BRASS|1\n"
"SMALL ANODIZED STEEL|1\n"
"SMALL ANODIZED COPPER|1\n"
"SMALL BURNISHED TIN|1\n"
"SMALL BURNISHED NICKEL|1\n"
"SMALL BURNISHED BRASS|1\n"
"SMALL BURNISHED STEEL|1\n"
"SMALL BURNISHED COPPER|1\n"
"SMALL PLATED TIN|1\n"
"SMALL PLATED NICKEL|1\n"
"SMALL PLATED BRASS|1\n"
"SMALL PLATED STEEL|1\n"
"SMALL PLATED COPPER|1\n"
"SMALL POLISHED TIN|1\n"
"SMALL POLISHED NICKEL|1\n"
"SMALL POLISHED BRASS|1\n"
"SMALL POLISHED STEEL|1\n"
"SMALL POLISHED COPPER|1\n"
"SMALL BRUSHED TIN|1\n"
"SMALL BRUSHED NICKEL|1\n"
"SMALL BRUSHED BRASS|1\n"
"SMALL BRUSHED STEEL|1\n"
"SMALL BRUSHED COPPER|1\n"
"MEDIUM ANODIZED TIN|1\n"
"MEDIUM ANODIZED NICKEL|1\n"
"MEDIUM ANODIZED BRASS|1\n"
"MEDIUM ANODIZED STEEL|1\n"
"MEDIUM ANODIZED COPPER|1\n"
"MEDIUM BURNISHED TIN|1\n"
"MEDIUM BURNISHED NICKEL|1\n"
"MEDIUM BURNISHED BRASS|1\n"
"MEDIUM BURNISHED STEEL|1\n"
"MEDIUM BURNISHED COPPER|1\n"
"MEDIUM PLATED TIN|1\n"
"MEDIUM PLATED NICKEL|1\n"
"MEDIUM PLATED BRASS|1\n"
"MEDIUM PLATED STEEL|1\n"
"MEDIUM PLATED COPPER|1\n"
"MEDIUM POLISHED TIN|1\n"
"MEDIUM POLISHED NICKEL|1\n"
"MEDIUM POLISHED BRASS|1\n"
"MEDIUM POLISHED STEEL|1\n"
"MEDIUM POLISHED COPPER|1\n"
"MEDIUM BRUSHED TIN|1\n"
"MEDIUM BRUSHED NICKEL|1\n"
"MEDIUM BRUSHED BRASS|1\n"
"MEDIUM BRUSHED STEEL|1\n"
"MEDIUM BRUSHED COPPER|1\n"
"LARGE ANODIZED TIN|1\n"
"LARGE ANODIZED NICKEL|1\n"
"LARGE ANODIZED BRASS|1\n"
"LARGE ANODIZED STEEL|1\n"
"LARGE ANODIZED COPPER|1\n"
"LARGE BURNISHED TIN|1\n"
"LARGE BURNISHED NICKEL|1\n"
"LARGE BURNISHED BRASS|1\n"
"LARGE BURNISHED STEEL|1\n"
"LARGE BURNISHED COPPER|1\n"
"LARGE PLATED TIN|1\n"
"LARGE PLATED NICKEL|1\n"
"LARGE PLATED BRASS|1\n"
"LARGE PLATED STEEL|1\n"
"LARGE PLATED COPPER|1\n"
"LARGE POLISHED TIN|1\n"
"LARGE POLISHED NICKEL|1\n"
"LARGE POLISHED BRASS|1\n"
"LARGE POLISHED STEEL|1\n"
"LARGE POLISHED COPPER|1\n"
"LARGE BRUSHED TIN|1\n"
"LARGE BRUSHED NICKEL|1\n"
"LARGE BRUSHED BRASS|1\n"
"LARGE BRUSHED STEEL|1\n"
"LARGE BRUSHED COPPER|1\n"
"ECONOMY ANODIZED TIN|1\n"
"ECONOMY ANODIZED NICKEL|1\n"
"ECONOMY ANODIZED BRASS|1\n"
"ECONOMY ANODIZED STEEL|1\n"
"ECONOMY ANODIZED COPPER|1\n"
"ECONOMY BURNISHED TIN|1\n"
"ECONOMY BURNISHED NICKEL|1\n"
"ECONOMY BURNISHED BRASS|1\n"
"ECONOMY BURNISHED STEEL|1\n"
"ECONOMY BURNISHED COPPER|1\n"
"ECONOMY PLATED TIN|1\n"
"ECONOMY PLATED NICKEL|1\n"
"ECONOMY PLATED BRASS|1\n"
"ECONOMY PLATED STEEL|1\n"
"ECONOMY PLATED COPPER|1\n"
"ECONOMY POLISHED TIN|1\n"
"ECONOMY POLISHED NICKEL|1\n"
"ECONOMY POLISHED BRASS|1\n"
"ECONOMY POLISHED STEEL|1\n"
"ECONOMY POLISHED COPPER|1\n"
"ECONOMY BRUSHED TIN|1\n"
"ECONOMY BRUSHED NICKEL|1\n"
"ECONOMY BRUSHED BRASS|1\n"
"ECONOMY BRUSHED STEEL|1\n"
"ECONOMY BRUSHED COPPER|1\n"
"PROMO ANODIZED TIN|1\n"
"PROMO ANODIZED NICKEL|1\n"
"PROMO ANODIZED BRASS|1\n"
"PROMO ANODIZED STEEL|1\n"
"PROMO ANODIZED COPPER|1\n"
"PROMO BURNISHED TIN|1\n"
"PROMO BURNISHED NICKEL|1\n"
"PROMO BURNISHED BRASS|1\n"
"PROMO BURNISHED STEEL|1\n"
"PROMO BURNISHED COPPER|1\n"
"PROMO PLATED TIN|1\n"
"PROMO PLATED NICKEL|1\n"
"PROMO PLATED BRASS|1\n"
"PROMO PLATED STEEL|1\n"
"PROMO PLATED COPPER|1\n"
"PROMO POLISHED TIN|1\n"
"PROMO POLISHED NICKEL|1\n"
"PROMO POLISHED BRASS|1\n"
"PROMO POLISHED STEEL|1\n"
"PROMO POLISHED COPPER|1\n"
"PROMO BRUSHED TIN|1\n"
"PROMO BRUSHED NICKEL|1\n"
"PROMO BRUSHED BRASS|1\n"
"PROMO BRUSHED STEEL|1\n"
"PROMO BRUSHED COPPER|1\n"
"end p_types\n"
"###\n"
"# colors\n"
"# NOTE: This distribution CANNOT be used by pick_str(), since agg_str() "
"perturbs its order\n"
"###\n"
"begin colors\n"
"COUNT|92\n"
"almond|1\n"
"antique|1\n"
"aquamarine|1\n"
"azure|1\n"
"beige|1\n"
"bisque|1\n"
"black|1\n"
"blanched|1\n"
"blue|1\n"
"blush|1\n"
"brown|1\n"
"burlywood|1\n"
"burnished|1\n"
"chartreuse|1\n"
"chiffon|1\n"
"chocolate|1\n"
"coral|1\n"
"cornflower|1\n"
"cornsilk|1\n"
"cream|1\n"
"cyan|1\n"
"dark|1\n"
"deep|1\n"
"dim|1\n"
"dodger|1\n"
"drab|1\n"
"firebrick|1\n"
"floral|1\n"
"forest|1\n"
"frosted|1\n"
"gainsboro|1\n"
"ghost|1\n"
"goldenrod|1\n"
"green|1\n"
"grey|1\n"
"honeydew|1\n"
"hot|1\n"
"indian|1\n"
"ivory|1\n"
"khaki|1\n"
"lace|1\n"
"lavender|1\n"
"lawn|1\n"
"lemon|1\n"
"light|1\n"
"lime|1\n"
"linen|1\n"
"magenta|1\n"
"maroon|1\n"
"medium|1\n"
"metallic|1\n"
"midnight|1\n"
"mint|1\n"
"misty|1\n"
"moccasin|1\n"
"navajo|1\n"
"navy|1\n"
"olive|1\n"
"orange|1\n"
"orchid|1\n"
"pale|1\n"
"papaya|1\n"
"peach|1\n"
"peru|1\n"
"pink|1\n"
"plum|1\n"
"powder|1\n"
"puff|1\n"
"purple|1\n"
"red|1\n"
"rose|1\n"
"rosy|1\n"
"royal|1\n"
"saddle|1\n"
"salmon|1\n"
"sandy|1\n"
"seashell|1\n"
"sienna|1\n"
"sky|1\n"
"slate|1\n"
"smoke|1\n"
"snow|1\n"
"spring|1\n"
"steel|1\n"
"tan|1\n"
"thistle|1\n"
"tomato|1\n"
"turquoise|1\n"
"violet|1\n"
"wheat|1\n"
"white|1\n"
"yellow|1\n"
"end colors\n"
"################\n"
"################\n"
"## psuedo text distributions\n"
"################\n"
"################\n"
"###\n"
"# nouns\n"
"###\n"
"BEGIN nouns\n"
"COUNT|45\n"
"packages|40\n"
"requests|40\n"
"accounts|40\n"
"deposits|40\n"
"foxes|20\n"
"ideas|20\n"
"theodolites|20\n"
"pinto beans|20\n"
"instructions|20\n"
"dependencies|10\n"
"excuses|10\n"
"platelets|10\n"
"asymptotes|10\n"
"courts|5\n"
"dolphins|5\n"
"multipliers|1\n"
"sauternes|1\n"
"warthogs|1\n"
"frets|1\n"
"dinos|1\n"
"attainments|1\n"
"somas|1\n"
"Tiresias|1\n"
"patterns|1\n"
"forges|1\n"
"braids|1\n"
"frays|1\n"
"warhorses|1\n"
"dugouts|1\n"
"notornis|1\n"
"epitaphs|1\n"
"pearls|1\n"
"tithes|1\n"
"waters|1\n"
"orbits|1\n"
"gifts|1\n"
"sheaves|1\n"
"depths|1\n"
"sentiments|1\n"
"decoys|1\n"
"realms|1\n"
"pains|1\n"
"grouches|1\n"
"escapades|1\n"
"hockey players|1\n"
"END nouns\n"
"###\n"
"# verbs\n"
"###\n"
"BEGIN verbs\n"
"COUNT|40\n"
"sleep|20\n"
"wake|20\n"
"are|20\n"
"cajole|20\n"
"haggle|20\n"
"nag|10\n"
"use|10\n"
"boost|10\n"
"affix|5\n"
"detect|5\n"
"integrate|5\n"
"maintain|1\n"
"nod|1\n"
"was|1\n"
"lose|1\n"
"sublate|1\n"
"solve|1\n"
"thrash|1\n"
"promise|1\n"
"engage|1\n"
"hinder|1\n"
"print|1\n"
"x-ray|1\n"
"breach|1\n"
"eat|1\n"
"grow|1\n"
"impress|1\n"
"mold|1\n"
"poach|1\n"
"serve|1\n"
"run|1\n"
"dazzle|1\n"
"snooze|1\n"
"doze|1\n"
"unwind|1\n"
"kindle|1\n"
"play|1\n"
"hang|1\n"
"believe|1\n"
"doubt|1\n"
"END verbs\n"
"###\n"
"# adverbs\n"
"##\n"
"BEGIN adverbs\n"
"COUNT|28\n"
"sometimes|1\n"
"always|1\n"
"never|1\n"
"furiously|50\n"
"slyly|50\n"
"carefully|50\n"
"blithely|40\n"
"quickly|30\n"
"fluffily|20\n"
"slowly|1\n"
"quietly|1\n"
"ruthlessly|1\n"
"thinly|1\n"
"closely|1\n"
"doggedly|1\n"
"daringly|1\n"
"bravely|1\n"
"stealthily|1\n"
"permanently|1\n"
"enticingly|1\n"
"idly|1\n"
"busily|1\n"
"regularly|1\n"
"finally|1\n"
"ironically|1\n"
"evenly|1\n"
"boldly|1\n"
"silently|1\n"
"END adverbs\n"
"###\n"
"# articles\n"
"##\n"
"BEGIN articles\n"
"COUNT|3\n"
"the|50\n"
"a|20\n"
"an|5\n"
"END articles\n"
"###\n"
"# prepositions\n"
"##\n"
"BEGIN prepositions\n"
"COUNT|47\n"
"about|50\n"
"above|50\n"
"according to|50\n"
"across|50\n"
"after|50\n"
"against|40\n"
"along|40\n"
"alongside of|30\n"
"among|30\n"
"around|20\n"
"at|10\n"
"atop|1\n"
"before|1\n"
"behind|1\n"
"beneath|1\n"
"beside|1\n"
"besides|1\n"
"between|1\n"
"beyond|1\n"
"by|1\n"
"despite|1\n"
"during|1\n"
"except|1\n"
"for|1\n"
"from|1\n"
"in place of|1\n"
"inside|1\n"
"instead of|1\n"
"into|1\n"
"near|1\n"
"of|1\n"
"on|1\n"
"outside|1\n"
"over|1 \n"
"past|1\n"
"since|1\n"
"through|1\n"
"throughout|1\n"
"to|1\n"
"toward|1\n"
"under|1\n"
"until|1\n"
"up|1 \n"
"upon|1\n"
"whithout|1\n"
"with|1\n"
"within|1\n"
"END prepositions\n"
"###\n"
"# auxillaries\n"
"##\n"
"BEGIN auxillaries\n"
"COUNT|18\n"
"do|1\n"
"may|1\n"
"might|1\n"
"shall|1\n"
"will|1\n"
"would|1\n"
"can|1\n"
"could|1\n"
"should|1\n"
"ought to|1\n"
"must|1\n"
"will have to|1\n"
"shall have to|1\n"
"could have to|1\n"
"should have to|1\n"
"must have to|1\n"
"need to|1\n"
"try to|1\n"
"END auxiallaries\n"
"###\n"
"# terminators\n"
"##\n"
"BEGIN terminators\n"
"COUNT|6\n"
".|50\n"
";|1\n"
":|1\n"
"?|1\n"
"!|1\n"
"--|1\n"
"END terminators\n"
"###\n"
"# adjectives\n"
"##\n"
"BEGIN adjectives\n"
"COUNT|29\n"
"special|20\n"
"pending|20\n"
"unusual|20\n"
"express|20\n"
"furious|1\n"
"sly|1\n"
"careful|1\n"
"blithe|1\n"
"quick|1\n"
"fluffy|1\n"
"slow|1\n"
"quiet|1\n"
"ruthless|1\n"
"thin|1\n"
"close|1\n"
"dogged|1\n"
"daring|1\n"
"brave|1\n"
"stealthy|1\n"
"permanent|1\n"
"enticing|1\n"
"idle|1\n"
"busy|1\n"
"regular|50\n"
"final|40\n"
"ironic|40\n"
"even|30\n"
"bold|20\n"
"silent|10\n"
"END adjectives\n"
"###\n"
"# grammar\n"
"# first level grammar. N=noun phrase, V=verb phrase,\n"
"# P=prepositional phrase, T=setence termination\n"
"##\n"
"BEGIN grammar\n"
"COUNT|5\n"
"N V T|3\n"
"N V P T|3\n"
"N V N T|3\n"
"N P V N T|1\n"
"N P V P T|1\n"
"END grammar\n"
"###\n"
"# NP\n"
"# second level grammar. Noun phrases. N=noun, A=article, \n"
"# J=adjective, D=adverb\n"
"##\n"
"BEGIN np\n"
"COUNT|4\n"
"N|10\n"
"J N|20\n"
"J, J N|10\n"
"D J N|50\n"
"END np\n"
"###\n"
"# VP\n"
"# second level grammar. Verb phrases. V=verb, X=auxiallary, \n"
"# D=adverb\n"
"##\n"
"BEGIN vp\n"
"COUNT|4\n"
"V|30\n"
"X V|1\n"
"V D|40\n"
"X V D|1\n"
"END vp\n"
"###\n"
"# Q13\n"
"# Substitution parameters for Q13 \n"
"##\n"
"BEGIN Q13a\n"
"COUNT|4\n"
"special|20\n"
"pending|20\n"
"unusual|20\n"
"express|20\n"
"END Q13a\n"
"BEGIN Q13b\n"
"COUNT|4\n"
"packages|40\n"
"requests|40\n"
"accounts|40\n"
"deposits|40\n"
"END Q13b";

View File

@@ -0,0 +1,559 @@
/*
* Copyright owned by the Transaction Processing Performance Council.
*
* A copy of the license is included under extension/tpch/dbgen/LICENSE
* in this repository.
*
* You may not use this file except in compliance with the License.
*
* THE TPC SOFTWARE IS AVAILABLE WITHOUT CHARGE FROM TPC.
*/
/*
* general definitions and control information for the DSS code
* generator; if it controls the data set, it's here
*/
#ifndef DSS_H
#define DSS_H
#include "dbgen/config.h"
#ifdef TPCH
#define NAME "TPC-H"
#endif
#ifdef TPCR
#define NAME "TPC-R"
#endif
#ifndef NAME
#error Benchmark version must be defined in config.h
#endif
#define TPC "Transaction Processing Performance Council"
#define C_DATES "1994 - 2010"
#include "dbgen/config.h"
#include "dbgen/shared.h"
#include <stdio.h>
#include <stdlib.h>
// some defines to avoid r warnings
#define exit(status)
#define printf(...)
#define fprintf(...)
#define NONE -1
#define PART 0
#define PSUPP 1
#define SUPP 2
#define CUST 3
#define ORDER 4
#define LINE 5
#define ORDER_LINE 6
#define PART_PSUPP 7
#define NATION 8
#define REGION 9
#define UPDATE 10
#define MAX_TABLE 11
#define ONE_STREAM 1
#define ADD_AT_END 2
#ifdef MAX
#undef MAX
#endif
#ifdef MIN
#undef MIN
#endif
#define MAX(a, b) ((a > b) ? a : b)
#define MIN(A, B) ((A) < (B) ? (A) : (B))
#define INTERNAL_ERROR(p) // {fprintf(stderr,"%s", p);abort();}
#define LN_CNT 4
// static char lnoise[4] = {'|', '/', '-', '\\' };
#define LIFENOISE(n, var) // if (verbose > 0) fprintf(stderr, "%c\b", lnoise[(var%LN_CNT)])
#define MALLOC_CHECK(var) \
if ((var) == NULL) { \
fprintf(stderr, "Malloc failed at %s:%d\n", __FILE__, __LINE__); \
exit(1); \
}
#define OPEN_CHECK(var, path) \
if ((var) == NULL) { \
fprintf(stderr, "Open failed for %s at %s:%d\n", path, __FILE__, __LINE__); \
exit(1); \
}
#ifndef MAX_CHILDREN
#define MAX_CHILDREN 1000
#endif
/*
* macros that control sparse keys
*
* refer to Porting.Notes for a complete explanation
*/
#ifndef BITS_PER_LONG
#define BITS_PER_LONG 32
#define MAX_LONG 0x7FFFFFFF
#endif /* BITS_PER_LONG */
#define SPARSE_BITS 2
#define SPARSE_KEEP 3
#define MK_SPARSE(key, seq) (((((key >> 3) << 2) | (seq & 0x0003)) << 3) | (key & 0x0007))
#define RANDOM(tgt, lower, upper, seed) dss_random(&tgt, lower, upper, seed)
#define RANDOM64(tgt, lower, upper, seed) dss_random64(&tgt, lower, upper, seed)
typedef struct {
long weight;
char *text;
} set_member;
typedef struct {
int count;
int max;
set_member *list;
} distribution;
/*
* some handy access functions
*/
#define DIST_SIZE(d) d->count
#define DIST_MEMBER(d, i) ((set_member *)((d)->list + i))->text
typedef struct {
const char *name;
const char *comment;
DSS_HUGE base;
int (*loader)();
long (*gen_seed)(int, int);
int child;
DSS_HUGE vtotal;
} tdef;
typedef struct SEED_T {
long table;
DSS_HUGE value;
DSS_HUGE usage;
DSS_HUGE boundary;
#ifdef RNG_TEST
DSS_HUGE nCalls;
#endif
} seed_t;
#define PROTO(s) s
struct DBGenContext;
/* bm_utils.c */
const char *tpch_env_config PROTO((const char *var, const char *dflt));
long yes_no PROTO((char *prompt));
void tpch_a_rnd PROTO((int min, int max, seed_t *seed, char *dest));
int tx_rnd PROTO((long min, long max, long column, char *tgt));
long julian PROTO((long date));
long unjulian PROTO((long date));
long dssncasecmp PROTO((const char *s1, const char *s2, int n));
long dsscasecmp PROTO((const char *s1, const char *s2));
int pick_str PROTO((distribution * s, seed_t *seed, char *target));
void agg_str PROTO((distribution * set, long count, seed_t *seed, char *dest, DBGenContext *ctx));
void read_dist PROTO((const char *path, const char *name, distribution *target));
void embed_str PROTO((distribution * d, int min, int max, int stream, char *dest));
#ifndef STDLIB_HAS_GETOPT
int getopt PROTO((int arg_cnt, char **arg_vect, char *oprions));
#endif /* STDLIB_HAS_GETOPT */
DSS_HUGE set_state PROTO((int t, long scale, long procs, long step, DSS_HUGE *e, DBGenContext *ctx));
/* rnd.c */
DSS_HUGE NextRand PROTO((DSS_HUGE nSeed));
DSS_HUGE UnifInt PROTO((DSS_HUGE nLow, DSS_HUGE nHigh, seed_t *seed));
void dss_random(DSS_HUGE *tgt, DSS_HUGE min, DSS_HUGE max, seed_t *seed);
void row_start(int t, DBGenContext *ctx);
void row_stop_h(int t, DBGenContext *ctx);
void dump_seeds_ds(int t, seed_t *seeds);
/* text.c */
#define MAX_GRAMMAR_LEN 12 /* max length of grammar component */
#define MAX_SENT_LEN 256 /* max length of populated sentence */
#define RNG_PER_SENT 27 /* max number of RNG calls per sentence */
void init_text_pool PROTO((long bSize, DBGenContext *ctx));
void free_text_pool PROTO(());
void dbg_text PROTO((char *t, int min, int max, seed_t *seed));
#ifdef DECLARER
#define EXTERN
#else
#define EXTERN extern
#endif /* DECLARER */
EXTERN distribution nations;
EXTERN distribution nations2;
EXTERN distribution regions;
EXTERN distribution o_priority_set;
EXTERN distribution l_instruct_set;
EXTERN distribution l_smode_set;
EXTERN distribution l_category_set;
EXTERN distribution l_rflag_set;
EXTERN distribution c_mseg_set;
EXTERN distribution colors;
EXTERN distribution p_types_set;
EXTERN distribution p_cntr_set;
/* distributions that control text generation */
EXTERN distribution articles;
EXTERN distribution nouns;
EXTERN distribution adjectives;
EXTERN distribution adverbs;
EXTERN distribution prepositions;
EXTERN distribution verbs;
EXTERN distribution terminators;
EXTERN distribution auxillaries;
EXTERN distribution np;
EXTERN distribution vp;
EXTERN distribution grammar;
EXTERN int refresh;
EXTERN int resume;
EXTERN long verbose;
EXTERN long force;
EXTERN long updates;
EXTERN long table;
EXTERN int set_seeds;
EXTERN char *d_path;
/* added for segmented updates */
EXTERN int insert_segments;
EXTERN int delete_segments;
EXTERN int insert_orders_segment;
EXTERN int insert_lineitem_segment;
EXTERN int delete_segment;
/*****************************************************************
** table level defines use the following naming convention: t_ccc_xxx
** with: t, a table identifier
** ccc, a column identifier
** xxx, a limit type
****************************************************************
*/
/*
* defines which control the parts table
*/
#define P_SIZE 126
#define P_NAME_SCL 5
#define P_MFG_TAG "Manufacturer#"
#define P_MFG_FMT "%%s%%0%d%s"
#define P_MFG_MIN 1
#define P_MFG_MAX 5
#define P_BRND_TAG "Brand#"
#define P_BRND_FMT "%%s%%0%d%s"
#define P_BRND_MIN 1
#define P_BRND_MAX 5
#define P_SIZE_MIN 1
#define P_SIZE_MAX 50
#define P_MCST_MIN 100
#define P_MCST_MAX 99900
#define P_MCST_SCL 100.0
#define P_RCST_MIN 90000
#define P_RCST_MAX 200000
#define P_RCST_SCL 100.0
/*
* defines which control the suppliers table
*/
#define S_SIZE 145
#define S_NAME_TAG "Supplier#"
#define S_NAME_FMT "%%s%%0%d%s"
#define S_ABAL_MIN -99999
#define S_ABAL_MAX 999999
#define S_CMNT_MAX 101
#define S_CMNT_BBB 10 /* number of BBB comments/SF */
#define BBB_DEADBEATS 50 /* % that are complaints */
#define BBB_BASE "Customer "
#define BBB_COMPLAIN "Complaints"
#define BBB_COMMEND "Recommends"
#define BBB_CMNT_LEN 19
#define BBB_BASE_LEN 9
#define BBB_TYPE_LEN 10
/*
* defines which control the partsupp table
*/
#define PS_SIZE 145
#define PS_SKEY_MIN 0
#define PS_SKEY_MAX ((ctx->tdefs[SUPP].base - 1) * ctx->scale_factor)
#define PS_SCST_MIN 100
#define PS_SCST_MAX 100000
#define PS_QTY_MIN 1
#define PS_QTY_MAX 9999
/*
* defines which control the customers table
*/
#define C_SIZE 165
#define C_NAME_TAG "Customer#"
#define C_NAME_FMT "%%s%%0%d%s"
#define C_MSEG_MAX 5
#define C_ABAL_MIN -99999
#define C_ABAL_MAX 999999
/*
* defines which control the order table
*/
#define O_SIZE 109
#define O_CKEY_MIN 1
#define O_CKEY_MAX (ctx->tdefs[CUST].base * ctx->scale_factor)
#define O_ODATE_MIN STARTDATE
#define O_ODATE_MAX (STARTDATE + TOTDATE - (L_SDTE_MAX + L_RDTE_MAX) - 1)
#define O_CLRK_TAG "Clerk#"
#define O_CLRK_FMT "%%s%%0%d%s"
#define O_CLRK_SCL 1000
#define O_LCNT_MIN 1
#define O_LCNT_MAX 7
/*
* defines which control the lineitem table
*/
#define L_SIZE 144L
#define L_QTY_MIN 1
#define L_QTY_MAX 50
#define L_TAX_MIN 0
#define L_TAX_MAX 8
#define L_DCNT_MIN 0
#define L_DCNT_MAX 10
#define L_PKEY_MIN 1
#define L_PKEY_MAX (ctx->tdefs[PART].base * ctx->scale_factor)
#define L_SDTE_MIN 1
#define L_SDTE_MAX 121
#define L_CDTE_MIN 30
#define L_CDTE_MAX 90
#define L_RDTE_MIN 1
#define L_RDTE_MAX 30
/*
* defines which control the time table
*/
#define T_SIZE 30
#define T_START_DAY 3 /* wednesday ? */
#define LEAP(y) ((!(y % 4) && (y % 100)) ? 1 : 0)
/*******************************************************************
*******************************************************************
***
*** general or inter table defines
***
*******************************************************************
*******************************************************************/
#define SUPP_PER_PART 4
#define ORDERS_PER_CUST 10 /* sync this with CUST_MORTALITY */
#define CUST_MORTALITY 3 /* portion with have no orders */
#define NATIONS_MAX 90 /* limited by country codes in phone numbers */
#define PHONE_FMT "%02d-%03d-%03d-%04d"
#define STARTDATE 92001
#define CURRENTDATE 95168
#define ENDDATE 98365
#define TOTDATE 2557
#define UPD_PCT 10
#define MAX_STREAM 47
#define V_STR_LOW 0.4
#define PENNIES 100 /* for scaled int money arithmetic */
#define Q11_FRACTION (double)0.0001
/*
* max and min SF in GB; Larger SF will require changes to the build routines
*/
#define MIN_SCALE 1.0
#define MAX_SCALE 100000.0
/*
* beyond this point we need to allow for BCD calculations
*/
#define MAX_32B_SCALE 1000.0
#define LONG2HUGE(src, dst) *dst = (DSS_HUGE)src
#define HUGE2LONG(src, dst) *dst = (long)src
#define HUGE_SET(src, dst) *dst = *src
#define HUGE_MUL(op1, op2) *op1 *= op2
#define HUGE_DIV(op1, op2) *op1 /= op2
#define HUGE_ADD(op1, op2, dst) *dst = *op1 + op2
#define HUGE_SUB(op1, op2, dst) *dst = *op1 - op2
#define HUGE_MOD(op1, op2) *op1 % op2
#define HUGE_CMP(op1, op2) (*op1 == *op2) ? 0 : (*op1 < *op2) - 1 : 1
/******** environmental variables and defaults ***************/
#define DIST_TAG "DSS_DIST" /* environment var to override ... */
#define DIST_DFLT "dists.dss" /* default file to hold distributions */
#define PATH_TAG "DSS_PATH" /* environment var to override ... */
#define PATH_DFLT "." /* default directory to hold tables */
#define CONFIG_TAG "DSS_CONFIG" /* environment var to override ... */
#define CONFIG_DFLT "." /* default directory to config files */
#define ADHOC_TAG "DSS_ADHOC" /* environment var to override ... */
#define ADHOC_DFLT "adhoc.dss" /* default file name for adhoc vars */
/******* output macros ********/
#ifndef SEPARATOR
#define SEPARATOR '|' /* field spearator for generated flat files */
#endif
/* Data type flags for a single print routine */
#define DT_STR 0
#ifndef MVS
#define DT_VSTR DT_STR
#else
#define DT_VSTR 1
#endif /* MVS */
#define DT_INT 2
#define DT_HUGE 3
#define DT_KEY 4
#define DT_MONEY 5
#define DT_CHR 6
int dbg_print(int dt, FILE *tgt, void *data, int len, int eol);
#define PR_STR(f, str, len) dbg_print(DT_STR, f, (void *)str, len, 1)
#define PR_VSTR(f, str, len) dbg_print(DT_VSTR, f, (void *)str, len, 1)
#define PR_VSTR_LAST(f, str, len) dbg_print(DT_VSTR, f, (void *)str, len, 0)
#define PR_INT(f, str) dbg_print(DT_INT, f, (void *)str, 0, 1)
#define PR_HUGE(f, str) dbg_print(DT_HUGE, f, (void *)str, 0, 1)
#define PR_HUGE_LAST(f, str) dbg_print(DT_HUGE, f, (void *)str, 0, 0)
#define PR_KEY(f, str) dbg_print(DT_KEY, f, (void *)str, 0, -1)
#define PR_MONEY(f, str) dbg_print(DT_MONEY, f, (void *)str, 0, 1)
#define PR_CHR(f, str) dbg_print(DT_CHR, f, (void *)str, 0, 1)
#define PR_STRT(fp) /* any line prep for a record goes here */
#define PR_END(fp) fprintf(fp, "\n") /* finish the record here */
#ifdef MDY_DATE
#define PR_DATE(tgt, yr, mn, dy) snprintf(tgt, 11, "%02d-%02d-19%02d", mn, dy, yr)
#else
#define PR_DATE(tgt, yr, mn, dy) snprintf(tgt, 11, "19%02ld-%02ld-%02ld", yr, mn, dy)
#endif /* DATE_FORMAT */
/*
* verification macros
*/
#define VRF_STR(t, d) \
{ \
char *xx = d; \
while (*xx) \
ctx->tdefs[t].vtotal += *xx++; \
}
#define VRF_INT(t, d) ctx->tdefs[t].vtotal += d
#define VRF_HUGE(t, d) ctx->tdefs[t].vtotal = *((long *)&d) + *((long *)(&d + 1))
/* assume float is a 64 bit quantity */
#define VRF_MONEY(t, d) ctx->tdefs[t].vtotal = *((long *)&d) + *((long *)(&d + 1))
#define VRF_CHR(t, d) ctx->tdefs[t].vtotal += d
#define VRF_STRT(t)
#define VRF_END(t)
/*********** distribuitons currently defined *************/
#define UNIFORM 0
/*
* seed indexes; used to separate the generation of individual columns
*/
#define P_MFG_SD 0
#define P_BRND_SD 1
#define P_TYPE_SD 2
#define P_SIZE_SD 3
#define P_CNTR_SD 4
#define P_RCST_SD 5
#define PS_QTY_SD 7
#define PS_SCST_SD 8
#define O_SUPP_SD 10
#define O_CLRK_SD 11
#define O_ODATE_SD 13
#define L_QTY_SD 14
#define L_DCNT_SD 15
#define L_TAX_SD 16
#define L_SHIP_SD 17
#define L_SMODE_SD 18
#define L_PKEY_SD 19
#define L_SKEY_SD 20
#define L_SDTE_SD 21
#define L_CDTE_SD 22
#define L_RDTE_SD 23
#define L_RFLG_SD 24
#define C_NTRG_SD 27
#define C_PHNE_SD 28
#define C_ABAL_SD 29
#define C_MSEG_SD 30
#define S_NTRG_SD 33
#define S_PHNE_SD 34
#define S_ABAL_SD 35
#define P_NAME_SD 37
#define O_PRIO_SD 38
#define HVAR_SD 39
#define O_CKEY_SD 40
#define N_CMNT_SD 41
#define R_CMNT_SD 42
#define O_LCNT_SD 43
#define BBB_JNK_SD 44
#define BBB_TYPE_SD 45
#define BBB_CMNT_SD 46
#define BBB_OFFSET_SD 47
struct DBGenContext {
~DBGenContext() {
if (permute) {
free(permute);
permute = NULL;
}
}
seed_t Seed[MAX_STREAM + 1] = {
{PART, 1, 0, 1}, /* P_MFG_SD 0 */
{PART, 46831694, 0, 1}, /* P_BRND_SD 1 */
{PART, 1841581359, 0, 1}, /* P_TYPE_SD 2 */
{PART, 1193163244, 0, 1}, /* P_SIZE_SD 3 */
{PART, 727633698, 0, 1}, /* P_CNTR_SD 4 */
{NONE, 933588178, 0, 1}, /* text pregeneration 5 */
{PART, 804159733, 0, 2}, /* P_CMNT_SD 6 */
{PSUPP, 1671059989, 0, SUPP_PER_PART}, /* PS_QTY_SD 7 */
{PSUPP, 1051288424, 0, SUPP_PER_PART}, /* PS_SCST_SD 8 */
{PSUPP, 1961692154, 0, SUPP_PER_PART * 2}, /* PS_CMNT_SD 9 */
{ORDER, 1227283347, 0, 1}, /* O_SUPP_SD 10 */
{ORDER, 1171034773, 0, 1}, /* O_CLRK_SD 11 */
{ORDER, 276090261, 0, 2}, /* O_CMNT_SD 12 */
{ORDER, 1066728069, 0, 1}, /* O_ODATE_SD 13 */
{LINE, 209208115, 0, O_LCNT_MAX}, /* L_QTY_SD 14 */
{LINE, 554590007, 0, O_LCNT_MAX}, /* L_DCNT_SD 15 */
{LINE, 721958466, 0, O_LCNT_MAX}, /* L_TAX_SD 16 */
{LINE, 1371272478, 0, O_LCNT_MAX}, /* L_SHIP_SD 17 */
{LINE, 675466456, 0, O_LCNT_MAX}, /* L_SMODE_SD 18 */
{LINE, 1808217256, 0, O_LCNT_MAX}, /* L_PKEY_SD 19 */
{LINE, 2095021727, 0, O_LCNT_MAX}, /* L_SKEY_SD 20 */
{LINE, 1769349045, 0, O_LCNT_MAX}, /* L_SDTE_SD 21 */
{LINE, 904914315, 0, O_LCNT_MAX}, /* L_CDTE_SD 22 */
{LINE, 373135028, 0, O_LCNT_MAX}, /* L_RDTE_SD 23 */
{LINE, 717419739, 0, O_LCNT_MAX}, /* L_RFLG_SD 24 */
{LINE, 1095462486, 0, O_LCNT_MAX * 2}, /* L_CMNT_SD 25 */
{CUST, 881155353, 0, 9}, /* C_ADDR_SD 26 */
{CUST, 1489529863, 0, 1}, /* C_NTRG_SD 27 */
{CUST, 1521138112, 0, 3}, /* C_PHNE_SD 28 */
{CUST, 298370230, 0, 1}, /* C_ABAL_SD 29 */
{CUST, 1140279430, 0, 1}, /* C_MSEG_SD 30 */
{CUST, 1335826707, 0, 2}, /* C_CMNT_SD 31 */
{SUPP, 706178559, 0, 9}, /* S_ADDR_SD 32 */
{SUPP, 110356601, 0, 1}, /* S_NTRG_SD 33 */
{SUPP, 884434366, 0, 3}, /* S_PHNE_SD 34 */
{SUPP, 962338209, 0, 1}, /* S_ABAL_SD 35 */
{SUPP, 1341315363, 0, 2}, /* S_CMNT_SD 36 */
{PART, 709314158, 0, 92}, /* P_NAME_SD 37 */
{ORDER, 591449447, 0, 1}, /* O_PRIO_SD 38 */
{LINE, 431918286, 0, 1}, /* HVAR_SD 39 */
{ORDER, 851767375, 0, 1}, /* O_CKEY_SD 40 */
{NATION, 606179079, 0, 2}, /* N_CMNT_SD 41 */
{REGION, 1500869201, 0, 2}, /* R_CMNT_SD 42 */
{ORDER, 1434868289, 0, 1}, /* O_LCNT_SD 43 */
{SUPP, 263032577, 0, 1}, /* BBB offset 44 */
{SUPP, 753643799, 0, 1}, /* BBB type 45 */
{SUPP, 202794285, 0, 1}, /* BBB comment 46 */
{SUPP, 715851524, 0, 1} /* BBB junk 47 */
};
static constexpr double dM = 2147483647.0;
tdef tdefs[10] = {
{"part.tbl", "part table", 200000, NULL, NULL, PSUPP, 0},
{"partsupp.tbl", "partsupplier table", 200000, NULL, NULL, NONE, 0},
{"supplier.tbl", "suppliers table", 10000, NULL, NULL, NONE, 0},
{"customer.tbl", "customers table", 150000, NULL, NULL, NONE, 0},
{"orders.tbl", "order table", 150000, NULL, NULL, LINE, 0},
{"lineitem.tbl", "lineitem table", 150000, NULL, NULL, NONE, 0},
{"orders.tbl", "orders/lineitem tables", 150000, NULL, NULL, LINE, 0},
{"part.tbl", "part/partsupplier tables", 200000, NULL, NULL, PSUPP, 0},
{"nation.tbl", "nation table", NATIONS_MAX, NULL, NULL, NONE, 0},
{"region.tbl", "region table", NATIONS_MAX, NULL, NULL, NONE, 0},
};
long scale_factor = 1;
long *permute = NULL;
};
#endif /* DSS_H */

View File

@@ -0,0 +1,164 @@
/*
* Copyright owned by the Transaction Processing Performance Council.
*
* A copy of the license is included under extension/tpch/dbgen/LICENSE
* in this repository.
*
* You may not use this file except in compliance with the License.
*
* THE TPC SOFTWARE IS AVAILABLE WITHOUT CHARGE FROM TPC.
*/
/*
* general definitions and control information for the DSS data types
* and function prototypes
*/
#pragma once
/*
* typedefs
*/
typedef struct {
DSS_HUGE custkey;
char name[C_NAME_LEN + 3];
char address[C_ADDR_MAX + 1];
int alen;
DSS_HUGE nation_code;
char phone[PHONE_LEN + 1];
DSS_HUGE acctbal;
char mktsegment[MAXAGG_LEN + 1];
char comment[C_CMNT_MAX + 1];
int clen;
} customer_t;
/* customers.c */
long mk_cust PROTO((DSS_HUGE n_cust, customer_t *c, DBGenContext *ctx));
int pr_cust PROTO((customer_t * c, int mode));
int ld_cust PROTO((customer_t * c, int mode));
typedef struct {
DSS_HUGE okey;
DSS_HUGE partkey;
DSS_HUGE suppkey;
DSS_HUGE lcnt;
DSS_HUGE quantity;
DSS_HUGE eprice;
DSS_HUGE discount;
DSS_HUGE tax;
char rflag[1];
char lstatus[1];
char cdate[DATE_LEN];
char sdate[DATE_LEN];
char rdate[DATE_LEN];
char shipinstruct[MAXAGG_LEN + 1];
char shipmode[MAXAGG_LEN + 1];
char comment[L_CMNT_MAX + 1];
int clen;
} line_t;
typedef struct {
DSS_HUGE okey;
DSS_HUGE custkey;
char orderstatus;
DSS_HUGE totalprice;
char odate[DATE_LEN];
char opriority[MAXAGG_LEN + 1];
char clerk[O_CLRK_LEN + 1];
long spriority;
DSS_HUGE lines;
char comment[O_CMNT_MAX + 1];
int clen;
line_t l[O_LCNT_MAX];
} order_t;
/* order.c */
long mk_order PROTO((DSS_HUGE index, order_t *o, DBGenContext *ctx, long upd_num));
int pr_order PROTO((order_t * o, int mode));
int ld_order PROTO((order_t * o, int mode));
void mk_sparse PROTO((DSS_HUGE index, DSS_HUGE *ok, long seq));
typedef struct {
DSS_HUGE partkey;
DSS_HUGE suppkey;
DSS_HUGE qty;
DSS_HUGE scost;
char comment[PS_CMNT_MAX + 1];
int clen;
} partsupp_t;
typedef struct {
DSS_HUGE partkey;
char name[P_NAME_LEN + 1];
int nlen;
char mfgr[P_MFG_LEN + 1];
char brand[P_BRND_LEN + 1];
char type[P_TYPE_LEN + 1];
int tlen;
DSS_HUGE size;
char container[P_CNTR_LEN + 1];
DSS_HUGE retailprice;
char comment[P_CMNT_MAX + 1];
int clen;
partsupp_t s[SUPP_PER_PART];
} part_t;
/* parts.c */
long mk_part PROTO((DSS_HUGE index, part_t *p, DBGenContext *ctx));
int pr_part PROTO((part_t * part, int mode));
int ld_part PROTO((part_t * part, int mode));
typedef struct {
DSS_HUGE suppkey;
char name[S_NAME_LEN + 1];
char address[S_ADDR_MAX + 1];
int alen;
DSS_HUGE nation_code;
char phone[PHONE_LEN + 1];
DSS_HUGE acctbal;
char comment[S_CMNT_MAX + 1];
int clen;
} supplier_t;
/* supplier.c */
long mk_supp PROTO((DSS_HUGE index, supplier_t *s, DBGenContext *ctx));
int pr_supp PROTO((supplier_t * supp, int mode));
int ld_supp PROTO((supplier_t * supp, int mode));
typedef struct {
DSS_HUGE timekey;
char alpha[DATE_LEN];
long year;
long month;
long week;
long day;
} dss_time_t;
/* time.c */
long mk_time PROTO((DSS_HUGE h, dss_time_t *t));
/*
* this assumes that N_CMNT_LEN >= R_CMNT_LEN
*/
typedef struct {
DSS_HUGE code;
char *text;
long join;
char comment[N_CMNT_MAX + 1];
int clen;
} code_t;
/* code table */
int mk_nation PROTO((DSS_HUGE i, code_t *c, DBGenContext *ctx));
int pr_nation PROTO((code_t * c, int mode));
int ld_nation PROTO((code_t * c, int mode));
int mk_region PROTO((DSS_HUGE i, code_t *c, DBGenContext *ctx));
int pr_region PROTO((code_t * c, int mode));
int ld_region PROTO((code_t * c, int mode));
/* speed seed - advances seeds `skip_count` times */
long sd_nation(int child, DSS_HUGE skip_count, DBGenContext *ctx);
long sd_region(int child, DSS_HUGE skip_coun, DBGenContext *ctx);
long sd_order(int child, DSS_HUGE skip_count, DBGenContext *ctx);
long sd_line(int child, DSS_HUGE skip_count, DBGenContext *ctx);
long sd_supp(int child, DSS_HUGE skip_count, DBGenContext *ctx);
long sd_part(int child, DSS_HUGE skip_count, DBGenContext *ctx);
long sd_psupp(int child, DSS_HUGE skip_count, DBGenContext *ctx);
long sd_cust(int child, DSS_HUGE skip_count, DBGenContext *ctx);

View File

@@ -0,0 +1,51 @@
/*
* Copyright owned by the Transaction Processing Performance Council.
*
* A copy of the license is included under extension/tpch/dbgen/LICENSE
* in this repository.
*
* You may not use this file except in compliance with the License.
*
* THE TPC SOFTWARE IS AVAILABLE WITHOUT CHARGE FROM TPC.
*/
long permutation[41][22] = {{14, 2, 9, 20, 6, 17, 18, 8, 21, 13, 3, 22, 16, 4, 11, 15, 1, 10, 19, 5, 7, 12},
{21, 3, 18, 5, 11, 7, 6, 20, 17, 12, 16, 15, 13, 10, 2, 8, 14, 19, 9, 22, 1, 4},
{6, 17, 14, 16, 19, 10, 9, 2, 15, 8, 5, 22, 12, 7, 13, 18, 1, 4, 20, 3, 11, 21},
{8, 5, 4, 6, 17, 7, 1, 18, 22, 14, 9, 10, 15, 11, 20, 2, 21, 19, 13, 16, 12, 3},
{5, 21, 14, 19, 15, 17, 12, 6, 4, 9, 8, 16, 11, 2, 10, 18, 1, 13, 7, 22, 3, 20},
{21, 15, 4, 6, 7, 16, 19, 18, 14, 22, 11, 13, 3, 1, 2, 5, 8, 20, 12, 17, 10, 9},
{10, 3, 15, 13, 6, 8, 9, 7, 4, 11, 22, 18, 12, 1, 5, 16, 2, 14, 19, 20, 17, 21},
{18, 8, 20, 21, 2, 4, 22, 17, 1, 11, 9, 19, 3, 13, 5, 7, 10, 16, 6, 14, 15, 12},
{19, 1, 15, 17, 5, 8, 9, 12, 14, 7, 4, 3, 20, 16, 6, 22, 10, 13, 2, 21, 18, 11},
{8, 13, 2, 20, 17, 3, 6, 21, 18, 11, 19, 10, 15, 4, 22, 1, 7, 12, 9, 14, 5, 16},
{6, 15, 18, 17, 12, 1, 7, 2, 22, 13, 21, 10, 14, 9, 3, 16, 20, 19, 11, 4, 8, 5},
{15, 14, 18, 17, 10, 20, 16, 11, 1, 8, 4, 22, 5, 12, 3, 9, 21, 2, 13, 6, 19, 7},
{1, 7, 16, 17, 18, 22, 12, 6, 8, 9, 11, 4, 2, 5, 20, 21, 13, 10, 19, 3, 14, 15},
{21, 17, 7, 3, 1, 10, 12, 22, 9, 16, 6, 11, 2, 4, 5, 14, 8, 20, 13, 18, 15, 19},
{2, 9, 5, 4, 18, 1, 20, 15, 16, 17, 7, 21, 13, 14, 19, 8, 22, 11, 10, 3, 12, 6},
{16, 9, 17, 8, 14, 11, 10, 12, 6, 21, 7, 3, 15, 5, 22, 20, 1, 13, 19, 2, 4, 18},
{1, 3, 6, 5, 2, 16, 14, 22, 17, 20, 4, 9, 10, 11, 15, 8, 12, 19, 18, 13, 7, 21},
{3, 16, 5, 11, 21, 9, 2, 15, 10, 18, 17, 7, 8, 19, 14, 13, 1, 4, 22, 20, 6, 12},
{14, 4, 13, 5, 21, 11, 8, 6, 3, 17, 2, 20, 1, 19, 10, 9, 12, 18, 15, 7, 22, 16},
{4, 12, 22, 14, 5, 15, 16, 2, 8, 10, 17, 9, 21, 7, 3, 6, 13, 18, 11, 20, 19, 1},
{16, 15, 14, 13, 4, 22, 18, 19, 7, 1, 12, 17, 5, 10, 20, 3, 9, 21, 11, 2, 6, 8},
{20, 14, 21, 12, 15, 17, 4, 19, 13, 10, 11, 1, 16, 5, 18, 7, 8, 22, 9, 6, 3, 2},
{16, 14, 13, 2, 21, 10, 11, 4, 1, 22, 18, 12, 19, 5, 7, 8, 6, 3, 15, 20, 9, 17},
{18, 15, 9, 14, 12, 2, 8, 11, 22, 21, 16, 1, 6, 17, 5, 10, 19, 4, 20, 13, 3, 7},
{7, 3, 10, 14, 13, 21, 18, 6, 20, 4, 9, 8, 22, 15, 2, 1, 5, 12, 19, 17, 11, 16},
{18, 1, 13, 7, 16, 10, 14, 2, 19, 5, 21, 11, 22, 15, 8, 17, 20, 3, 4, 12, 6, 9},
{13, 2, 22, 5, 11, 21, 20, 14, 7, 10, 4, 9, 19, 18, 6, 3, 1, 8, 15, 12, 17, 16},
{14, 17, 21, 8, 2, 9, 6, 4, 5, 13, 22, 7, 15, 3, 1, 18, 16, 11, 10, 12, 20, 19},
{10, 22, 1, 12, 13, 18, 21, 20, 2, 14, 16, 7, 15, 3, 4, 17, 5, 19, 6, 8, 9, 11},
{10, 8, 9, 18, 12, 6, 1, 5, 20, 11, 17, 22, 16, 3, 13, 2, 15, 21, 14, 19, 7, 4},
{7, 17, 22, 5, 3, 10, 13, 18, 9, 1, 14, 15, 21, 19, 16, 12, 8, 6, 11, 20, 4, 2},
{2, 9, 21, 3, 4, 7, 1, 11, 16, 5, 20, 19, 18, 8, 17, 13, 10, 12, 15, 6, 14, 22},
{15, 12, 8, 4, 22, 13, 16, 17, 18, 3, 7, 5, 6, 1, 9, 11, 21, 10, 14, 20, 19, 2},
{15, 16, 2, 11, 17, 7, 5, 14, 20, 4, 21, 3, 10, 9, 12, 8, 13, 6, 18, 19, 22, 1},
{1, 13, 11, 3, 4, 21, 6, 14, 15, 22, 18, 9, 7, 5, 10, 20, 12, 16, 17, 8, 19, 2},
{14, 17, 22, 20, 8, 16, 5, 10, 1, 13, 2, 21, 12, 9, 4, 18, 3, 7, 6, 19, 15, 11},
{9, 17, 7, 4, 5, 13, 21, 18, 11, 3, 22, 1, 6, 16, 20, 14, 15, 10, 8, 2, 12, 19},
{13, 14, 5, 22, 19, 11, 9, 6, 18, 15, 8, 10, 7, 4, 17, 16, 3, 1, 12, 2, 21, 20},
{20, 5, 4, 14, 11, 1, 6, 16, 8, 22, 7, 3, 2, 12, 21, 19, 17, 13, 10, 15, 18, 9},
{3, 7, 14, 15, 6, 5, 21, 20, 18, 10, 4, 16, 19, 1, 13, 9, 8, 17, 11, 12, 22, 2},
{13, 15, 17, 1, 22, 11, 3, 4, 7, 20, 14, 21, 9, 8, 2, 18, 16, 6, 10, 12, 5, 19}};

View File

@@ -0,0 +1,17 @@
/*
* Copyright owned by the Transaction Processing Performance Council.
*
* A copy of the license is included under extension/tpch/dbgen/LICENSE
* in this repository.
*
* You may not use this file except in compliance with the License.
*
* THE TPC SOFTWARE IS AVAILABLE WITHOUT CHARGE FROM TPC.
*/
/*
* release.h
*/
#define VERSION 2
#define RELEASE 17
#define PATCH 3
#define BUILD 0

View File

@@ -0,0 +1,30 @@
/*
* Copyright owned by the Transaction Processing Performance Council.
*
* A copy of the license is included under extension/tpch/dbgen/LICENSE
* in this repository.
*
* You may not use this file except in compliance with the License.
*
* THE TPC SOFTWARE IS AVAILABLE WITHOUT CHARGE FROM TPC.
*/
/*
* rnd.h -- header file for use withthe portable random number generator
* provided by Frank Stephens of Unisys
*/
#pragma once
/* function protypes */
DSS_HUGE NextRand PROTO((DSS_HUGE));
DSS_HUGE UnifInt PROTO((DSS_HUGE, DSS_HUGE, long));
/*
* macros to control RNG and assure reproducible multi-stream
* runs without the need for seed files. Keep track of invocations of RNG
* and always round-up to a known per-row boundary.
*/
/*
* preferred solution, but not initializing correctly
*/
#define VSTR_MAX(len) (long)(len / 5 + (len % 5 == 0) ? 0 : 1 + 1)

View File

@@ -0,0 +1,18 @@
/*
* Copyright owned by the Transaction Processing Performance Council.
*
* A copy of the license is included under extension/tpch/dbgen/LICENSE
* in this repository.
*
* You may not use this file except in compliance with the License.
*
* THE TPC SOFTWARE IS AVAILABLE WITHOUT CHARGE FROM TPC.
*/
#pragma once
#include "dbgen/config.h"
#include "dbgen/dss.h"
DSS_HUGE AdvanceRand64(DSS_HUGE nSeed, DSS_HUGE nCount);
void dss_random64(DSS_HUGE *tgt, DSS_HUGE nLow, DSS_HUGE nHigh, seed_t *seed);
DSS_HUGE NextRand64(DSS_HUGE nSeed);

View File

@@ -0,0 +1,58 @@
/*
* Copyright owned by the Transaction Processing Performance Council.
*
* A copy of the license is included under extension/tpch/dbgen/LICENSE
* in this repository.
*
* You may not use this file except in compliance with the License.
*
* THE TPC SOFTWARE IS AVAILABLE WITHOUT CHARGE FROM TPC.
*/
#define N_CMNT_LEN 72
#define N_CMNT_MAX 152
#define R_CMNT_LEN 72
#define R_CMNT_MAX 152
#define MONEY_SCL 0.01
#define V_STR_HGH 1.6
#define P_NAME_LEN 55
#define P_MFG_LEN 25
#define P_BRND_LEN 10
#define P_TYPE_LEN 25
#define P_CNTR_LEN 10
#define P_CMNT_LEN 14
#define P_CMNT_MAX 23
#define S_NAME_LEN 25
#define S_ADDR_LEN 25
#define S_ADDR_MAX 40
#define S_CMNT_LEN 63
#define S_CMNT_MAX 101
#define PS_CMNT_LEN 124
#define PS_CMNT_MAX 199
#define C_NAME_LEN 18
#define C_ADDR_LEN 25
#define C_ADDR_MAX 40
#define C_MSEG_LEN 10
#define C_CMNT_LEN 73
#define C_CMNT_MAX 117
#define O_OPRIO_LEN 15
#define O_CLRK_LEN 15
#define O_CMNT_LEN 49
#define O_CMNT_MAX 79
#define L_CMNT_LEN 27
#define L_CMNT_MAX 44
#define L_INST_LEN 25
#define L_SMODE_LEN 10
#define T_ALPHA_LEN 10
#define DATE_LEN 13 /* long enough to hold either date format */
#define NATION_LEN 25
#define REGION_LEN 25
#define PHONE_LEN 15
#define MAXAGG_LEN 20 /* max component length for a agg str */
#define P_CMNT_SD 6
#define PS_CMNT_SD 9
#define O_CMNT_SD 12
#define C_ADDR_SD 26
#define C_CMNT_SD 31
#define S_ADDR_SD 32
#define S_CMNT_SD 36
#define L_CMNT_SD 25

File diff suppressed because one or more lines are too long