parent
9e6918943e
commit
fb7eb065b0
@ -0,0 +1,271 @@ |
|||||||
|
END USER LICENSE AGREEMENT |
||||||
|
VERSION 2.0 |
||||||
|
|
||||||
|
|
||||||
|
READ THE TERMS AND CONDITIONS OF THIS AGREEMENT (“AGREEMENT”) |
||||||
|
CAREFULLY BEFORE INSTALLING OR USING THE ACCOMPANYING |
||||||
|
SOFTWARE. BY INSTALLING OR USING THE SOFTWARE OR RELATED |
||||||
|
DOCUMENTATION, YOU AGREE TO BE BOUND BY THE TERMS OF THIS |
||||||
|
AGREEMENT. IF YOU DO NOT AGREE TO THE TERMS OF THIS AGREEMENT, |
||||||
|
DO NOT INSTALL OR USE THE SOFTWARE. IF YOU ARE ACCESSING THE |
||||||
|
SOFTWARE ON BEHALF OF YOUR ORGANIZATION, YOU REPRESENT AND |
||||||
|
WARRANT THAT YOU HAVE SUFFICIENT AUTHORITY TO BIND YOUR |
||||||
|
ORGANIZATION TO THIS AGREEMENT. |
||||||
|
|
||||||
|
USE AND RE-EXPORT OF THE SOFTWARE IS SUBJECT TO THE UNITED STATES |
||||||
|
EXPORT CONTROL ADMINISTRATION REGULATIONS. THE SOFTWARE MAY |
||||||
|
NOT BE USED BY UNLICENSED PERSONS OR ENTITIES, AND MAY NOT BE RE- |
||||||
|
EXPORTED TO ANOTHER COUNTRY. SEE EXPORT ASSURANCE (CLAUSE 15) |
||||||
|
OF THIS LICENSE. |
||||||
|
|
||||||
|
This is a legal agreement between you (or, if you are accessing the software on behalf of your |
||||||
|
organization, your organization) (“You” or “User”) and the Transaction Processing Performance |
||||||
|
Council (“TPC”). This Agreement states the terms and conditions upon which TPC offers to |
||||||
|
license the Software, including, but not limited to, the source code, scripts, executable programs, |
||||||
|
drivers, libraries and data files associated with such programs, and modifications thereof (the |
||||||
|
“Software”), and online, electronic or printed documentation (“Documentation,” together with |
||||||
|
the Software, “Materials”). |
||||||
|
|
||||||
|
The Software may contain proprietary third-party software which has been licensed to the TPC |
||||||
|
to bundle and distribute as part of the benchmark. Any third-party software is subject to the |
||||||
|
terms and conditions in its associated third-party license. |
||||||
|
|
||||||
|
|
||||||
|
LICENSE |
||||||
|
|
||||||
|
1. Definitions |
||||||
|
“Executive Summary” shall mean a short summary of a TPC Benchmark Result that shows the |
||||||
|
configuration, primary metrics, performance data, and pricing details. The exact requirements |
||||||
|
for the Executive Summary are defined in each TPC Benchmark Standard. |
||||||
|
“Full Disclosure Report (FDR)” shall mean a document that describes The TPC Benchmark |
||||||
|
Result in sufficient detail such that the Result could be recreated. The exact requirements for the |
||||||
|
FDR are defined in each TPC Benchmark Standard. |
||||||
|
|
||||||
|
“TPC Benchmark Result (Result)” shall mean a performance test submitted to the TPC |
||||||
|
attested to meet the requirements of a TPC Benchmark Standard at the time of submission. A |
||||||
|
Result is documented by an Executive Summary and, if required, a FDR |
||||||
|
“TPC Benchmark Standard” shall mean a TPC Benchmark Specification and any associated |
||||||
|
code or binaries approved by the TPC. The various TPC Benchmark Standards can be found |
||||||
|
at http://www.tpc.org/information/current_specifications.asp. |
||||||
|
“TPC Policies” shall mean the guiding principles for how the TPC conducts its operations and |
||||||
|
business. The current TPC Policies can be found at |
||||||
|
http://www.tpc.org/information/current_specifications.asp. |
||||||
|
2. Ownership. The Materials are licensed, not sold, to You for use only under the |
||||||
|
terms of this Agreement. As between You and TPC (and, to the extent applicable, its licensors), |
||||||
|
TPC retains all rights, title and interest to and ownership of the Materials and reserves all rights |
||||||
|
not expressly granted to You. |
||||||
|
3. License Grant. Subject to Your compliance in all material respects with the |
||||||
|
terms and conditions of this Agreement, TPC grants You a restricted, non-exclusive, revocable |
||||||
|
license to install and use the Materials, but only as expressly permitted herein. You may only |
||||||
|
use the Software on computer systems under Your direct control. You may download multiple |
||||||
|
copies of the Materials and make verbatim copies of the original of the Software so long as Your |
||||||
|
use of such copies complies with the terms of this Agreement. |
||||||
|
a. Use by Individual. If You are accessing the Materials as an individual, |
||||||
|
only You (as an individual) may access and use the Materials. |
||||||
|
b. Use by Organization. If You are accessing the Materials on behalf of Your |
||||||
|
organization, only You and those within Your organization may use the Materials. Your |
||||||
|
organization must identify a contact person to TPC and conduct communications with TPC |
||||||
|
through that contact person. |
||||||
|
4. Restrictions. The following restrictions apply to all use of the Materials by You. |
||||||
|
a. General: You may not: (i) use, copy, print, modify, adapt, create derivative |
||||||
|
works from, market, deliver, rent, lease, sublicense, make, have made, assign, pledge, transfer, |
||||||
|
sell, offer to sell, import, reproduce, distribute, publicly perform, publicly display or otherwise |
||||||
|
grant rights to the Materials, or any copy thereof, in whole or in part, except as expressly |
||||||
|
permitted under this Agreement; (ii) use the Materials in any way that does not comply with all |
||||||
|
applicable laws and regulations; or (iii) submit or contribute the Materials, or any part thereof, to |
||||||
|
any open source software project or as part of any third-party software or project without the |
||||||
|
express written consent of the TPC chair. |
||||||
|
b. Public Disclosure: You may not publicly disclose any performance results |
||||||
|
produced while using the Software except in the following circumstances: |
||||||
|
(1) as part of a TPC Benchmark Result. For purposes of this |
||||||
|
Agreement, a “TPC Benchmark Result” is a performance test submitted to the TPC, documented |
||||||
|
by a Full Disclosure Report and Executive Summary, claiming to meet the requirements of an |
||||||
|
official TPC Benchmark Standard. You agree that TPC Benchmark Results may only be |
||||||
|
published in accordance with the TPC Policies. viewable at http: //www.tpc.org |
||||||
|
(2) as part of an academic or research effort that does not imply or |
||||||
|
state a marketing position |
||||||
|
(3) any other use of the Software, provided that: |
||||||
|
(a) any performance results must be clearly identified as not |
||||||
|
being comparable to TPC Benchmark Results unless specifically authorized by TPC, and |
||||||
|
(b) You secure written permission from the TPC. |
||||||
|
5. License Modification. Requests for modification of this license shall be |
||||||
|
addressed to info@tpc.org. You may not remove or modify this license without permission. |
||||||
|
6. Copyright. The Materials are owned by TPC and/or its licensors, and are |
||||||
|
protected by United States copyright laws and international treaty provisions. You may not |
||||||
|
remove the copyright notice from the original or any copy of the Materials, and You must apply |
||||||
|
the notice if You extract part of the Materials not bearing a notice. |
||||||
|
7. Use of Name. You acknowledge and agree that TPC owns all trademark and trade |
||||||
|
name rights in the names, trademarks and logos used by TPC in the Materials. User shall |
||||||
|
preserve any notices regarding such ownership. User may only use such names, trademarks and |
||||||
|
logos in accordance with the usage guidelines specified by the TPC Policies. |
||||||
|
8. Merger or Integration. Any portion of the Materials merged into or integrated |
||||||
|
with other software or documentation will continue to be subject to the terms and conditions of |
||||||
|
this Agreement. |
||||||
|
9. Limited Grants of Sublicense. You may distribute the Software as provided or |
||||||
|
as modified as permitted under clause 5 of this Agreement, provided You comply with all of the |
||||||
|
terms of this Agreement and the following conditions: |
||||||
|
a. If You distribute any portion of the Software in its original form You may |
||||||
|
do so only under this Agreement by including a complete copy of this Agreement with Your |
||||||
|
distribution, and if You distribute the Software in modified form, You may only do so under a |
||||||
|
license that at a minimum provides all of the protections and conditions of use contained within |
||||||
|
this Agreement; |
||||||
|
b. You must include on each copy of the Software that You distribute the |
||||||
|
following legend in all caps, at the top of the label and license, and in a font not less than 12 |
||||||
|
point and no less prominent than any other printing: “THE TPC SOFTWARE IS AVAILABLE |
||||||
|
WITHOUT CHARGE FROM TPC.”; |
||||||
|
c. You must retain all copyright, patent, trademark, and attribution notices |
||||||
|
that are present in the Software; and |
||||||
|
d. You may not generate revenue directly or indirectly (e.g., by charging |
||||||
|
service fees) for distribution of the Software or of any modifications permitted under clause 5.c. |
||||||
|
10. Term and Termination. |
||||||
|
a. Term. The license granted to You is effective until terminated. |
||||||
|
b. Termination. |
||||||
|
i. By You. You may terminate this Agreement at any time by |
||||||
|
returning the Materials (including any portions or copies thereof) to TPC or providing written |
||||||
|
notice to the TPC that all copies of the Materials within Your custody or control have been |
||||||
|
deleted or destroyed. |
||||||
|
ii. By TPC. In the event You materially fail to comply with any term |
||||||
|
or condition of this Agreement, and You fail to remedy such non-compliance within 30 days |
||||||
|
after the receipt of notice to that effect, then TPC shall have the right to terminate this Agreement |
||||||
|
immediately upon written notice at the end of such 30-day period. |
||||||
|
c. Effect of Termination. Termination of this Agreement in accordance with |
||||||
|
this clause 10 will not terminate the rights of end users sublicensed by You pursuant to this |
||||||
|
Agreement. Moreover, upon termination and at TPC’s written request, You agree to either (1) |
||||||
|
return the Materials (including any portions or copies thereof) to TPC or (2) immediately destroy |
||||||
|
all copies of the Materials within Your custody or control and inform the TPC of the destruction |
||||||
|
of the Materials. Upon termination, TPC may also enforce any rights provided by law. The |
||||||
|
provisions of this Agreement that protect the proprietary rights of TPC and its Licensors will |
||||||
|
continue in force after termination. |
||||||
|
11. No Warranty; Materials Provided “As Is”. TO THE MAXIMUM EXTENT |
||||||
|
PERMITTED BY APPLICABLE LAW, THE MATERIALS ARE PROVIDED “AS IS” AND |
||||||
|
WITH ALL FAULTS, AND TPC (AND ITS LICENSORS) AND THE AUTHORS AND |
||||||
|
DEVELOPERS OF THE MATERIALS HEREBY DISCLAIM ALL WARRANTIES, |
||||||
|
REPRESENTATIONS AND CONDITIONS, EITHER EXPRESS, IMPLIED OR |
||||||
|
STATUTORY, INCLUDING, BUT NOT LIMITED TO, ANY IMPLIED WARRANTIES, |
||||||
|
DUTIES OR CONDITIONS RELATING TO MERCHANTABILITY, FITNESS FOR A |
||||||
|
PARTICULAR PURPOSE, ACCURACY OR COMPLETENESS OF RESPONSES, |
||||||
|
RESULTS, WORKMANLIKE EFFORT, LACK OF VIRUSES, LACK OF NEGLIGENCE, |
||||||
|
TITLE, QUIET ENJOYMENT, QUIET POSSESSION, CORRESPONDENCE TO |
||||||
|
DESCRIPTION OR NONINFRINGEMENT. |
||||||
|
USER RECOGNIZES THAT THE MATERIALS ARE THE RESULT OF A |
||||||
|
COOPERATIVE, NON-PROFIT EFFORT AND THAT TPC DOES NOT CONDUCT A |
||||||
|
TYPICAL BUSINESS. USER ACCEPTS THE MATERIALS “AS IS” AND WITHOUT ANY |
||||||
|
WARRANTY, EXPRESS OR IMPLIED. |
||||||
|
Without limitation, TPC (and its licensors) do not warrant that the functions contained in |
||||||
|
the Software or Materials will meet Your requirements or that the operation of the Software will |
||||||
|
be uninterrupted, error-free or free from malicious code. For purposes of this paragraph, |
||||||
|
“malicious code” means any program code designed to contaminate other computer programs or |
||||||
|
computer data, consume computer resources, modify, destroy, record, or transmit data, or in |
||||||
|
some other fashion usurp the normal operation of the computer, computer system, or computer |
||||||
|
network, including viruses, Trojan horses, droppers, worms, logic bombs, and the like. |
||||||
|
TPC (and its licensors) shall not be liable for the accuracy of any information provided |
||||||
|
by TPC or third-party technical support personnel, or any damages caused, either directly or |
||||||
|
indirectly, by acts taken or omissions made by You as a result of such technical support. |
||||||
|
You assume full responsibility for the selection of the Materials to achieve Your intended |
||||||
|
results, and for the installation, use and results obtained from the Materials. You also assume the |
||||||
|
entire risk as it applies to the quality and performance of the Materials. Should the Materials |
||||||
|
prove defective, You (and not TPC) assume the entire liability of any and all necessary servicing, |
||||||
|
repair or correction. |
||||||
|
Some countries/states do not allow the exclusion of implied warranties, so the above |
||||||
|
exclusion may not apply to You. TPC (and its licensors) further disclaims all warranties of any |
||||||
|
kind if the Materials were customized, repackaged or altered in any way by any party other than |
||||||
|
TPC (or its licensors). |
||||||
|
12. Disclaimer of Liability. TPC (and its licensors) assumes no liability with respect |
||||||
|
to the Materials, including liability for infringement of intellectual property rights, negligence, or |
||||||
|
any other liability. TPC is not aware of any infringement of copyright or patent that may result |
||||||
|
from its grant of rights to User of the Materials. If User receives any notice of infringement, such |
||||||
|
notice shall be immediately communicated to TPC who will have sole discretion to take action to |
||||||
|
evaluate the claim and, if practicable, modify the Materials as necessary to avoid infringement. |
||||||
|
In the event that TPC determines that the Materials cannot be modified to avoid such |
||||||
|
infringement (or any other infringement claim communicated to TPC), TPC may terminate this |
||||||
|
Agreement immediately. User shall suspend use of the Materials until modifications to avoid |
||||||
|
claims of infringement have been completed. User waives any claim against TPC in the event of |
||||||
|
such infringement claims by others. |
||||||
|
13. Export Assurance. Use and re-export of the Materials and related technical |
||||||
|
information is subject to the Export Administration Regulations (EAR) of the United States |
||||||
|
Department of Commerce. User hereby agrees that User (a) assumes responsibility for |
||||||
|
compliance with the EAR in its use of the Materials and technical information, and (b) will not |
||||||
|
export, re-export, or otherwise disclose directly or indirectly, the Materials, technical data, or any |
||||||
|
direct product of the Materials or technical data in violation of the EAR. |
||||||
|
14. Limitation of Remedies And Damages. IN NO EVENT WILL TPC OR ITS |
||||||
|
LICENSORS OR LICENSEE BE LIABLE FOR ANY INDIRECT, INCIDENTAL, SPECIAL |
||||||
|
OR CONSEQUENTIAL DAMAGES OR FOR ANY LOST PROFITS, LOST SAVINGS, LOST |
||||||
|
REVENUES OR LOST DATA ARISING FROM OR RELATING TO THE MATERIALS OR |
||||||
|
THIS AGREEMENT, EVEN IF TPC OR ITS LICENSORS OR LICENSEE HAVE BEEN |
||||||
|
ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. IN NO EVENT WILL TPC’S OR |
||||||
|
ITS LICENSORS’ LIABILITY OR DAMAGES TO YOU OR ANY OTHER PERSON EVER |
||||||
|
EXCEED U.S. ONE HUNDRED DOLLARS (US $100), REGARDLESS OF THE FORM OF |
||||||
|
THE CLAIM. IN NO EVENT WILL LICENSEE'S LIABILITY OR DAMAGES TO TPC OR |
||||||
|
ANY OTHER PERSON EVER EXCEED $1,000,000, REGARDLESS OF THE FORM OF |
||||||
|
THE CLAIM. Some countries/states do not allow the limitation or exclusion of liability for |
||||||
|
incidental or consequential damages, so the above limitation or exclusion may not apply to You. |
||||||
|
15. U.S. Government Restricted Rights. All Software and related documentation |
||||||
|
are provided with restricted rights. Use, duplication or disclosure by the U.S. Government is |
||||||
|
subject to restrictions as set forth in subdivision (b)(3)(ii) of the Rights in Technical Data and |
||||||
|
Computer Software Clause at 252.227-7013. If You are using the Software outside of the United |
||||||
|
States, You will comply with the applicable local laws of Your country, U.S. export control law, |
||||||
|
and the English version of this Agreement. |
||||||
|
16. Contractor/Manufacturer. The Contractor/Manufacturer for the Software is: |
||||||
|
Transaction Processing Performance Council |
||||||
|
572B Ruger Street, P.O. Box 29920 |
||||||
|
San Francisco, CA 94129 |
||||||
|
|
||||||
|
17. General. This Agreement is binding on You as well as Your employees, |
||||||
|
employers, contractors and agents, and on any successors and assignees. This Agreement is |
||||||
|
governed by the laws of the State of California (except to the extent federal law governs |
||||||
|
copyrights and trademarks) without respect to any provisions of California law that would cause |
||||||
|
application of the law of another state or country. The parties agree that the United Nations |
||||||
|
Convention on Contracts for the International Sale of Goods will not govern this Agreement. |
||||||
|
This Agreement is the entire agreement between us regarding the subject matter hereof and |
||||||
|
supersedes any other understandings or agreements with respect to the Materials or the subject |
||||||
|
matter hereof. If any provision of this Agreement is deemed invalid or unenforceable by any |
||||||
|
court having jurisdiction, that particular provision will be deemed modified to the extent |
||||||
|
necessary to make the provision valid and enforceable, and the remaining provisions will remain |
||||||
|
in full force and effect. |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
SPECIAL PROVISIONS APPLICABLE TO THE EUROPEAN UNION |
||||||
|
|
||||||
|
If You acquired the Materials in the European Union (EU), the following provisions also |
||||||
|
apply to You. If there is any inconsistency between the terms of the Software License Agreement |
||||||
|
set out earlier and the following provisions, the following provisions shall take precedence. |
||||||
|
|
||||||
|
1. Distribution. You may sublicense modifications of the Software covered in this |
||||||
|
Agreement if they meet the requirements of clause 9 above. |
||||||
|
2. Limited Warranty. EXCEPT AS STATED EARLIER IN THIS AGREEMENT, AND |
||||||
|
AS PROVIDED UNDER THE HEADING “STATUTORY RIGHTS”, THE SOFTWARE IS |
||||||
|
PROVIDED AS-IS WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR |
||||||
|
IMPLIED, INCLUDING, BUT NOT LIMITED TO, ANY IMPLIED WARRANTIES, |
||||||
|
NONINFRINGEMENT, OR CONDITIONS OF MERCHANTABILITY, QUALITY AND |
||||||
|
FITNESS FOR A PARTICULAR PURPOSE. |
||||||
|
3. Limitation of Remedy and Damages. THE LIMITATIONS OF REMEDIES AND |
||||||
|
DAMAGES IN THE SOFTWARE LICENSE AGREEMENT SHALL NOT APPLY TO |
||||||
|
PERSONAL INJURY (INCLUDING DEATH) TO ANY PERSON CAUSED BY TPC’S |
||||||
|
NEGLIGENCE AND ARE SUBJECT TO THE PROVISION SET OUT UNDER THE |
||||||
|
HEADING “STATUTORY RIGHTS”. |
||||||
|
4. Statutory Rights: Irish law provides that certain conditions and warranties may be |
||||||
|
implied in contracts for the sale of goods and in contracts for the supply of services. Such |
||||||
|
conditions and warranties are hereby excluded, to the extent such exclusion, in the context of this |
||||||
|
transaction, is lawful under Irish law. Conversely, such conditions and warranties, insofar as they |
||||||
|
may not be lawfully excluded, shall apply. Accordingly nothing in this Agreement shall |
||||||
|
prejudice any rights that You may enjoy by virtue of Sections 12, 13, 14 or 15 of the Irish Sale of |
||||||
|
Goods Act 1893 (as amended). |
||||||
|
5. General. This Agreement is governed by the laws of the Republic of Ireland. The local |
||||||
|
language version of this agreement shall apply to Materials acquired in the EU. This Agreement |
||||||
|
is the entire agreement between us with respect to the subject matter hereof and You agree that |
||||||
|
TPC will not have any liability for any untrue statement or representation made by it, its agents |
||||||
|
or anyone else (whether innocently or negligently) upon which You relied upon entering this |
||||||
|
Agreement, unless such untrue statement or representation was made fraudulently. |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-7- |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,993 @@ |
|||||||
|
# @(#) BUGS 2.1.8.20@(#) |
||||||
|
# The following is a list of the various DBGEN/QGEN bugs that have been |
||||||
|
# and are being fixed. Each entry is of the form: |
||||||
|
# |
||||||
|
# Problem #xx: STATUS -- MR ID and OPEN/closed |
||||||
|
# followed by a detailed explanation |
||||||
|
# TYPE: -- classification of the bug or issue |
||||||
|
# SPEC FIX: -- details of any change to the spec |
||||||
|
# DBGEN FIX: -- details of any change needed to QGEN/DBGEN |
||||||
|
# ANSWER SETS: -- any effect on answer sets |
||||||
|
# WORKAROUND: -- temporary fix, if available |
||||||
|
# HELP NEEDED: -- any work/assistance required |
||||||
|
# AUDITORS NOTIFIED: -- date auditors were notified, if appropriate |
||||||
|
# OPENED AGAINST: -- date and effected versions |
||||||
|
# CLOSED IN: -- date and fixed version |
||||||
|
# |
||||||
|
# OPEN BUGS |
||||||
|
# ========== |
||||||
|
# Problem #33: Parallel load doesn't work under NT |
||||||
|
# |
||||||
|
# OPEN Feature Requests |
||||||
|
# ================= |
||||||
|
# Problem #9: would like to include answer set formatting in query templates |
||||||
|
# Problem #37: need way to validate DBGEN without large storage requriement |
||||||
|
# Problem #58: Need way to track changes from one release to the next |
||||||
|
# |
||||||
|
# OPEN Documentation Errors |
||||||
|
# ================= |
||||||
|
# None |
||||||
|
#--------------------------------------------------------------------- |
||||||
|
#Complete Bug List |
||||||
|
#================== |
||||||
|
Problem #1: closed |
||||||
|
Summary: Q10 returns no rows |
||||||
|
Since orders can only be returned (l_returnflag = 'R') after they |
||||||
|
have been received, and can't be received in the future, the |
||||||
|
number of permissible orders for query 10 tails off early in |
||||||
|
1995. If you are lucky enough to get a parameter substitution |
||||||
|
after February '95 (allowed in 2.12.3), things can go "quickly". |
||||||
|
SEVERITY: |
||||||
|
SPEC FIX: replace 2.12.3 (1) with "DATE is the first day in a |
||||||
|
rundomly selected month between the first month of 1993 and the |
||||||
|
last month of 1994" |
||||||
|
DBGEN FIX: change permisible substitution range for query 10, |
||||||
|
parameter 1 |
||||||
|
ANSWER SETS: not effected. |
||||||
|
WORKAROUND: use a different seed for qgen parameter substitution |
||||||
|
HELP NEEDED: |
||||||
|
AUDITORS NOTIFIED: |
||||||
|
OPENED AGAINST: 1.0 |
||||||
|
CLOSED IN: 1.0.1 (dbgen and qgen) |
||||||
|
|
||||||
|
Problem #2: closed |
||||||
|
Summary: parallelism in load to gen differing data sets |
||||||
|
the parallel load code was based on extensible data sets; since |
||||||
|
each "extension" made an assumption of scale factor, the data |
||||||
|
could end up clustered. Further, since the RNG is |
||||||
|
self-modifying, different numbers of extension led to different |
||||||
|
final data sets. |
||||||
|
SEVERITY: |
||||||
|
SPEC FIX: none. |
||||||
|
DBGEN FIX: remove -E(xtensible) option and implement pure parallel |
||||||
|
load with a known scale factor; rebuild seed files |
||||||
|
ANSWER SETS: not effected. (parallelism not implemented for SF <= 1) |
||||||
|
WORKAROUND: don't use the parallel load (-C) option to DBGEN |
||||||
|
HELP NEEDED: testers needed. |
||||||
|
AUDITORS NOTIFIED: yes. |
||||||
|
OPENED AGAINST: 1.0 |
||||||
|
CLOSED IN: 1.0.1 |
||||||
|
|
||||||
|
Problem #3: closed |
||||||
|
Summary: some arithmetic tends to overflow at large SF |
||||||
|
retailprice tends to SF/10 as SF increases. this can lead to |
||||||
|
data corruption in extendedprice and aggregate calculations |
||||||
|
SEVERITY: |
||||||
|
SPEC FIX: will need rework of 1.3 wrt retailprice calculation |
||||||
|
DBGEN FIX: modification to second term of rpb_routine() calcuation |
||||||
|
to limit contibution of second term to the maximum seen at |
||||||
|
SF=.1 |
||||||
|
ANSWER SETS: not effected |
||||||
|
WORKAROUND: code retail/extended price calculations as long long; |
||||||
|
build smaller data sets |
||||||
|
HELP NEEDED: |
||||||
|
AUDITORS NOTIFIED: |
||||||
|
OPENED AGAINST: 1.0 |
||||||
|
CLOSED IN: 1.0.1 |
||||||
|
|
||||||
|
Problem #4: closed |
||||||
|
Summary: dbgen not ported to NT |
||||||
|
SEVERITY: |
||||||
|
SPEC FIX: none |
||||||
|
DBGEN FIX: need to roll in changes supplied by IBM |
||||||
|
ANSWER SETS: not effected |
||||||
|
WORKAROUND: N/A |
||||||
|
HELP NEEDED: N/A |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: 1.0 |
||||||
|
CLOSED IN: 1.1.0 |
||||||
|
|
||||||
|
Problem #5: closed |
||||||
|
Summary: QGEN seed init inconsistent |
||||||
|
A prior fix assured that parameter values were query order |
||||||
|
independent when a seed was provided on the command line. need |
||||||
|
to make this true when no seed is provided |
||||||
|
SEVERITY: |
||||||
|
SPEC FIX: none |
||||||
|
DBGEN FIX: rework seed init loop in qgen.c |
||||||
|
ANSWER SETS: not effected |
||||||
|
WORKAROUND: supply seeds on command line |
||||||
|
HELP NEEDED: none |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: 1.0 |
||||||
|
CLOSED IN: 1.0.1 |
||||||
|
|
||||||
|
Problem #6: closed |
||||||
|
Summary: command line options with abutting arguments mishandled |
||||||
|
SEVERITY: |
||||||
|
SPEC FIX: none |
||||||
|
DBGEN FIX: minor fix to getopt routine in bm_utils.c |
||||||
|
ANSWER SETS: not effected |
||||||
|
WORKAROUND: separate options and arguments with a space |
||||||
|
HELP NEEDED: none |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: 1.0 |
||||||
|
CLOSED IN: 1.0.1 |
||||||
|
|
||||||
|
Problem #7: closed |
||||||
|
Summary: '-O f' asking for new file names twice |
||||||
|
SEVERITY: |
||||||
|
SPEC FIX: none |
||||||
|
DBGEN FIX: rework of set_files() in driver.c |
||||||
|
ANSWER SETS: not effected |
||||||
|
WORKAROUND: none |
||||||
|
HELP NEEDED: none |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: 1.0 |
||||||
|
CLOSED IN: 1.0.1 |
||||||
|
|
||||||
|
Problem #8: closed |
||||||
|
Summary: Seed generation taking too long |
||||||
|
SEVERITY: |
||||||
|
SPEC FIX: N/A |
||||||
|
DBGEN FIX: implement "skip and trudge" as discussed |
||||||
|
ANSWER SETS: not effected |
||||||
|
WORKAROUND: none |
||||||
|
HELP NEEDED: |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: 1.0 |
||||||
|
CLOSED IN: 1.0.1 |
||||||
|
|
||||||
|
Problem #9: OPEN |
||||||
|
Summary: would like to include answer set formatting in query templates |
||||||
|
SEVERITY: feature request |
||||||
|
SPEC FIX: none |
||||||
|
DBGEN FIX: additional flag in qgen() |
||||||
|
ANSWER SETS: not effected |
||||||
|
WORKAROUND: N/A |
||||||
|
HELP NEEDED: asked for reproduction info 25 Oct 95 |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: 1.0 |
||||||
|
CLOSED IN: |
||||||
|
|
||||||
|
Problem #10: closed |
||||||
|
Summary: need to re-introduce ability to do incremental, flat file builds |
||||||
|
SEVERITY: feature request |
||||||
|
SPEC FIX: none |
||||||
|
DBGEN FIX: add -S(tep) option to build one of many partial data sets |
||||||
|
ANSWER SETS: not effected |
||||||
|
WORKAROUND: N/A |
||||||
|
HELP NEEDED: |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: 1.0 |
||||||
|
CLOSED IN: 1.0.1 |
||||||
|
|
||||||
|
Problem #11: closed |
||||||
|
Summary: Row count for first delete at 10/100 is incorrect |
||||||
|
SEVERITY: Error |
||||||
|
SPEC FIX: None |
||||||
|
DBGEN FIX: |
||||||
|
ANSWER SETS: No Effect |
||||||
|
WORKAROUND: hand edit of first delete file |
||||||
|
HELP NEEDED: |
||||||
|
AUDITORS NOTIFIED: No |
||||||
|
OPENED AGAINST: 1.0.1 |
||||||
|
CLOSED IN: 2.0.0 (not sure of precise release) |
||||||
|
CLOSED BY: jms@gradientsystems.com |
||||||
|
|
||||||
|
Problem #12: closed |
||||||
|
Summary: Bad default rowcount generated for query 17 |
||||||
|
SEVERITY: Error |
||||||
|
SPEC FIX: None |
||||||
|
DBGEN FIX: corrected rowcnt[] entries to be 1-based |
||||||
|
ANSWER SETS: N/A |
||||||
|
WORKAROUND: hand edit query or add explicit row count to template |
||||||
|
HELP NEEDED: |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: 1.0.0 |
||||||
|
CLOSED IN: 1.1.0 |
||||||
|
|
||||||
|
Problem #13: closed |
||||||
|
Summary: Bad expansion of SET_OUTPUT for Teradata |
||||||
|
SEVERITY: Error |
||||||
|
SPEC FIX: N/A |
||||||
|
DBGEN FIX: new macro in tpcd.h |
||||||
|
ANSWER SETS: N/A |
||||||
|
WORKAROUND: Hand edit query or hardcode output directive in templates |
||||||
|
HELP NEEDED: |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: 1.0.1 |
||||||
|
CLOSED IN: 1.1.0 |
||||||
|
|
||||||
|
Problem #14: closed |
||||||
|
Summary: Badly formed range deletes |
||||||
|
SEVERITY: Error |
||||||
|
SPEC FIX: N/A |
||||||
|
DBGEN FIX: TBD |
||||||
|
ANSWER SETS: N/A |
||||||
|
WORKAROUND: hand edit delete files |
||||||
|
HELP NEEDED: asked for reproduction info 25 Oct 95 |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: 1.0.1 |
||||||
|
CLOSED IN: 2.0.0 (not sure of precise release) |
||||||
|
CLOSED BY: jms@gradientsystems.com |
||||||
|
|
||||||
|
Problem #15: closed |
||||||
|
Summary: in a multi-stage load, parent tables are not properly named |
||||||
|
when parent and child are build simultaneously |
||||||
|
SEVERITY: Error |
||||||
|
SPEC FIX: N/A |
||||||
|
DBGEN FIX: reworked tdef[].name in pr_X_Y routines for master/detail |
||||||
|
tables |
||||||
|
ANSWER SETS: N/A |
||||||
|
WORKAROUND: Build master/detail tables separately |
||||||
|
HELP NEEDED: |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: 1.0.1 |
||||||
|
CLOSED IN: 1.1.0 |
||||||
|
|
||||||
|
Problem #16: closed |
||||||
|
Summary: update generation at large scale factors produced the wrong number |
||||||
|
of rows due to overflow of 32-bit integer |
||||||
|
SEVERITY: BUG |
||||||
|
SPEC FIX: N/A |
||||||
|
DBGEN FIX: corrected order of operations in row count calcuation in |
||||||
|
driver.c |
||||||
|
ANSWER SETS: N/A |
||||||
|
WORKAROUND: use 64 bit integers |
||||||
|
HELP NEEDED: None |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: 1.0.1 |
||||||
|
CLOSED IN: 1.1.0 |
||||||
|
|
||||||
|
Problem #17: closed |
||||||
|
Summary: comment fields may be truncated when using columnar output, due to |
||||||
|
rounding/truncation in the length calculation |
||||||
|
SEVERITY: BUG |
||||||
|
SPEC FIX: N/A |
||||||
|
DBGEN FIX: add ceil() calls around all PR_VSTR() calls in print.c |
||||||
|
ANSWER SETS: N/A |
||||||
|
WORKAROUND: N/A |
||||||
|
HELP NEEDED: None |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: 1.0.1 |
||||||
|
CLOSED IN: 1.1.0 |
||||||
|
|
||||||
|
Problem #18: closed |
||||||
|
Summary: the output format for identifier fields in columnar output is |
||||||
|
unneccessarily large, and is inconsistant |
||||||
|
SEVERITY: minor |
||||||
|
SPEC FIX: N/A |
||||||
|
DBGEN FIX: revised PR_BCD2 macro |
||||||
|
ANSWER SETS: N/A |
||||||
|
WORKAROUND: avoid columnar output, or rework macro |
||||||
|
HELP NEEDED: none |
||||||
|
AUDITORS NOTIFIED: no |
||||||
|
OPENED AGAINST: 1.1.0 |
||||||
|
OPENED BY: jenn@torolab2.vnet.ibm.com |
||||||
|
CLOSED IN: 1.1.0A |
||||||
|
CLOSED BY: jms@informix.com |
||||||
|
|
||||||
|
Problem #19: closed |
||||||
|
Summary: the case statement used to decipher substitution points in the |
||||||
|
query template allowed extraneous :'s to re-initialize the |
||||||
|
parameter substitution |
||||||
|
SEVERITY: bug |
||||||
|
SPEC FIX: N/A |
||||||
|
DBGEN FIX: rework flag switch in qgen.c to explicitly call out numerics |
||||||
|
ANSWER SETS: N/A |
||||||
|
WORKAROUND: be sure that there are no "unknown" flags in the template |
||||||
|
HELP NEEDED: none |
||||||
|
AUDITORS NOTIFIED: yes |
||||||
|
OPENED AGAINST: 1.0.1 |
||||||
|
OPENED BY: jenn@torolab2.vnet.ibm.com |
||||||
|
CLOSED IN: 1.1.0A |
||||||
|
CLOSED BY: jms@informix.com |
||||||
|
|
||||||
|
Problem #20: closed |
||||||
|
Summary: parameter substitution values were not effected by small changes |
||||||
|
in seed values |
||||||
|
SEVERITY: bug |
||||||
|
SPEC FIX: N/A |
||||||
|
DBGEN FIX: add UnifInt() calls to RNG init in qgen.c |
||||||
|
ANSWER SETS: N/A |
||||||
|
WORKAROUND: be sure seed values provide sufficient randomness in EQT |
||||||
|
HELP NEEDED: none |
||||||
|
AUDITORS NOTIFIED: yes |
||||||
|
OPENED AGAINST: 1.1.0 |
||||||
|
OPENED BY: alain_crolotte@elsegundoca.attgis.com |
||||||
|
CLOSED IN: 1.1.0B |
||||||
|
CLOSED BY: jms@informix.com |
||||||
|
|
||||||
|
Problem #21: closed |
||||||
|
Summary: parameter logging doesn't properly handle the variable length of |
||||||
|
the substitution list |
||||||
|
SEVERITY: bug |
||||||
|
SPEC FIX: N/A |
||||||
|
DBGEN FIX: assure null termination of param list and bound the output |
||||||
|
loop that logs parameter usage |
||||||
|
ANSWER SETS: N/A |
||||||
|
WORKAROUND: none |
||||||
|
HELP NEEDED: none |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: 1.1.0B |
||||||
|
OPENED BY: |
||||||
|
CLOSED IN: 1.1.0C |
||||||
|
CLOSED BY: jms@informix.com |
||||||
|
|
||||||
|
Problem #22: closed |
||||||
|
Summary: parameter output for Q11 can overflow default formatting at very |
||||||
|
large volumes |
||||||
|
SEVERITY: bug |
||||||
|
SPEC FIX: N/A |
||||||
|
DBGEN FIX: expand format string to %11.10f |
||||||
|
ANSWER SETS: N/A |
||||||
|
WORKAROUND: hand code queries for large volumes |
||||||
|
HELP NEEDED: none |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: 1.1.0B |
||||||
|
OPENED BY: francois@ip.com |
||||||
|
CLOSED IN: 1.1.0C |
||||||
|
CLOSED BY: jms@informix.com |
||||||
|
|
||||||
|
Problem #23: closed |
||||||
|
Summary: typos in variant 14c |
||||||
|
SEVERITY: |
||||||
|
SPEC FIX: N/A |
||||||
|
DBGEN FIX: corrected query template |
||||||
|
ANSWER SETS: N/A |
||||||
|
WORKAROUND: none |
||||||
|
HELP NEEDED: none |
||||||
|
AUDITORS NOTIFIED: no |
||||||
|
OPENED AGAINST: 1.1.0B |
||||||
|
OPENED BY: francois@ip.com |
||||||
|
CLOSED IN: 1.1.0C |
||||||
|
CLOSED BY: jms@informix.com |
||||||
|
|
||||||
|
Problem #24: closed |
||||||
|
Summary: macro PR_DATE was hard-coded to print t->alpha even though a |
||||||
|
target was passed in as a parameter |
||||||
|
SEVERITY: minor |
||||||
|
SPEC FIX: N/A |
||||||
|
SOURCE FIX: re-worked macro to properly use its arguments |
||||||
|
ANSWER SETS: N/A |
||||||
|
WORKAROUND: none |
||||||
|
HELP NEEDED: none |
||||||
|
AUDITORS NOTIFIED: no |
||||||
|
OPENED AGAINST: 1.1.0A |
||||||
|
OPENED BY: Robert.Lane@eng.sun.com |
||||||
|
CLOSED IN: dbgen 1.1.0B |
||||||
|
CLOSED BY: jms@informix.com |
||||||
|
|
||||||
|
Problem #25: closed |
||||||
|
Summary: typos in variant 10a |
||||||
|
SEVERITY: |
||||||
|
SPEC FIX: N/A |
||||||
|
DBGEN FIX: corrected query template |
||||||
|
ANSWER SETS: N/A |
||||||
|
WORKAROUND: none |
||||||
|
HELP NEEDED: none |
||||||
|
AUDITORS NOTIFIED: no |
||||||
|
OPENED AGAINST: 1.1.0B |
||||||
|
OPENED BY: francois@ip.com |
||||||
|
CLOSED IN: 1.1.0C |
||||||
|
CLOSED BY: jms@informix.com |
||||||
|
|
||||||
|
Problem #26: closed |
||||||
|
Summary: the version numbers for QGEN and DBGEN do not match |
||||||
|
SEVERITY: minor |
||||||
|
SPEC FIX: N/A |
||||||
|
SOURCE FIX: unified version numbers starting with 1.1.0C |
||||||
|
ANSWER SETS: N/A |
||||||
|
WORKAROUND: N/A |
||||||
|
HELP NEEDED: none |
||||||
|
AUDITORS NOTIFIED: no |
||||||
|
OPENED AGAINST: 1.1.0B (or 1.1.0C, depending) |
||||||
|
OPENED BY: Robert.Lane@eng.sun.com |
||||||
|
CLOSED IN: 1.1.0C |
||||||
|
CLOSED BY: jms@informix.com |
||||||
|
|
||||||
|
Problem #27: closed |
||||||
|
Summary: correcting typos in 7, 9, 13 |
||||||
|
SEVERITY: minor |
||||||
|
SPEC FIX: N/A |
||||||
|
SOURCE FIX: fixed them |
||||||
|
ANSWER SETS: N/A |
||||||
|
WORKAROUND: N/A |
||||||
|
HELP NEEDED: none |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: 1.1.0C (pre-release) |
||||||
|
OPENED BY: tblank@vnet.ibm.com |
||||||
|
CLOSED IN: 1.1.0C |
||||||
|
CLOSED BY: jms@informix.com |
||||||
|
|
||||||
|
Problem #28: closed |
||||||
|
Summary: Seed generation fails with SF > 1000 due to 32 bit integer |
||||||
|
arithmetic used to verify "divisible-ness" of data set |
||||||
|
SEVERITY: bug |
||||||
|
SPEC FIX: N/A |
||||||
|
SOURCE FIX: TBD |
||||||
|
ANSWER SETS: N/A |
||||||
|
WORKAROUND: N/A |
||||||
|
HELP NEEDED: none |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: 1.1.0C |
||||||
|
OPENED BY: alain_colotte@elsegundoca.ncr.com |
||||||
|
CLOSED IN: 1.3.0 |
||||||
|
CLOSED BY: jms@gradientsystems.com |
||||||
|
|
||||||
|
Problem #29: closed |
||||||
|
Summary: Compile time errors on Solaris 2.5.1 and SunOS |
||||||
|
SEVERITY: bug |
||||||
|
SPEC FIX: N/A |
||||||
|
SOURCE FIX: Solaris fixed by renaming lineitem field from extended to |
||||||
|
eprice; SunOS problem documented in Porting.Notes |
||||||
|
ANSWER SETS: N/A |
||||||
|
WORKAROUND: N/A |
||||||
|
HELP NEEDED: N/A |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: 1.1.0D |
||||||
|
OPENED BY: jms@informix.com |
||||||
|
CLOSED IN: 1.2.0 |
||||||
|
CLOSED BY: jms@informix.com |
||||||
|
|
||||||
|
Problem #30: closed |
||||||
|
Summary: Cryptic comments in dists.dss |
||||||
|
SEVERITY: flaw |
||||||
|
SPEC FIX: N/A |
||||||
|
SOURCE FIX: Cleaned up the comments in the file |
||||||
|
ANSWER SETS: N/A |
||||||
|
WORKAROUND: N/A |
||||||
|
HELP NEEDED: N/A |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: 1.2.0 |
||||||
|
OPENED BY: francois@sizing.com |
||||||
|
CLOSED IN: 1.2.3 ALPHA 1 |
||||||
|
CLOSED BY: jms@informix.com |
||||||
|
|
||||||
|
Problem #31: closed |
||||||
|
Summary: Inconsistant handling of fopen() failures |
||||||
|
SEVERITY: bug |
||||||
|
SPEC FIX: N/A |
||||||
|
SOURCE FIX: introduced OPEN_CHECK macro (defined in dss.h) |
||||||
|
ANSWER SETS: N/A |
||||||
|
WORKAROUND: N/A |
||||||
|
HELP NEEDED: none |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: 1.2.0 |
||||||
|
OPENED BY: schiefer@ca.ibm.com |
||||||
|
CLOSED IN: 1.3.0 |
||||||
|
CLOSED BY: jms@gradientsystems.com |
||||||
|
|
||||||
|
Problem #32: closed |
||||||
|
Summary: Path separators were hard-coded |
||||||
|
SEVERITY: bug |
||||||
|
SPEC FIX: N/A |
||||||
|
SOURCE FIX: introduced PATH_SEP in config.h |
||||||
|
ANSWER SETS: N/A |
||||||
|
WORKAROUND: N/A |
||||||
|
HELP NEEDED: none |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: 1.2.0 |
||||||
|
OPENED BY: |
||||||
|
CLOSED IN: 1.3.0 |
||||||
|
CLOSED BY: jms@gradientsystems.com |
||||||
|
|
||||||
|
Problem #33: OPEN |
||||||
|
Summary: Parallel load doesn't work under NT |
||||||
|
SEVERITY: bug |
||||||
|
SPEC FIX: N/A |
||||||
|
SOURCE FIX: |
||||||
|
ANSWER SETS: N/A |
||||||
|
WORKAROUND: use -S option to build each step independently |
||||||
|
HELP NEEDED: none |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: 1.1.0 |
||||||
|
OPENED BY: |
||||||
|
CLOSED IN: |
||||||
|
CLOSED BY: |
||||||
|
|
||||||
|
Problem #34: closed |
||||||
|
Summary: P_NAME not properly populated |
||||||
|
SEVERITY: bug |
||||||
|
SPEC FIX: N/A |
||||||
|
SOURCE FIX: Corrected color selection logic in agg_str() |
||||||
|
ANSWER SETS: NFI for 1.x since it effect answer sets |
||||||
|
WORKAROUND: N/A |
||||||
|
HELP NEEDED: None |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: 1.2.3 |
||||||
|
OPENED BY: schiefer@ca.ibm.com |
||||||
|
CLOSED IN: 2.0.0 |
||||||
|
CLOSED BY: jms@gradientsystems.com |
||||||
|
|
||||||
|
Problem #35: closed |
||||||
|
Summary: mk_sparse() returning bad orderkeys |
||||||
|
SEVERITY: bug |
||||||
|
SPEC FIX: N/A |
||||||
|
SOURCE FIX: corrected logic in mk_sparse() and bcd2_bin() |
||||||
|
ANSWER SETS: N/A |
||||||
|
WORKAROUND: N/A |
||||||
|
HELP NEEDED: None |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: 1.3.0 |
||||||
|
OPENED BY: jennc@ca.ibm.com |
||||||
|
CLOSED IN: 1.3.1 |
||||||
|
CLOSED BY: jms@gradientsystems.com |
||||||
|
|
||||||
|
Problem #36: closed |
||||||
|
Summary: a_rnd() doesn't mask properly, uses small 'alphabet' |
||||||
|
SEVERITY: bug |
||||||
|
SPEC FIX: Corrected 4.2.2.6 to reflect 64 character set |
||||||
|
SOURCE FIX: changed mask in a_rnd() from 067 to 077 |
||||||
|
ANSWER SETS: NFI for 1.x since answers would be effected |
||||||
|
WORKAROUND: N/A |
||||||
|
HELP NEEDED: None |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: 1.2.3 |
||||||
|
OPENED BY: pek@elsegundoca.ncr.com |
||||||
|
CLOSED IN: 2.0.0 |
||||||
|
CLOSED BY: jms@gradientsystems.com |
||||||
|
|
||||||
|
Problem #37: OPEN |
||||||
|
Summary: need way to validate DBGEN without large storage requriement |
||||||
|
SEVERITY: Feature Request |
||||||
|
SPEC FIX: N/A |
||||||
|
SOURCE FIX: Provide vrf_xxx routine to generate checksums |
||||||
|
ANSWER SETS: N/A |
||||||
|
WORKAROUND: N/A |
||||||
|
HELP NEEDED: None |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: 1.2.3 |
||||||
|
OPENED BY: jms@gradientsystems.com |
||||||
|
CLOSED IN: |
||||||
|
CLOSED BY: |
||||||
|
|
||||||
|
Problem #38: closed |
||||||
|
Summary: need to be able to generate specific update set |
||||||
|
SEVERITY: Feature Request |
||||||
|
SPEC FIX: N/A |
||||||
|
SOURCE FIX: Update update generation to use -S <n> option |
||||||
|
ANSWER SETS: N/A |
||||||
|
WORKAROUND: N/A |
||||||
|
HELP NEEDED: None |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: 1.3.1 |
||||||
|
OPENED BY: jennc@ca.ibm.com |
||||||
|
CLOSED IN: 2.0.0 (not certain of fix version) |
||||||
|
CLOSED BY: jms@gradientsystems.com |
||||||
|
|
||||||
|
Problem #39: closed |
||||||
|
Summary: README for dbgen is out of date |
||||||
|
SEVERITY: Documentation error |
||||||
|
SPEC FIX: N/A |
||||||
|
SOURCE FIX: Rewrite of README |
||||||
|
ANSWER SETS: N/A |
||||||
|
WORKAROUND: N/A |
||||||
|
HELP NEEDED: None |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: 2.0.0.6b |
||||||
|
OPENED BY: jennc@ca.ibm.com |
||||||
|
CLOSED IN: 2.0.0 |
||||||
|
CLOSED BY: jms@gradientsystems.com |
||||||
|
|
||||||
|
Problem #40: closed |
||||||
|
Summary: O_CUSTKEY is generated out of range at 10GB |
||||||
|
SEVERITY: Bug |
||||||
|
SPEC FIX: N/A |
||||||
|
SOURCE FIX: Correction of CUST_MORTALITY calculation |
||||||
|
ANSWER SETS: Unknown |
||||||
|
WORKAROUND: N/A |
||||||
|
HELP NEEDED: None |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: 2.0.0.7 |
||||||
|
OPENED BY: wayne.smith@intel.com |
||||||
|
CLOSED IN: 2.0.0.8 |
||||||
|
CLOSED BY: jms@gradientsystems.com |
||||||
|
|
||||||
|
Problem #41: closed |
||||||
|
Summary: V2 appears slower than V1 |
||||||
|
SEVERITY: Bug |
||||||
|
SPEC FIX: |
||||||
|
SOURCE FIX: Used NthElement() in row_stop() |
||||||
|
ANSWER SETS: N/A |
||||||
|
WORKAROUND: N/A |
||||||
|
HELP NEEDED: None |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: 2.0.0.8 |
||||||
|
OPENED BY: jennc@ca.ibm.com |
||||||
|
CLOSED IN: 2.01a |
||||||
|
CLOSED BY: jms@gradientsystems.com |
||||||
|
|
||||||
|
Problem #42: closed |
||||||
|
Summary: Dual declaration of articles causes C++ compilation error |
||||||
|
SEVERITY: Bug |
||||||
|
SPEC FIX: N/A |
||||||
|
SOURCE FIX: Duplicate declaration removed |
||||||
|
ANSWER SETS: N/A |
||||||
|
WORKAROUND: N/A |
||||||
|
HELP NEEDED: None |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: 2.0.0 |
||||||
|
OPENED BY: jpm@informix.com |
||||||
|
CLOSED IN: 2.0.0a |
||||||
|
CLOSED BY: jms@gradientsystems.com |
||||||
|
|
||||||
|
Problem #43: closed |
||||||
|
Summary: Subselect wild card not consistant with spec |
||||||
|
SEVERITY: Bug |
||||||
|
SPEC FIX: N/A |
||||||
|
SOURCE FIX: Query templates corrected |
||||||
|
ANSWER SETS: N/A |
||||||
|
WORKAROUND: N/A |
||||||
|
HELP NEEDED: None |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: 2.0.0 |
||||||
|
OPENED BY: jpm@informix.com |
||||||
|
CLOSED IN: 2.0.0a |
||||||
|
CLOSED BY: jms@gradientsystems.com |
||||||
|
|
||||||
|
Problem #44: closed |
||||||
|
Summary: small money values incorrect |
||||||
|
SEVERITY: Bug |
||||||
|
SPEC FIX: N/A |
||||||
|
SOURCE FIX: reworked PR_xxx macros |
||||||
|
ANSWER SETS: new answer included for Q22 |
||||||
|
WORKAROUND: N/A |
||||||
|
HELP NEEDED: None |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: 2.0.0 |
||||||
|
OPENED BY: ac4@elsegundoca.ncr.com |
||||||
|
CLOSED IN: 1.0.1 |
||||||
|
CLOSED BY: jms@gradientsystems.com |
||||||
|
|
||||||
|
Problem #45: closed |
||||||
|
Summary: L_ORDERKEY/O_ORDERKEY incorrect |
||||||
|
SEVERITY: Bug |
||||||
|
SPEC FIX: N/A |
||||||
|
SOURCE FIX: corrected pointer arithmetic in print.c |
||||||
|
ANSWER SETS: N/A |
||||||
|
WORKAROUND: N/A |
||||||
|
HELP NEEDED: None |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: 1.0.1 |
||||||
|
OPENED BY: jpm@informix.com |
||||||
|
CLOSED IN: 1.0.1a |
||||||
|
CLOSED BY: jms@gradientsystems.com |
||||||
|
|
||||||
|
Problem #46: closed |
||||||
|
Summary: L_ORDERKEY/O_ORDERKEY incorrect |
||||||
|
SEVERITY: Dup (see #45) |
||||||
|
SPEC FIX: N/A |
||||||
|
SOURCE FIX: N/A |
||||||
|
ANSWER SETS: N/A |
||||||
|
WORKAROUND: N/A |
||||||
|
HELP NEEDED: None |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: 1.0.1 |
||||||
|
OPENED BY: jennc@ca.ibm.com |
||||||
|
CLOSED IN: 1.0.1a |
||||||
|
CLOSED BY: jms@gradientsystems.com |
||||||
|
|
||||||
|
Problem #47: closed |
||||||
|
Summary: QGEN parameter substitution not random |
||||||
|
SEVERITY: BUG |
||||||
|
SPEC FIX: N/A |
||||||
|
SOURCE FIX: corrected varsub RANDOM usage to reflect seed file removal |
||||||
|
ANSWER SETS: N/A |
||||||
|
WORKAROUND: N/A |
||||||
|
HELP NEEDED: None |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: 1.0.1 |
||||||
|
OPENED BY: wayne.smith@intel.com |
||||||
|
CLOSED IN: 1.0.1a |
||||||
|
CLOSED BY: jms@gradientsystems.com |
||||||
|
|
||||||
|
Problem #48: closed |
||||||
|
Summary: QGEN parameter substitution not random for Q21 |
||||||
|
SEVERITY: BUG |
||||||
|
SPEC FIX: N/A |
||||||
|
SOURCE FIX: corrected varsub to only reference nations2 distribution |
||||||
|
ANSWER SETS: N/A |
||||||
|
WORKAROUND: N/A |
||||||
|
HELP NEEDED: None |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: 1.0.1a |
||||||
|
OPENED BY: wayne.smith@intel.com |
||||||
|
CLOSED IN: 1.0.1b |
||||||
|
CLOSED BY: jms@gradientsystems.com |
||||||
|
|
||||||
|
Problem #49: closed |
||||||
|
Summary: Extraneous trailing separator in delete files |
||||||
|
SEVERITY: BUG |
||||||
|
SPEC FIX: N/A |
||||||
|
SOURCE FIX: special-cased the handling of deletes using PR_KEY |
||||||
|
ANSWER SETS: N/A |
||||||
|
WORKAROUND: N/A |
||||||
|
HELP NEEDED: None |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: 1.0.1b |
||||||
|
OPENED BY: wayne.smith@intel.com |
||||||
|
CLOSED IN: 1.0.1c |
||||||
|
CLOSED BY: jms@gradientsystems.com |
||||||
|
|
||||||
|
Problem #50: closed |
||||||
|
Summary: qgen not generating valid parameter log files for defaults |
||||||
|
SEVERITY: BUG |
||||||
|
SPEC FIX: N/A |
||||||
|
SOURCE FIX: corrected params/default reference |
||||||
|
ANSWER SETS: N/A |
||||||
|
WORKAROUND: N/A |
||||||
|
HELP NEEDED: None |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: 1.0.1 |
||||||
|
OPENED BY: cta@elsegundoca.ncr.com |
||||||
|
CLOSED IN: 1.0.1d |
||||||
|
CLOSED BY: jms@gradientsystems.com |
||||||
|
|
||||||
|
Problem #51: closed |
||||||
|
Summary: inconistent/invariant substitutions in Q16, Q17, Q19 |
||||||
|
SEVERITY: BUG |
||||||
|
SPEC FIX: N/A |
||||||
|
SOURCE FIX: corrected "brand" selection to make order irrelevent |
||||||
|
ANSWER SETS: N/A |
||||||
|
WORKAROUND: N/A |
||||||
|
HELP NEEDED: None |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: 1.0.1 |
||||||
|
OPENED BY: jennc@ca.ibm.com |
||||||
|
CLOSED IN: 1.0.1d |
||||||
|
CLOSED BY: jms@gradientsystems.com |
||||||
|
|
||||||
|
Problem #52: closed |
||||||
|
Summary: qgen seeds make parameter substitutions position dependant |
||||||
|
The current scheme uses an individual RNG stream for each query, and seeds |
||||||
|
all streams identically. Accordingly, two queries that use the same domain |
||||||
|
for the same parameter will always have the same value (e.g., q9 and q20). |
||||||
|
SEVERITY: BUG |
||||||
|
SPEC FIX: N/A |
||||||
|
SOURCE FIX: seed the individual streams with the sequence of random |
||||||
|
numbers produced by the global seed value |
||||||
|
ANSWER SETS: N/A |
||||||
|
WORKAROUND: N/A |
||||||
|
HELP NEEDED: None |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: 990708 |
||||||
|
OPENED BY: jennc@ca.ibm.com |
||||||
|
CLOSED IN: 1.0.1a/1.1.0a (990727) |
||||||
|
CLOSED BY: jms@gradientsystems.com |
||||||
|
CHECKED BY: qa52 |
||||||
|
|
||||||
|
Problem #53: closed |
||||||
|
Summary: number of lineitems in update files no longer varies |
||||||
|
The RNG is not being set at the start of update generation; accordingly |
||||||
|
the original data (including rowcounts) is being "regenerated" |
||||||
|
SEVERITY: |
||||||
|
SPEC FIX: N/A |
||||||
|
SOURCE FIX: |
||||||
|
ANSWER SETS: N/A |
||||||
|
WORKAROUND: N/A |
||||||
|
HELP NEEDED: None |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: 990708 |
||||||
|
OPENED BY: jennc@ca.ibm.com |
||||||
|
CLOSED IN: 990810 |
||||||
|
CLOSED BY: jms@gradientsystems.com |
||||||
|
CHECKED BY: qa53 |
||||||
|
|
||||||
|
Problem #54: closed |
||||||
|
Summary: segmented update files fail when rows per file is small |
||||||
|
A round off error could cause the wrong number of rows to be output to a |
||||||
|
given update file |
||||||
|
SEVERITY: BUG |
||||||
|
SPEC FIX: N/A |
||||||
|
SOURCE FIX: correction to driver.c and print.c to use division and modulo |
||||||
|
to produce comparably sized files regardless of divisor |
||||||
|
ANSWER SETS: N/A |
||||||
|
WORKAROUND: N/A |
||||||
|
HELP NEEDED: None |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: 990708 |
||||||
|
OPENED BY: v-larryk@microsoft.com |
||||||
|
CLOSED IN: 1.0.1a/1.1.0a (990727) |
||||||
|
CLOSED BY: jms@gradientsystems.com (using code from larry) |
||||||
|
CHECKED BY: |
||||||
|
|
||||||
|
Problem #55: closed |
||||||
|
Summary: -S <n> generates bad data when used with updates |
||||||
|
The RNG is not being properly set |
||||||
|
SEVERITY: BUG |
||||||
|
SPEC FIX: N/A |
||||||
|
SOURCE FIX: added the appropriate offset to the RNG, and simplified the |
||||||
|
update generation code |
||||||
|
ANSWER SETS: N/A |
||||||
|
WORKAROUND: N/A |
||||||
|
HELP NEEDED: None |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: 990708 |
||||||
|
OPENED BY: jms@gradientsystems.com |
||||||
|
CLOSED IN: 990816 |
||||||
|
CLOSED BY: jms@gradientsystems.com (using code from larry) |
||||||
|
CHECKED BY: qa55 |
||||||
|
|
||||||
|
Problem #56: closed |
||||||
|
Summary: Need way to specify dists.dss location on the command line |
||||||
|
SEVERITY: FEATURE |
||||||
|
SPEC FIX: N/A |
||||||
|
SOURCE FIX: added -b switch to driver.c and qgen.c |
||||||
|
ANSWER SETS: N/A |
||||||
|
WORKAROUND: N/A |
||||||
|
HELP NEEDED: None |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: 990708 |
||||||
|
OPENED BY: clevine@microsoft.com |
||||||
|
CLOSED IN: 990830 |
||||||
|
CLOSED BY: jms@gradientsystems.com |
||||||
|
CHECKED BY: N/A |
||||||
|
|
||||||
|
Problem #57: closed |
||||||
|
Summary: Need way to remove all DBGEN output unless there is an error |
||||||
|
SEVERITY: FEATURE |
||||||
|
SPEC FIX: N/A |
||||||
|
SOURCE FIX: added -q switch to driver.c and changed verbose if's |
||||||
|
ANSWER SETS: N/A |
||||||
|
WORKAROUND: N/A |
||||||
|
HELP NEEDED: None |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: 990708 |
||||||
|
OPENED BY: clevine@microsoft.com |
||||||
|
CLOSED IN: 990830 |
||||||
|
CLOSED BY: jms@gradientsystems.com |
||||||
|
CHECKED BY: N/A |
||||||
|
|
||||||
|
Problem #00058: OPEN |
||||||
|
Summary: Need way to track changes from one release to the next |
||||||
|
SEVERITY: FEATURE |
||||||
|
SPEC FIX: N/A |
||||||
|
SOURCE FIX: reintroduce and automate the CHANGES file. Require MRs for |
||||||
|
all source code changes |
||||||
|
ANSWER SETS: N/A |
||||||
|
WORKAROUND: N/A |
||||||
|
HELP NEEDED: None |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: 990708 |
||||||
|
OPENED BY: mpoess@us.oracle.com |
||||||
|
CLOSED IN: |
||||||
|
CLOSED BY: |
||||||
|
CHECKED BY: |
||||||
|
|
||||||
|
Problem #00059: closed |
||||||
|
Summary: extra comma in Q2 template |
||||||
|
SEVERITY: BUG |
||||||
|
SPEC FIX: N/A |
||||||
|
SOURCE FIX: Template corrected |
||||||
|
ANSWER SETS: N/A |
||||||
|
WORKAROUND: None. |
||||||
|
HELP NEEDED: None. |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: 990830 |
||||||
|
OPENED BY: jpm@informix.com |
||||||
|
CLOSED ON: 990908 |
||||||
|
CLOSED BY: jms@gradientsystems.com |
||||||
|
CHECKED BY: N/A |
||||||
|
|
||||||
|
|
||||||
|
Problem #00060: closed |
||||||
|
Summary: segmented inserts/deletes creating an extra file |
||||||
|
SEVERITY: BUG |
||||||
|
SPEC FIX: N/A |
||||||
|
SOURCE FIX: Adding in missed change from original roll-in |
||||||
|
ANSWER SETS: N/A |
||||||
|
WORKAROUND: N/A |
||||||
|
HELP NEEDED: N/A |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: 990830 |
||||||
|
OPENED BY: larryk@microsoft.com |
||||||
|
CLOSED ON: 990111 |
||||||
|
CLOSED BY: jms@gradientsystems.com |
||||||
|
CHECKED BY: N/A |
||||||
|
|
||||||
|
Problem #00061: closed |
||||||
|
Summary: 64-bit support under DigUnix leads to math errors |
||||||
|
SEVERITY: BUG |
||||||
|
SPEC FIX: N/A |
||||||
|
SOURCE FIX: Calculation of dRange in rnd.c now uses double cast |
||||||
|
ANSWER SETS: N/A |
||||||
|
WORKAROUND: N/A |
||||||
|
HELP NEEDED: N/A |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: 990830 |
||||||
|
OPENED BY: nramesh@us.oracle.com |
||||||
|
CLOSED ON: 000131 |
||||||
|
CLOSED BY: jms@gradientsystems.com |
||||||
|
CHECKED BY: N/A |
||||||
|
|
||||||
|
Problem #00062: closed |
||||||
|
Summary: bad update rollover after 1000 refreshes |
||||||
|
This test uses tpcH scale 0.01. We've encountered |
||||||
|
an situation in which dbgen doesn't generate |
||||||
|
the correct data for delete files delete.1000 and |
||||||
|
above. In particular, file delete.1000 contains |
||||||
|
keys to be deleted that have never been loaded. |
||||||
|
Because of this problem, keys that should have been |
||||||
|
deleted never are causing duplicate unique values |
||||||
|
to appear in the incremental loads after we cycle |
||||||
|
from the 4000th incremental update back around starting |
||||||
|
again with the 1st one. |
||||||
|
SEVERITY: BUG |
||||||
|
SPEC FIX: N/A |
||||||
|
SOURCE FIX: N/A |
||||||
|
ANSWER SETS: N/A |
||||||
|
WORKAROUND: N/A |
||||||
|
HELP NEEDED: N/A |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: 19991101 |
||||||
|
OPENED BY: Roger.McNicol@sybase.com |
||||||
|
CLOSED ON: 20000509 |
||||||
|
CLOSED BY: jms |
||||||
|
CHECKED BY: N/A |
||||||
|
|
||||||
|
Problem #00063: closed |
||||||
|
Summary: update copyright notice |
||||||
|
N/A |
||||||
|
SEVERITY: BUG |
||||||
|
SPEC FIX: N/A |
||||||
|
SOURCE FIX: N/A |
||||||
|
ANSWER SETS: N/A |
||||||
|
WORKAROUND: N/A |
||||||
|
HELP NEEDED: N/A |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: N/A |
||||||
|
OPENED BY: jms@gradientsystems.com |
||||||
|
CLOSED ON: 20000131 |
||||||
|
CLOSED BY: jms@gradientsystems.com |
||||||
|
CHECKED BY: N/A |
||||||
|
|
||||||
|
Problem #00064: closed |
||||||
|
Summary: permute() introduce 0 selection in [1..50] for q16 |
||||||
|
N/A |
||||||
|
SEVERITY: BUG |
||||||
|
SPEC FIX: N/A |
||||||
|
SOURCE FIX: rework permute() to be 1-based |
||||||
|
ANSWER SETS: N/A |
||||||
|
WORKAROUND: N/A |
||||||
|
HELP NEEDED: N/A |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: 20000413 |
||||||
|
OPENED BY: lorna@permetrics.com |
||||||
|
CLOSED ON: 20000414 |
||||||
|
CLOSED BY: jms@gradientsystems.com |
||||||
|
CHECKED BY: N/A |
||||||
|
|
||||||
|
Problem #00065: OPEN |
||||||
|
Summary: permute correction caused dataset changes |
||||||
|
initial fix for #64 caused qa failures due to data set changes. New fix |
||||||
|
is limited to query parameter substitution changes and has passed qa |
||||||
|
SEVERITY: BUG |
||||||
|
SPEC FIX: N/A |
||||||
|
SOURCE FIX: N/A |
||||||
|
ANSWER SETS: N/A |
||||||
|
WORKAROUND: N/A |
||||||
|
HELP NEEDED: N/A |
||||||
|
AUDITORS NOTIFIED: N/A |
||||||
|
OPENED AGAINST: 20000511 |
||||||
|
OPENED BY: jms |
||||||
|
CLOSED ON: N/A |
||||||
|
CLOSED BY: N/A |
||||||
|
CHECKED BY: N/A |
||||||
|
|
||||||
|
*********** |
||||||
|
this file has been superceded by the bug tracking system available to |
||||||
|
TPC members at: |
||||||
|
www2.gradient system.com |
||||||
|
*********** |
@ -0,0 +1,535 @@ |
|||||||
|
# @(#)HISTORY 2.1.8.3 |
||||||
|
Changes as of 10/11/99 |
||||||
|
-- versions: TPCH 1.2.0a, TPCR 1.1.0a |
||||||
|
-- Correction to segmented updates that was causing extra file to be |
||||||
|
generated |
||||||
|
-- Porting changes for DigUnix |
||||||
|
Changes as of 08/28/99 |
||||||
|
-- versions: TPCH 1.2.0, TPCR 1.1.0 |
||||||
|
-- reduced parameter substitution range for Q18 |
||||||
|
-- added new option to specify location of dists file (-b) |
||||||
|
-- added DBGEN option to suppress all output (-q) |
||||||
|
Changes as of 08/16/99 |
||||||
|
-- versions: TPCH 1.1.0a, TPCR 1.0.1e |
||||||
|
-- prevent "reuse" of original data in update files |
||||||
|
-- correction to lint target in makefile.suite |
||||||
|
-- removal of vestigal l_partkey predicate from 21.sql |
||||||
|
-- reorder lineitem/order join in q5 |
||||||
|
-- removal of table aliases from 2.sql |
||||||
|
-- randomize seeding of qgen RNG to close bug 52 |
||||||
|
-- correct possible round off error in segmented update files |
||||||
|
-- corrected soft copy answer set for Q22 |
||||||
|
-- corrected percision of answer set for Q19 |
||||||
|
Changes as of 07/08/99 |
||||||
|
-- versions: TPCH 1.1.0, TPCR 1.0.1 |
||||||
|
-- WORKLOAD must be set to either TPCH or TPCR in the makefile |
||||||
|
-- unneeded reference to part table removed from q21 template |
||||||
|
Changes as of 06/04/99 |
||||||
|
-- version 1.0.1d |
||||||
|
-- Restarted version numbering to match specification revisions for |
||||||
|
TPC-H and TPC-R |
||||||
|
-- Corrected answer set for for Q13 |
||||||
|
-- Corrected parameter substitutions for Q16, Q17, Q19, Q20, Q21, Q22 |
||||||
|
-- Corrected RNG initialization in qgen.c |
||||||
|
-- added adhoc.c adhoc.h to code base to support randomized data sets; |
||||||
|
currently disabled |
||||||
|
-- replaced calls to UnifInt() row_stop with call to NthElement() |
||||||
|
-- Corrected a problem that caused small negative money values to print as |
||||||
|
a positive value |
||||||
|
-- Simplication of PR_xxx macros |
||||||
|
-- QGEN building correct parameter logs again |
||||||
|
|
||||||
|
****************** |
||||||
|
* NOTE NOTE NOTE * |
||||||
|
****************** |
||||||
|
Below this line the file refers to TPC-D which was retired in favor of |
||||||
|
TPC-H and TPC-R. Since the new speicifications are numbered from 1.0.0 |
||||||
|
the program version was reset. |
||||||
|
****************** |
||||||
|
* NOTE NOTE NOTE * |
||||||
|
****************** |
||||||
|
|
||||||
|
Changes as of 01/05/99 |
||||||
|
-- version 2.0.1 |
||||||
|
-- added 1999 to the copyright notice |
||||||
|
-- corrected C++ compilation problem |
||||||
|
-- sub-select phrasing corrected in Q4, Q21, Q22 |
||||||
|
-- added support for segmenting update files (contributed by Larry Kemp, HP) |
||||||
|
Changes as of 12/08/98 |
||||||
|
-- version 2.0.0 |
||||||
|
-- removed permute.h from clean target in makefile |
||||||
|
Changes as of 11/17/98 |
||||||
|
-- version 2.0.0 Alpha 8 |
||||||
|
-- corrected o_custkey overrun bug |
||||||
|
-- removed upper bound on -C command option |
||||||
|
-- added static permute.h to distribution to match the specification |
||||||
|
Changes as of 10/23/98 |
||||||
|
-- version 2.0.0 Alpha 7 |
||||||
|
-- removed references to DSS_SEED and SEED_TAG |
||||||
|
-- minor query template cleanup |
||||||
|
-- V2 answer sets added |
||||||
|
-- correction to hd_sparse for SF > 300 |
||||||
|
-- added static declaration to row types in gen_tbl to fix update problem |
||||||
|
-- permuted params to Q22 |
||||||
|
Changes as of 5/19/98 |
||||||
|
-- version 2.0.0 Alpha6b |
||||||
|
-- removed trailing apostrophe from dists.dss nouns for Tandem loader |
||||||
|
-- corrected mk_sparse() problem with alpha6 |
||||||
|
-- added 64b support for NCR/Metaware |
||||||
|
-- corrected revision problem with 2.0.0.6 |
||||||
|
Changes as of 5/7/98 |
||||||
|
-- version 2.0.0 Alpha6 |
||||||
|
-- corrected generation of parent/child tables in parallel |
||||||
|
-- renamed ORDER table to ORDERS table |
||||||
|
-- revision of DBGEN synced with revision of 2.0 specification |
||||||
|
-- portability changes to process termination provided by John Matzka |
||||||
|
-- portability changes for Watcom C provided by Andrew Eisenberg |
||||||
|
-- indentation of specifications/templates now matches |
||||||
|
-- queries now include a consistant header format |
||||||
|
Changes as of 4/28/98 |
||||||
|
-- version 2.0.0 Alpha5 |
||||||
|
-- NO RELEASE OF ALPHA 5 ; skipped to sync spec/DBGEN revision levels |
||||||
|
Changes as of 4/6/98 |
||||||
|
-- version 2.0.0 Alpha4 |
||||||
|
-- corrected parallel table generation |
||||||
|
-- minor corrections to query templates |
||||||
|
-- portability changes for HP |
||||||
|
Changes as of 3/24/98 |
||||||
|
-- version 2.0.0 Alpha3 |
||||||
|
-- include substitution parameters for Q22 |
||||||
|
-- correct substitution parameters for Q16 under AIX |
||||||
|
-- include permute.h until unix/NT makefile fix |
||||||
|
-- correct orderkey generation |
||||||
|
Changes as of 3/20/98 |
||||||
|
-- version 2.0.0 Alpha2 |
||||||
|
-- correct runtime malloc error from bad INIT_HUGE macro |
||||||
|
-- improve pseudo text distribution in comments |
||||||
|
-- fix problem with parallelism of data gen |
||||||
|
-- re-enable generation of parent/child tables |
||||||
|
-- remove recombinaton code for parallel flat files |
||||||
|
Changes as of 3/11/98 |
||||||
|
-- version 2.0.0 Alpha1 |
||||||
|
-- removed the TIME table |
||||||
|
-- removed the need for seed files |
||||||
|
-- made 1GB the validation database size |
||||||
|
-- add pseudo text support in comments |
||||||
|
-- correct character selection in a_rnd() |
||||||
|
-- correct population of P_NAME |
||||||
|
-- removed unclaimed variants |
||||||
|
-- added new queries 18-22, replaced Q13 |
||||||
|
Changes as of 2/6/98 |
||||||
|
-- version 1.3.1 |
||||||
|
-- Revised 64 bit support to clean up bcd2_bin()and mk_sparse() |
||||||
|
-- Add 64b support for NT |
||||||
|
Changes as of 12/31/97 |
||||||
|
-- version 1.3.0 |
||||||
|
-- support for seed generation > 1TB (data gen still to be tested) |
||||||
|
-- rework of 64b support |
||||||
|
-- added bcd support for subtraction, comparison, modulo |
||||||
|
-- added 1998 to the copyright notice |
||||||
|
-- clarified comments in dists.dss |
||||||
|
-- corrected substitution problem in Q11 |
||||||
|
-- standardized fopen() error messages with OPEN_CHECK() |
||||||
|
-- introduced PATH_SEP in config.h to allow changes in path separators |
||||||
|
Changes as of 12/15/96 |
||||||
|
-- version 1.2.0 |
||||||
|
-- corrected typos in queries 8a, 8c, 8d, 11a, 12F and 14F, 17a |
||||||
|
-- added variant 15c |
||||||
|
-- defined MAX_SCALE and MIN_SCALE; issued error messages for SF > 1000 |
||||||
|
since implementation is incomplete |
||||||
|
-- seed file generation can now be resumed with dbgen -R <n> ... |
||||||
|
-- corrected slight compile bug under Solaris 2.5.1 |
||||||
|
-- documented compile problems under SunOS |
||||||
|
Changes as of 8/1/96 |
||||||
|
-- version 1.1.0D |
||||||
|
-- included new variants for queries 8 and 15 |
||||||
|
-- re-introduced answer sets in the source tree |
||||||
|
Changes as of 5/1/96 |
||||||
|
-- version 1.1.0C |
||||||
|
-- unified version numbering of DBGEN and QGEN |
||||||
|
-- updated BUGS list |
||||||
|
-- removed FAQ from soft appendix; web site will keep the current |
||||||
|
version of the FAQ |
||||||
|
-- added 1996 to the copyright notice |
||||||
|
-- corrected bug in PR_DATE macro; NO CHANGE TO DATA SET |
||||||
|
-- properly initialize param values for cleaner logging |
||||||
|
-- adjusted output format of Q11 partam to allow scaling to 1TB |
||||||
|
-- corrected typos in variant 14c |
||||||
|
-- corrected data type for YEAR in variant 8c |
||||||
|
-- corrected typos in variant 10a |
||||||
|
-- added variant 8d |
||||||
|
Changes as of 1/23/96 |
||||||
|
-- qgen version 1.1.0B |
||||||
|
-- include support for ANSI semantics |
||||||
|
-- improved patch for seed sensetivity |
||||||
|
Changes as of 1/23/96 |
||||||
|
-- updated BUGS list |
||||||
|
-- dbgen version 1.1.0A |
||||||
|
-- patch to limit BCD2 fields to 12 characters for columnar output |
||||||
|
-- qgen version 1.1.0A |
||||||
|
-- patch to fix the "unknown flag" problem |
||||||
|
-- patch to fix the seed sensetivity problem |
||||||
|
Changes as of 12/19/95 |
||||||
|
-- updated BUGS list |
||||||
|
-- dbgen version 1.1.0 |
||||||
|
-- upped default value of MAX_CHILDREN to 1000 |
||||||
|
-- corrected naming of detail tables in incremental load |
||||||
|
-- corrected range delete output |
||||||
|
-- forced delete files to truncate existing files |
||||||
|
-- removed fixed size tables from seed generation |
||||||
|
-- corrected overflow problem with large scale seed generation |
||||||
|
-- allow date generation as MM-DD-YY based on config.h #define |
||||||
|
-- correct truncation problem with columnar output in PR_VSTR() |
||||||
|
-- added support for Windows NT |
||||||
|
-- added PLATFORM macro to makefile, removed platform defines from |
||||||
|
config.h |
||||||
|
-- removed MAX_CHILDREN define from config.h (set to 1000 in dss.h) |
||||||
|
-- qgen version 1.1.0 |
||||||
|
-- correct SET_OUTPUT macro to TDAT |
||||||
|
-- use %ld in output for q17; portability |
||||||
|
-- add support for SQLSERVER database dialect |
||||||
|
-- add support for SYBASE database dialect |
||||||
|
-- adjust parameter ranges for Q1, Q3, Q6 |
||||||
|
-- add -T/-t option to usage summary |
||||||
|
-- added support for Windows NT |
||||||
|
Changes as of 09/01/95 |
||||||
|
-- qgen version 1.0.1 |
||||||
|
-- formalized version numbering |
||||||
|
-- -p now generates correct query permutations |
||||||
|
-- added separate verion number for qgen |
||||||
|
-- corrected Q3 substitution problem |
||||||
|
-- updated permissible range for Q10 |
||||||
|
-- corrected rowcount_dflt and the MAX row indicator (-1) |
||||||
|
-- expanded param logging to include all possible parameters |
||||||
|
-- allowed qgen's -d option to be used at all scale factors |
||||||
|
-- made parameter substitution permutation-independent |
||||||
|
-- added qgen suppport for END_TRAN (-E) and DFLT_NUM (-N) |
||||||
|
-- correct handling of :n directive |
||||||
|
-- added more complete explanation of QGEN to README |
||||||
|
-- rename of random to rndm, for portability |
||||||
|
-- dbgen version 1.0.1 |
||||||
|
-- formalized version numbering |
||||||
|
-- inclusion of SF=1 seed file |
||||||
|
-- correct typo in usage() update example |
||||||
|
-- patch to driver.c to allow correct updates |
||||||
|
-- documentation change to README to clarify seed/stage/update |
||||||
|
intereaction |
||||||
|
-- corrected minor glitch in "open failed" error msg in print.c |
||||||
|
-- added missing line continuation to makefile.suite |
||||||
|
-- seed files are now based on scale factor and number of generators |
||||||
|
-- seed files now hold seeds for one "step" of a given build |
||||||
|
-- clean up of parallel load routines |
||||||
|
-- inclusion of faster seed generation routines from Susanne Englert |
||||||
|
-- removed the -E(xisting) option |
||||||
|
-- assure proper scaling of O_CUSTKEY |
||||||
|
-- corrected default update percentage |
||||||
|
-- proper handling of child tables with '-O f' |
||||||
|
-- removed seed files from the distribution |
||||||
|
-- modified rpb_routine() to limit contribution of partkey in |
||||||
|
retailprice |
||||||
|
-- added '-S(tep)' option to allow multi-stage loads |
||||||
|
-- roll in of 32 bit speed_seed routines from Dick Shelton |
||||||
|
-- miscelaneous typo corrections in the documentation |
||||||
|
-- cleanup of usage output |
||||||
|
Changes as of 05/08/95 |
||||||
|
-- version 1.0 |
||||||
|
-- add Teradata defines to tpcd.h for QGEN |
||||||
|
-- add :c to query templates for database CONNECT syntax |
||||||
|
-- add examples of DBGEN and QGEN usage to README |
||||||
|
-- add -T option to qgen to allow time able usage |
||||||
|
-- query template names only requre .sql suffix, rest is arbitrary |
||||||
|
Changes as of 03/13/95 |
||||||
|
-- version 9.1 |
||||||
|
-- surround DBNAME with ifndef in config.h |
||||||
|
-- remove -DDBNAME from makefile.suite |
||||||
|
-- sync varchar handling with 9.1 draft |
||||||
|
Changes as of 02/21/95 |
||||||
|
-- version 9.0a |
||||||
|
-- fixed bug in qgen that incorrectly included rnd.h |
||||||
|
-- included revised DDL with changes for char/varchar and l_quantity |
||||||
|
-- updated DBGEN help message to include new single table options for |
||||||
|
order/lineitem and part/partsupp |
||||||
|
-- included handling for multi-set seed files TPCDSEED.xxx |
||||||
|
-- generated seeds up through 400GB; headed to 1TB! |
||||||
|
-- ANSI lint cleanup; more needed |
||||||
|
-- UF2 now defaults to key lists; use "-O r" to generate key ranges |
||||||
|
also note, this routine this routine does NOT use the BCD2_* |
||||||
|
routines. As a result, it WILL fail if the keys being deleted |
||||||
|
exceed 32 bits. Since this would require ~660 update iterations, |
||||||
|
this seems an acceptable oversight |
||||||
|
Changes as of 01/19/95 |
||||||
|
-- version 9.0 |
||||||
|
-- allowed command line seeding of RNG for QGEN |
||||||
|
-- order and number of params in QGEN now matches |
||||||
|
presentation in spec |
||||||
|
-- fixed bug in time table format of O_ORDERDATE |
||||||
|
-- changed l_QUANTITY to FLOAT in dss.ddl |
||||||
|
-- reworked QGEN options to be more useful |
||||||
|
-- allowed creation of sparse keys beyond 32 bits (for 1TB) |
||||||
|
-- removed unused '#ifdef' and associated code |
||||||
|
-- allowed independent generation of master/detail tables |
||||||
|
(eg, order/lineitem) |
||||||
|
Changes as of 12/06/94 |
||||||
|
-- version 8.6 |
||||||
|
-- fixed renaming of flat files for child tables |
||||||
|
-- various documentation fixes |
||||||
|
-- added naming convention section to Porting.Notes |
||||||
|
-- added -DIBM flag to config.h |
||||||
|
-- synced up QGEN with draft 8.1 |
||||||
|
Changes as of 10/25/94 |
||||||
|
-- version 8.5a |
||||||
|
-- corrected bug in columnar output of pr_supp |
||||||
|
-- added pr_drange to generate a list of order keys to be |
||||||
|
deleted instead of generating SQL |
||||||
|
-- added '-O d' to generate range delete as SQL |
||||||
|
-- updated default values for QGEN to sync with spec 8.1 |
||||||
|
-- corrected MK_SPARSE to reflect groups of 8 |
||||||
|
-- corrected a bug in o_orderstatus |
||||||
|
-- regenerated seed files for SF in [1,10] |
||||||
|
-- ANSI cleanup (primarily function declarations) |
||||||
|
Changes as of 10/11/94 |
||||||
|
-- version 8.5 |
||||||
|
-- remove deletes/inserts to other than order/lineitem |
||||||
|
-- increased cardinality for part.type part.container |
||||||
|
-- '-r' argument is now integer; percentage in basis points |
||||||
|
-- initial roll-in of new update scheme |
||||||
|
-- added BBB comments to supplier table |
||||||
|
Changes as of 9/27/94 |
||||||
|
-- version 8.4 |
||||||
|
-- all money calculations now use integer math. This should |
||||||
|
bring everyone's data sets into exact aggreement. |
||||||
|
Changes as of 9/21/94 |
||||||
|
-- version 8.3b |
||||||
|
-- fixed handling of MAX_STREAM |
||||||
|
-- added floor function to RPRICE bridge |
||||||
|
-- misc lint cleanup (type fixes, new prototypes, etc.) |
||||||
|
-- MONEY format becomes lf for DOS |
||||||
|
-- further cleanup of PR_VSTR and its length argument |
||||||
|
-- change to parameter generation for Q6 to allow for float |
||||||
|
discount |
||||||
|
Changes as of 9/15/94 |
||||||
|
-- version 8.3a |
||||||
|
-- isolated MONEY format for Unisys (Lf) using DOS |
||||||
|
-- make sure all arguments to MAKE_MONEY were double's |
||||||
|
-- rolled in NEW_PTEXT to allow Berni to experiment |
||||||
|
Changes as of 9/12/94 |
||||||
|
-- version 8.3 |
||||||
|
-- added -T n and -T r to usage to match getopt() and README |
||||||
|
-- changed PR_MONEY to remove leading blanks |
||||||
|
-- included revised DDL from Berni |
||||||
|
-- included some MVS portability fixes in re malloc.h |
||||||
|
-- cleaned up error messages in qgen and made #define ofp usage |
||||||
|
universal |
||||||
|
-- additional DOS portability changes |
||||||
|
-- added {c,a}len to provide specific length for columnar |
||||||
|
output of varchar |
||||||
|
-- added PR_VSTR to handle varchar printing under MVS |
||||||
|
-- fixed bit masking in a_rnd and cleaned up prototype match |
||||||
|
with V_STR |
||||||
|
-- PR_MONEY now used %Lf |
||||||
|
-- added revised pseudo text under NEW_PTEXT ifdef for |
||||||
|
experiments |
||||||
|
Changes as of 9/09/94 |
||||||
|
-- version 8.2 |
||||||
|
-- l_discount and l_tax are now fractional (per teleconference) |
||||||
|
-- money calculations moved to scaled integer math to clean up |
||||||
|
answer sets |
||||||
|
-- changed PR_FLT() to PR_MONEY to clarify usage |
||||||
|
-- portability changes for SYBASE: dbname --> db_name |
||||||
|
STATUS --> DBGEN_STATUS |
||||||
|
-- added nations2 to dists.dss to handle qgen needs for now |
||||||
|
-- reintroduced #ifndef DOS |
||||||
|
-- reintroduced U2200 define to control kill_load() |
||||||
|
-- broke out nation and region separately in -T option |
||||||
|
-- updated dss.ddl based on mail from Berni |
||||||
|
Changes as of 8/31/94 |
||||||
|
-- version 8.1 |
||||||
|
-- scaling for clerks needed to be 1000 (was 100) |
||||||
|
-- added qgen parameter for scale |
||||||
|
-- changed qgen parameter from s)tream to p)ermutation |
||||||
|
-- synced qgen paramter values with 8.0 spec |
||||||
|
-- corrected duplications in dists.dss |
||||||
|
Changes as of 8/24/94 |
||||||
|
-- version 8.0 |
||||||
|
-- added sparse keys to lineitem/order |
||||||
|
-- added varchar generation for comments/addresses |
||||||
|
-- added variable lineitems/orders |
||||||
|
-- removed ifdef for normalized code_tables |
||||||
|
-- included code for parameter generation and template->EQT |
||||||
|
routines |
||||||
|
-- updated README and Porting.Notes to reflect QGEN |
||||||
|
-- included DDL and RI examples from Berni |
||||||
|
Changes as of 6/15/94 |
||||||
|
-- version 7.0b (numbers now match spec revsion) |
||||||
|
-- rework of code tables to properly map nation/region; when |
||||||
|
compiled with -DCODE_TABLES distributions are taken from |
||||||
|
code.dss and two additional fields are generated for |
||||||
|
customers and suppliers, [cs]_ncode and [cs]_rcode, |
||||||
|
immediately following [cs]_region |
||||||
|
-- replaced ifdef's around DEAD_DATA with opposites. DEAD_DATA |
||||||
|
is now the default |
||||||
|
-- worked through code to see that it conformed to 7.0 |
||||||
|
specification |
||||||
|
-- adjusted scale factors/rowcounts for 1 GB == sf1 |
||||||
|
-- brought help message in line with current code |
||||||
|
-- fixed order per customer at 10 |
||||||
|
-- make suppkey scalable in lineitem/partsupp |
||||||
|
Changes as of 4/25/94 |
||||||
|
-- version 1.5 |
||||||
|
-- added the customers with no orders; Compile with -DDEAD_DATA |
||||||
|
to activate the change. |
||||||
|
-- added the code table for nation and region; |
||||||
|
Compile with -DCODE_TABLES to activate the change. |
||||||
|
Changes as of 3/17/94 |
||||||
|
-- version 1.41 |
||||||
|
-- completed implementation of JULIAN_DAY after talks with Berni |
||||||
|
-- misc cleanup in usage/README files |
||||||
|
-- removed all tabs and capped line length at 75 |
||||||
|
-- added -n option to allowing naming of inline-loaded database |
||||||
|
Changes as of 3/16/94 |
||||||
|
-- version 1.4 |
||||||
|
-- prottyped julian day/month for query re-write work. Compile |
||||||
|
with -DJULIAN_DAY to enable |
||||||
|
-- removed gen_times() from driver.c |
||||||
|
-- added VMS ifdef to config.h to clean up fork/signal issues |
||||||
|
-- added ICL ifdef to config.h to clean up getopt() issues |
||||||
|
-- changed header file references to config.h from machine.h |
||||||
|
Changes as of 3/2/94 |
||||||
|
-- version 1.31 |
||||||
|
-- corrected format of C_NAME to match S_NAME and O_CLERK |
||||||
|
-- re-allowed fractional scale factors < 1 (updates not |
||||||
|
contiguous) |
||||||
|
-- added DSS_CONFIG environemnt variable |
||||||
|
-- reworked read_dist() to look for DSS_DIST in DSS_CONFIG |
||||||
|
-- updated the README file |
||||||
|
Changes as of 2/16/94 |
||||||
|
-- version 1.3 |
||||||
|
-- added command line options for parallel load and data set |
||||||
|
expansion |
||||||
|
-- changed dists.dss delimiter to | for portability |
||||||
|
-- limited scale factors to integer values |
||||||
|
-- added command line option for seed file generation |
||||||
|
-- added all seed files to distribution for SFs 1 - 10 |
||||||
|
-- moved machine.h to config.h and added MAX_CHILDREN define |
||||||
|
-- added 'f' flag to options to allow renaming of output files |
||||||
|
-- added generation of SQL delete statements to match updates |
||||||
|
(Note: updates are still single-threaded; -C is cleared |
||||||
|
by -U) |
||||||
|
-- corrected field sizing in dsstypes.h typedefs to match v 6.4 |
||||||
|
-- update percentage default set to 1% |
||||||
|
Changes as of 12/3/93 |
||||||
|
-- version 1.2 |
||||||
|
-- added command line option to adjust update percentage |
||||||
|
-- fixed update gneration for proper primary key ordering |
||||||
|
-- renamed UUSR/PRC to RUSSIA/CHINA in dists.dss |
||||||
|
-- cleaned up phone number generation to be consistant regard- |
||||||
|
less of order of evaluation |
||||||
|
-- adjusted size of lineitem comment to bring data in line with |
||||||
|
100 MB == SF=1 |
||||||
|
Changes as of 10/15/93 |
||||||
|
-- added command line option for update data creation |
||||||
|
-- miscelaneous porting and cleanup changes |
||||||
|
-- reworked table generation to allow reuse for updates |
||||||
|
-- added comment field to tdefs structure |
||||||
|
-- added load_state and store_state to sync data gen and |
||||||
|
update gen |
||||||
|
Changes as of 7/26/93 |
||||||
|
-- combined loader and header stubs in load_stubs.c |
||||||
|
-- separated Revision History (this file) from README |
||||||
|
-- simplified makefile |
||||||
|
-- removed redundancies from colors distribution |
||||||
|
-- added getopt() for portability |
||||||
|
-- created Porting.Notes |
||||||
|
-- adjusted scaling rules |
||||||
|
-- added help option to the command line |
||||||
|
Changes as of 2/26/93 |
||||||
|
-- combined all typedefs in one header: dsstypes.h |
||||||
|
-- combined flat file generation in print.ec |
||||||
|
-- combined typedef population in build.ec |
||||||
|
-- added -P to control rowcnt scaling (P for percentage) |
||||||
|
-- added -D option for Direct data generation and added |
||||||
|
appropriate hooks in tdefs[] structure |
||||||
|
-- added -F option for flat file generation |
||||||
|
-- reused -T option (use -P 0.1 to build test size database) |
||||||
|
now accepts suboptions c,o,p,s for single table builds. |
||||||
|
-- dropped -M option (scaling is now by rowcount) |
||||||
|
-- added -O option for optional controls. Currently defined: |
||||||
|
-O t -- generate optional time table a join fields in |
||||||
|
order/lineitem |
||||||
|
-O h -- generate headers for flat file output |
||||||
|
-O m -- generate fixed column-length output |
||||||
|
-- removed dynamic memory allocation, redundant calls to |
||||||
|
UnifInt, etc to improve performance |
||||||
|
Changes as of 1/12/92 |
||||||
|
-- julian() changed to handle orders->orderdate correctly |
||||||
|
-- rflag distributions corrected in dists.dss |
||||||
|
-- sea, gold removed from color distribution to clean up substring |
||||||
|
problems |
||||||
|
-- part->number and supplier-> adjusted for 1-based indexing |
||||||
|
-- time->day changed to be day of month, not day of year |
||||||
|
-- t.week changed to be week in year, not day of week |
||||||
|
Changes as of 11/18/92 |
||||||
|
-- checked line length and tab for transmission |
||||||
|
-- another chapter in the portability wars. added #include |
||||||
|
"machine.h" to dss.h (which is included by everyone else). Any |
||||||
|
machine particular porting changes should go here. |
||||||
|
-- fixed fixed-field formats to prevent double printing |
||||||
|
-- expanded PR_FLT formats to %010.2 |
||||||
|
Changes as of 10/21/92 |
||||||
|
-- added fixed format and column header handling; users of headers |
||||||
|
will have to define the header functions to be called in |
||||||
|
int (*tdefs.header)() |
||||||
|
Changes as of 10/09/92: |
||||||
|
-- added ansi prototypes and recompiled with gcc -ansi. users may |
||||||
|
need to change the CC definition in the makefile and the contents |
||||||
|
of CFLAGS to reflect their particular ansi compiler. |
||||||
|
-- replaced all int references with long |
||||||
|
-- replaced all float references with double |
||||||
|
-- found and fixed odate/julian problem TS mentioned in 10/09 phone |
||||||
|
call |
||||||
|
|
||||||
|
Changes as of 9/09/92: |
||||||
|
-- Park/Miller random number generator included |
||||||
|
-- clerk scaling changed to 100 * scale |
||||||
|
-- parts.name always built from 5 selections from colors set |
||||||
|
-- test scaling changed to ~60MB (TEST_SCALING == 10) |
||||||
|
-- logarithmic scaling removed |
||||||
|
-- mfgcost removed and retail/supplier cost bounds adjusted |
||||||
|
-- agg_str memory leak fixed |
||||||
|
-- independent RNG streams on a per column basis |
||||||
|
|
||||||
|
This is the revised data generator for DSS. |
||||||
|
|
||||||
|
The rewrite tried to accomplish three things: (1) identify and isolate |
||||||
|
all the implicit assumptions about limits, bounds, ranges, distribu- |
||||||
|
tions, etc.; (2) standardize the way any given table was generated/ |
||||||
|
printed to ease understanding and maintenance; (3) bring the generator |
||||||
|
in line with the current work of the committee and the excellent spec |
||||||
|
the Indira put together; (4) provide an easy way to adjust distribu- |
||||||
|
tions, string contents and to facilitate experimentation to get a |
||||||
|
better idea of the impact of data population changes. |
||||||
|
|
||||||
|
The files included are: |
||||||
|
|
||||||
|
driver.c ------- main and the calling routines for the generators |
||||||
|
dist.c ------- should really be named dss_util.c; misc routines |
||||||
|
customer.c ------- generation and print routines for customer table |
||||||
|
orders.c ------- "" "" order table |
||||||
|
parts.c ------- "" "" parts/partsupp |
||||||
|
suppliers.c ------- "" "" suppliers table |
||||||
|
time.c ------- "" "" time table |
||||||
|
customer.h ------- associate header files; contain structure |
||||||
|
definitions |
||||||
|
dss.h dss.h holds the large number of assumptions and |
||||||
|
orders.h values that have been used as IFDEFs. |
||||||
|
parts.h |
||||||
|
suppliers.h |
||||||
|
time.h |
||||||
|
dists.dss ------- string selections and weights; used to build |
||||||
|
distributions |
||||||
|
|
||||||
|
Running make will create an executable (using the compiler flags in |
||||||
|
CFLAGS, the ld flags in LDFLAGS and the libraries in LIBS [-O, -s, |
||||||
|
and -lm by default]) which will create flat files suitable for dbload. |
||||||
|
t |
||||||
|
|
@ -0,0 +1,220 @@ |
|||||||
|
# @(#)PORTING.NOTES 2.1.8.1 |
||||||
|
|
||||||
|
Table of Contents |
||||||
|
================== |
||||||
|
1. General Program Structure |
||||||
|
2. Naming Conventions and Variable Usage |
||||||
|
3. Porting Procedures |
||||||
|
4. Compilation Options |
||||||
|
5. Customizing QGEN |
||||||
|
6. Further Enhancements |
||||||
|
7. Known Porting Problems |
||||||
|
8. Reporting Problems |
||||||
|
|
||||||
|
1. General Program Structure |
||||||
|
|
||||||
|
The code provided with TPC-H and TPC-R benchmarks includes a database |
||||||
|
population generator (DBGEN) and a query template translator(QGEN). It |
||||||
|
is written in ANSI-C, and is meant to be easily portable to a broad variety |
||||||
|
of platforms. The program is composed of five source files and some |
||||||
|
support and header files. The main modules are: |
||||||
|
|
||||||
|
build.c: each table in the database schema is represented by a |
||||||
|
routine mk_XXXX, which populates a structure |
||||||
|
representing one row in table XXXX. |
||||||
|
See Also: dss_types.h, bm_utils.c, rnd.* |
||||||
|
print.c: each table in the database schema is represented by a |
||||||
|
routine pr_XXXX, which prints the contents of a |
||||||
|
structure representing one row in table XXX. |
||||||
|
See Also: dss_types.h, dss.h |
||||||
|
driver.c: this module contains the main control functions for |
||||||
|
DBGEN, including command line parsing, distribution |
||||||
|
management, database scaling and the calls to mk_XXXX |
||||||
|
and pr_XXXX for each table generated. |
||||||
|
qgen.c: this module contains the main control functions for |
||||||
|
QGEN, including query template parsing. |
||||||
|
varsub.c: each query template includes one or more parameter |
||||||
|
substitution points; this routine handles the |
||||||
|
parameter generation for the TPC-H/TPC-R benchmark. |
||||||
|
|
||||||
|
The support utilities provide a generalized set of functions for data |
||||||
|
generation and include: |
||||||
|
|
||||||
|
bm_utils.c: data type generators, string management and |
||||||
|
portability routines. |
||||||
|
|
||||||
|
rnd.*: a general purpose random number generator used |
||||||
|
throughout the code. |
||||||
|
|
||||||
|
dss.h: |
||||||
|
shared.h: a set of '#defines' for limits, formats and fixed |
||||||
|
values |
||||||
|
dsstypes.h: structure definitions for each table definition |
||||||
|
|
||||||
|
2. Naming Conventions and Variable Usage |
||||||
|
|
||||||
|
Since DBGEN will be maintained by a large number of people, it is |
||||||
|
particularly important to observe the coding, variable naming and usage |
||||||
|
conventions detailed here. |
||||||
|
|
||||||
|
#define |
||||||
|
-------- |
||||||
|
All #define directives are found in header files (*.h). In general, |
||||||
|
the header files segregate variables and macros as follows: |
||||||
|
rnd.h -- anything exclusively referenced by rnd.c |
||||||
|
dss.h -- general defines for the benchmark, including *all* |
||||||
|
extern declarations (see below). |
||||||
|
shared.h -- defines related to the tuple definitions in |
||||||
|
dsstypes.h. Isolated to ease automatic processing needed by many |
||||||
|
direct load routines (see below). |
||||||
|
dsstypes.h -- structure definitons and typedef directives to |
||||||
|
detail the contents of each table's tuples. |
||||||
|
config.h -- any porting and configuration related defines should |
||||||
|
go here, to localize the changes necessary to move the suite |
||||||
|
from one machine to another. |
||||||
|
tpcd.h -- defines related to QGEN, rather than DBGEN |
||||||
|
|
||||||
|
extern |
||||||
|
------ |
||||||
|
DBGEN and QGEN make extensive use of extern declarations. This could |
||||||
|
probably stand to be changed at some point, but has made the rapid |
||||||
|
turnaround of prototypes easier. In order to be sure that each |
||||||
|
declaration was matched by exactly one definition per executatble, |
||||||
|
they are all declared as EXTERN, a macro dependent on DECLARER. In |
||||||
|
any module that defines DECLARER, all variables declared EXTERN will |
||||||
|
be defined as globals. DECLARER should be declared only in modules |
||||||
|
containing a main() routine. |
||||||
|
|
||||||
|
Naming Conventions |
||||||
|
------------------ |
||||||
|
defines |
||||||
|
o All defines use upper case |
||||||
|
o All defines use a table prefix, if appropriate: |
||||||
|
O_* relates to orders table |
||||||
|
L_* realtes to lineitem table |
||||||
|
P_* realtes to part table |
||||||
|
PS_* relates to partsupplier table |
||||||
|
C_* realtes to customer table |
||||||
|
S_* relates to supplier table |
||||||
|
N_* relates to nation table |
||||||
|
R_* realtes to region table |
||||||
|
T_* relates to time table |
||||||
|
o All defines have a usage prefix, if appropriate: |
||||||
|
*_TAG environment variable name |
||||||
|
*_DFLT environment variable default |
||||||
|
*_MAX upper bound |
||||||
|
*_MIN lower bound |
||||||
|
*_LEN average length |
||||||
|
*_SD random number seed (see rnd.*) |
||||||
|
*_FMT printf format string |
||||||
|
*_SCL divisor (for scaled arithmetic) |
||||||
|
*_SIZE tuple length |
||||||
|
|
||||||
|
3. Porting Procedures |
||||||
|
|
||||||
|
The code provided should be easily portable to any machine providing an |
||||||
|
ANSI C compiler. |
||||||
|
-- Copy makefile.suite to makefile |
||||||
|
-- Edit the makefile to match the name of your C compiler |
||||||
|
and to include appropriate compilation options in the CFLAGS |
||||||
|
definition |
||||||
|
-- make. |
||||||
|
|
||||||
|
Special care should be taken in modifying any of the monetary calcu- |
||||||
|
lations in DBGEN. These have proven to be particularly sensitive to |
||||||
|
portability problems. If you decide to create the routines for inline |
||||||
|
data load (see below), be sure to compare the resulting data to that |
||||||
|
generated by a flat file data generation to be sure that all numeric |
||||||
|
conversions have been correct. |
||||||
|
|
||||||
|
If the compile generates errors, refer to "Compilation Options", below. |
||||||
|
The problem you are encountering may already have been addressed in the |
||||||
|
code. |
||||||
|
|
||||||
|
If the compile is successful, but QGEN is not generating the appropriate |
||||||
|
query syntax for your environment, refer to "Customizing QGEN", below. |
||||||
|
|
||||||
|
For other problems, refer to "Reporting Problems" at the end of this |
||||||
|
document. |
||||||
|
|
||||||
|
4. Compilation Options |
||||||
|
|
||||||
|
config.h and makefile.suite contain a number of compile time options intended |
||||||
|
to make the process of porting the code provided with TPC-H/TPC-R as easy as |
||||||
|
possible on a broad range of platforms. Most ports should consist of reviewing |
||||||
|
the possible settings described in config.h and modifying the makefile |
||||||
|
to employ them appropriately. |
||||||
|
|
||||||
|
5. Customizing QGEN |
||||||
|
|
||||||
|
QGEN relies on a number of vendor-specific conventions to generate |
||||||
|
appropriate query syntax. These are controlled by #defines in tpcd.h, |
||||||
|
and enabled by a #define in config.h. If you find that the syntax |
||||||
|
generated by QGEN is not sufficient for your environment you will need |
||||||
|
to modify these to files. It is strongly recomended that you not change |
||||||
|
the general organization of the files. |
||||||
|
|
||||||
|
Currently defined options are: |
||||||
|
|
||||||
|
VTAG -- marks a variable substitution point [:] |
||||||
|
QDIR_TAG -- environent variable which points to query templates |
||||||
|
[DSS_QUERY] |
||||||
|
GEN_QUERY_PLAN -- syntax to generate a query plan ["Set Explain On;"] |
||||||
|
START_TRAN -- syntax to begin a transaction ["Begin Work;"] |
||||||
|
END_TRAN -- syntax to end a transaction ["Commit Work;"] |
||||||
|
SET_OUTPUT -- syntax to redirect query output ["Output to"] |
||||||
|
SET_ROWCOUNT -- syntax to set the number of rows returned |
||||||
|
["{return %d rows}"] |
||||||
|
SET_DBASE -- syntax to connect to a database |
||||||
|
|
||||||
|
6. Further Enhancements |
||||||
|
|
||||||
|
load_stub.c provides entry points for two likely enhancements. |
||||||
|
|
||||||
|
The ld_XXXX routines make it possible to load the |
||||||
|
database directly from DBGEN without first writing the database |
||||||
|
population out to the filesystem. This may prove particularly useful |
||||||
|
when loading larger database populations. Be particularly careful about |
||||||
|
monetary amounts. To assure portability, all monetary calcualtion are |
||||||
|
done using long integers (which hold money amounts as a number of |
||||||
|
pennies). These will need to be scaled to dollars and cents (by dividing |
||||||
|
by 100), before the values are presented to the DBMS. |
||||||
|
|
||||||
|
The hd_XXXX routines allow header information to be written before the |
||||||
|
creation of the flat files. This should allow system which require |
||||||
|
formatting information in database load files to use DBGEN with only |
||||||
|
a small amount of custom code. |
||||||
|
|
||||||
|
qgen.c defines the translation table for query templates in the |
||||||
|
routine qsub(). |
||||||
|
|
||||||
|
varsub.c defines the parameter substitutions in the routine varsub(). |
||||||
|
|
||||||
|
If you are porting DBGEN to a machine that is not supports a native word |
||||||
|
size larger that 32 bits, you may wish to modify the default values for |
||||||
|
BITS_PER_LONG and MAX_LONG. These values are used in the generation of |
||||||
|
the sparse primary keys in the order and lineitem tables. The code has |
||||||
|
been structured to run on any machine supporting a 32 bit long, but |
||||||
|
may be slightly more efficient on machines that are able to make use of |
||||||
|
a larger native type. |
||||||
|
|
||||||
|
7. Known Porting Problems |
||||||
|
|
||||||
|
The current codeline will not compile under SunOS 4.1. Solaris 2.4 and later |
||||||
|
are supported, and anyone wishing to use DBGEN on a Sun platform is |
||||||
|
encouraged to use one of these OS releases. |
||||||
|
|
||||||
|
|
||||||
|
8. Reporting Problems |
||||||
|
|
||||||
|
The code provided with TPC-H/TPC-R has been written to be easily portable, |
||||||
|
and has been tested on a wide variety of platforms, If you have any |
||||||
|
trouble porting the code to your platform, please help us to correct |
||||||
|
the problem in a later release by sending the following information |
||||||
|
to the TPC D subcommittee: |
||||||
|
|
||||||
|
Computer Make and Model |
||||||
|
Compiler Type and Revision Number |
||||||
|
Brief Description of the problem |
||||||
|
Suggested modification to correct the problem |
||||||
|
|
@ -0,0 +1,436 @@ |
|||||||
|
# @(#)README 2.4.0 |
||||||
|
|
||||||
|
Table of Contents |
||||||
|
=================== |
||||||
|
0. What is this document? |
||||||
|
1. What is DBGEN? |
||||||
|
2. What will DBGEN create? |
||||||
|
3. How is DBGEN built? |
||||||
|
4. Command Line Options for DBGEN |
||||||
|
5. Building Large Data Sets with DBGEN |
||||||
|
6. DBGEN limitations and compliant usage |
||||||
|
7. Sample DBGEN executions |
||||||
|
8. What is QGEN? |
||||||
|
9. What will QGEN create? |
||||||
|
10. How is QGEN built? |
||||||
|
11. Command Line Options for QGEN |
||||||
|
12. Query Template Syntax |
||||||
|
13. Sample QGEN executions and Query Templates |
||||||
|
14. Environment variable |
||||||
|
15. Version Numbering in DBGEN and QGEN |
||||||
|
16. Validated Platforms |
||||||
|
|
||||||
|
0. What is this document? |
||||||
|
|
||||||
|
This is the general README file for DBGEN and QGEN, the data- |
||||||
|
base population and executable query text generation programs |
||||||
|
used in the TPC-H benchmark. It covers the proper use |
||||||
|
of DBGEN and QGEN. For information on porting the utility to your |
||||||
|
particular platform see Porting.Notes. |
||||||
|
|
||||||
|
1. What is DBGEN? |
||||||
|
|
||||||
|
DBGEN is a database population program for use with the TPC-H benchmark. |
||||||
|
It is written in ANSI 'C' for portability, and has |
||||||
|
been successfully ported to over a dozen different systems. While the |
||||||
|
TPC-H specification allow an implementor to use any utility |
||||||
|
to populate the benchmark database, the resultant population must exactly |
||||||
|
match the output of DBGEN. The source code has been provided to make the |
||||||
|
process of building a compliant database population as simple as possible. |
||||||
|
|
||||||
|
2. What will DBGEN create? |
||||||
|
|
||||||
|
Without any command line options, DBGEN will generate 8 separate ascii |
||||||
|
files. Each file will contain pipe-delimited load data for one of the |
||||||
|
tables defined in the TPC-H database schema. The default tables |
||||||
|
will contain the load data required for a scale factor 1 database. By |
||||||
|
default the file will be created in the current directory and be |
||||||
|
named <table>.tbl. As an example, customer.tbl will contain the |
||||||
|
load data for the customer table. |
||||||
|
|
||||||
|
When invoked with the '-U' flag, DBGEN will create the data sets to be |
||||||
|
used in the update functions and the SQL syntax required to delete the |
||||||
|
data sets. The update files will be created in the same directory as |
||||||
|
the load data files and will be named "u_<table>.set". The delete |
||||||
|
syntax will be written to "delete.set". For instance, the data set to |
||||||
|
be used in the third query set to update the lineitem table will be |
||||||
|
named "u_lineitem.tbl.3", and the SQL to remove those rows will be |
||||||
|
found in "delete.3". The size of the update files can be controlled |
||||||
|
with the '-r' flag. |
||||||
|
|
||||||
|
3. How is DBGEN built? |
||||||
|
|
||||||
|
Create an appropriate makefile, using makefile.suite as a basis, |
||||||
|
and type make. Refer to Porting.Notes for more details and for |
||||||
|
suggested compile time options. |
||||||
|
|
||||||
|
4. Command Line Options for DBGEN |
||||||
|
|
||||||
|
DBGEN's output is controlled by a combination of command line options |
||||||
|
and environment variables. Command line options are assumed to be single |
||||||
|
letter flags preceded by a minus sign. They may be followed by an |
||||||
|
optional argument. |
||||||
|
|
||||||
|
option argument default action |
||||||
|
------ -------- ------- ------ |
||||||
|
-h Display a usage summary |
||||||
|
|
||||||
|
-f none Force. Existing data files will be |
||||||
|
overwritten. |
||||||
|
|
||||||
|
-F none yes Flat file output. |
||||||
|
|
||||||
|
-D none Direct database load. ld_XXXX() routines |
||||||
|
must be defined in load_stub.c |
||||||
|
|
||||||
|
-s <scale> 1 Scale of the database population. Scale |
||||||
|
1.0 represents ~1 GB of data |
||||||
|
|
||||||
|
-T <table> Generate the data for a particular table |
||||||
|
ONLY. Arguments: p -- part/partuspp, |
||||||
|
c -- customer, s -- supplier, |
||||||
|
o -- orders/lineitem, n -- nation, r -- region, |
||||||
|
l -- code (same as n and r), |
||||||
|
O -- orders, L -- lineitem, P -- part, |
||||||
|
S -- partsupp |
||||||
|
|
||||||
|
-O d Generate SQL for delete function |
||||||
|
instead of key ranges |
||||||
|
|
||||||
|
-O f Allow over-ride of default output file |
||||||
|
names |
||||||
|
|
||||||
|
-O h Generate headers in flat ascii files. |
||||||
|
hd_XXX routines must be defined in |
||||||
|
load_stub.c |
||||||
|
|
||||||
|
-O m Flat files generate fixed length records |
||||||
|
|
||||||
|
-O r Generate key ranges for the UF2 update |
||||||
|
function |
||||||
|
|
||||||
|
-O v Verify data set without generating it. |
||||||
|
|
||||||
|
-r <percentage> 10 Scale each udpate file to the given |
||||||
|
percentage (expressed in basis points) |
||||||
|
of the data set |
||||||
|
|
||||||
|
-v none Verbose. Progress messages are |
||||||
|
displayed as data is generated. |
||||||
|
|
||||||
|
-n <name> Use database <name> for in-line load |
||||||
|
|
||||||
|
-C <children> Use <children> separate processes to |
||||||
|
generate data |
||||||
|
|
||||||
|
-S <n> Generate the <n>th part of a multi-part load |
||||||
|
or update set |
||||||
|
|
||||||
|
-U <updates> Create a specified number of data sets |
||||||
|
in flat files for the update/delete |
||||||
|
functions |
||||||
|
|
||||||
|
-i <n> Split the inserted rows in an refresh pair |
||||||
|
between <n> files |
||||||
|
|
||||||
|
-d <n> Split the deleted rows in an refresh pair |
||||||
|
between <n> files |
||||||
|
|
||||||
|
5. DBGEN limitations and compliant usage |
||||||
|
|
||||||
|
DBGEN is meant to be a robust population generator for use with the |
||||||
|
TPC-H benchmark. It is hoped that DBGEN will make it easier |
||||||
|
to experiment with and become proficient in the execution of TPC decision |
||||||
|
support benchmarks. As a result, it includes a number of command line |
||||||
|
options which are not, strictly speaking, necessary to generate a compliant |
||||||
|
data set for a TPC-D run. In addition, some command line options will accept |
||||||
|
arguments which result in the generation of NON-COMPLIANT data sets. Options |
||||||
|
which should be used with care include: |
||||||
|
|
||||||
|
-s -- scale factor. TPC-H runs are only compliant when run against SF's |
||||||
|
of 1, 10, 100, 300, 1000, 3000, 10000, 30000, 100000 |
||||||
|
-r -- refresh percentage. TPC-H runs are only compliant when run with |
||||||
|
-r 10, the default. |
||||||
|
|
||||||
|
6. Sample DBGEN executions |
||||||
|
|
||||||
|
DBGEN has been built to allow as much flexibility as possible, but is |
||||||
|
fundementally intended to generate two things: a database population |
||||||
|
against which the queries in TPC-H can be run, and the updates |
||||||
|
that are used during the update functions in TPC-H. Here are |
||||||
|
some sample uses of DBGEN. |
||||||
|
|
||||||
|
1. To generate the database population for the qualification database |
||||||
|
dbgen -s 1 |
||||||
|
2. To generate the lineitem table only, for a scale factor 10 database, |
||||||
|
and over-write any existing flat files: |
||||||
|
dbgen -s 10 -f -T L |
||||||
|
4. To geterate a 100GB data set in 1GB pieces, generate only the part and |
||||||
|
partsupplier tables, and include some progress reports along the way: |
||||||
|
dbgen -s 100 -S 1 -C 100 -T p -v (to generate the first 1GB file) |
||||||
|
dbgen -s 100 -S 2 -C 100 -T p -v (to generate the second 1GB file) |
||||||
|
(and so on, incrementing the argument to -S each time) |
||||||
|
5. To generate the update files needed for a 4 stream run of the throughput |
||||||
|
test at 100 GB, using an existing set of seed files from an 8 process |
||||||
|
load: |
||||||
|
dbgen -s 100 -U 4 -C 8 |
||||||
|
|
||||||
|
|
||||||
|
7. What is QGEN? |
||||||
|
|
||||||
|
QGEN is a query generation program for use with the TPC-H benchmark. |
||||||
|
It is written in ANSI 'C' for portability, and has been successfully |
||||||
|
ported to over a dozen different systems. While the benchmark specifications |
||||||
|
allow an implementor to use any utility to create the benchmark query |
||||||
|
sets, QGEN has been provided to make the process of building |
||||||
|
a benchmark implementation as simple as possible. |
||||||
|
|
||||||
|
8. What will QGEN create? |
||||||
|
|
||||||
|
QGEN is a filter, triggered by :'s. It does line-at-a-time reads of its |
||||||
|
input (more on that later), scanning for :foo, where foo determines the |
||||||
|
substitution that occurs. Including: |
||||||
|
|
||||||
|
:<int> replace with the appropriate value for parameter <int> |
||||||
|
:b replace with START_TRAN (from tpcd.h) |
||||||
|
:c replace with SET_DBASE (from tpcd.h) |
||||||
|
:n<int> replace with SET_ROWCOUNT(<int>) (from tpcd.h) |
||||||
|
:o replace with SET_OUTPUT (from tpcd.h) |
||||||
|
:q replace with query number |
||||||
|
:s replace with stream number |
||||||
|
:x replace with GEN_QUERY_PLAN (from tpcd.h) |
||||||
|
|
||||||
|
Qgen takes an assortment of command line options, controlling which of these |
||||||
|
options should be active during the translation from template to EQT, and a |
||||||
|
list of query "names". It then translates the template found in |
||||||
|
$DSS_QUERY/<name>.sql and puts the result of stdout. |
||||||
|
|
||||||
|
Here is a sample query template: |
||||||
|
|
||||||
|
{ Sccsid: @(#)1.sql 9.1.1.1 1/25/95 10:51:56 } |
||||||
|
:n 0 |
||||||
|
:o |
||||||
|
select |
||||||
|
l_returnflag, |
||||||
|
l_linestatus, |
||||||
|
sum(l_quantity) as sum_qty, |
||||||
|
sum(l_extendedprice) as sum_base_price, |
||||||
|
sum(l_extendedprice * (1 - l_discount)) as sum_disc_price, |
||||||
|
sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) as sum_charge, |
||||||
|
avg(l_quantity) as avg_qty, |
||||||
|
avg(l_extendedprice) as avg_price, |
||||||
|
avg(l_discount) as avg_disc, |
||||||
|
count(*) as count_order |
||||||
|
from lineitem |
||||||
|
where l_shipdate <= date '1998-12-01' - interval :1 day |
||||||
|
group by l_returnflag, l_linestatus |
||||||
|
order by l_returnflag, l_linestatus; |
||||||
|
|
||||||
|
And here is what is generated: |
||||||
|
$ qgen -d 1 |
||||||
|
|
||||||
|
{return 0 rows} |
||||||
|
|
||||||
|
select |
||||||
|
l_returnflag, |
||||||
|
l_linestatus, |
||||||
|
sum(l_quantity) as sum_qty, |
||||||
|
sum(l_extendedprice) as sum_base_price, |
||||||
|
sum(l_extendedprice * (1 - l_discount)) as sum_disc_price, |
||||||
|
sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) as sum_charge, |
||||||
|
avg(l_quantity) as avg_qty, |
||||||
|
avg(l_extendedprice) as avg_price, |
||||||
|
avg(l_discount) as avg_disc, |
||||||
|
count(*) as count_order |
||||||
|
from lineitem |
||||||
|
where l_shipdate <= date('1998-12-01') - interval (90) day to day |
||||||
|
group by l_returnflag, l_linestatus |
||||||
|
order by l_returnflag, l_linestatus; |
||||||
|
|
||||||
|
See "Query Template Syntax" below for more detail on converting your prefered query |
||||||
|
phrasing for use with QGEN. |
||||||
|
|
||||||
|
9. How is QGEN built? |
||||||
|
|
||||||
|
QGEN is built by the same makefile that creates DBGEN. If the makefile |
||||||
|
is successfully creating DBGEN, no further compilation modifications |
||||||
|
should be necessary. You may need to modify some of the options which |
||||||
|
allow QGEN to integrate with your preferred query tool. Refer to |
||||||
|
Porting.Notes for more detail. |
||||||
|
|
||||||
|
10. Command Line Options for QGEN |
||||||
|
|
||||||
|
Like DBGEN, QGEN is controlled by a combination of command line options |
||||||
|
and environment variables (See "Environment Variables", below for more |
||||||
|
detail). Command line options are assumed to be single |
||||||
|
letter flags preceded by a minus sign. They may be followed by an |
||||||
|
optional argument. |
||||||
|
|
||||||
|
option argument default action |
||||||
|
------ -------- ------- ------ |
||||||
|
-c none Retain comments in translation of template to |
||||||
|
EQT |
||||||
|
|
||||||
|
-d none Default. Use the parameter substitutions |
||||||
|
required for query validation |
||||||
|
|
||||||
|
-h Display a usage summary |
||||||
|
|
||||||
|
-i <file> Use contents of <file> to init a query stream |
||||||
|
|
||||||
|
-l <file> Save query parameters to <file> |
||||||
|
|
||||||
|
-n <name> Use database <name> for queries |
||||||
|
|
||||||
|
-N Always use default rowcount, and ignore :n directives |
||||||
|
|
||||||
|
-o <path> Save query n's output in <path>/n.<stream> |
||||||
|
Uses -p option, and uses :o tag |
||||||
|
|
||||||
|
-p <stream> Use the query permutation defined for |
||||||
|
stream <stream>. If this option is |
||||||
|
omited, EQT will be generated for the |
||||||
|
queries named on the command line. |
||||||
|
|
||||||
|
-r <n> Seed the rnadom number generator with <n> |
||||||
|
|
||||||
|
-s <n> Set scale to <n> for parameter |
||||||
|
substitutions. |
||||||
|
|
||||||
|
-t <file> Use contents of <file> to complete a query |
||||||
|
stream |
||||||
|
|
||||||
|
-T none Use time table format for date substitution |
||||||
|
|
||||||
|
-v none Verbose. Progress messages are |
||||||
|
displayed as data is generated. |
||||||
|
|
||||||
|
-x none Generate a query plan as part of query |
||||||
|
execution. |
||||||
|
|
||||||
|
11. Query Template Syntax |
||||||
|
|
||||||
|
QGEN is a simple ASCII text filter, meant to translate query generalized |
||||||
|
query syntax("query template") into the executable query text(EQT) re- |
||||||
|
quired by the benchmarks. It provides a number of shorthands and syntactic |
||||||
|
extensions that allow the automatic generation of query parameters and some |
||||||
|
control over the operation of the benchmark implementation. |
||||||
|
|
||||||
|
QGEN first strips all comments from the query template, recognizing both |
||||||
|
{comment} and --comment styles. Next it traverses the query template |
||||||
|
one line at a time, locating required substitution points, called |
||||||
|
parameter tags. The values substituted for a given tag are summarized |
||||||
|
below. QGEN does not support nested substitutions. That is, if |
||||||
|
the text substituted for tag itself contains a valid tag the second tag |
||||||
|
will not be expanded. |
||||||
|
|
||||||
|
Tag Converted To Based on |
||||||
|
=== ============ ======== |
||||||
|
:c database <dbname>;(1) -n from the command line |
||||||
|
:x set explain on;(1) -x from the command line |
||||||
|
:<number> paremeter <number> |
||||||
|
:s stream number |
||||||
|
:o output to outpath/qnum.stream;(1) |
||||||
|
-o from command line, -s from |
||||||
|
command line |
||||||
|
:b BEGIN WORK;(1) -a from comand line |
||||||
|
:e COMMIT WORK(1) -a from command line |
||||||
|
:q query number |
||||||
|
:n <number> sets rowcount to be returned |
||||||
|
to <number>, unless -N appears on the command line |
||||||
|
|
||||||
|
Notes: |
||||||
|
(1) This is Informix-specific syntax. Refer to Porting.Notes for |
||||||
|
tailoring the generated text to your database environment. |
||||||
|
|
||||||
|
12. Sample QGEN executions and Query Templates |
||||||
|
|
||||||
|
QGEN translates generic query templates into valid SQL. In addition, it |
||||||
|
allows conditional inclusion of the commands necessary to connect to a |
||||||
|
database, produce diagnostic output, etc. Here are some sample of QGEN |
||||||
|
usage, and the way that command line parameters and the query templates |
||||||
|
interact to produce valid SQL. |
||||||
|
|
||||||
|
Template, in $DSS_QUERY/1.sql: |
||||||
|
:c |
||||||
|
:o |
||||||
|
select count(*) from foo; |
||||||
|
:x |
||||||
|
select count(*) from lineitem |
||||||
|
where l_orderdate < ':1'; |
||||||
|
|
||||||
|
1. "qgen 1", would produce: |
||||||
|
select count(*) from foo; |
||||||
|
select count(*) from lineitem |
||||||
|
where l_orderdate < '1997-01-01'; |
||||||
|
Assuming that 1 January 1997 was a valid substitution for parameter 1. |
||||||
|
|
||||||
|
2. "qgen -d -c dss1 1, would produce: |
||||||
|
database dss1; |
||||||
|
select count(*) from foo; |
||||||
|
select count(*) from lineitem |
||||||
|
where l_orderdate < '1995-07-18'; |
||||||
|
Assuming that 18 July 1995 was the default substitution for parameter 1, |
||||||
|
and using Informix syntax. |
||||||
|
|
||||||
|
3. "qgen -d -c dss1 -x -o somepath 1, would produce: |
||||||
|
database dss1; |
||||||
|
output to "somepath/1.0" |
||||||
|
select count(*) from foo; |
||||||
|
set explain on; |
||||||
|
select count(*) from lineitem |
||||||
|
where l_orderdate < '1995-07-18'; |
||||||
|
Assuming that 18 July 1995 was the default substitution for parameter 1, |
||||||
|
and using Informix syntax. |
||||||
|
|
||||||
|
|
||||||
|
13. Environment Variables |
||||||
|
|
||||||
|
Enviroment variables are used to control features of DBGEN and QGEN |
||||||
|
which are unlikely to change from one execution to another. |
||||||
|
|
||||||
|
Variable Default Action |
||||||
|
------- ------- ------ |
||||||
|
DSS_PATH . Directory in which to build flat files |
||||||
|
DSS_CONFIG . Directory in which to find configuration files |
||||||
|
DSS_DIST dists.dss Name of distribution definition file |
||||||
|
DSS_QUERY . Directory in which to find query templates |
||||||
|
|
||||||
|
14. Version Numbering in DBGEN and QGEN |
||||||
|
|
||||||
|
DBGEN and QGEN use a common version numbering algorithm. Each executable |
||||||
|
is stamped with a version number which is displayed in the usage messages |
||||||
|
available with the '-h' option. A version number is of the form: |
||||||
|
|
||||||
|
V.R.P.M |
||||||
|
| | | | |
||||||
|
| | | | |
||||||
|
| | | | |
||||||
|
| | | -- modification: alphabetic, incremented for any trivial changes |
||||||
|
| | | to the source (e.g, porting ifdef's) |
||||||
|
| | ---- patch level: numeric, incremented for any minor bug fix |
||||||
|
| | (e.g, qgen parameter range) |
||||||
|
| ------- release: numeric, incremented for each minor revision of the |
||||||
|
| specification |
||||||
|
|-------- version: numeric, incremented for each major revision of the |
||||||
|
specification |
||||||
|
|
||||||
|
An implementation of TPC-H is valid only if it conforms to the |
||||||
|
following version usage rules: |
||||||
|
|
||||||
|
-- The Version of DBGEN and QGEN must match the integer portion of the |
||||||
|
current specification revision |
||||||
|
|
||||||
|
15. The current revisions are: |
||||||
|
DBGEN: 2.4.0 |
||||||
|
QGEN: 2.4.0 |
||||||
|
|
||||||
|
16. Validated Platforms |
||||||
|
The following platforms have been validated to produce the reference |
||||||
|
data set for TPC-H 2.4.0 |
||||||
|
Processor Operating System (version) Compiler (version) Compiler Flags |
||||||
|
---------------------------------------------------------------------------- |
||||||
|
POWER5 AIX 64-bit (5.3) C for AIX Compiler, v7 -q64 (no -g) |
||||||
|
IA-64 HPUX 64-bit () icc |
||||||
|
Linux 32-bit () gcc |
||||||
|
|
@ -0,0 +1,5 @@ |
|||||||
|
l|l|sum_qty |sum_base_price |sum_disc_price |sum_charge |avg_qty |avg_price |avg_disc |count_order |
||||||
|
A|F|37734107.00|56586554400.73|53758257134.87|55909065222.83|25.52|38273.13|0.05| 1478493 |
||||||
|
N|F|991417.00|1487504710.38|1413082168.05|1469649223.19|25.52|38284.47|0.05| 38854 |
||||||
|
N|O|74476040.00|111701729697.74|106118230307.61|110367043872.50|25.50|38249.12|0.05| 2920374 |
||||||
|
R|F|37719753.00|56568041380.90|53741292684.60|55889619119.83|25.51|38250.85|0.05| 1478870 |
@ -0,0 +1,21 @@ |
|||||||
|
c_custkey |c_name |revenue |c_acctbal |n_name |c_address |c_phone |c_comment |
||||||
|
57040|Customer#000057040 |734235.25|632.87|JAPAN |Eioyzjf4pp |22-895-641-3466|sits. slyly regular requests sleep alongside of the regular inst |
||||||
|
143347|Customer#000143347 |721002.69|2557.47|EGYPT |1aReFYv,Kw4 |14-742-935-3718|ggle carefully enticing requests. final deposits use bold, bold pinto beans. ironic, idle re |
||||||
|
60838|Customer#000060838 |679127.31|2454.77|BRAZIL |64EaJ5vMAHWJlBOxJklpNc2RJiWE |12-913-494-9813| need to boost against the slyly regular account |
||||||
|
101998|Customer#000101998 |637029.57|3790.89|UNITED KINGDOM |01c9CILnNtfOQYmZj |33-593-865-6378|ress foxes wake slyly after the bold excuses. ironic platelets are furiously carefully bold theodolites |
||||||
|
125341|Customer#000125341 |633508.09|4983.51|GERMANY |S29ODD6bceU8QSuuEJznkNaK |17-582-695-5962|arefully even depths. blithely even excuses sleep furiously. foxes use except the dependencies. ca |
||||||
|
25501|Customer#000025501 |620269.78|7725.04|ETHIOPIA | W556MXuoiaYCCZamJI,Rn0B4ACUGdkQ8DZ |15-874-808-6793|he pending instructions wake carefully at the pinto beans. regular, final instructions along the slyly fina |
||||||
|
115831|Customer#000115831 |596423.87|5098.10|FRANCE |rFeBbEEyk dl ne7zV5fDrmiq1oK09wV7pxqCgIc|16-715-386-3788|l somas sleep. furiously final deposits wake blithely regular pinto b |
||||||
|
84223|Customer#000084223 |594998.02|528.65|UNITED KINGDOM |nAVZCs6BaWap rrM27N 2qBnzc5WBauxbA |33-442-824-8191| slyly final deposits haggle regular, pending dependencies. pending escapades wake |
||||||
|
54289|Customer#000054289 |585603.39|5583.02|IRAN |vXCxoCsU0Bad5JQI ,oobkZ |20-834-292-4707|ely special foxes are quickly finally ironic p |
||||||
|
39922|Customer#000039922 |584878.11|7321.11|GERMANY |Zgy4s50l2GKN4pLDPBU8m342gIw6R |17-147-757-8036|y final requests. furiously final foxes cajole blithely special platelets. f |
||||||
|
6226|Customer#000006226 |576783.76|2230.09|UNITED KINGDOM |8gPu8,NPGkfyQQ0hcIYUGPIBWc,ybP5g, |33-657-701-3391|ending platelets along the express deposits cajole carefully final |
||||||
|
922|Customer#000000922 |576767.53|3869.25|GERMANY |Az9RFaut7NkPnc5zSD2PwHgVwr4jRzq |17-945-916-9648|luffily fluffy deposits. packages c |
||||||
|
147946|Customer#000147946 |576455.13|2030.13|ALGERIA |iANyZHjqhyy7Ajah0pTrYyhJ |10-886-956-3143|ithely ironic deposits haggle blithely ironic requests. quickly regu |
||||||
|
115640|Customer#000115640 |569341.19|6436.10|ARGENTINA |Vtgfia9qI 7EpHgecU1X |11-411-543-4901|ost slyly along the patterns; pinto be |
||||||
|
73606|Customer#000073606 |568656.86|1785.67|JAPAN |xuR0Tro5yChDfOCrjkd2ol |22-437-653-6966|he furiously regular ideas. slowly |
||||||
|
110246|Customer#000110246 |566842.98|7763.35|VIETNAM |7KzflgX MDOq7sOkI |31-943-426-9837|egular deposits serve blithely above the fl |
||||||
|
142549|Customer#000142549 |563537.24|5085.99|INDONESIA |ChqEoK43OysjdHbtKCp6dKqjNyvvi9 |19-955-562-2398|sleep pending courts. ironic deposits against the carefully unusual platelets cajole carefully express accounts. |
||||||
|
146149|Customer#000146149 |557254.99|1791.55|ROMANIA |s87fvzFQpU |29-744-164-6487| of the slyly silent accounts. quickly final accounts across the |
||||||
|
52528|Customer#000052528 |556397.35|551.79|ARGENTINA |NFztyTOR10UOJ |11-208-192-3205| deposits hinder. blithely pending asymptotes breach slyly regular re |
||||||
|
23431|Customer#000023431 |554269.54|3381.86|ROMANIA |HgiV0phqhaIa9aydNoIlb |29-915-458-2654|nusual, even instructions: furiously stealthy n |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,3 @@ |
|||||||
|
l_shipmode|high_line_count |low_line_count |
||||||
|
MAIL | 6202| 9324 |
||||||
|
SHIP | 6200| 9262 |
@ -0,0 +1,43 @@ |
|||||||
|
c_count |custdist |
||||||
|
0| 50005 |
||||||
|
9| 6641 |
||||||
|
10| 6532 |
||||||
|
11| 6014 |
||||||
|
8| 5937 |
||||||
|
12| 5639 |
||||||
|
13| 5024 |
||||||
|
19| 4793 |
||||||
|
7| 4687 |
||||||
|
17| 4587 |
||||||
|
18| 4529 |
||||||
|
20| 4516 |
||||||
|
15| 4505 |
||||||
|
14| 4446 |
||||||
|
16| 4273 |
||||||
|
21| 4190 |
||||||
|
22| 3623 |
||||||
|
6| 3265 |
||||||
|
23| 3225 |
||||||
|
24| 2742 |
||||||
|
25| 2086 |
||||||
|
5| 1948 |
||||||
|
26| 1612 |
||||||
|
27| 1179 |
||||||
|
4| 1007 |
||||||
|
28| 893 |
||||||
|
29| 593 |
||||||
|
3| 415 |
||||||
|
30| 376 |
||||||
|
31| 226 |
||||||
|
32| 148 |
||||||
|
2| 134 |
||||||
|
33| 75 |
||||||
|
34| 50 |
||||||
|
35| 37 |
||||||
|
1| 17 |
||||||
|
36| 14 |
||||||
|
38| 5 |
||||||
|
37| 5 |
||||||
|
40| 4 |
||||||
|
41| 2 |
||||||
|
39| 1 |
@ -0,0 +1,2 @@ |
|||||||
|
promo_revenue |
||||||
|
16.38 |
@ -0,0 +1,2 @@ |
|||||||
|
s_suppkey |s_name |s_address |s_phone |total_revenue |
||||||
|
8449|Supplier#000008449 |Wp34zim9qYFbVctdW |20-469-856-8873|1772627.21 |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,2 @@ |
|||||||
|
avg_yearly |
||||||
|
348406.02 |
@ -0,0 +1,58 @@ |
|||||||
|
c_name |c_custkey |o_orderkey |o_orderdat|o_totalprice |col6 |
||||||
|
Customer#000128120 | 128120| 4722021|1994-04-07|544089.09|323.00 |
||||||
|
Customer#000144617 | 144617| 3043270|1997-02-12|530604.44|317.00 |
||||||
|
Customer#000013940 | 13940| 2232932|1997-04-13|522720.61|304.00 |
||||||
|
Customer#000066790 | 66790| 2199712|1996-09-30|515531.82|327.00 |
||||||
|
Customer#000046435 | 46435| 4745607|1997-07-03|508047.99|309.00 |
||||||
|
Customer#000015272 | 15272| 3883783|1993-07-28|500241.33|302.00 |
||||||
|
Customer#000146608 | 146608| 3342468|1994-06-12|499794.58|303.00 |
||||||
|
Customer#000096103 | 96103| 5984582|1992-03-16|494398.79|312.00 |
||||||
|
Customer#000024341 | 24341| 1474818|1992-11-15|491348.26|302.00 |
||||||
|
Customer#000137446 | 137446| 5489475|1997-05-23|487763.25|311.00 |
||||||
|
Customer#000107590 | 107590| 4267751|1994-11-04|485141.38|301.00 |
||||||
|
Customer#000050008 | 50008| 2366755|1996-12-09|483891.26|302.00 |
||||||
|
Customer#000015619 | 15619| 3767271|1996-08-07|480083.96|318.00 |
||||||
|
Customer#000077260 | 77260| 1436544|1992-09-12|479499.43|307.00 |
||||||
|
Customer#000109379 | 109379| 5746311|1996-10-10|478064.11|302.00 |
||||||
|
Customer#000054602 | 54602| 5832321|1997-02-09|471220.08|307.00 |
||||||
|
Customer#000105995 | 105995| 2096705|1994-07-03|469692.58|307.00 |
||||||
|
Customer#000148885 | 148885| 2942469|1992-05-31|469630.44|313.00 |
||||||
|
Customer#000114586 | 114586| 551136|1993-05-19|469605.59|308.00 |
||||||
|
Customer#000105260 | 105260| 5296167|1996-09-06|469360.57|303.00 |
||||||
|
Customer#000147197 | 147197| 1263015|1997-02-02|467149.67|320.00 |
||||||
|
Customer#000064483 | 64483| 2745894|1996-07-04|466991.35|304.00 |
||||||
|
Customer#000136573 | 136573| 2761378|1996-05-31|461282.73|301.00 |
||||||
|
Customer#000016384 | 16384| 502886|1994-04-12|458378.92|312.00 |
||||||
|
Customer#000117919 | 117919| 2869152|1996-06-20|456815.92|317.00 |
||||||
|
Customer#000012251 | 12251| 735366|1993-11-24|455107.26|309.00 |
||||||
|
Customer#000120098 | 120098| 1971680|1995-06-14|453451.23|308.00 |
||||||
|
Customer#000066098 | 66098| 5007490|1992-08-07|453436.16|304.00 |
||||||
|
Customer#000117076 | 117076| 4290656|1997-02-05|449545.85|301.00 |
||||||
|
Customer#000129379 | 129379| 4720454|1997-06-07|448665.79|303.00 |
||||||
|
Customer#000126865 | 126865| 4702759|1994-11-07|447606.65|320.00 |
||||||
|
Customer#000088876 | 88876| 983201|1993-12-30|446717.46|304.00 |
||||||
|
Customer#000036619 | 36619| 4806726|1995-01-17|446704.09|328.00 |
||||||
|
Customer#000141823 | 141823| 2806245|1996-12-29|446269.12|310.00 |
||||||
|
Customer#000053029 | 53029| 2662214|1993-08-13|446144.49|302.00 |
||||||
|
Customer#000018188 | 18188| 3037414|1995-01-25|443807.22|308.00 |
||||||
|
Customer#000066533 | 66533| 29158|1995-10-21|443576.50|305.00 |
||||||
|
Customer#000037729 | 37729| 4134341|1995-06-29|441082.97|309.00 |
||||||
|
Customer#000003566 | 3566| 2329187|1998-01-04|439803.36|304.00 |
||||||
|
Customer#000045538 | 45538| 4527553|1994-05-22|436275.31|305.00 |
||||||
|
Customer#000081581 | 81581| 4739650|1995-11-04|435405.90|305.00 |
||||||
|
Customer#000119989 | 119989| 1544643|1997-09-20|434568.25|320.00 |
||||||
|
Customer#000003680 | 3680| 3861123|1998-07-03|433525.97|301.00 |
||||||
|
Customer#000113131 | 113131| 967334|1995-12-15|432957.75|301.00 |
||||||
|
Customer#000141098 | 141098| 565574|1995-09-24|430986.69|301.00 |
||||||
|
Customer#000093392 | 93392| 5200102|1997-01-22|425487.51|304.00 |
||||||
|
Customer#000015631 | 15631| 1845057|1994-05-12|419879.59|302.00 |
||||||
|
Customer#000112987 | 112987| 4439686|1996-09-17|418161.49|305.00 |
||||||
|
Customer#000012599 | 12599| 4259524|1998-02-12|415200.61|304.00 |
||||||
|
Customer#000105410 | 105410| 4478371|1996-03-05|412754.51|302.00 |
||||||
|
Customer#000149842 | 149842| 5156581|1994-05-30|411329.35|302.00 |
||||||
|
Customer#000010129 | 10129| 5849444|1994-03-21|409129.85|309.00 |
||||||
|
Customer#000069904 | 69904| 1742403|1996-10-19|408513.00|305.00 |
||||||
|
Customer#000017746 | 17746| 6882|1997-04-09|408446.93|303.00 |
||||||
|
Customer#000013072 | 13072| 1481925|1998-03-15|399195.47|301.00 |
||||||
|
Customer#000082441 | 82441| 857959|1994-02-07|382579.74|305.00 |
||||||
|
Customer#000088703 | 88703| 2995076|1994-01-30|363812.12|302.00 |
@ -0,0 +1,2 @@ |
|||||||
|
revenue |
||||||
|
3083843.06 |
@ -0,0 +1,101 @@ |
|||||||
|
s_acctbal |s_name |n_name |p_partkey |p_mfgr |s_address |s_phone |s_comment |
||||||
|
9938.53|Supplier#000005359 |UNITED KINGDOM | 185358|Manufacturer#4 |QKuHYh,vZGiwu2FWEJoLDx04 |33-429-790-6131|uriously regular requests hag |
||||||
|
9937.84|Supplier#000005969 |ROMANIA | 108438|Manufacturer#1 |ANDENSOSmk,miq23Xfb5RWt6dvUcvt6Qa |29-520-692-3537|efully express instructions. regular requests against the slyly fin |
||||||
|
9936.22|Supplier#000005250 |UNITED KINGDOM | 249|Manufacturer#4 |B3rqp0xbSEim4Mpy2RH J |33-320-228-2957|etect about the furiously final accounts. slyly ironic pinto beans sleep inside the furiously |
||||||
|
9923.77|Supplier#000002324 |GERMANY | 29821|Manufacturer#4 |y3OD9UywSTOk |17-779-299-1839|ackages boost blithely. blithely regular deposits c |
||||||
|
9871.22|Supplier#000006373 |GERMANY | 43868|Manufacturer#5 |J8fcXWsTqM |17-813-485-8637|etect blithely bold asymptotes. fluffily ironic platelets wake furiously; blit |
||||||
|
9870.78|Supplier#000001286 |GERMANY | 81285|Manufacturer#2 |YKA,E2fjiVd7eUrzp2Ef8j1QxGo2DFnosaTEH |17-516-924-4574| regular accounts. furiously unusual courts above the fi |
||||||
|
9870.78|Supplier#000001286 |GERMANY | 181285|Manufacturer#4 |YKA,E2fjiVd7eUrzp2Ef8j1QxGo2DFnosaTEH |17-516-924-4574| regular accounts. furiously unusual courts above the fi |
||||||
|
9852.52|Supplier#000008973 |RUSSIA | 18972|Manufacturer#2 |t5L67YdBYYH6o,Vz24jpDyQ9 |32-188-594-7038|rns wake final foxes. carefully unusual depende |
||||||
|
9847.83|Supplier#000008097 |RUSSIA | 130557|Manufacturer#2 |xMe97bpE69NzdwLoX |32-375-640-3593| the special excuses. silent sentiments serve carefully final ac |
||||||
|
9847.57|Supplier#000006345 |FRANCE | 86344|Manufacturer#1 |VSt3rzk3qG698u6ld8HhOByvrTcSTSvQlDQDag |16-886-766-7945|ges. slyly regular requests are. ruthless, express excuses cajole blithely across the unu |
||||||
|
9847.57|Supplier#000006345 |FRANCE | 173827|Manufacturer#2 |VSt3rzk3qG698u6ld8HhOByvrTcSTSvQlDQDag |16-886-766-7945|ges. slyly regular requests are. ruthless, express excuses cajole blithely across the unu |
||||||
|
9836.93|Supplier#000007342 |RUSSIA | 4841|Manufacturer#4 |JOlK7C1,7xrEZSSOw |32-399-414-5385|blithely carefully bold theodolites. fur |
||||||
|
9817.10|Supplier#000002352 |RUSSIA | 124815|Manufacturer#2 |4LfoHUZjgjEbAKw TgdKcgOc4D4uCYw |32-551-831-1437|wake carefully alongside of the carefully final ex |
||||||
|
9817.10|Supplier#000002352 |RUSSIA | 152351|Manufacturer#3 |4LfoHUZjgjEbAKw TgdKcgOc4D4uCYw |32-551-831-1437|wake carefully alongside of the carefully final ex |
||||||
|
9739.86|Supplier#000003384 |FRANCE | 138357|Manufacturer#2 |o,Z3v4POifevE k9U1b 6J1ucX,I |16-494-913-5925|s after the furiously bold packages sleep fluffily idly final requests: quickly final |
||||||
|
9721.95|Supplier#000008757 |UNITED KINGDOM | 156241|Manufacturer#3 |Atg6GnM4dT2 |33-821-407-2995|eep furiously sauternes; quickl |
||||||
|
9681.33|Supplier#000008406 |RUSSIA | 78405|Manufacturer#1 |,qUuXcftUl |32-139-873-8571|haggle slyly regular excuses. quic |
||||||
|
9643.55|Supplier#000005148 |ROMANIA | 107617|Manufacturer#1 |kT4ciVFslx9z4s79p Js825 |29-252-617-4850|final excuses. final ideas boost quickly furiously speci |
||||||
|
9624.82|Supplier#000001816 |FRANCE | 34306|Manufacturer#3 |e7vab91vLJPWxxZnewmnDBpDmxYHrb |16-392-237-6726|e packages are around the special ideas. special, pending foxes us |
||||||
|
9624.78|Supplier#000009658 |ROMANIA | 189657|Manufacturer#1 |oE9uBgEfSS4opIcepXyAYM,x |29-748-876-2014|ronic asymptotes wake bravely final |
||||||
|
9612.94|Supplier#000003228 |ROMANIA | 120715|Manufacturer#2 |KDdpNKN3cWu7ZSrbdqp7AfSLxx,qWB |29-325-784-8187|warhorses. quickly even deposits sublate daringly ironic instructions. slyly blithe t |
||||||
|
9612.94|Supplier#000003228 |ROMANIA | 198189|Manufacturer#4 |KDdpNKN3cWu7ZSrbdqp7AfSLxx,qWB |29-325-784-8187|warhorses. quickly even deposits sublate daringly ironic instructions. slyly blithe t |
||||||
|
9571.83|Supplier#000004305 |ROMANIA | 179270|Manufacturer#2 |qNHZ7WmCzygwMPRDO9Ps |29-973-481-1831|kly carefully express asymptotes. furiou |
||||||
|
9558.10|Supplier#000003532 |UNITED KINGDOM | 88515|Manufacturer#4 |EOeuiiOn21OVpTlGguufFDFsbN1p0lhpxHp |33-152-301-2164| foxes. quickly even excuses use. slyly special foxes nag bl |
||||||
|
9492.79|Supplier#000005975 |GERMANY | 25974|Manufacturer#5 |S6mIiCTx82z7lV |17-992-579-4839|arefully pending accounts. blithely regular excuses boost carefully carefully ironic p |
||||||
|
9461.05|Supplier#000002536 |UNITED KINGDOM | 20033|Manufacturer#1 |8mmGbyzaU 7ZS2wJumTibypncu9pNkDc4FYA |33-556-973-5522|. slyly regular deposits wake slyly. furiously regular warthogs are. |
||||||
|
9453.01|Supplier#000000802 |ROMANIA | 175767|Manufacturer#1 |,6HYXb4uaHITmtMBj4Ak57Pd |29-342-882-6463|gular frets. permanently special multipliers believe blithely alongs |
||||||
|
9408.65|Supplier#000007772 |UNITED KINGDOM | 117771|Manufacturer#4 |AiC5YAH,gdu0i7 |33-152-491-1126|nag against the final requests. furiously unusual packages cajole blit |
||||||
|
9359.61|Supplier#000004856 |ROMANIA | 62349|Manufacturer#5 |HYogcF3Jb yh1 |29-334-870-9731|y ironic theodolites. blithely sile |
||||||
|
9357.45|Supplier#000006188 |UNITED KINGDOM | 138648|Manufacturer#1 |g801,ssP8wpTk4Hm |33-583-607-1633|ously always regular packages. fluffily even accounts beneath the furiously final pack |
||||||
|
9352.04|Supplier#000003439 |GERMANY | 170921|Manufacturer#4 |qYPDgoiBGhCYxjgC |17-128-996-4650| according to the carefully bold ideas |
||||||
|
9312.97|Supplier#000007807 |RUSSIA | 90279|Manufacturer#5 |oGYMPCk9XHGB2PBfKRnHA |32-673-872-5854|ecial packages among the pending, even requests use regula |
||||||
|
9312.97|Supplier#000007807 |RUSSIA | 100276|Manufacturer#5 |oGYMPCk9XHGB2PBfKRnHA |32-673-872-5854|ecial packages among the pending, even requests use regula |
||||||
|
9280.27|Supplier#000007194 |ROMANIA | 47193|Manufacturer#3 |zhRUQkBSrFYxIAXTfInj vyGRQjeK |29-318-454-2133|o beans haggle after the furiously unusual deposits. carefully silent dolphins cajole carefully |
||||||
|
9274.80|Supplier#000008854 |RUSSIA | 76346|Manufacturer#3 |1xhLoOUM7I3mZ1mKnerw OSqdbb4QbGa |32-524-148-5221|y. courts do wake slyly. carefully ironic platelets haggle above the slyly regular the |
||||||
|
9249.35|Supplier#000003973 |FRANCE | 26466|Manufacturer#1 |d18GiDsL6Wm2IsGXM,RZf1jCsgZAOjNYVThTRP4 |16-722-866-1658|uests are furiously. regular tithes through the regular, final accounts cajole furiously above the q |
||||||
|
9249.35|Supplier#000003973 |FRANCE | 33972|Manufacturer#1 |d18GiDsL6Wm2IsGXM,RZf1jCsgZAOjNYVThTRP4 |16-722-866-1658|uests are furiously. regular tithes through the regular, final accounts cajole furiously above the q |
||||||
|
9208.70|Supplier#000007769 |ROMANIA | 40256|Manufacturer#5 |rsimdze 5o9P Ht7xS |29-964-424-9649|lites was quickly above the furiously ironic requests. slyly even foxes against the blithely bold |
||||||
|
9201.47|Supplier#000009690 |UNITED KINGDOM | 67183|Manufacturer#5 |CB BnUTlmi5zdeEl7R7 |33-121-267-9529|e even, even foxes. blithely ironic packages cajole regular packages. slyly final ide |
||||||
|
9192.10|Supplier#000000115 |UNITED KINGDOM | 85098|Manufacturer#3 |nJ 2t0f7Ve,wL1,6WzGBJLNBUCKlsV |33-597-248-1220|es across the carefully express accounts boost caref |
||||||
|
9189.98|Supplier#000001226 |GERMANY | 21225|Manufacturer#4 |qsLCqSvLyZfuXIpjz |17-725-903-1381| deposits. blithely bold excuses about the slyly bold forges wake |
||||||
|
9128.97|Supplier#000004311 |RUSSIA | 146768|Manufacturer#5 |I8IjnXd7NSJRs594RxsRR0 |32-155-440-7120|refully. blithely unusual asymptotes haggle |
||||||
|
9104.83|Supplier#000008520 |GERMANY | 150974|Manufacturer#4 |RqRVDgD0ER J9 b41vR2,3 |17-728-804-1793|ly about the blithely ironic depths. slyly final theodolites among the fluffily bold ideas print |
||||||
|
9101.00|Supplier#000005791 |ROMANIA | 128254|Manufacturer#5 |zub2zCV,jhHPPQqi,P2INAjE1zI n66cOEoXFG |29-549-251-5384|ts. notornis detect blithely above the carefully bold requests. blithely even package |
||||||
|
9094.57|Supplier#000004582 |RUSSIA | 39575|Manufacturer#1 |WB0XkCSG3r,mnQ n,h9VIxjjr9ARHFvKgMDf |32-587-577-1351|jole. regular accounts sleep blithely frets. final pinto beans play furiously past the |
||||||
|
8996.87|Supplier#000004702 |FRANCE | 102191|Manufacturer#5 |8XVcQK23akp |16-811-269-8946|ickly final packages along the express plat |
||||||
|
8996.14|Supplier#000009814 |ROMANIA | 139813|Manufacturer#2 |af0O5pg83lPU4IDVmEylXZVqYZQzSDlYLAmR |29-995-571-8781| dependencies boost quickly across the furiously pending requests! unusual dolphins play sl |
||||||
|
8968.42|Supplier#000010000 |ROMANIA | 119999|Manufacturer#5 |aTGLEusCiL4F PDBdv665XBJhPyCOB0i |29-578-432-2146|ly regular foxes boost slyly. quickly special waters boost carefully ironi |
||||||
|
8936.82|Supplier#000007043 |UNITED KINGDOM | 109512|Manufacturer#1 |FVajceZInZdbJE6Z9XsRUxrUEpiwHDrOXi,1Rz |33-784-177-8208|efully regular courts. furiousl |
||||||
|
8929.42|Supplier#000008770 |FRANCE | 173735|Manufacturer#4 |R7cG26TtXrHAP9 HckhfRi |16-242-746-9248|cajole furiously unusual requests. quickly stealthy requests are. |
||||||
|
8920.59|Supplier#000003967 |ROMANIA | 26460|Manufacturer#1 |eHoAXe62SY9 |29-194-731-3944|aters. express, pending instructions sleep. brave, r |
||||||
|
8920.59|Supplier#000003967 |ROMANIA | 173966|Manufacturer#2 |eHoAXe62SY9 |29-194-731-3944|aters. express, pending instructions sleep. brave, r |
||||||
|
8913.96|Supplier#000004603 |UNITED KINGDOM | 137063|Manufacturer#2 |OUzlvMUr7n,utLxmPNeYKSf3T24OXskxB5 |33-789-255-7342| haggle slyly above the furiously regular pinto beans. even |
||||||
|
8877.82|Supplier#000007967 |FRANCE | 167966|Manufacturer#5 |A3pi1BARM4nx6R,qrwFoRPU |16-442-147-9345|ously foxes. express, ironic requests im |
||||||
|
8862.24|Supplier#000003323 |ROMANIA | 73322|Manufacturer#3 |W9 lYcsC9FwBqk3ItL |29-736-951-3710|ly pending ideas sleep about the furiously unu |
||||||
|
8841.59|Supplier#000005750 |ROMANIA | 100729|Manufacturer#5 |Erx3lAgu0g62iaHF9x50uMH4EgeN9hEG |29-344-502-5481|gainst the pinto beans. fluffily unusual dependencies affix slyly even deposits. |
||||||
|
8781.71|Supplier#000003121 |ROMANIA | 13120|Manufacturer#5 |wNqTogx238ZYCamFb,50v,bj 4IbNFW9Bvw1xP |29-707-291-5144|s wake quickly ironic ideas |
||||||
|
8754.24|Supplier#000009407 |UNITED KINGDOM | 179406|Manufacturer#4 |CHRCbkaWcf5B |33-903-970-9604|e ironic requests. carefully even foxes above the furious |
||||||
|
8691.06|Supplier#000004429 |UNITED KINGDOM | 126892|Manufacturer#2 |k,BQms5UhoAF1B2Asi,fLib |33-964-337-5038|efully express deposits kindle after the deposits. final |
||||||
|
8655.99|Supplier#000006330 |RUSSIA | 193810|Manufacturer#2 |UozlaENr0ytKe2w6CeIEWFWn iO3S8Rae7Ou |32-561-198-3705|symptotes use about the express dolphins. requests use after the express platelets. final, ex |
||||||
|
8638.36|Supplier#000002920 |RUSSIA | 75398|Manufacturer#1 |Je2a8bszf3L |32-122-621-7549|ly quickly ironic requests. even requests whithout t |
||||||
|
8638.36|Supplier#000002920 |RUSSIA | 170402|Manufacturer#3 |Je2a8bszf3L |32-122-621-7549|ly quickly ironic requests. even requests whithout t |
||||||
|
8607.69|Supplier#000006003 |UNITED KINGDOM | 76002|Manufacturer#2 |EH9wADcEiuenM0NR08zDwMidw,52Y2RyILEiA |33-416-807-5206|ar, pending accounts. pending depende |
||||||
|
8569.52|Supplier#000005936 |RUSSIA | 5935|Manufacturer#5 |jXaNZ6vwnEWJ2ksLZJpjtgt0bY2a3AU |32-644-251-7916|. regular foxes nag carefully atop the regular, silent deposits. quickly regular packages |
||||||
|
8564.12|Supplier#000000033 |GERMANY | 110032|Manufacturer#1 |gfeKpYw3400L0SDywXA6Ya1Qmq1w6YB9f3R |17-138-897-9374|n sauternes along the regular asymptotes are regularly along the |
||||||
|
8553.82|Supplier#000003979 |ROMANIA | 143978|Manufacturer#4 |BfmVhCAnCMY3jzpjUMy4CNWs9 HzpdQR7INJU |29-124-646-4897|ic requests wake against the blithely unusual accounts. fluffily r |
||||||
|
8517.23|Supplier#000009529 |RUSSIA | 37025|Manufacturer#5 |e44R8o7JAIS9iMcr |32-565-297-8775|ove the even courts. furiously special platelets |
||||||
|
8517.23|Supplier#000009529 |RUSSIA | 59528|Manufacturer#2 |e44R8o7JAIS9iMcr |32-565-297-8775|ove the even courts. furiously special platelets |
||||||
|
8503.70|Supplier#000006830 |RUSSIA | 44325|Manufacturer#4 |BC4WFCYRUZyaIgchU 4S |32-147-878-5069|pades cajole. furious packages among the carefully express excuses boost furiously across th |
||||||
|
8457.09|Supplier#000009456 |UNITED KINGDOM | 19455|Manufacturer#1 |7SBhZs8gP1cJjT0Qf433YBk |33-858-440-4349|cing requests along the furiously unusual deposits promise among the furiously unus |
||||||
|
8441.40|Supplier#000003817 |FRANCE | 141302|Manufacturer#2 |hU3fz3xL78 |16-339-356-5115|ely even ideas. ideas wake slyly furiously unusual instructions. pinto beans sleep ag |
||||||
|
8432.89|Supplier#000003990 |RUSSIA | 191470|Manufacturer#1 |wehBBp1RQbfxAYDASS75MsywmsKHRVdkrvNe6m |32-839-509-9301|ep furiously. packages should have to haggle slyly across the deposits. furiously regu |
||||||
|
8431.40|Supplier#000002675 |ROMANIA | 5174|Manufacturer#1 |HJFStOu9R5NGPOegKhgbzBdyvrG2yh8w |29-474-643-1443|ithely express pinto beans. blithely even foxes haggle. furiously regular theodol |
||||||
|
8407.04|Supplier#000005406 |RUSSIA | 162889|Manufacturer#4 |j7 gYF5RW8DC5UrjKC |32-626-152-4621|r the blithely regular packages. slyly ironic theodoli |
||||||
|
8386.08|Supplier#000008518 |FRANCE | 36014|Manufacturer#3 |2jqzqqAVe9crMVGP,n9nTsQXulNLTUYoJjEDcqWV|16-618-780-7481|blithely bold pains are carefully platelets. finally regular pinto beans sleep carefully special |
||||||
|
8376.52|Supplier#000005306 |UNITED KINGDOM | 190267|Manufacturer#5 |9t8Y8 QqSIsoADPt6NLdk,TP5zyRx41oBUlgoGc9|33-632-514-7931|ly final accounts sleep special, regular requests. furiously regular |
||||||
|
8348.74|Supplier#000008851 |FRANCE | 66344|Manufacturer#4 |nWxi7GwEbjhw1 |16-796-240-2472| boldly final deposits. regular, even instructions detect slyly. fluffily unusual pinto bea |
||||||
|
8338.58|Supplier#000007269 |FRANCE | 17268|Manufacturer#4 |ZwhJSwABUoiB04,3 |16-267-277-4365|iously final accounts. even pinto beans cajole slyly regular |
||||||
|
8328.46|Supplier#000001744 |ROMANIA | 69237|Manufacturer#5 |oLo3fV64q2,FKHa3p,qHnS7Yzv,ps8 |29-330-728-5873|ep carefully-- even, careful packages are slyly along t |
||||||
|
8307.93|Supplier#000003142 |GERMANY | 18139|Manufacturer#1 |dqblvV8dCNAorGlJ |17-595-447-6026|olites wake furiously regular decoys. final requests nod |
||||||
|
8231.61|Supplier#000009558 |RUSSIA | 192000|Manufacturer#2 |mcdgen,yT1iJDHDS5fV |32-762-137-5858| foxes according to the furi |
||||||
|
8152.61|Supplier#000002731 |ROMANIA | 15227|Manufacturer#4 | nluXJCuY1tu |29-805-463-2030| special requests. even, regular warhorses affix among the final gr |
||||||
|
8109.09|Supplier#000009186 |FRANCE | 99185|Manufacturer#1 |wgfosrVPexl9pEXWywaqlBMDYYf |16-668-570-1402|tions haggle slyly about the sil |
||||||
|
8102.62|Supplier#000003347 |UNITED KINGDOM | 18344|Manufacturer#5 |m CtXS2S16i |33-454-274-8532|egrate with the slyly bold instructions. special foxes haggle silently among the |
||||||
|
8046.07|Supplier#000008780 |FRANCE | 191222|Manufacturer#3 |AczzuE0UK9osj ,Lx0Jmh |16-473-215-6395|onic platelets cajole after the regular instructions. permanently bold excuses |
||||||
|
8042.09|Supplier#000003245 |RUSSIA | 135705|Manufacturer#4 |Dh8Ikg39onrbOL4DyTfGw8a9oKUX3d9Y |32-836-132-8872|osits. packages cajole slyly. furiously regular deposits cajole slyly. q |
||||||
|
8042.09|Supplier#000003245 |RUSSIA | 150729|Manufacturer#1 |Dh8Ikg39onrbOL4DyTfGw8a9oKUX3d9Y |32-836-132-8872|osits. packages cajole slyly. furiously regular deposits cajole slyly. q |
||||||
|
7992.40|Supplier#000006108 |FRANCE | 118574|Manufacturer#1 |8tBydnTDwUqfBfFV4l3 |16-974-998-8937| ironic ideas? fluffily even instructions wake. blithel |
||||||
|
7980.65|Supplier#000001288 |FRANCE | 13784|Manufacturer#4 |zE,7HgVPrCn |16-646-464-8247|ully bold courts. escapades nag slyly. furiously fluffy theodo |
||||||
|
7950.37|Supplier#000008101 |GERMANY | 33094|Manufacturer#5 |kkYvL6IuvojJgTNG IKkaXQDYgx8ILohj |17-627-663-8014|arefully unusual requests x-ray above the quickly final deposits. |
||||||
|
7937.93|Supplier#000009012 |ROMANIA | 83995|Manufacturer#2 |iUiTziH,Ek3i4lwSgunXMgrcTzwdb |29-250-925-9690|to the blithely ironic deposits nag sly |
||||||
|
7914.45|Supplier#000001013 |RUSSIA | 125988|Manufacturer#2 |riRcntps4KEDtYScjpMIWeYF6mNnR |32-194-698-3365| busily bold packages are dolphi |
||||||
|
7912.91|Supplier#000004211 |GERMANY | 159180|Manufacturer#5 |2wQRVovHrm3,v03IKzfTd,1PYsFXQFFOG |17-266-947-7315|ay furiously regular platelets. cou |
||||||
|
7912.91|Supplier#000004211 |GERMANY | 184210|Manufacturer#4 |2wQRVovHrm3,v03IKzfTd,1PYsFXQFFOG |17-266-947-7315|ay furiously regular platelets. cou |
||||||
|
7894.56|Supplier#000007981 |GERMANY | 85472|Manufacturer#4 |NSJ96vMROAbeXP |17-963-404-3760|ic platelets affix after the furiously |
||||||
|
7887.08|Supplier#000009792 |GERMANY | 164759|Manufacturer#3 |Y28ITVeYriT3kIGdV2K8fSZ V2UqT5H1Otz |17-988-938-4296|ckly around the carefully fluffy theodolites. slyly ironic pack |
||||||
|
7871.50|Supplier#000007206 |RUSSIA | 104695|Manufacturer#1 |3w fNCnrVmvJjE95sgWZzvW |32-432-452-7731|ironic requests. furiously final theodolites cajole. final, express packages sleep. quickly reg |
||||||
|
7852.45|Supplier#000005864 |RUSSIA | 8363|Manufacturer#4 |WCNfBPZeSXh3h,c |32-454-883-3821|usly unusual pinto beans. brave ideas sleep carefully quickly ironi |
||||||
|
7850.66|Supplier#000001518 |UNITED KINGDOM | 86501|Manufacturer#1 |ONda3YJiHKJOC |33-730-383-3892|ifts haggle fluffily pending pai |
||||||
|
7843.52|Supplier#000006683 |FRANCE | 11680|Manufacturer#4 |2Z0JGkiv01Y00oCFwUGfviIbhzCdy |16-464-517-8943| express, final pinto beans x-ray slyly asymptotes. unusual, unusual |
@ -0,0 +1,187 @@ |
|||||||
|
s_name |s_address |
||||||
|
Supplier#000000020 |iybAE,RmTymrZVYaFZva2SH,j |
||||||
|
Supplier#000000091 |YV45D7TkfdQanOOZ7q9QxkyGUapU1oOWU6q3 |
||||||
|
Supplier#000000205 |rF uV8d0JNEk |
||||||
|
Supplier#000000285 |Br7e1nnt1yxrw6ImgpJ7YdhFDjuBf |
||||||
|
Supplier#000000287 |7a9SP7qW5Yku5PvSg |
||||||
|
Supplier#000000354 |w8fOo5W,aS |
||||||
|
Supplier#000000378 |FfbhyCxWvcPrO8ltp9 |
||||||
|
Supplier#000000402 |i9Sw4DoyMhzhKXCH9By,AYSgmD |
||||||
|
Supplier#000000530 |0qwCMwobKY OcmLyfRXlagA8ukENJv, |
||||||
|
Supplier#000000555 |TfB,a5bfl3Ah 3Z 74GqnNs6zKVGM |
||||||
|
Supplier#000000640 |mvvtlQKsTOsJj5Ihk7,cq |
||||||
|
Supplier#000000729 |pqck2ppy758TQpZCUAjPvlU55K3QjfL7Bi |
||||||
|
Supplier#000000736 |l6i2nMwVuovfKnuVgaSGK2rDy65DlAFLegiL7 |
||||||
|
Supplier#000000761 |zlSLelQUj2XrvTTFnv7WAcYZGvvMTx882d4 |
||||||
|
Supplier#000000887 |urEaTejH5POADP2ARrf |
||||||
|
Supplier#000000935 |ij98czM 2KzWe7dDTOxB8sq0UfCdvrX |
||||||
|
Supplier#000000975 |,AC e,tBpNwKb5xMUzeohxlRn, hdZJo73gFQF8y |
||||||
|
Supplier#000001263 |rQWr6nf8ZhB2TAiIDIvo5Io |
||||||
|
Supplier#000001367 |42YSkFcAXMMcucsqeEefOE4HeCC |
||||||
|
Supplier#000001426 |bPOCc086oFm8sLtS,fGrH |
||||||
|
Supplier#000001446 |lch9HMNU1R7a0LIybsUodVknk6 |
||||||
|
Supplier#000001500 |wDmF5xLxtQch9ctVu, |
||||||
|
Supplier#000001602 |uKNWIeafaM644 |
||||||
|
Supplier#000001626 |UhxNRzUu1dtFmp0 |
||||||
|
Supplier#000001682 |pXTkGxrTQVyH1Rr |
||||||
|
Supplier#000001700 |7hMlCof1Y5zLFg |
||||||
|
Supplier#000001726 |TeRY7TtTH24sEword7yAaSkjx8 |
||||||
|
Supplier#000001730 |Rc8e,1Pybn r6zo0VJIEiD0UD vhk |
||||||
|
Supplier#000001746 |qWsendlOekQG1aW4uq06uQaCm51se8lirv7 hBRd |
||||||
|
Supplier#000001806 |M934fuZSnLW |
||||||
|
Supplier#000001855 |MWk6EAeozXb |
||||||
|
Supplier#000001931 |FpJbMU2h6ZR2eBv8I9NIxF |
||||||
|
Supplier#000002022 | dwebGX7Id2pc25YvY33 |
||||||
|
Supplier#000002036 |20ytTtVObjKUUI2WCB0A |
||||||
|
Supplier#000002096 |kuxseyLtq QPLXxm9ZUrnB6Kkh92JtK5cQzzXNU |
||||||
|
Supplier#000002117 |MRtkgKolHJ9Wh X9J,urANHKDzvjr |
||||||
|
Supplier#000002204 |uYmlr46C06udCqanj0KiRsoTQakZsEyssL |
||||||
|
Supplier#000002218 |nODZw5q4dx kp0K5 |
||||||
|
Supplier#000002243 |nSOEV3JeOU79 |
||||||
|
Supplier#000002245 |hz2qWXWVjOyKhqPYMoEwz6zFkrTaDM |
||||||
|
Supplier#000002282 |ES21K9dxoW1I1TzWCj7ekdlNwSWnv1Z 6mQ,BKn |
||||||
|
Supplier#000002303 |nCoWfpB6YOymbgOht7ltfklpkHl |
||||||
|
Supplier#000002331 |WRh2w5WFvRg7Z0S1AvSvHCL |
||||||
|
Supplier#000002373 |RzHSxOTQmElCjxIBiVA52Z JB58rJhPRylR |
||||||
|
Supplier#000002419 |qydBQd14I5l5mVXa4fYY |
||||||
|
Supplier#000002571 |JZUugz04c iJFLrlGsz9O N,W 1rVHNIReyq |
||||||
|
Supplier#000002585 |CsPoKpw2QuTY4AV1NkWuttneIa4SN |
||||||
|
Supplier#000002629 |0Bw,q5Zp8su9XrzoCngZ3cAEXZwZ |
||||||
|
Supplier#000002721 |HVdFAN2JHMQSpKm |
||||||
|
Supplier#000002730 |lIFxR4fzm31C6,muzJwl84z |
||||||
|
Supplier#000002775 |yDclaDaBD4ihH |
||||||
|
Supplier#000002799 |lwr, 6L3gdfc79PQut,4XO6nQsTJY63cAyYO |
||||||
|
Supplier#000002934 |m,trBENywSArwg3DhB |
||||||
|
Supplier#000002941 |Naddba 8YTEKekZyP0 |
||||||
|
Supplier#000003028 |jouzgX0WZjhNMWLaH4fy |
||||||
|
Supplier#000003095 |HxON3jJhUi3zjt,r mTD |
||||||
|
Supplier#000003143 |hdolgh608uTkHh7t6qfSqkifKaiFjnCH |
||||||
|
Supplier#000003185 |hMa535Cbf2mj1Nw4OWOKWVrsK0VdDkJURrdjSIJe |
||||||
|
Supplier#000003189 |DWdPxt7 RnkZv6VOByR0em |
||||||
|
Supplier#000003201 |E87yws6I,t0qNs4QW7UzExKiJnJDZWue |
||||||
|
Supplier#000003213 |pxrRP4irQ1VoyfQ,dTf3 |
||||||
|
Supplier#000003275 |9xO4nyJ2QJcX6vGf |
||||||
|
Supplier#000003288 |EDdfNt7E5Uc,xLTupoIgYL4yY7ujh, |
||||||
|
Supplier#000003314 |jnisU8MzqO4iUB3zsPcrysMw3DDUojS4q7LD |
||||||
|
Supplier#000003373 |iy8VM48ynpc3N2OsBwAvhYakO2us9R1bi |
||||||
|
Supplier#000003421 |Sh3dt9W5oeofFWovnFhrg, |
||||||
|
Supplier#000003422 |DJoCEapUeBXoV1iYiCcPFQvzsTv2ZI960 |
||||||
|
Supplier#000003441 |zvFJIzS,oUuShHjpcX |
||||||
|
Supplier#000003590 |sy79CMLxqb,Cbo |
||||||
|
Supplier#000003607 |lNqFHQYjwSAkf |
||||||
|
Supplier#000003625 |qY588W0Yk5iaUy1RXTgNrEKrMAjBYHcKs |
||||||
|
Supplier#000003723 |jZEp0OEythCLcS OmJSrFtxJ66bMlzSp |
||||||
|
Supplier#000003849 |KgbZEaRk,6Q3mWvwh6uptrs1KRUHg 0 |
||||||
|
Supplier#000003894 |vvGC rameLOk |
||||||
|
Supplier#000003941 |Pmb05mQfBMS618O7WKqZJ 9vyv |
||||||
|
Supplier#000004059 |umEYZSq9RJ2WEzdsv9meU8rmqwzVLRgiZwC |
||||||
|
Supplier#000004207 |tF64pwiOM4IkWjN3mS,e06WuAjLx |
||||||
|
Supplier#000004236 |dl,HPtJmGipxYsSqn9wmqkuWjst,mCeJ8O6T |
||||||
|
Supplier#000004278 |bBddbpBxIVp Di9 |
||||||
|
Supplier#000004281 |1OwPHh Pgiyeus,iZS5eA23JDOipwk |
||||||
|
Supplier#000004304 |hQCAz59k,HLlp2CKUrcBIL |
||||||
|
Supplier#000004346 |S3076LEOwo |
||||||
|
Supplier#000004406 |Ah0ZaLu6VwufPWUz,7kbXgYZhauEaHqGIg |
||||||
|
Supplier#000004430 |yvSsKNSTL5HLXBET4luOsPNLxKzAMk |
||||||
|
Supplier#000004527 |p pVXCnxgcklWF6A1o3OHY3qW6 |
||||||
|
Supplier#000004655 |67NqBc4 t3PG3F8aO IsqWNq4kGaPowYL |
||||||
|
Supplier#000004851 |Rj,x6IgLT7kBL99nqp |
||||||
|
Supplier#000004871 |,phpt6AWEnUS8t4Avb50rFfdg7O9c6nU8xxv8eC5 |
||||||
|
Supplier#000004884 |42Z1uLye9nsn6aTGBNd dI8 x |
||||||
|
Supplier#000004975 |GPq5PMKY6Wy |
||||||
|
Supplier#000005076 |Xl7h9ifgvIHmqxFLgWfHK4Gjav BkP |
||||||
|
Supplier#000005195 |Woi3b2ZaicPh ZSfu1EfXhE |
||||||
|
Supplier#000005256 |Onc3t57VAMchm,pmoVLaU8bONni9NsuaM PzMMFz |
||||||
|
Supplier#000005257 |f9g8SEHB7obMj3QXAjXS2vfYY22 |
||||||
|
Supplier#000005300 |gXG28YqpxU |
||||||
|
Supplier#000005323 |tMCkdqbDoyNo8vMIkzjBqYexoRAuv,T6 qzcu |
||||||
|
Supplier#000005386 |Ub6AAfHpWLWP |
||||||
|
Supplier#000005426 |9Dz2OVT1q sb4BK71ljQ1XjPBYRPvO |
||||||
|
Supplier#000005465 |63cYZenZBRZ613Q1FaoG0,smnC5zl9 |
||||||
|
Supplier#000005484 |saFdOR qW7AFY,3asPqiiAa11Mo22pCoN0BtPrKo |
||||||
|
Supplier#000005505 |d2sbjG43KwMPX |
||||||
|
Supplier#000005506 |On f5ypzoWgB |
||||||
|
Supplier#000005631 |14TVrjlzo2SJEBYCDgpMwTlvwSqC |
||||||
|
Supplier#000005642 |ZwKxAv3V40tW E8P7Qwu,zlu,kPsL |
||||||
|
Supplier#000005686 |f2RBKec2T1NIi7yS M |
||||||
|
Supplier#000005730 |5rkb0PSews HvxkL8JaD41UpnSF2cg8H1 |
||||||
|
Supplier#000005736 |2dq XTYhtYWSfp |
||||||
|
Supplier#000005737 |dmEWcS32C3kx,d,B95 OmYn48 |
||||||
|
Supplier#000005797 |,o,OebwRbSDmVl9gN9fpWPCiqB UogvlSR |
||||||
|
Supplier#000005875 |lK,sYiGzB94hSyHy9xvSZFbVQNCZe2LXZuGbS |
||||||
|
Supplier#000005974 |REhR5jE,lLusQXvf54SwYySgsSSVFhu |
||||||
|
Supplier#000006059 |4m0cv8MwJ9yX2vlwI Z |
||||||
|
Supplier#000006065 |UiI2Cy3W4Tu5sLk LuvXLRy6KihlGv |
||||||
|
Supplier#000006093 |KJNUg1odUT2wtCS2s6PrH3D6fd |
||||||
|
Supplier#000006099 |aZilwQKYDTVPoK |
||||||
|
Supplier#000006109 |rY5gbfh3dKHnylcQUTPGCwnbe |
||||||
|
Supplier#000006217 |RVN23SYT9jenUeaWGXUd |
||||||
|
Supplier#000006297 |73VRDOO56GUCyvc40oYJ |
||||||
|
Supplier#000006435 |xIgE69XszYbnO4Eon7cHHO8y |
||||||
|
Supplier#000006463 |7 wkdj2EO49iotley2kmIM ADpLSszGV3RNWj |
||||||
|
Supplier#000006478 |bQYPnj9lpmW3U |
||||||
|
Supplier#000006521 |b9 2zjHzxR |
||||||
|
Supplier#000006642 |N,CUclSqRLJcS8zQ |
||||||
|
Supplier#000006659 |iTLsnvD8D2GzWNUv kRInwRjk5rDeEmfup1 |
||||||
|
Supplier#000006669 |NQ4Yryj624p7K53 |
||||||
|
Supplier#000006748 |rC,2rEn8gKDIS5Q0dJEoiF |
||||||
|
Supplier#000006761 |n4jhxGMqB5prD1HhpLvwrWStOLlla |
||||||
|
Supplier#000006808 |HGd2Xo 9nEcHJhZvXjXxWKIpApT |
||||||
|
Supplier#000006858 |fnlINT885vBBhsWwTGiZ0o22thwGY16h GHJj21 |
||||||
|
Supplier#000006946 |To6Slo0GJTqcIvD |
||||||
|
Supplier#000006949 |mLxYUJhsGcLtKe ,GFirNu183AvT |
||||||
|
Supplier#000007072 |2tRyX9M1a 4Rcm57s779F1ANG9jlpK |
||||||
|
Supplier#000007098 |G3j8g0KC4OcbAu2OVoPHrXQWMCUdjq8wgCHOExu |
||||||
|
Supplier#000007132 |xonvn0KAQIL3p8kYk HC1FSSDSUSTC |
||||||
|
Supplier#000007135 |ls DoKV7V5ulfQy9V |
||||||
|
Supplier#000007147 |Xzb16kC63wmLVYexUEgB0hXFvHkjT5iPpq |
||||||
|
Supplier#000007160 |TqDGBULB3cTqIT6FKDvm9BS4e4v,zwYiQPb |
||||||
|
Supplier#000007169 |tEc95D2moN9S84nd55O,dlnW |
||||||
|
Supplier#000007278 |I2ae3rS7KVF8GVHtB |
||||||
|
Supplier#000007365 |51xhROLvQMJ05DndtZWt |
||||||
|
Supplier#000007398 |V8eE6oZ00OFNU, |
||||||
|
Supplier#000007402 |4UVv58ery1rjmqSR5 |
||||||
|
Supplier#000007448 |yhhpWiJi7EJ6Q5VCaQ |
||||||
|
Supplier#000007458 |BYuucapYkptZl6fnd2QaDyZmI9gR1Ih16e |
||||||
|
Supplier#000007477 |9m9j0wfhWzCvVHxkU,PpAxwSH0h |
||||||
|
Supplier#000007509 |q8,V6LJRoHJjHcOuSG7aLTMg |
||||||
|
Supplier#000007561 |rMcFg2530VC |
||||||
|
Supplier#000007616 |R IovIqzDi3,QHnaqZk1xS4hGAgelhP4yj |
||||||
|
Supplier#000007760 |JsPE18PvcdFTK |
||||||
|
Supplier#000007801 |69fi,U1r6enUb |
||||||
|
Supplier#000007865 |5cDGCS,T6N |
||||||
|
Supplier#000007885 |u3sicchh5ZpyTUpN1cJKNcAoabIWgY |
||||||
|
Supplier#000007926 |ErzCF80K9Uy |
||||||
|
Supplier#000007998 |LnASFBfYRFOo9d6d,asBvVq9Lo2P |
||||||
|
Supplier#000008090 |eonbJZvoDFYBNUinYfp6yERIg |
||||||
|
Supplier#000008224 |TWxt9f,LVER |
||||||
|
Supplier#000008231 |IK7eGw Yj90sTdpsP,vcqWxLB |
||||||
|
Supplier#000008243 |2AyePMkDqmzVzjGTizXthFLo8h EiudCMxOmIIG |
||||||
|
Supplier#000008323 |75I18sZmASwm POeheRMdj9tmpyeQ,BfCXN5BIAb |
||||||
|
Supplier#000008366 |h778cEj14BuW9OEKlvPTWq4iwASR6EBBXN7zeS8 |
||||||
|
Supplier#000008532 |Uc29q4,5xVdDOF87UZrxhr4xWS0ihEUXuh |
||||||
|
Supplier#000008595 |MH0iB73GQ3z UW3O DbCbqmc |
||||||
|
Supplier#000008610 |SgVgP90vP452sUNTgzL9zKwXHXAzV6tV |
||||||
|
Supplier#000008683 |gLuGcugfpJSeGQARnaHNCaWnGaqsNnjyl20 |
||||||
|
Supplier#000008705 |aE,trRNdPx,4yinTD9O3DebDIp |
||||||
|
Supplier#000008742 |HmPlQEzKCPEcTUL14,kKq |
||||||
|
Supplier#000008841 |I 85Lu1sekbg2xrSIzm0 |
||||||
|
Supplier#000008872 |8D 45GgxJO2OwwYP9S4AaXJKvDwPfLM |
||||||
|
Supplier#000008879 |rDSA,D9oPM,65NMWEFrmGKAu |
||||||
|
Supplier#000008967 |2kwEHyMG 7FwozNImAUE6mH0hYtqYculJM |
||||||
|
Supplier#000008972 |w2vF6 D5YZO3visPXsqVfLADTK |
||||||
|
Supplier#000009032 |qK,trB6Sdy4Dz1BRUFNy |
||||||
|
Supplier#000009043 |57OPvKH4qyXIZ7IzYeCaw11a5N1Ki9f1WWmVQ, |
||||||
|
Supplier#000009278 |RqYTzgxj93CLX 0mcYfCENOefD |
||||||
|
Supplier#000009326 |XmiC,uy36B9,fb0zhcjaagiXQutg |
||||||
|
Supplier#000009430 |igRqmneFt |
||||||
|
Supplier#000009549 |h3RVchUf8MzY46IzbZ0ng09 |
||||||
|
Supplier#000009601 |51m637bO,Rw5DnHWFUvLacRx9 |
||||||
|
Supplier#000009709 |rRnCbHYgDgl9PZYnyWKVYSUW0vKg |
||||||
|
Supplier#000009753 |wLhVEcRmd7PkJF4FBnGK7Z |
||||||
|
Supplier#000009799 | 4wNjXGa4OKWl |
||||||
|
Supplier#000009811 |E3iuyq7UnZxU7oPZIe2Gu6 |
||||||
|
Supplier#000009812 |APFRMy3lCbgFga53n5t9DxzFPQPgnjrGt32 |
||||||
|
Supplier#000009846 |57sNwJJ3PtBDu,hMPP5QvpcOcSNRXn3PypJJrh |
||||||
|
Supplier#000009899 |7XdpAHrzr1t,UQFZE |
||||||
|
Supplier#000009974 |7wJ,J5DKcxSU4Kp1cQLpbcAvB5AsvKT |
@ -0,0 +1,101 @@ |
|||||||
|
s_name |numwait |
||||||
|
Supplier#000002829 | 20 |
||||||
|
Supplier#000005808 | 18 |
||||||
|
Supplier#000000262 | 17 |
||||||
|
Supplier#000000496 | 17 |
||||||
|
Supplier#000002160 | 17 |
||||||
|
Supplier#000002301 | 17 |
||||||
|
Supplier#000002540 | 17 |
||||||
|
Supplier#000003063 | 17 |
||||||
|
Supplier#000005178 | 17 |
||||||
|
Supplier#000008331 | 17 |
||||||
|
Supplier#000002005 | 16 |
||||||
|
Supplier#000002095 | 16 |
||||||
|
Supplier#000005799 | 16 |
||||||
|
Supplier#000005842 | 16 |
||||||
|
Supplier#000006450 | 16 |
||||||
|
Supplier#000006939 | 16 |
||||||
|
Supplier#000009200 | 16 |
||||||
|
Supplier#000009727 | 16 |
||||||
|
Supplier#000000486 | 15 |
||||||
|
Supplier#000000565 | 15 |
||||||
|
Supplier#000001046 | 15 |
||||||
|
Supplier#000001047 | 15 |
||||||
|
Supplier#000001161 | 15 |
||||||
|
Supplier#000001336 | 15 |
||||||
|
Supplier#000001435 | 15 |
||||||
|
Supplier#000003075 | 15 |
||||||
|
Supplier#000003335 | 15 |
||||||
|
Supplier#000005649 | 15 |
||||||
|
Supplier#000006027 | 15 |
||||||
|
Supplier#000006795 | 15 |
||||||
|
Supplier#000006800 | 15 |
||||||
|
Supplier#000006824 | 15 |
||||||
|
Supplier#000007131 | 15 |
||||||
|
Supplier#000007382 | 15 |
||||||
|
Supplier#000008913 | 15 |
||||||
|
Supplier#000009787 | 15 |
||||||
|
Supplier#000000633 | 14 |
||||||
|
Supplier#000001960 | 14 |
||||||
|
Supplier#000002323 | 14 |
||||||
|
Supplier#000002490 | 14 |
||||||
|
Supplier#000002993 | 14 |
||||||
|
Supplier#000003101 | 14 |
||||||
|
Supplier#000004489 | 14 |
||||||
|
Supplier#000005435 | 14 |
||||||
|
Supplier#000005583 | 14 |
||||||
|
Supplier#000005774 | 14 |
||||||
|
Supplier#000007579 | 14 |
||||||
|
Supplier#000008180 | 14 |
||||||
|
Supplier#000008695 | 14 |
||||||
|
Supplier#000009224 | 14 |
||||||
|
Supplier#000000357 | 13 |
||||||
|
Supplier#000000436 | 13 |
||||||
|
Supplier#000000610 | 13 |
||||||
|
Supplier#000000788 | 13 |
||||||
|
Supplier#000000889 | 13 |
||||||
|
Supplier#000001062 | 13 |
||||||
|
Supplier#000001498 | 13 |
||||||
|
Supplier#000002056 | 13 |
||||||
|
Supplier#000002312 | 13 |
||||||
|
Supplier#000002344 | 13 |
||||||
|
Supplier#000002596 | 13 |
||||||
|
Supplier#000002615 | 13 |
||||||
|
Supplier#000002978 | 13 |
||||||
|
Supplier#000003048 | 13 |
||||||
|
Supplier#000003234 | 13 |
||||||
|
Supplier#000003727 | 13 |
||||||
|
Supplier#000003806 | 13 |
||||||
|
Supplier#000004472 | 13 |
||||||
|
Supplier#000005236 | 13 |
||||||
|
Supplier#000005906 | 13 |
||||||
|
Supplier#000006241 | 13 |
||||||
|
Supplier#000006326 | 13 |
||||||
|
Supplier#000006384 | 13 |
||||||
|
Supplier#000006394 | 13 |
||||||
|
Supplier#000006624 | 13 |
||||||
|
Supplier#000006629 | 13 |
||||||
|
Supplier#000006682 | 13 |
||||||
|
Supplier#000006737 | 13 |
||||||
|
Supplier#000006825 | 13 |
||||||
|
Supplier#000007021 | 13 |
||||||
|
Supplier#000007417 | 13 |
||||||
|
Supplier#000007497 | 13 |
||||||
|
Supplier#000007602 | 13 |
||||||
|
Supplier#000008134 | 13 |
||||||
|
Supplier#000008234 | 13 |
||||||
|
Supplier#000009435 | 13 |
||||||
|
Supplier#000009436 | 13 |
||||||
|
Supplier#000009564 | 13 |
||||||
|
Supplier#000009896 | 13 |
||||||
|
Supplier#000000379 | 12 |
||||||
|
Supplier#000000673 | 12 |
||||||
|
Supplier#000000762 | 12 |
||||||
|
Supplier#000000811 | 12 |
||||||
|
Supplier#000000821 | 12 |
||||||
|
Supplier#000001337 | 12 |
||||||
|
Supplier#000001916 | 12 |
||||||
|
Supplier#000001925 | 12 |
||||||
|
Supplier#000002039 | 12 |
||||||
|
Supplier#000002357 | 12 |
||||||
|
Supplier#000002483 | 12 |
@ -0,0 +1,8 @@ |
|||||||
|
cntrycode |numcust |totacctbal |
||||||
|
13 | 888|6737713.99 |
||||||
|
17 | 861|6460573.72 |
||||||
|
18 | 964|7236687.40 |
||||||
|
23 | 892|6701457.95 |
||||||
|
29 | 948|7158866.63 |
||||||
|
30 | 909|6808436.13 |
||||||
|
31 | 922|6806670.18 |
@ -0,0 +1,11 @@ |
|||||||
|
l_orderkey |revenue |o_orderdat|o_shippriority |
||||||
|
2456423|406181.01|1995-03-05| 0 |
||||||
|
3459808|405838.70|1995-03-04| 0 |
||||||
|
492164|390324.06|1995-02-19| 0 |
||||||
|
1188320|384537.94|1995-03-09| 0 |
||||||
|
2435712|378673.06|1995-02-26| 0 |
||||||
|
4878020|378376.80|1995-03-12| 0 |
||||||
|
5521732|375153.92|1995-03-13| 0 |
||||||
|
2628192|373133.31|1995-02-22| 0 |
||||||
|
993600|371407.46|1995-03-05| 0 |
||||||
|
2300070|367371.15|1995-03-13| 0 |
@ -0,0 +1,6 @@ |
|||||||
|
o_orderpriority|order_count |
||||||
|
1-URGENT | 10594 |
||||||
|
2-HIGH | 10476 |
||||||
|
3-MEDIUM | 10410 |
||||||
|
4-NOT SPECIFIED| 10556 |
||||||
|
5-LOW | 10487 |
@ -0,0 +1,6 @@ |
|||||||
|
n_name |revenue |
||||||
|
INDONESIA |55502041.17 |
||||||
|
VIETNAM |55295087.00 |
||||||
|
CHINA |53724494.26 |
||||||
|
INDIA |52035512.00 |
||||||
|
JAPAN |45410175.70 |
@ -0,0 +1,2 @@ |
|||||||
|
revenue |
||||||
|
123141078.23 |
@ -0,0 +1,5 @@ |
|||||||
|
supp_nation |cust_nation |l_year |revenue |
||||||
|
FRANCE |GERMANY | 1995|54639732.73 |
||||||
|
FRANCE |GERMANY | 1996|54633083.31 |
||||||
|
GERMANY |FRANCE | 1995|52531746.67 |
||||||
|
GERMANY |FRANCE | 1996|52520549.02 |
@ -0,0 +1,3 @@ |
|||||||
|
o_year |mkt_share |
||||||
|
1995|0.03 |
||||||
|
1996|0.04 |
@ -0,0 +1,176 @@ |
|||||||
|
nation |o_year |sum_profit |
||||||
|
ALGERIA | 1998|27136900.18 |
||||||
|
ALGERIA | 1997|48611833.50 |
||||||
|
ALGERIA | 1996|48285482.68 |
||||||
|
ALGERIA | 1995|44402273.60 |
||||||
|
ALGERIA | 1994|48694008.07 |
||||||
|
ALGERIA | 1993|46044207.78 |
||||||
|
ALGERIA | 1992|45636849.49 |
||||||
|
ARGENTINA | 1998|28341663.78 |
||||||
|
ARGENTINA | 1997|47143964.12 |
||||||
|
ARGENTINA | 1996|45255278.60 |
||||||
|
ARGENTINA | 1995|45631769.21 |
||||||
|
ARGENTINA | 1994|48268856.35 |
||||||
|
ARGENTINA | 1993|48605593.62 |
||||||
|
ARGENTINA | 1992|46654240.75 |
||||||
|
BRAZIL | 1998|26527736.40 |
||||||
|
BRAZIL | 1997|45640660.77 |
||||||
|
BRAZIL | 1996|45090647.16 |
||||||
|
BRAZIL | 1995|44015888.51 |
||||||
|
BRAZIL | 1994|44854218.89 |
||||||
|
BRAZIL | 1993|45766603.74 |
||||||
|
BRAZIL | 1992|45280216.80 |
||||||
|
CANADA | 1998|26828985.39 |
||||||
|
CANADA | 1997|44849954.32 |
||||||
|
CANADA | 1996|46307936.11 |
||||||
|
CANADA | 1995|47311993.04 |
||||||
|
CANADA | 1994|46691491.96 |
||||||
|
CANADA | 1993|46634791.11 |
||||||
|
CANADA | 1992|45873849.69 |
||||||
|
CHINA | 1998|27510180.17 |
||||||
|
CHINA | 1997|46123865.41 |
||||||
|
CHINA | 1996|49532807.06 |
||||||
|
CHINA | 1995|46734651.48 |
||||||
|
CHINA | 1994|46397896.61 |
||||||
|
CHINA | 1993|49634673.95 |
||||||
|
CHINA | 1992|46949457.64 |
||||||
|
EGYPT | 1998|28401491.80 |
||||||
|
EGYPT | 1997|47674857.68 |
||||||
|
EGYPT | 1996|47745727.55 |
||||||
|
EGYPT | 1995|45897160.68 |
||||||
|
EGYPT | 1994|47194895.23 |
||||||
|
EGYPT | 1993|49133627.65 |
||||||
|
EGYPT | 1992|47000574.50 |
||||||
|
ETHIOPIA | 1998|25135046.14 |
||||||
|
ETHIOPIA | 1997|43010596.08 |
||||||
|
ETHIOPIA | 1996|43636287.19 |
||||||
|
ETHIOPIA | 1995|43575757.33 |
||||||
|
ETHIOPIA | 1994|41597208.53 |
||||||
|
ETHIOPIA | 1993|42622804.16 |
||||||
|
ETHIOPIA | 1992|44385735.68 |
||||||
|
FRANCE | 1998|26210392.28 |
||||||
|
FRANCE | 1997|42392969.47 |
||||||
|
FRANCE | 1996|43306317.97 |
||||||
|
FRANCE | 1995|46377408.43 |
||||||
|
FRANCE | 1994|43447352.99 |
||||||
|
FRANCE | 1993|43729961.06 |
||||||
|
FRANCE | 1992|44052308.43 |
||||||
|
GERMANY | 1998|25991257.11 |
||||||
|
GERMANY | 1997|43968355.81 |
||||||
|
GERMANY | 1996|45882074.80 |
||||||
|
GERMANY | 1995|43314338.31 |
||||||
|
GERMANY | 1994|44616995.44 |
||||||
|
GERMANY | 1993|45126645.91 |
||||||
|
GERMANY | 1992|44361141.21 |
||||||
|
INDIA | 1998|29626417.24 |
||||||
|
INDIA | 1997|51386111.34 |
||||||
|
INDIA | 1996|47571018.51 |
||||||
|
INDIA | 1995|49344062.28 |
||||||
|
INDIA | 1994|50106952.43 |
||||||
|
INDIA | 1993|48112766.70 |
||||||
|
INDIA | 1992|47914303.12 |
||||||
|
INDONESIA | 1998|27734909.68 |
||||||
|
INDONESIA | 1997|44593812.99 |
||||||
|
INDONESIA | 1996|44746729.81 |
||||||
|
INDONESIA | 1995|45593622.70 |
||||||
|
INDONESIA | 1994|45988483.88 |
||||||
|
INDONESIA | 1993|46147963.79 |
||||||
|
INDONESIA | 1992|45185777.07 |
||||||
|
IRAN | 1998|26661608.93 |
||||||
|
IRAN | 1997|45019114.17 |
||||||
|
IRAN | 1996|45891397.10 |
||||||
|
IRAN | 1995|44414285.23 |
||||||
|
IRAN | 1994|43696360.48 |
||||||
|
IRAN | 1993|45362775.81 |
||||||
|
IRAN | 1992|43052338.41 |
||||||
|
IRAQ | 1998|31188498.19 |
||||||
|
IRAQ | 1997|48585307.52 |
||||||
|
IRAQ | 1996|50036593.84 |
||||||
|
IRAQ | 1995|48774801.73 |
||||||
|
IRAQ | 1994|48795847.23 |
||||||
|
IRAQ | 1993|47435691.51 |
||||||
|
IRAQ | 1992|47562355.66 |
||||||
|
JAPAN | 1998|24694102.17 |
||||||
|
JAPAN | 1997|42377052.35 |
||||||
|
JAPAN | 1996|40267778.91 |
||||||
|
JAPAN | 1995|40925317.47 |
||||||
|
JAPAN | 1994|41159518.31 |
||||||
|
JAPAN | 1993|39589074.28 |
||||||
|
JAPAN | 1992|39113493.91 |
||||||
|
JORDAN | 1998|23489867.79 |
||||||
|
JORDAN | 1997|41615962.66 |
||||||
|
JORDAN | 1996|41860855.47 |
||||||
|
JORDAN | 1995|39931672.09 |
||||||
|
JORDAN | 1994|40707555.46 |
||||||
|
JORDAN | 1993|39060405.47 |
||||||
|
JORDAN | 1992|41657604.27 |
||||||
|
KENYA | 1998|25566337.43 |
||||||
|
KENYA | 1997|43108847.90 |
||||||
|
KENYA | 1996|43482953.54 |
||||||
|
KENYA | 1995|42517988.98 |
||||||
|
KENYA | 1994|43612479.45 |
||||||
|
KENYA | 1993|42724038.76 |
||||||
|
KENYA | 1992|43217106.21 |
||||||
|
MOROCCO | 1998|24915496.88 |
||||||
|
MOROCCO | 1997|42698382.85 |
||||||
|
MOROCCO | 1996|42986113.50 |
||||||
|
MOROCCO | 1995|42316089.16 |
||||||
|
MOROCCO | 1994|43458604.60 |
||||||
|
MOROCCO | 1993|42672288.07 |
||||||
|
MOROCCO | 1992|42800781.64 |
||||||
|
MOZAMBIQUE | 1998|28279876.03 |
||||||
|
MOZAMBIQUE | 1997|51159216.23 |
||||||
|
MOZAMBIQUE | 1996|48072525.06 |
||||||
|
MOZAMBIQUE | 1995|48905200.60 |
||||||
|
MOZAMBIQUE | 1994|46092076.28 |
||||||
|
MOZAMBIQUE | 1993|48555926.27 |
||||||
|
MOZAMBIQUE | 1992|47809075.12 |
||||||
|
PERU | 1998|26713966.27 |
||||||
|
PERU | 1997|48324008.60 |
||||||
|
PERU | 1996|50310008.86 |
||||||
|
PERU | 1995|49647080.96 |
||||||
|
PERU | 1994|46420910.28 |
||||||
|
PERU | 1993|51536906.25 |
||||||
|
PERU | 1992|47711665.31 |
||||||
|
ROMANIA | 1998|27271993.10 |
||||||
|
ROMANIA | 1997|45063059.20 |
||||||
|
ROMANIA | 1996|47492335.03 |
||||||
|
ROMANIA | 1995|45710636.29 |
||||||
|
ROMANIA | 1994|46088041.11 |
||||||
|
ROMANIA | 1993|47515092.56 |
||||||
|
ROMANIA | 1992|44111439.80 |
||||||
|
RUSSIA | 1998|27935323.73 |
||||||
|
RUSSIA | 1997|48222347.29 |
||||||
|
RUSSIA | 1996|47553559.49 |
||||||
|
RUSSIA | 1995|46755990.10 |
||||||
|
RUSSIA | 1994|48000515.62 |
||||||
|
RUSSIA | 1993|48569624.51 |
||||||
|
RUSSIA | 1992|47672831.53 |
||||||
|
SAUDI ARABIA | 1998|27113516.84 |
||||||
|
SAUDI ARABIA | 1997|46690468.96 |
||||||
|
SAUDI ARABIA | 1996|47775782.67 |
||||||
|
SAUDI ARABIA | 1995|46657107.83 |
||||||
|
SAUDI ARABIA | 1994|48181672.81 |
||||||
|
SAUDI ARABIA | 1993|45692556.44 |
||||||
|
SAUDI ARABIA | 1992|48924913.27 |
||||||
|
UNITED KINGDOM | 1998|26366682.88 |
||||||
|
UNITED KINGDOM | 1997|44518130.19 |
||||||
|
UNITED KINGDOM | 1996|45539729.62 |
||||||
|
UNITED KINGDOM | 1995|46845879.34 |
||||||
|
UNITED KINGDOM | 1994|43081609.57 |
||||||
|
UNITED KINGDOM | 1993|44770146.76 |
||||||
|
UNITED KINGDOM | 1992|44123402.55 |
||||||
|
UNITED STATES | 1998|27826593.68 |
||||||
|
UNITED STATES | 1997|46638572.36 |
||||||
|
UNITED STATES | 1996|46688280.55 |
||||||
|
UNITED STATES | 1995|48951591.62 |
||||||
|
UNITED STATES | 1994|45099092.06 |
||||||
|
UNITED STATES | 1993|46181600.53 |
||||||
|
UNITED STATES | 1992|46168214.09 |
||||||
|
VIETNAM | 1998|27281931.00 |
||||||
|
VIETNAM | 1997|48735914.18 |
||||||
|
VIETNAM | 1996|47824595.90 |
||||||
|
VIETNAM | 1995|48235135.80 |
||||||
|
VIETNAM | 1994|47729256.33 |
||||||
|
VIETNAM | 1993|45352676.87 |
||||||
|
VIETNAM | 1992|47846355.65 |
@ -0,0 +1,256 @@ |
|||||||
|
/*
|
||||||
|
* $Id: bcd2.c,v 1.2 2005/01/03 20:08:58 jms Exp $ |
||||||
|
* |
||||||
|
* Revision History |
||||||
|
* =================== |
||||||
|
* $Log: bcd2.c,v $ |
||||||
|
* Revision 1.2 2005/01/03 20:08:58 jms |
||||||
|
* change line terminations |
||||||
|
* |
||||||
|
* Revision 1.1.1.1 2004/11/24 23:31:45 jms |
||||||
|
* re-establish external server |
||||||
|
* |
||||||
|
* Revision 1.1.1.1 2003/04/03 18:54:21 jms |
||||||
|
* recreation after CVS crash |
||||||
|
* |
||||||
|
* Revision 1.1.1.1 2003/04/03 18:54:21 jms |
||||||
|
* initial checkin |
||||||
|
* |
||||||
|
* |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* bcd.c: conversion routines for multi-byte arithmetic |
||||||
|
* |
||||||
|
* defined routines: |
||||||
|
* bin_bcd2(long binary, long *low_res, long *high_res) |
||||||
|
* bcd2_bin(long *dest, long bcd) |
||||||
|
* bcd2_add(long *bcd_low, long *bcd_high, long addend) |
||||||
|
* bcd2_sub(long *bcd_low, long *bcd_high, long subend) |
||||||
|
* bcd2_mul(long *bcd_low, long *bcd_high, long multiplier) |
||||||
|
* bcd2_div(long *bcd_low, long *bcd_high, long divisor) |
||||||
|
* long bcd2_mod(long *bcd_low, long *bcd_high, long modulo) |
||||||
|
* long bcd2_cmp(long *bcd_low, long *bcd_high, long compare) |
||||||
|
*/ |
||||||
|
#include <stdio.h> |
||||||
|
#include "bcd2.h" /* for function prototypes */ |
||||||
|
|
||||||
|
#define DIGITS_PER_LONG 7 |
||||||
|
#define WORD_DIVISOR 10000000 |
||||||
|
#define GET_DIGIT(num, low, high) \ |
||||||
|
((num) >= DIGITS_PER_LONG)? \
|
||||||
|
(high & (0xF << (4 * ((num) - DIGITS_PER_LONG)))) \
|
||||||
|
>> (((num) - DIGITS_PER_LONG) * 4): \
|
||||||
|
(low & (0xF << (4 * (num)))) >> ((num) * 4) |
||||||
|
#define SET_DIGIT(value, num, low, high) \ |
||||||
|
if ((num) >= DIGITS_PER_LONG) \
|
||||||
|
{ \
|
||||||
|
*high &= \
|
||||||
|
(0xFFFFFFF ^ (0xF << (4 * ((num) - DIGITS_PER_LONG)))); \
|
||||||
|
*high |= (value << (4 * ((num) - DIGITS_PER_LONG))); \
|
||||||
|
} \
|
||||||
|
else \
|
||||||
|
{ \
|
||||||
|
*low = (*low & (0xFFFFFFF ^ (0xF << (4 * (num))))); \
|
||||||
|
*low |= (value << (4 * (num))); \
|
||||||
|
} |
||||||
|
int
|
||||||
|
bin_bcd2(long binary, long *low_res, long *high_res) |
||||||
|
{ |
||||||
|
char number[15], |
||||||
|
*current; |
||||||
|
int count;
|
||||||
|
long *dest; |
||||||
|
|
||||||
|
*low_res = *high_res = 0; |
||||||
|
sprintf(number, "%014ld", binary); |
||||||
|
for (current = number, count=13; *current; current++, count--) |
||||||
|
{ |
||||||
|
dest = (count < DIGITS_PER_LONG)?low_res:high_res; |
||||||
|
*dest = *dest << 4; |
||||||
|
*dest |= *current - '0'; |
||||||
|
} |
||||||
|
return(0); |
||||||
|
} |
||||||
|
|
||||||
|
int |
||||||
|
bcd2_bin(long *dest, long bcd) |
||||||
|
{ |
||||||
|
int count; |
||||||
|
long mask; |
||||||
|
|
||||||
|
count = DIGITS_PER_LONG - 1; |
||||||
|
mask = 0xF000000; |
||||||
|
*dest = 0; |
||||||
|
while (mask) |
||||||
|
{ |
||||||
|
*dest *= 10; |
||||||
|
*dest += (bcd & mask) >> (4 * count); |
||||||
|
mask = mask >> 4; |
||||||
|
count -= 1; |
||||||
|
} |
||||||
|
return(0); |
||||||
|
} |
||||||
|
|
||||||
|
int |
||||||
|
bcd2_add(long *bcd_low, long *bcd_high, long addend) |
||||||
|
{ |
||||||
|
long tmp_lo, tmp_hi, carry, res; |
||||||
|
int digit; |
||||||
|
|
||||||
|
bin_bcd2(addend, &tmp_lo, &tmp_hi); |
||||||
|
carry = 0; |
||||||
|
for (digit=0; digit < 14; digit++) |
||||||
|
{ |
||||||
|
res = GET_DIGIT(digit, *bcd_low, *bcd_high);
|
||||||
|
res += GET_DIGIT(digit, tmp_lo, tmp_hi); |
||||||
|
res += carry; |
||||||
|
carry = res / 10; |
||||||
|
res %= 10; |
||||||
|
SET_DIGIT(res, digit, bcd_low, bcd_high); |
||||||
|
} |
||||||
|
return(carry); |
||||||
|
} |
||||||
|
|
||||||
|
int |
||||||
|
bcd2_sub(long *bcd_low, long *bcd_high, long subend) |
||||||
|
{ |
||||||
|
long tmp_lo, tmp_hi, carry, res; |
||||||
|
int digit; |
||||||
|
|
||||||
|
bin_bcd2(subend, &tmp_lo, &tmp_hi); |
||||||
|
carry = 0; |
||||||
|
for (digit=0; digit < 14; digit++) |
||||||
|
{ |
||||||
|
res = GET_DIGIT(digit, *bcd_low, *bcd_high);
|
||||||
|
res -= GET_DIGIT(digit, tmp_lo, tmp_hi); |
||||||
|
res -= carry; |
||||||
|
if (res < 0)
|
||||||
|
{ |
||||||
|
res += 10; |
||||||
|
carry = 1; |
||||||
|
} |
||||||
|
SET_DIGIT(res, digit, bcd_low, bcd_high); |
||||||
|
} |
||||||
|
return(carry); |
||||||
|
} |
||||||
|
|
||||||
|
int |
||||||
|
bcd2_mul(long *bcd_low, long *bcd_high, long multiplier) |
||||||
|
{ |
||||||
|
long tmp_lo, tmp_hi, carry, m_lo, m_hi, m1, m2; |
||||||
|
int udigit, ldigit, res; |
||||||
|
|
||||||
|
tmp_lo = *bcd_low; |
||||||
|
tmp_hi = *bcd_high; |
||||||
|
bin_bcd2(multiplier, &m_lo, &m_hi); |
||||||
|
*bcd_low = 0; |
||||||
|
*bcd_high = 0; |
||||||
|
carry = 0; |
||||||
|
for (ldigit=0; ldigit < 14; ldigit++) |
||||||
|
{ |
||||||
|
m1 = GET_DIGIT(ldigit, m_lo, m_hi);
|
||||||
|
carry = 0; |
||||||
|
for (udigit=0; udigit < 14; udigit++) |
||||||
|
{ |
||||||
|
m2 = GET_DIGIT(udigit, tmp_lo, tmp_hi); |
||||||
|
res = m1 * m2; |
||||||
|
res += carry; |
||||||
|
if (udigit + ldigit < 14) |
||||||
|
{ |
||||||
|
carry = GET_DIGIT(udigit + ldigit, *bcd_low, *bcd_high); |
||||||
|
res += carry; |
||||||
|
} |
||||||
|
carry = res / 10; |
||||||
|
res %= 10; |
||||||
|
if (udigit + ldigit < 14) |
||||||
|
SET_DIGIT(res, udigit + ldigit, bcd_low, bcd_high); |
||||||
|
} |
||||||
|
} |
||||||
|
return(carry); |
||||||
|
} |
||||||
|
|
||||||
|
int |
||||||
|
bcd2_div(long *bcd_low, long *bcd_high, long divisor) |
||||||
|
{ |
||||||
|
long tmp_lo, tmp_hi, carry, d1, res, digit; |
||||||
|
|
||||||
|
|
||||||
|
carry = 0; |
||||||
|
tmp_lo = *bcd_low; |
||||||
|
tmp_hi = *bcd_high; |
||||||
|
*bcd_low = *bcd_high = 0; |
||||||
|
for (digit=13; digit >= 0; digit--) |
||||||
|
{ |
||||||
|
d1 = GET_DIGIT(digit, tmp_lo, tmp_hi); |
||||||
|
d1 += 10 * carry;
|
||||||
|
res = d1 / divisor; |
||||||
|
carry = d1 % divisor; |
||||||
|
SET_DIGIT(res, digit, bcd_low, bcd_high); |
||||||
|
} |
||||||
|
return(carry); |
||||||
|
} |
||||||
|
|
||||||
|
long |
||||||
|
bcd2_mod(long *bcd_low, long *bcd_high, long modulo) |
||||||
|
{ |
||||||
|
long tmp_low, tmp_high; |
||||||
|
|
||||||
|
tmp_low = *bcd_low; |
||||||
|
tmp_high = *bcd_high; |
||||||
|
while (tmp_high || tmp_low > modulo) |
||||||
|
bcd2_sub(&tmp_low, &tmp_high, modulo); |
||||||
|
return(tmp_low); |
||||||
|
} |
||||||
|
|
||||||
|
long |
||||||
|
bcd2_cmp(long *low1, long *high1, long comp) |
||||||
|
{ |
||||||
|
long temp = 0; |
||||||
|
|
||||||
|
bcd2_bin(&temp, *high1); |
||||||
|
if (temp > 214)
|
||||||
|
return(1); |
||||||
|
bcd2_bin(&temp, *low1); |
||||||
|
return(temp - comp); |
||||||
|
} |
||||||
|
|
||||||
|
#ifdef TEST_BCD |
||||||
|
#include <values.h> |
||||||
|
|
||||||
|
main() |
||||||
|
{ |
||||||
|
long bin, low_bcd, high_bcd; |
||||||
|
int i; |
||||||
|
|
||||||
|
bin = MAXINT; |
||||||
|
printf("%ld\n", bin); |
||||||
|
bin_bcd2(bin, &low_bcd, &high_bcd); |
||||||
|
printf("%ld %ld\n", high_bcd, low_bcd); |
||||||
|
bin = 0; |
||||||
|
bcd2_bin(&bin, high_bcd); |
||||||
|
bcd2_bin(&bin, low_bcd); |
||||||
|
printf( "%ld\n", bin); |
||||||
|
for (i=9; i >= 0; i--) |
||||||
|
printf("%dth digit in %d is %d\n",
|
||||||
|
i, bin, GET_DIGIT(i, low_bcd, high_bcd)); |
||||||
|
bcd2_add(&low_bcd, &high_bcd, MAXINT); |
||||||
|
bin = 0; |
||||||
|
bcd2_bin(&bin, high_bcd); |
||||||
|
high_bcd = bin; |
||||||
|
bin = 0; |
||||||
|
bcd2_bin(&bin, low_bcd); |
||||||
|
low_bcd = bin; |
||||||
|
printf( "%ld%07ld\n", high_bcd, low_bcd); |
||||||
|
bin_bcd2(14, &low_bcd, &high_bcd); |
||||||
|
bcd2_mul(&low_bcd, &high_bcd, 23L); |
||||||
|
bin = 0; |
||||||
|
bcd2_bin(&bin, high_bcd); |
||||||
|
bcd2_bin(&bin, low_bcd); |
||||||
|
printf( "%ld\n", bin); |
||||||
|
bcd2_div(&low_bcd, &high_bcd, 10L); |
||||||
|
bin = 0; |
||||||
|
bcd2_bin(&bin, high_bcd); |
||||||
|
bcd2_bin(&bin, low_bcd); |
||||||
|
printf( "%ld\n", bin); |
||||||
|
} |
||||||
|
#endif /* TEST */ |
@ -0,0 +1,28 @@ |
|||||||
|
/*
|
||||||
|
* $Id: bcd2.h,v 1.2 2005/01/03 20:08:58 jms Exp $ |
||||||
|
* |
||||||
|
* Revision History |
||||||
|
* =================== |
||||||
|
* $Log: bcd2.h,v $ |
||||||
|
* Revision 1.2 2005/01/03 20:08:58 jms |
||||||
|
* change line terminations |
||||||
|
* |
||||||
|
* Revision 1.1.1.1 2004/11/24 23:31:45 jms |
||||||
|
* re-establish external server |
||||||
|
* |
||||||
|
* Revision 1.1.1.1 2003/04/03 18:54:21 jms |
||||||
|
* recreation after CVS crash |
||||||
|
* |
||||||
|
* Revision 1.1.1.1 2003/04/03 18:54:21 jms |
||||||
|
* initial checkin |
||||||
|
* |
||||||
|
* |
||||||
|
*/ |
||||||
|
int bin_bcd2(long binary, long *low_res, long *high_res); |
||||||
|
int bcd2_bin(long *dest, long bcd); |
||||||
|
int bcd2_add(long *bcd_low, long *bcd_high, long addend); |
||||||
|
int bcd2_sub(long *bcd_low, long *bcd_high, long subend); |
||||||
|
int bcd2_mul(long *bcd_low, long *bcd_high, long multiplier); |
||||||
|
int bcd2_div(long *bcd_low, long *bcd_high, long divisor); |
||||||
|
long bcd2_mod(long *bcd_low, long *bcd_high, long modulo); |
||||||
|
long bcd2_cmp(long *bcd_low, long *bcd_high, long compare); |
Binary file not shown.
@ -0,0 +1,588 @@ |
|||||||
|
/*
|
||||||
|
* $Id: bm_utils.c,v 1.4 2006/04/12 18:00:55 jms Exp $ |
||||||
|
* |
||||||
|
* Revision History |
||||||
|
* =================== |
||||||
|
* $Log: bm_utils.c,v $ |
||||||
|
* Revision 1.4 2006/04/12 18:00:55 jms |
||||||
|
* add missing parameter to call to gen_seed |
||||||
|
* |
||||||
|
* Revision 1.3 2005/10/14 23:16:54 jms |
||||||
|
* fix for answer set compliance |
||||||
|
* |
||||||
|
* Revision 1.2 2005/01/03 20:08:58 jms |
||||||
|
* change line terminations |
||||||
|
* |
||||||
|
* Revision 1.1.1.1 2004/11/24 23:31:46 jms |
||||||
|
* re-establish external server |
||||||
|
* |
||||||
|
* Revision 1.3 2004/02/18 14:05:53 jms |
||||||
|
* porting changes for LINUX and 64 bit RNG |
||||||
|
* |
||||||
|
* Revision 1.2 2004/01/22 05:49:29 jms |
||||||
|
* AIX porting (AIX 5.1) |
||||||
|
* |
||||||
|
* Revision 1.1.1.1 2003/08/08 21:35:26 jms |
||||||
|
* recreation after CVS crash |
||||||
|
* |
||||||
|
* Revision 1.3 2003/08/08 21:35:26 jms |
||||||
|
* first integration of rng64 for o_custkey and l_partkey |
||||||
|
* |
||||||
|
* Revision 1.2 2003/08/07 17:58:34 jms |
||||||
|
* Convery RNG to 64bit space as preparation for new large scale RNG |
||||||
|
* |
||||||
|
* Revision 1.1.1.1 2003/04/03 18:54:21 jms |
||||||
|
* initial checkin |
||||||
|
* |
||||||
|
* |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* |
||||||
|
* Various routines that handle distributions, value selections and |
||||||
|
* seed value management for the DSS benchmark. Current functions: |
||||||
|
* env_config -- set config vars with optional environment override |
||||||
|
* yes_no -- ask simple yes/no question and return boolean result |
||||||
|
* a_rnd(min, max) -- random alphanumeric within length range |
||||||
|
* pick_str(size, set) -- select a string from the set of size |
||||||
|
* read_dist(file, name, distribution *) -- read named dist from file |
||||||
|
* tbl_open(path, mode) -- std fopen with lifenoise |
||||||
|
* julian(date) -- julian date correction |
||||||
|
* rowcnt(tbl) -- proper scaling of given table |
||||||
|
* e_str(set, min, max) -- build an embedded str |
||||||
|
* agg_str() -- build a string from the named set |
||||||
|
* dsscasecmp() -- version of strcasecmp() |
||||||
|
* dssncasecmp() -- version of strncasecmp() |
||||||
|
* getopt() |
||||||
|
* set_state() -- initialize the RNG |
||||||
|
*/ |
||||||
|
|
||||||
|
#include "config.h" |
||||||
|
#include "dss.h" |
||||||
|
#include <stdio.h> |
||||||
|
#include <time.h> |
||||||
|
#include <errno.h> |
||||||
|
#include <string.h> |
||||||
|
#ifdef HP |
||||||
|
#include <strings.h> |
||||||
|
#endif /* HP */ |
||||||
|
#include <ctype.h> |
||||||
|
#include <math.h> |
||||||
|
#ifndef _POSIX_SOURCE |
||||||
|
#include <malloc.h> |
||||||
|
#endif /* POSIX_SOURCE */ |
||||||
|
#include <fcntl.h> |
||||||
|
#include <sys/types.h> |
||||||
|
#include <sys/stat.h> |
||||||
|
/* Lines added by Chuck McDevitt for WIN32 support */ |
||||||
|
#ifdef WIN32 |
||||||
|
#ifndef _POSIX_ |
||||||
|
#include <io.h> |
||||||
|
#ifndef S_ISREG |
||||||
|
#define S_ISREG(m) ( ((m) & _S_IFMT) == _S_IFREG ) |
||||||
|
#define S_ISFIFO(m) ( ((m) & _S_IFMT) == _S_IFIFO ) |
||||||
|
#endif |
||||||
|
#endif |
||||||
|
#ifndef stat |
||||||
|
#define stat _stat |
||||||
|
#endif |
||||||
|
#ifndef fdopen |
||||||
|
#define fdopen _fdopen |
||||||
|
#endif |
||||||
|
#ifndef open |
||||||
|
#define open _open |
||||||
|
#endif |
||||||
|
#ifndef O_RDONLY |
||||||
|
#define O_RDONLY _O_RDONLY |
||||||
|
#endif |
||||||
|
#ifndef O_WRONLY |
||||||
|
#define O_WRONLY _O_WRONLY |
||||||
|
#endif |
||||||
|
#ifndef O_CREAT |
||||||
|
#define O_CREAT _O_CREAT |
||||||
|
#endif |
||||||
|
#endif |
||||||
|
/* End of lines added by Chuck McDevitt for WIN32 support */ |
||||||
|
#include "dsstypes.h" |
||||||
|
|
||||||
|
|
||||||
|
static char alpha_num[65] = |
||||||
|
"0123456789abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ,"; |
||||||
|
|
||||||
|
#if defined(__STDC__) || defined(__cplusplus) |
||||||
|
#define PROTO(s) s |
||||||
|
#else |
||||||
|
#define PROTO(s) () |
||||||
|
#endif |
||||||
|
|
||||||
|
#ifndef WIN32 |
||||||
|
char *getenv PROTO((const char *name)); |
||||||
|
#endif |
||||||
|
void usage(); |
||||||
|
long *permute_dist(distribution *d, long stream); |
||||||
|
extern seed_t Seed[]; |
||||||
|
|
||||||
|
/*
|
||||||
|
* env_config: look for a environmental variable setting and return its |
||||||
|
* value; otherwise return the default supplied |
||||||
|
*/ |
||||||
|
char * |
||||||
|
env_config(char *var, char *dflt) |
||||||
|
{ |
||||||
|
static char *evar; |
||||||
|
|
||||||
|
if ((evar = getenv(var)) != NULL) |
||||||
|
return (evar); |
||||||
|
else |
||||||
|
return (dflt); |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
* return the answer to a yes/no question as a boolean |
||||||
|
*/ |
||||||
|
long |
||||||
|
yes_no(char *prompt) |
||||||
|
{ |
||||||
|
char reply[128]; |
||||||
|
|
||||||
|
#ifdef WIN32 |
||||||
|
/* Disable warning about conditional expression is constant */
|
||||||
|
#pragma warning(disable:4127) |
||||||
|
#endif |
||||||
|
|
||||||
|
while (1) |
||||||
|
{ |
||||||
|
#ifdef WIN32 |
||||||
|
#pragma warning(default:4127) |
||||||
|
#endif |
||||||
|
printf("%s [Y/N]: ", prompt); |
||||||
|
fgets(reply, 128, stdin); |
||||||
|
switch (*reply) |
||||||
|
{ |
||||||
|
case 'y': |
||||||
|
case 'Y': |
||||||
|
return (1); |
||||||
|
case 'n': |
||||||
|
case 'N': |
||||||
|
return (0); |
||||||
|
default: |
||||||
|
printf("Please answer 'yes' or 'no'.\n"); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
* generate a random string with length randomly selected in [min, max] |
||||||
|
* and using the characters in alphanum (currently includes a space |
||||||
|
* and comma) |
||||||
|
*/ |
||||||
|
void |
||||||
|
a_rnd(int min, int max, int column, char *dest) |
||||||
|
{ |
||||||
|
DSS_HUGE i, |
||||||
|
len, |
||||||
|
char_int; |
||||||
|
|
||||||
|
RANDOM(len, min, max, column); |
||||||
|
for (i = 0; i < len; i++) |
||||||
|
{ |
||||||
|
if (i % 5 == 0) |
||||||
|
RANDOM(char_int, 0, MAX_LONG, column); |
||||||
|
*(dest + i) = alpha_num[char_int & 077]; |
||||||
|
char_int >>= 6; |
||||||
|
} |
||||||
|
*(dest + len) = '\0'; |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
* embed a randomly selected member of distribution d in alpha-numeric |
||||||
|
* noise of a length rendomly selected between min and max at a random |
||||||
|
* position |
||||||
|
*/ |
||||||
|
void |
||||||
|
e_str(distribution *d, int min, int max, int stream, char *dest) |
||||||
|
{ |
||||||
|
char strtmp[MAXAGG_LEN + 1]; |
||||||
|
DSS_HUGE loc; |
||||||
|
int len; |
||||||
|
|
||||||
|
a_rnd(min, max, stream, dest); |
||||||
|
pick_str(d, stream, strtmp); |
||||||
|
len = (int)strlen(strtmp); |
||||||
|
RANDOM(loc, 0, ((int)strlen(dest) - 1 - len), stream); |
||||||
|
strncpy(dest + loc, strtmp, len); |
||||||
|
|
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* return the string associate with the LSB of a uniformly selected |
||||||
|
* long in [1, max] where max is determined by the distribution |
||||||
|
* being queried |
||||||
|
*/ |
||||||
|
int |
||||||
|
pick_str(distribution *s, int c, char *target) |
||||||
|
{ |
||||||
|
long i = 0; |
||||||
|
DSS_HUGE j; |
||||||
|
|
||||||
|
RANDOM(j, 1, s->list[s->count - 1].weight, c); |
||||||
|
while (s->list[i].weight < j) |
||||||
|
i++; |
||||||
|
strcpy(target, s->list[i].text); |
||||||
|
return(i); |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
* unjulian (long date) -- return(date - STARTDATE) |
||||||
|
*/ |
||||||
|
long |
||||||
|
unjulian(long date) |
||||||
|
{ |
||||||
|
int i; |
||||||
|
long res = 0; |
||||||
|
|
||||||
|
for (i = STARTDATE / 1000; i < date / 1000; i++) |
||||||
|
res += 365 + LEAP(i); |
||||||
|
res += date % 1000 - 1; |
||||||
|
|
||||||
|
return(res); |
||||||
|
} |
||||||
|
|
||||||
|
long |
||||||
|
julian(long date) |
||||||
|
{ |
||||||
|
long offset; |
||||||
|
long result; |
||||||
|
long yr; |
||||||
|
long yend; |
||||||
|
|
||||||
|
offset = date - STARTDATE; |
||||||
|
result = STARTDATE; |
||||||
|
|
||||||
|
#ifdef WIN32 |
||||||
|
/* Disable warning about conditional expression is constant */
|
||||||
|
#pragma warning(disable:4127) |
||||||
|
#endif |
||||||
|
|
||||||
|
while (1) |
||||||
|
{ |
||||||
|
#ifdef WIN32 |
||||||
|
#pragma warning(default:4127) |
||||||
|
#endif |
||||||
|
yr = result / 1000; |
||||||
|
yend = yr * 1000 + 365 + LEAP(yr); |
||||||
|
if (result + offset > yend) /* overflow into next year */ |
||||||
|
{ |
||||||
|
offset -= yend - result + 1; |
||||||
|
result += 1000; |
||||||
|
continue; |
||||||
|
} |
||||||
|
else |
||||||
|
break; |
||||||
|
} |
||||||
|
return (result + offset); |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
* load a distribution from a flat file into the target structure; |
||||||
|
* should be rewritten to allow multiple dists in a file |
||||||
|
*/ |
||||||
|
void |
||||||
|
read_dist(char *path, char *name, distribution *target) |
||||||
|
{ |
||||||
|
FILE *fp; |
||||||
|
char line[256], |
||||||
|
token[256], |
||||||
|
*c; |
||||||
|
long weight, |
||||||
|
count = 0, |
||||||
|
name_set = 0; |
||||||
|
|
||||||
|
if (d_path == NULL) |
||||||
|
{ |
||||||
|
sprintf(line, "%s%c%s",
|
||||||
|
env_config(CONFIG_TAG, CONFIG_DFLT), PATH_SEP, path); |
||||||
|
fp = fopen(line, "r"); |
||||||
|
OPEN_CHECK(fp, line); |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
fp = fopen(d_path, "r"); |
||||||
|
OPEN_CHECK(fp, d_path); |
||||||
|
} |
||||||
|
while (fgets(line, sizeof(line), fp) != NULL) |
||||||
|
{ |
||||||
|
if ((c = strchr(line, '\n')) != NULL) |
||||||
|
*c = '\0'; |
||||||
|
if ((c = strchr(line, '#')) != NULL) |
||||||
|
*c = '\0'; |
||||||
|
if (*line == '\0') |
||||||
|
continue; |
||||||
|
|
||||||
|
if (!name_set) |
||||||
|
{ |
||||||
|
if (dsscasecmp(strtok(line, "\n\t "), "BEGIN")) |
||||||
|
continue; |
||||||
|
if (dsscasecmp(strtok(NULL, "\n\t "), name)) |
||||||
|
continue; |
||||||
|
name_set = 1; |
||||||
|
continue; |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
if (!dssncasecmp(line, "END", 3)) |
||||||
|
{ |
||||||
|
fclose(fp); |
||||||
|
return; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
if (sscanf(line, "%[^|]|%ld", token, &weight) != 2) |
||||||
|
continue; |
||||||
|
|
||||||
|
if (!dsscasecmp(token, "count")) |
||||||
|
{ |
||||||
|
target->count = weight; |
||||||
|
target->list = |
||||||
|
(set_member *) |
||||||
|
malloc((size_t)(weight * sizeof(set_member))); |
||||||
|
MALLOC_CHECK(target->list); |
||||||
|
target->max = 0; |
||||||
|
continue; |
||||||
|
} |
||||||
|
target->list[count].text = |
||||||
|
(char *) malloc((size_t)((int)strlen(token) + 1)); |
||||||
|
MALLOC_CHECK(target->list[count].text); |
||||||
|
strcpy(target->list[count].text, token); |
||||||
|
target->max += weight; |
||||||
|
target->list[count].weight = target->max; |
||||||
|
|
||||||
|
count += 1; |
||||||
|
} /* while fgets() */ |
||||||
|
|
||||||
|
if (count != target->count) |
||||||
|
{ |
||||||
|
fprintf(stderr, "Read error on dist '%s'\n", name); |
||||||
|
fclose(fp); |
||||||
|
exit(1); |
||||||
|
} |
||||||
|
target->permute = (long *)NULL; |
||||||
|
fclose(fp); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
* standard file open with life noise |
||||||
|
*/ |
||||||
|
|
||||||
|
FILE * |
||||||
|
tbl_open(int tbl, char *mode) |
||||||
|
{ |
||||||
|
char prompt[256]; |
||||||
|
char fullpath[256]; |
||||||
|
FILE *f; |
||||||
|
struct stat fstats; |
||||||
|
int retcode; |
||||||
|
|
||||||
|
|
||||||
|
if (*tdefs[tbl].name == PATH_SEP) |
||||||
|
strcpy(fullpath, tdefs[tbl].name); |
||||||
|
else |
||||||
|
sprintf(fullpath, "%s%c%s", |
||||||
|
env_config(PATH_TAG, PATH_DFLT), PATH_SEP, tdefs[tbl].name); |
||||||
|
|
||||||
|
retcode = stat(fullpath, &fstats); |
||||||
|
if (retcode) { |
||||||
|
if (errno != ENOENT) { |
||||||
|
fprintf(stderr, "stat(%s) failed.\n", fullpath); |
||||||
|
exit(-1); |
||||||
|
} else |
||||||
|
f = fopen(fullpath, mode); // create and open the file
|
||||||
|
} else { |
||||||
|
/* note this code asumes we are writing but tests if mode == r -jrg */ |
||||||
|
if (S_ISREG(fstats.st_mode) && !force && *mode != 'r' ) { |
||||||
|
sprintf(prompt, "Do you want to overwrite %s ?", fullpath); |
||||||
|
if (!yes_no(prompt)) |
||||||
|
exit(0); |
||||||
|
f = fopen(fullpath, mode); |
||||||
|
} else if (S_ISFIFO(fstats.st_mode)) |
||||||
|
{ |
||||||
|
retcode = |
||||||
|
open(fullpath, ((*mode == 'r')?O_RDONLY:O_WRONLY)|O_CREAT, 0664); |
||||||
|
f = fdopen(retcode, mode); |
||||||
|
} |
||||||
|
else |
||||||
|
f = fopen(fullpath, mode); |
||||||
|
} |
||||||
|
OPEN_CHECK(f, fullpath); |
||||||
|
|
||||||
|
return (f); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* agg_str(set, count) build an aggregated string from count unique |
||||||
|
* selections taken from set |
||||||
|
*/ |
||||||
|
void |
||||||
|
agg_str(distribution *set, long count, long col, char *dest) |
||||||
|
{ |
||||||
|
distribution *d; |
||||||
|
int i; |
||||||
|
|
||||||
|
d = set; |
||||||
|
*dest = '\0'; |
||||||
|
|
||||||
|
permute_dist(d, col); |
||||||
|
for (i=0; i < count; i++) |
||||||
|
{ |
||||||
|
strcat(dest, DIST_MEMBER(set,DIST_PERMUTE(d, i))); |
||||||
|
strcat(dest, " "); |
||||||
|
} |
||||||
|
*(dest + (int)strlen(dest) - 1) = '\0'; |
||||||
|
|
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
long |
||||||
|
dssncasecmp(char *s1, char *s2, int n) |
||||||
|
{ |
||||||
|
for (; n > 0; ++s1, ++s2, --n) |
||||||
|
if (tolower(*s1) != tolower(*s2)) |
||||||
|
return ((tolower(*s1) < tolower(*s2)) ? -1 : 1); |
||||||
|
else if (*s1 == '\0') |
||||||
|
return (0); |
||||||
|
return (0); |
||||||
|
} |
||||||
|
|
||||||
|
long |
||||||
|
dsscasecmp(char *s1, char *s2) |
||||||
|
{ |
||||||
|
for (; tolower(*s1) == tolower(*s2); ++s1, ++s2) |
||||||
|
if (*s1 == '\0') |
||||||
|
return (0); |
||||||
|
return ((tolower(*s1) < tolower(*s2)) ? -1 : 1); |
||||||
|
} |
||||||
|
|
||||||
|
#ifndef STDLIB_HAS_GETOPT |
||||||
|
int optind = 0; |
||||||
|
int opterr = 0; |
||||||
|
char *optarg = NULL; |
||||||
|
|
||||||
|
int |
||||||
|
getopt(int ac, char **av, char *opt) |
||||||
|
{ |
||||||
|
static char *nextchar = NULL; |
||||||
|
char *cp; |
||||||
|
char hold; |
||||||
|
|
||||||
|
if (optarg == NULL) |
||||||
|
{ |
||||||
|
optarg = (char *)malloc(BUFSIZ); |
||||||
|
MALLOC_CHECK(optarg); |
||||||
|
} |
||||||
|
|
||||||
|
if (!nextchar || *nextchar == '\0') |
||||||
|
{ |
||||||
|
optind++; |
||||||
|
if (optind == ac) |
||||||
|
return(-1); |
||||||
|
nextchar = av[optind]; |
||||||
|
if (*nextchar != '-') |
||||||
|
return(-1); |
||||||
|
nextchar +=1; |
||||||
|
} |
||||||
|
|
||||||
|
if (nextchar && *nextchar == '-') /* -- termination */ |
||||||
|
{ |
||||||
|
optind++; |
||||||
|
return(-1); |
||||||
|
} |
||||||
|
else /* found an option */ |
||||||
|
{ |
||||||
|
cp = strchr(opt, *nextchar); |
||||||
|
nextchar += 1; |
||||||
|
if (cp == NULL) /* not defined for this run */ |
||||||
|
return('?'); |
||||||
|
if (*(cp + 1) == ':') /* option takes an argument */ |
||||||
|
{ |
||||||
|
if (*nextchar) |
||||||
|
{ |
||||||
|
hold = *cp; |
||||||
|
cp = optarg; |
||||||
|
while (*nextchar) |
||||||
|
*cp++ = *nextchar++; |
||||||
|
*cp = '\0'; |
||||||
|
*cp = hold; |
||||||
|
} |
||||||
|
else /* white space separated, use next arg */ |
||||||
|
{ |
||||||
|
if (++optind == ac) |
||||||
|
return('?'); |
||||||
|
strcpy(optarg, av[optind]); |
||||||
|
} |
||||||
|
nextchar = NULL; |
||||||
|
} |
||||||
|
return(*cp); |
||||||
|
} |
||||||
|
} |
||||||
|
#endif /* STDLIB_HAS_GETOPT */ |
||||||
|
|
||||||
|
char ** |
||||||
|
mk_ascdate(void) |
||||||
|
{ |
||||||
|
char **m; |
||||||
|
dss_time_t t; |
||||||
|
DSS_HUGE i; |
||||||
|
|
||||||
|
m = (char**) malloc((size_t)(TOTDATE * sizeof (char *))); |
||||||
|
MALLOC_CHECK(m); |
||||||
|
for (i = 0; i < TOTDATE; i++) |
||||||
|
{ |
||||||
|
mk_time(i + 1, &t); |
||||||
|
m[i] = strdup(t.alpha); |
||||||
|
} |
||||||
|
|
||||||
|
return(m); |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
* set_state() -- initialize the RNG so that |
||||||
|
* appropriate data sets can be generated. |
||||||
|
* For each table that is to be generated, calculate the number of rows/child, and send that to the |
||||||
|
* seed generation routine in speed_seed.c. Note: assumes that tables are completely independent. |
||||||
|
* Returns the number of rows to be generated by the named step. |
||||||
|
*/ |
||||||
|
DSS_HUGE |
||||||
|
set_state(int table, long sf, long procs, long step, DSS_HUGE *extra_rows) |
||||||
|
{ |
||||||
|
int i; |
||||||
|
DSS_HUGE rowcount, remainder, result; |
||||||
|
|
||||||
|
if (sf == 0 || step == 0) |
||||||
|
return(0); |
||||||
|
|
||||||
|
rowcount = tdefs[table].base; |
||||||
|
rowcount *= sf; |
||||||
|
*extra_rows = rowcount % procs; |
||||||
|
rowcount /= procs; |
||||||
|
result = rowcount; |
||||||
|
for (i=0; i < step - 1; i++) |
||||||
|
{ |
||||||
|
if (table == LINE) /* special case for shared seeds */ |
||||||
|
tdefs[table].gen_seed(1, rowcount); |
||||||
|
else |
||||||
|
tdefs[table].gen_seed(0, rowcount); |
||||||
|
/* need to set seeds of child in case there's a dependency */ |
||||||
|
/* NOTE: this assumes that the parent and child have the same base row count */ |
||||||
|
if (tdefs[table].child != NONE)
|
||||||
|
tdefs[tdefs[table].child].gen_seed(0,rowcount); |
||||||
|
} |
||||||
|
if (step > procs) /* moving to the end to generate updates */ |
||||||
|
tdefs[table].gen_seed(0, *extra_rows); |
||||||
|
|
||||||
|
return(result); |
||||||
|
} |
Binary file not shown.
@ -0,0 +1,451 @@ |
|||||||
|
/*
|
||||||
|
* $Id: build.c,v 1.5 2009/06/28 14:01:08 jms Exp $ |
||||||
|
*
|
||||||
|
* Revision History =================== $Log: build.c,v $ |
||||||
|
* Revision History =================== Revision 1.5 2009/06/28 14:01:08 jms |
||||||
|
* Revision History =================== bug fix for DOP |
||||||
|
* Revision History =================== Revision 1.4 |
||||||
|
* 2005/10/28 02:56:22 jms add platform-specific printf formats to allow for |
||||||
|
* DSS_HUGE data type |
||||||
|
*
|
||||||
|
* Revision 1.3 2005/10/14 23:16:54 jms fix for answer set compliance |
||||||
|
*
|
||||||
|
* Revision 1.2 2005/01/03 20:08:58 jms change line terminations |
||||||
|
*
|
||||||
|
* Revision 1.1.1.1 2004/11/24 23:31:46 jms re-establish external server |
||||||
|
*
|
||||||
|
* Revision 1.3 2004/04/07 20:17:29 jms bug #58 (join fails between |
||||||
|
* order/lineitem) |
||||||
|
*
|
||||||
|
* Revision 1.2 2004/01/22 05:49:29 jms AIX porting (AIX 5.1) |
||||||
|
*
|
||||||
|
* Revision 1.1.1.1 2003/08/08 21:35:26 jms recreation after CVS crash |
||||||
|
*
|
||||||
|
* Revision 1.3 2003/08/08 21:35:26 jms first integration of rng64 for |
||||||
|
* o_custkey and l_partkey |
||||||
|
*
|
||||||
|
* Revision 1.2 2003/08/07 17:58:34 jms Convery RNG to 64bit space as |
||||||
|
* preparation for new large scale RNG |
||||||
|
*
|
||||||
|
* Revision 1.1.1.1 2003/04/03 18:54:21 jms initial checkin |
||||||
|
*
|
||||||
|
*
|
||||||
|
*/ |
||||||
|
/* stuff related to the customer table */ |
||||||
|
#include <stdio.h> |
||||||
|
#include <string.h> |
||||||
|
#ifndef VMS |
||||||
|
#include <sys/types.h> |
||||||
|
#endif |
||||||
|
#if defined(SUN) |
||||||
|
#include <unistd.h> |
||||||
|
#endif |
||||||
|
#include <math.h> |
||||||
|
|
||||||
|
#include "dss.h" |
||||||
|
#include "dsstypes.h" |
||||||
|
#ifdef ADHOC |
||||||
|
#include "adhoc.h" |
||||||
|
extern adhoc_t adhocs[]; |
||||||
|
#endif /* ADHOC */ |
||||||
|
#include "rng64.h" |
||||||
|
|
||||||
|
#define LEAP_ADJ(yr, mnth) \ |
||||||
|
((LEAP(yr) && (mnth) >= 2) ? 1 : 0) |
||||||
|
#define JDAY_BASE 8035 /* start from 1/1/70 a la unix */ |
||||||
|
#define JMNTH_BASE (-70 * 12) /* start from 1/1/70 a la unix */ |
||||||
|
#define JDAY(date) ((date) - STARTDATE + JDAY_BASE + 1) |
||||||
|
#define PART_SUPP_BRIDGE(tgt, p, s) \ |
||||||
|
{ \
|
||||||
|
DSS_HUGE tot_scnt = tdefs[SUPP].base * scale; \
|
||||||
|
tgt = (p + s * (tot_scnt / SUPP_PER_PART + \
|
||||||
|
(long) ((p - 1) / tot_scnt))) % tot_scnt + 1; \
|
||||||
|
} |
||||||
|
#define V_STR(avg, sd, tgt) a_rnd((int)(avg * V_STR_LOW),(int)(avg * V_STR_HGH), sd, tgt) |
||||||
|
#define TEXT(avg, sd, tgt) dbg_text(tgt, (int)(avg * V_STR_LOW),(int)(avg * V_STR_HGH), sd) |
||||||
|
static void gen_phone PROTO((DSS_HUGE ind, char *target, long seed)); |
||||||
|
|
||||||
|
DSS_HUGE |
||||||
|
rpb_routine(DSS_HUGE p) |
||||||
|
{ |
||||||
|
DSS_HUGE price; |
||||||
|
|
||||||
|
price = 90000; |
||||||
|
price += (p / 10) % 20001; /* limit contribution to $200 */ |
||||||
|
price += (p % 1000) * 100; |
||||||
|
|
||||||
|
return (price); |
||||||
|
} |
||||||
|
|
||||||
|
static void |
||||||
|
gen_phone(DSS_HUGE ind, char *target, long seed) |
||||||
|
{ |
||||||
|
DSS_HUGE acode, exchg, number; |
||||||
|
|
||||||
|
RANDOM(acode, 100, 999, seed); |
||||||
|
RANDOM(exchg, 100, 999, seed); |
||||||
|
RANDOM(number, 1000, 9999, seed); |
||||||
|
|
||||||
|
sprintf(target, "%02d", (int) (10 + (ind % NATIONS_MAX))); |
||||||
|
sprintf(target + 3, "%03d", (int) acode); |
||||||
|
sprintf(target + 7, "%03d", (int) exchg); |
||||||
|
sprintf(target + 11, "%04d", (int) number); |
||||||
|
target[2] = target[6] = target[10] = '-'; |
||||||
|
|
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
long |
||||||
|
mk_cust(DSS_HUGE n_cust, customer_t * c) |
||||||
|
{ |
||||||
|
DSS_HUGE i; |
||||||
|
static int bInit = 0; |
||||||
|
static char szFormat[100]; |
||||||
|
|
||||||
|
if (!bInit) |
||||||
|
{ |
||||||
|
sprintf(szFormat, C_NAME_FMT, 9, HUGE_FORMAT + 1); |
||||||
|
bInit = 1; |
||||||
|
} |
||||||
|
c->custkey = n_cust; |
||||||
|
sprintf(c->name, szFormat, C_NAME_TAG, n_cust); |
||||||
|
V_STR(C_ADDR_LEN, C_ADDR_SD, c->address); |
||||||
|
c->alen = (int)strlen(c->address); |
||||||
|
RANDOM(i, 0, (nations.count - 1), C_NTRG_SD); |
||||||
|
c->nation_code = i; |
||||||
|
gen_phone(i, c->phone, (long) C_PHNE_SD); |
||||||
|
RANDOM(c->acctbal, C_ABAL_MIN, C_ABAL_MAX, C_ABAL_SD); |
||||||
|
pick_str(&c_mseg_set, C_MSEG_SD, c->mktsegment); |
||||||
|
TEXT(C_CMNT_LEN, C_CMNT_SD, c->comment); |
||||||
|
c->clen = (int)strlen(c->comment); |
||||||
|
|
||||||
|
return (0); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* generate the numbered order and its associated lineitems |
||||||
|
*/ |
||||||
|
void |
||||||
|
mk_sparse(DSS_HUGE i, DSS_HUGE * ok, long seq) |
||||||
|
{ |
||||||
|
long low_bits; |
||||||
|
|
||||||
|
*ok = i; |
||||||
|
low_bits = (long) (i & ((1 << SPARSE_KEEP) - 1)); |
||||||
|
*ok = *ok >> SPARSE_KEEP; |
||||||
|
*ok = *ok << SPARSE_BITS; |
||||||
|
*ok += seq; |
||||||
|
*ok = *ok << SPARSE_KEEP; |
||||||
|
*ok += low_bits; |
||||||
|
|
||||||
|
|
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
long |
||||||
|
mk_order(DSS_HUGE index, order_t * o, long upd_num) |
||||||
|
{ |
||||||
|
DSS_HUGE lcnt; |
||||||
|
DSS_HUGE rprice; |
||||||
|
long ocnt; |
||||||
|
DSS_HUGE tmp_date; |
||||||
|
DSS_HUGE s_date; |
||||||
|
DSS_HUGE r_date; |
||||||
|
DSS_HUGE c_date; |
||||||
|
DSS_HUGE clk_num; |
||||||
|
DSS_HUGE supp_num; |
||||||
|
static char **asc_date = NULL; |
||||||
|
char tmp_str[2]; |
||||||
|
char **mk_ascdate PROTO((void)); |
||||||
|
int delta = 1; |
||||||
|
static int bInit = 0; |
||||||
|
static char szFormat[100]; |
||||||
|
|
||||||
|
if (!bInit) |
||||||
|
{ |
||||||
|
sprintf(szFormat, O_CLRK_FMT, 9, HUGE_FORMAT + 1); |
||||||
|
bInit = 1; |
||||||
|
} |
||||||
|
if (asc_date == NULL) |
||||||
|
asc_date = mk_ascdate(); |
||||||
|
mk_sparse(index, &o->okey, |
||||||
|
(upd_num == 0) ? 0 : 1 + upd_num / (10000 / UPD_PCT)); |
||||||
|
if (scale >= 30000) |
||||||
|
RANDOM64(o->custkey, O_CKEY_MIN, O_CKEY_MAX, O_CKEY_SD); |
||||||
|
else |
||||||
|
RANDOM(o->custkey, O_CKEY_MIN, O_CKEY_MAX, O_CKEY_SD); |
||||||
|
while (o->custkey % CUST_MORTALITY == 0) |
||||||
|
{ |
||||||
|
o->custkey += delta; |
||||||
|
o->custkey = MIN(o->custkey, O_CKEY_MAX); |
||||||
|
delta *= -1; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
RANDOM(tmp_date, O_ODATE_MIN, O_ODATE_MAX, O_ODATE_SD); |
||||||
|
strcpy(o->odate, asc_date[tmp_date - STARTDATE]); |
||||||
|
|
||||||
|
pick_str(&o_priority_set, O_PRIO_SD, o->opriority); |
||||||
|
RANDOM(clk_num, 1, MAX((scale * O_CLRK_SCL), O_CLRK_SCL), O_CLRK_SD); |
||||||
|
sprintf(o->clerk, szFormat, O_CLRK_TAG, clk_num); |
||||||
|
TEXT(O_CMNT_LEN, O_CMNT_SD, o->comment); |
||||||
|
o->clen = (int)strlen(o->comment); |
||||||
|
#ifdef DEBUG |
||||||
|
if (o->clen > O_CMNT_MAX) |
||||||
|
fprintf(stderr, "comment error: O%d\n", index); |
||||||
|
#endif /* DEBUG */ |
||||||
|
o->spriority = 0; |
||||||
|
|
||||||
|
o->totalprice = 0; |
||||||
|
o->orderstatus = 'O'; |
||||||
|
ocnt = 0; |
||||||
|
|
||||||
|
RANDOM(o->lines, O_LCNT_MIN, O_LCNT_MAX, O_LCNT_SD); |
||||||
|
for (lcnt = 0; lcnt < o->lines; lcnt++) |
||||||
|
{ |
||||||
|
o->l[lcnt].okey = o->okey;; |
||||||
|
o->l[lcnt].lcnt = lcnt + 1; |
||||||
|
RANDOM(o->l[lcnt].quantity, L_QTY_MIN, L_QTY_MAX, L_QTY_SD); |
||||||
|
RANDOM(o->l[lcnt].discount, L_DCNT_MIN, L_DCNT_MAX, L_DCNT_SD); |
||||||
|
RANDOM(o->l[lcnt].tax, L_TAX_MIN, L_TAX_MAX, L_TAX_SD); |
||||||
|
pick_str(&l_instruct_set, L_SHIP_SD, o->l[lcnt].shipinstruct); |
||||||
|
pick_str(&l_smode_set, L_SMODE_SD, o->l[lcnt].shipmode); |
||||||
|
TEXT(L_CMNT_LEN, L_CMNT_SD, o->l[lcnt].comment); |
||||||
|
o->l[lcnt].clen = (int)strlen(o->l[lcnt].comment); |
||||||
|
if (scale >= 30000) |
||||||
|
RANDOM64(o->l[lcnt].partkey, L_PKEY_MIN, L_PKEY_MAX, L_PKEY_SD); |
||||||
|
else |
||||||
|
RANDOM(o->l[lcnt].partkey, L_PKEY_MIN, L_PKEY_MAX, L_PKEY_SD); |
||||||
|
rprice = rpb_routine(o->l[lcnt].partkey); |
||||||
|
RANDOM(supp_num, 0, 3, L_SKEY_SD); |
||||||
|
PART_SUPP_BRIDGE(o->l[lcnt].suppkey, o->l[lcnt].partkey, supp_num); |
||||||
|
o->l[lcnt].eprice = rprice * o->l[lcnt].quantity; |
||||||
|
|
||||||
|
o->totalprice += |
||||||
|
((o->l[lcnt].eprice * |
||||||
|
((long) 100 - o->l[lcnt].discount)) / (long) PENNIES) * |
||||||
|
((long) 100 + o->l[lcnt].tax) |
||||||
|
/ (long) PENNIES; |
||||||
|
|
||||||
|
RANDOM(s_date, L_SDTE_MIN, L_SDTE_MAX, L_SDTE_SD); |
||||||
|
s_date += tmp_date; |
||||||
|
RANDOM(c_date, L_CDTE_MIN, L_CDTE_MAX, L_CDTE_SD); |
||||||
|
c_date += tmp_date; |
||||||
|
RANDOM(r_date, L_RDTE_MIN, L_RDTE_MAX, L_RDTE_SD); |
||||||
|
r_date += s_date; |
||||||
|
|
||||||
|
|
||||||
|
strcpy(o->l[lcnt].sdate, asc_date[s_date - STARTDATE]); |
||||||
|
strcpy(o->l[lcnt].cdate, asc_date[c_date - STARTDATE]); |
||||||
|
strcpy(o->l[lcnt].rdate, asc_date[r_date - STARTDATE]); |
||||||
|
|
||||||
|
|
||||||
|
if (julian(r_date) <= CURRENTDATE) |
||||||
|
{ |
||||||
|
pick_str(&l_rflag_set, L_RFLG_SD, tmp_str); |
||||||
|
o->l[lcnt].rflag[0] = *tmp_str; |
||||||
|
} |
||||||
|
else |
||||||
|
o->l[lcnt].rflag[0] = 'N'; |
||||||
|
|
||||||
|
if (julian(s_date) <= CURRENTDATE) |
||||||
|
{ |
||||||
|
ocnt++; |
||||||
|
o->l[lcnt].lstatus[0] = 'F'; |
||||||
|
} |
||||||
|
else |
||||||
|
o->l[lcnt].lstatus[0] = 'O'; |
||||||
|
} |
||||||
|
|
||||||
|
if (ocnt > 0) |
||||||
|
o->orderstatus = 'P'; |
||||||
|
if (ocnt == o->lines) |
||||||
|
o->orderstatus = 'F'; |
||||||
|
|
||||||
|
return (0); |
||||||
|
} |
||||||
|
|
||||||
|
long |
||||||
|
mk_part(DSS_HUGE index, part_t * p) |
||||||
|
{ |
||||||
|
DSS_HUGE temp; |
||||||
|
long snum; |
||||||
|
DSS_HUGE brnd; |
||||||
|
static int bInit = 0; |
||||||
|
static char szFormat[100]; |
||||||
|
static char szBrandFormat[100]; |
||||||
|
|
||||||
|
if (!bInit) |
||||||
|
{ |
||||||
|
sprintf(szFormat, P_MFG_FMT, 1, HUGE_FORMAT + 1); |
||||||
|
sprintf(szBrandFormat, P_BRND_FMT, 2, HUGE_FORMAT + 1); |
||||||
|
bInit = 1; |
||||||
|
} |
||||||
|
p->partkey = index; |
||||||
|
agg_str(&colors, (long) P_NAME_SCL, (long) P_NAME_SD, p->name); |
||||||
|
RANDOM(temp, P_MFG_MIN, P_MFG_MAX, P_MFG_SD); |
||||||
|
sprintf(p->mfgr, szFormat, P_MFG_TAG, temp); |
||||||
|
RANDOM(brnd, P_BRND_MIN, P_BRND_MAX, P_BRND_SD); |
||||||
|
sprintf(p->brand, szBrandFormat, P_BRND_TAG, (temp * 10 + brnd)); |
||||||
|
p->tlen = pick_str(&p_types_set, P_TYPE_SD, p->type); |
||||||
|
p->tlen = (int)strlen(p_types_set.list[p->tlen].text); |
||||||
|
RANDOM(p->size, P_SIZE_MIN, P_SIZE_MAX, P_SIZE_SD); |
||||||
|
pick_str(&p_cntr_set, P_CNTR_SD, p->container); |
||||||
|
p->retailprice = rpb_routine(index); |
||||||
|
TEXT(P_CMNT_LEN, P_CMNT_SD, p->comment); |
||||||
|
p->clen = (int)strlen(p->comment); |
||||||
|
|
||||||
|
for (snum = 0; snum < SUPP_PER_PART; snum++) |
||||||
|
{ |
||||||
|
p->s[snum].partkey = p->partkey; |
||||||
|
PART_SUPP_BRIDGE(p->s[snum].suppkey, index, snum); |
||||||
|
RANDOM(p->s[snum].qty, PS_QTY_MIN, PS_QTY_MAX, PS_QTY_SD); |
||||||
|
RANDOM(p->s[snum].scost, PS_SCST_MIN, PS_SCST_MAX, PS_SCST_SD); |
||||||
|
TEXT(PS_CMNT_LEN, PS_CMNT_SD, p->s[snum].comment); |
||||||
|
p->s[snum].clen = (int)strlen(p->s[snum].comment); |
||||||
|
} |
||||||
|
return (0); |
||||||
|
} |
||||||
|
|
||||||
|
long |
||||||
|
mk_supp(DSS_HUGE index, supplier_t * s) |
||||||
|
{ |
||||||
|
DSS_HUGE i, bad_press, noise, offset, type; |
||||||
|
static int bInit = 0; |
||||||
|
static char szFormat[100]; |
||||||
|
|
||||||
|
if (!bInit) |
||||||
|
{ |
||||||
|
sprintf(szFormat, S_NAME_FMT, 9, HUGE_FORMAT + 1); |
||||||
|
bInit = 1; |
||||||
|
} |
||||||
|
s->suppkey = index; |
||||||
|
sprintf(s->name, szFormat, S_NAME_TAG, index); |
||||||
|
V_STR(S_ADDR_LEN, S_ADDR_SD, s->address); |
||||||
|
s->alen = (int)strlen(s->address); |
||||||
|
RANDOM(i, 0, nations.count - 1, S_NTRG_SD); |
||||||
|
s->nation_code = i; |
||||||
|
gen_phone(i, s->phone, S_PHNE_SD); |
||||||
|
RANDOM(s->acctbal, S_ABAL_MIN, S_ABAL_MAX, S_ABAL_SD); |
||||||
|
|
||||||
|
TEXT(S_CMNT_LEN, S_CMNT_SD, s->comment); |
||||||
|
s->clen = (int)strlen(s->comment); |
||||||
|
/*
|
||||||
|
* these calls should really move inside the if stmt below, but this |
||||||
|
* will simplify seedless parallel load |
||||||
|
*/ |
||||||
|
RANDOM(bad_press, 1, 10000, BBB_CMNT_SD); |
||||||
|
RANDOM(type, 0, 100, BBB_TYPE_SD); |
||||||
|
RANDOM(noise, 0, (s->clen - BBB_CMNT_LEN), BBB_JNK_SD); |
||||||
|
RANDOM(offset, 0, (s->clen - (BBB_CMNT_LEN + noise)), |
||||||
|
BBB_OFFSET_SD); |
||||||
|
if (bad_press <= S_CMNT_BBB) |
||||||
|
{ |
||||||
|
type = (type < BBB_DEADBEATS) ? 0 : 1; |
||||||
|
memcpy(s->comment + offset, BBB_BASE, BBB_BASE_LEN); |
||||||
|
if (type == 0) |
||||||
|
memcpy(s->comment + BBB_BASE_LEN + offset + noise, |
||||||
|
BBB_COMPLAIN, BBB_TYPE_LEN); |
||||||
|
else |
||||||
|
memcpy(s->comment + BBB_BASE_LEN + offset + noise, |
||||||
|
BBB_COMMEND, BBB_TYPE_LEN); |
||||||
|
} |
||||||
|
return (0); |
||||||
|
} |
||||||
|
|
||||||
|
struct |
||||||
|
{ |
||||||
|
char *mdes; |
||||||
|
long days; |
||||||
|
long dcnt; |
||||||
|
} months[] = |
||||||
|
|
||||||
|
{ |
||||||
|
{ |
||||||
|
NULL, 0, 0 |
||||||
|
}, |
||||||
|
{ |
||||||
|
"JAN", 31, 31 |
||||||
|
}, |
||||||
|
{ |
||||||
|
"FEB", 28, 59 |
||||||
|
}, |
||||||
|
{ |
||||||
|
"MAR", 31, 90 |
||||||
|
}, |
||||||
|
{ |
||||||
|
"APR", 30, 120 |
||||||
|
}, |
||||||
|
{ |
||||||
|
"MAY", 31, 151 |
||||||
|
}, |
||||||
|
{ |
||||||
|
"JUN", 30, 181 |
||||||
|
}, |
||||||
|
{ |
||||||
|
"JUL", 31, 212 |
||||||
|
}, |
||||||
|
{ |
||||||
|
"AUG", 31, 243 |
||||||
|
}, |
||||||
|
{ |
||||||
|
"SEP", 30, 273 |
||||||
|
}, |
||||||
|
{ |
||||||
|
"OCT", 31, 304 |
||||||
|
}, |
||||||
|
{ |
||||||
|
"NOV", 30, 334 |
||||||
|
}, |
||||||
|
{ |
||||||
|
"DEC", 31, 365 |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
long |
||||||
|
mk_time(DSS_HUGE index, dss_time_t * t) |
||||||
|
{ |
||||||
|
long m = 0; |
||||||
|
long y; |
||||||
|
long d; |
||||||
|
|
||||||
|
t->timekey = index + JDAY_BASE; |
||||||
|
y = julian(index + STARTDATE - 1) / 1000; |
||||||
|
d = julian(index + STARTDATE - 1) % 1000; |
||||||
|
while (d > months[m].dcnt + LEAP_ADJ(y, m)) |
||||||
|
m++; |
||||||
|
PR_DATE(t->alpha, y, m, |
||||||
|
d - months[m - 1].dcnt - ((LEAP(y) && m > 2) ? 1 : 0)); |
||||||
|
t->year = 1900 + y; |
||||||
|
t->month = m + 12 * y + JMNTH_BASE; |
||||||
|
t->week = (d + T_START_DAY - 1) / 7 + 1; |
||||||
|
t->day = d - months[m - 1].dcnt - LEAP_ADJ(y, m - 1); |
||||||
|
|
||||||
|
return (0); |
||||||
|
} |
||||||
|
|
||||||
|
int |
||||||
|
mk_nation(DSS_HUGE index, code_t * c) |
||||||
|
{ |
||||||
|
c->code = index - 1; |
||||||
|
c->text = nations.list[index - 1].text; |
||||||
|
c->join = nations.list[index - 1].weight; |
||||||
|
TEXT(N_CMNT_LEN, N_CMNT_SD, c->comment); |
||||||
|
c->clen = (int)strlen(c->comment); |
||||||
|
return (0); |
||||||
|
} |
||||||
|
|
||||||
|
int |
||||||
|
mk_region(DSS_HUGE index, code_t * c) |
||||||
|
{ |
||||||
|
|
||||||
|
c->code = index - 1; |
||||||
|
c->text = regions.list[index - 1].text; |
||||||
|
c->join = 0; /* for completeness */ |
||||||
|
TEXT(R_CMNT_LEN, R_CMNT_SD, c->comment); |
||||||
|
c->clen = (int)strlen(c->comment); |
||||||
|
return (0); |
||||||
|
} |
Binary file not shown.
@ -0,0 +1,8 @@ |
|||||||
|
Answer sets to be compared should all be named q<1..22>.out . |
||||||
|
Each file should have 1 header (col name line, that is ignored) followed by lines of data with fields separated by the pipe character "|". Lines should not start or end with a pipe char however. No trailing line of blank lines or "rows selected" should be present. |
||||||
|
|
||||||
|
./pairs.sh <dir1> <dir2> |
||||||
|
This will create or overwrite a dir called <dir1>_<dir2> and put in it 22 files of the form analysis_<1..22>.out . |
||||||
|
|
||||||
|
cmpq.pl |
||||||
|
This is the pearl script that compares two files. The current version treats date output as a string and thus dates that (legally according to the spec) are right justified in a larger field may compare incorrectly. This will be fixed shortly. |
@ -0,0 +1,3 @@ |
|||||||
|
for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22;do |
||||||
|
./cmpq.pl $i ./Ingres_1g_qualification/q${i}.out ./Oracle_1g_qualification/${i}.log; |
||||||
|
done |
@ -0,0 +1,159 @@ |
|||||||
|
#!/usr/bin/perl |
||||||
|
my $Query=shift(@ARGV); |
||||||
|
my $InputFile1=shift(@ARGV); |
||||||
|
my $InputFile2=shift(@ARGV); |
||||||
|
my $assume_header=1; |
||||||
|
my $OutputLog="analysis_".$Query.".log"; |
||||||
|
my @ColPos; |
||||||
|
my @ColF1; |
||||||
|
my @ColF2; |
||||||
|
my @ColStartF1; |
||||||
|
my @ColEndF1; |
||||||
|
my @ColStartF2; |
||||||
|
my @ColEndF2; |
||||||
|
my $NumColF1; |
||||||
|
my $NumColF2; |
||||||
|
my $QueryColPrecisionFile="colprecision.txt"; |
||||||
|
my @ColStart; |
||||||
|
my @ColEnd; |
||||||
|
my $NumMismatch=0; |
||||||
|
open my $file1 , $InputFile1; |
||||||
|
open my $file2 , $InputFile2; |
||||||
|
$debug = 0; |
||||||
|
# function to remove whitespace from the start and end of the string |
||||||
|
|
||||||
|
# function to get next valid line |
||||||
|
sub NextLine($) |
||||||
|
{ |
||||||
|
$filehandler = shift; |
||||||
|
my $line; |
||||||
|
while ($line=<$filehandler>){ |
||||||
|
chop($line); |
||||||
|
if (length($line)>0) { |
||||||
|
return $line; |
||||||
|
} |
||||||
|
} |
||||||
|
return undef; |
||||||
|
} |
||||||
|
|
||||||
|
sub rtrim($) |
||||||
|
{ |
||||||
|
my $string = shift; |
||||||
|
#$string =~ s/^\s+//; |
||||||
|
$string =~ s/\s+$//; |
||||||
|
return $string; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
# main |
||||||
|
|
||||||
|
open my $file1 , $InputFile1; |
||||||
|
open my $file2 , $InputFile2; |
||||||
|
open(LOG,">$OutputLog"); |
||||||
|
open(QColPrecision,$QueryColPrecisionFile); |
||||||
|
|
||||||
|
#get column precision information |
||||||
|
$i=1; |
||||||
|
while (($l=<QColPrecision>) && ($i<$Query)){ |
||||||
|
$i++; |
||||||
|
} |
||||||
|
if ($i != $Query) { |
||||||
|
print "Could not find column precision for Query $Query\n"; |
||||||
|
} |
||||||
|
@QueryColPrecision=split(/\s/,$l); |
||||||
|
|
||||||
|
#print @QueryColPrecision; |
||||||
|
$NumRowsF1=0; |
||||||
|
$NumRowsF2=0; |
||||||
|
if ($assume_header==1){ |
||||||
|
$lf1=&NextLine($file1); |
||||||
|
$lf2=&NextLine($file2); |
||||||
|
} |
||||||
|
while (1){ |
||||||
|
$lf1=&NextLine($file1); |
||||||
|
#print "File 1 $lf1\n"; |
||||||
|
$lf2=&NextLine($file2); |
||||||
|
#print "File 2 $lf2\n"; |
||||||
|
if ((!defined($lf1)) && (defined($lf2))) { |
||||||
|
print LOG "File1 ($InputFile1) exhausted before File2 ($InputFile2)\n"; |
||||||
|
print LOG "Number of rows processed $NumRowsF1\n"; |
||||||
|
exit; |
||||||
|
} elsif ((defined($lf1)) && (!defined($lf2))) { |
||||||
|
print LOG "File2 ($InputFile2) exhausted before File1 ($InputFile1)\n"; |
||||||
|
print LOG "Number of rows processed $NumRowsF1\n"; |
||||||
|
exit; |
||||||
|
} elsif ((!defined($lf1)) && (!defined($lf2))) { |
||||||
|
#done |
||||||
|
print LOG "Found $NumMismatch unacceptable missmatches\n"; |
||||||
|
print "Query $Query $NumMismatch unacceptable missmatches\n"; |
||||||
|
exit; |
||||||
|
} |
||||||
|
$NumRowsF1++; |
||||||
|
$NumRowsF2++; |
||||||
|
#print "Comparing row $lf1 with $lf2"; |
||||||
|
# The following split implements fixed column length |
||||||
|
#print "Splitting row $NumColF1: $lf1\n"; |
||||||
|
@ColF1=split(/\|/,$lf1); |
||||||
|
$NumColF1=@ColF1; |
||||||
|
#print "Splitting row $NumColF2: $lf2\n"; |
||||||
|
@ColF2=split(/\|/,$lf2); |
||||||
|
$NumColF2=@ColF2; |
||||||
|
# as needed we can extend to other splits |
||||||
|
if ($NumColF1!=$NumColF2) { |
||||||
|
print LOG "Number of column mismatch in row $NumRowsF1\n"; |
||||||
|
exit; |
||||||
|
} |
||||||
|
#print $NumColF1."|".$NumColF2."\n"; |
||||||
|
for ($col=0;$col<$NumColF1;$col++){ |
||||||
|
#print "@ColF1[$col]| "; |
||||||
|
@ColF1[$col]=&rtrim(@ColF1[$col]); |
||||||
|
#print "@ColF1[$col]|\n"; |
||||||
|
#print "@ColF2[$col]|"; |
||||||
|
@ColF2[$col]=&rtrim(@ColF2[$col]); |
||||||
|
#print "@ColF2[$col]|\n"; |
||||||
|
} |
||||||
|
# comparison |
||||||
|
for ($col=0;$col<$NumColF1;$col++){ |
||||||
|
#print "Comparing @ColF1[$col] and @ColF2[$col]\n"; |
||||||
|
$difference=0; |
||||||
|
$mismatch=0; |
||||||
|
#print "@QueryColPrecision[$col]\n"; |
||||||
|
for (@QueryColPrecision[$col]) { |
||||||
|
if (/str/) {$mismatch = @ColF1[$col] ne @ColF2[$col] ? 1 : 0} #column is string and needs to match exactly |
||||||
|
elsif (/sum/) {@ColF1[$col]=sprintf("%.2f", @ColF1[$col]); |
||||||
|
@ColF2[$col]=sprintf("%.2f", @ColF2[$col]); |
||||||
|
$difference = abs(@ColF1[$col] - @ColF2[$col]); |
||||||
|
$pdifference= sprintf("%.4f",(($difference/@ColF1[$col])*100)); |
||||||
|
$mismatch = $difference>100 ? 1 : 0; |
||||||
|
$pdifference= sprintf("%.4f",($difference/@ColF1[$col])*100); } #column is sum and needs to be with 100 |
||||||
|
elsif (/avg/) {@ColF1[$col]=sprintf("%.2f", @ColF1[$col]); |
||||||
|
@ColF2[$col]=sprintf("%.2f", @ColF2[$col]); |
||||||
|
$difference = abs(@ColF1[$col] - @ColF2[$col]); |
||||||
|
$pdifference= sprintf("%.4f",(($difference/@ColF1[$col])*100)); |
||||||
|
$mismatch = $pdifference>1 ? 1 : 0} #column is avg and needs to be within 1 percent when reported to the nearest 1/100th, rounded up |
||||||
|
elsif (/cnt/) {$mismatch=1 if (@ColF1[$col] != @ColF2[$col])} #column is cnt and needs to match exactly |
||||||
|
elsif (/int/) {$mismatch=1 if (@ColF1[$col] != @ColF2[$col])} #column is int and needs to match exactly |
||||||
|
elsif (/num/) {@ColF1[$col]=sprintf("%.2f", @ColF1[$col]); |
||||||
|
@ColF2[$col]=sprintf("%.2f", @ColF2[$col]); |
||||||
|
$mismatch=1 if (@ColF1[$col] != @ColF2[$col]); |
||||||
|
$difference = abs(@ColF1[$col] - @ColF2[$col]); |
||||||
|
$pdifference= sprintf("%.4f",(($difference/@ColF1[$col])*100));} #column is num and needs to match exactly when reported to the nearest 1/100th, rounded up |
||||||
|
elsif (/rat/) {@ColF1[$col]=sprintf("%.2f", @ColF1[$col]); |
||||||
|
@ColF2[$col]=sprintf("%.2f", @ColF2[$col]); |
||||||
|
$difference = abs(@ColF1[$col] - @ColF2[$col]); |
||||||
|
$pdifference= sprintf("%.4f",(($difference/@ColF1[$col])*100)); |
||||||
|
$mismatch = $difference > 1 ? 1 : 0;} #column is a ratio and needs to match within 1 percent when reported to the nearest 1/100th, rounded up |
||||||
|
else {print LOG "Don't know how to compare type @QueryColPrecision[$col]\n";exit;} # default |
||||||
|
} |
||||||
|
#print "$mismatch $difference\n"; |
||||||
|
if ($mismatch == 1) { |
||||||
|
$NumMismatch++; |
||||||
|
if (@QueryColPrecision[$col]=~"str"){ |
||||||
|
printf( LOG "%s\n%30s%s\n%30s%s\n", "Difference in row $NumRowsF1 column $col using @QueryColPrecision[$col] ----------------> VIOLATION OF SPEC","$InputFile1:","@ColF1[$col]","$InputFile2:","@ColF2[$col]");} |
||||||
|
else { |
||||||
|
print LOG "Difference in row $NumRowsF1 column $col @ColF1[$col] @ColF2[$col] using @QueryColPrecision[$col]: total diff $difference percent diff $pdifference"." % ----------------> VIOLATION OF SPEC\n";} |
||||||
|
} elsif ($difference>0) { |
||||||
|
print LOG "Difference in row $NumRowsF1 column $col F1=@ColF1[$col] F2=@ColF2[$col] using @QueryColPrecision[$col] total diff $difference percent diff $pdifference ----------------> OK WITH SPEC\n"; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,23 @@ |
|||||||
|
str str sum sum sum sum avg avg avg cnt |
||||||
|
num str str int str str str str |
||||||
|
int sum str int |
||||||
|
str cnt |
||||||
|
str sum |
||||||
|
sum |
||||||
|
str str int sum |
||||||
|
int rat |
||||||
|
str int sum |
||||||
|
int str sum num str str str str |
||||||
|
int sum |
||||||
|
str sum sum |
||||||
|
cnt cnt |
||||||
|
rat |
||||||
|
int str str str sum |
||||||
|
str str num cnt |
||||||
|
avg |
||||||
|
str int int str num sum |
||||||
|
sum |
||||||
|
str str |
||||||
|
str cnt |
||||||
|
num cnt sum |
||||||
|
|
@ -0,0 +1,25 @@ |
|||||||
|
#!/bin/bash |
||||||
|
|
||||||
|
pairs() |
||||||
|
{ |
||||||
|
x=$1 |
||||||
|
shift 1 |
||||||
|
for y in $*;do |
||||||
|
echo Comparing $x to $y |
||||||
|
for ((i=1; i<23; i++));do |
||||||
|
./cmpq.pl $i ./${x}/q${i}.out ./${y}/q${i}.out |
||||||
|
done |
||||||
|
mkdir -p ${x}_${y} |
||||||
|
mv analysis* ${x}_${y} |
||||||
|
done |
||||||
|
if [ $# -gt 1 ]; then |
||||||
|
pairs $* |
||||||
|
fi |
||||||
|
} |
||||||
|
|
||||||
|
if [ $# -eq 0 ]; then |
||||||
|
pairs oracle ingres microsoft ibm |
||||||
|
else |
||||||
|
pairs $* |
||||||
|
fi |
||||||
|
|
@ -0,0 +1,15 @@ |
|||||||
|
#!/bin/bash |
||||||
|
TABLE=$1 |
||||||
|
IFS="|" |
||||||
|
|
||||||
|
while read line |
||||||
|
do |
||||||
|
set $line |
||||||
|
count=1 |
||||||
|
while [ $# -gt 0 ] |
||||||
|
do |
||||||
|
echo $1 >> ${TABLE}$count |
||||||
|
count=`expr $count + 1` |
||||||
|
shift |
||||||
|
done |
||||||
|
done |
@ -0,0 +1,219 @@ |
|||||||
|
/*
|
||||||
|
* $Id: config.h,v 1.8 2007/01/04 21:29:21 jms Exp $ |
||||||
|
* |
||||||
|
* Revision History |
||||||
|
* =================== |
||||||
|
* $Log: config.h,v $ |
||||||
|
* Revision 1.8 2007/01/04 21:29:21 jms |
||||||
|
* Porting changes uncovered as part of move to VS2005. No impact on data set |
||||||
|
* |
||||||
|
* Revision 1.7 2006/06/29 20:46:17 jms |
||||||
|
* 2.4.0 changes from Meikel |
||||||
|
* |
||||||
|
* Revision 1.6 2006/05/31 22:25:21 jms |
||||||
|
* Rework UnifInt calls in varsub to handle lack of PROTO defn in windows |
||||||
|
* |
||||||
|
* Revision 1.5 2006/05/25 22:35:36 jms |
||||||
|
* qgen porting changes for 32b/64b |
||||||
|
* |
||||||
|
* Revision 1.4 2006/03/09 18:54:55 jms |
||||||
|
* porting bugs |
||||||
|
* |
||||||
|
* Revision 1.3 2005/03/04 19:48:39 jms |
||||||
|
* Changes from Doug Johnson to address very large scale factors |
||||||
|
* |
||||||
|
* Revision 1.2 2005/01/03 20:08:58 jms |
||||||
|
* change line terminations |
||||||
|
* |
||||||
|
* Revision 1.1.1.1 2004/11/24 23:31:46 jms |
||||||
|
* re-establish external server |
||||||
|
* |
||||||
|
* Revision 1.7 2004/04/08 17:36:47 jms |
||||||
|
* clarify config.h/makefile linkage |
||||||
|
* |
||||||
|
* Revision 1.6 2004/04/08 17:35:00 jms |
||||||
|
* SUN/SOLARIS ifdef merge between machines |
||||||
|
* |
||||||
|
* Revision 1.5 2004/04/08 17:27:53 jms |
||||||
|
* solaris porting fixes |
||||||
|
* |
||||||
|
* Revision 1.4 2003/08/12 16:45:26 jms |
||||||
|
* linux porting changes |
||||||
|
* |
||||||
|
* Revision 1.3 2003/08/08 21:35:26 jms |
||||||
|
* first integration of rng64 for o_custkey and l_partkey |
||||||
|
* |
||||||
|
* Revision 1.2 2003/08/07 17:58:34 jms |
||||||
|
* Convery RNG to 64bit space as preparation for new large scale RNG |
||||||
|
* |
||||||
|
* Revision 1.1.1.1 2003/04/03 18:54:21 jms |
||||||
|
* initial checkin |
||||||
|
* |
||||||
|
* |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* 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: |
||||||
|
* KILL(pid) -- how to terminate a process in a parallel load |
||||||
|
* SPAWN -- name of system call to clone an existing process |
||||||
|
* SET_HANDLER(proc) -- name of routine to handle signals in parallel load |
||||||
|
* WAIT(res, pid) -- how to await the termination of a child |
||||||
|
* 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 |
||||||
|
* SUPPORT_64BITS -- compiler defines a 64 bit datatype |
||||||
|
* 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 |
||||||
|
* DOS -- disable all multi-user functionality/dependency |
||||||
|
* 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) |
||||||
|
*/ |
||||||
|
|
||||||
|
#ifdef DOS |
||||||
|
#define PATH_SEP '\\' |
||||||
|
#else |
||||||
|
|
||||||
|
|
||||||
|
#ifdef ATT |
||||||
|
#define STDLIB_HAS_GETOPT |
||||||
|
#ifdef SQLSERVER |
||||||
|
#define WIN32 |
||||||
|
#else |
||||||
|
/* the 64 bit defines are for the Metaware compiler */ |
||||||
|
#define SUPPORT_64BITS |
||||||
|
#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 SUPPORT_64BITS |
||||||
|
#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 SUPPORT_64BITS |
||||||
|
#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 SUPPORT_64BITS |
||||||
|
#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 SUN |
||||||
|
#define STDLIB_HAS_GETOPT |
||||||
|
#define RNG_A 6364136223846793005ull |
||||||
|
#define RNG_C 1ull |
||||||
|
#define SUPPORT_64BITS |
||||||
|
#define DSS_HUGE long long |
||||||
|
#define HUGE_FORMAT "%lld" |
||||||
|
#define HUGE_DATE_FORMAT "%02lld" |
||||||
|
#endif /* SUN */ |
||||||
|
|
||||||
|
#ifdef SGI |
||||||
|
#define STDLIB_HAS_GETOPT |
||||||
|
#define SUPPORT_64BITS |
||||||
|
#define DSS_HUGE __int64_t |
||||||
|
#endif /* SGI */ |
||||||
|
|
||||||
|
#if (defined(WIN32)&&!defined(_POSIX_)) |
||||||
|
#define pid_t int |
||||||
|
#define SET_HANDLER(proc) signal(SIGINT, proc) |
||||||
|
#define KILL(pid) \ |
||||||
|
TerminateProcess(OpenProcess(PROCESS_TERMINATE,FALSE,pid),3) |
||||||
|
#if (defined (__WATCOMC__)) |
||||||
|
#define SPAWN() spawnv(P_NOWAIT, spawn_args[0], spawn_args) |
||||||
|
#define WAIT(res, pid) cwait(res, pid, WAIT_CHILD) |
||||||
|
#else |
||||||
|
#define SPAWN() _spawnv(_P_NOWAIT, spawn_args[0], spawn_args) |
||||||
|
#define WAIT(res, pid) _cwait(res, pid, _WAIT_CHILD) |
||||||
|
#define getpid _getpid |
||||||
|
#endif /* WATCOMC */ |
||||||
|
#define SIGS_DEFINED |
||||||
|
#define PATH_SEP '\\' |
||||||
|
#define SUPPORT_64BITS |
||||||
|
#define DSS_HUGE __int64 |
||||||
|
#define RNG_A 6364136223846793005uI64 |
||||||
|
#define RNG_C 1uI64 |
||||||
|
#define HUGE_FORMAT "%I64d" |
||||||
|
#define HUGE_DATE_FORMAT "%02I64d" |
||||||
|
/* need to define process termination codes to match UNIX */ |
||||||
|
/* these are copied from Linux/GNU and need to be verified as part of a rework of */ |
||||||
|
/* process handling under NT (29 Apr 98) */ |
||||||
|
#define WIFEXITED(s) ((s & 0xFF) == 0) |
||||||
|
#define WIFSIGNALED(s) (((unsigned int)((status)-1) & 0xFFFF) < 0xFF) |
||||||
|
#define WIFSTOPPED(s) (((s) & 0xff) == 0x7f) |
||||||
|
#define WTERMSIG(s) ((s) & 0x7f) |
||||||
|
#define WSTOPSIG(s) (((s) & 0xff00) >> 8) |
||||||
|
/* requried by move to Visual Studio 2005 */ |
||||||
|
#define strdup(x) _strdup(x) |
||||||
|
#endif /* WIN32 */ |
||||||
|
|
||||||
|
#ifndef SIGS_DEFINED |
||||||
|
#define KILL(pid) kill(SIGUSR1, pid) |
||||||
|
#define SET_HANDLER(proc) signal(SIGUSR1, proc) |
||||||
|
#define SPAWN fork |
||||||
|
#define WAIT(res, pid) wait(res) |
||||||
|
#endif /* DEFAULT */ |
||||||
|
|
||||||
|
#endif /* DOS */ |
||||||
|
|
||||||
|
#ifndef PATH_SEP |
||||||
|
#define PATH_SEP '/' |
||||||
|
#endif /* PATH_SEP */ |
||||||
|
|
||||||
|
#ifndef DSS_HUGE |
||||||
|
#error Support for a 64-bit datatype is required in this release |
||||||
|
#endif |
||||||
|
|
||||||
|
#ifndef DOUBLE_CAST |
||||||
|
#define DOUBLE_CAST (double) |
||||||
|
#endif /* DOUBLE_CAST */ |
||||||
|
|
Binary file not shown.
@ -0,0 +1,168 @@ |
|||||||
|
# Microsoft Developer Studio Project File - Name="dbgen" - Package Owner=<4> |
||||||
|
# Microsoft Developer Studio Generated Build File, Format Version 6.00 |
||||||
|
# ** DO NOT EDIT ** |
||||||
|
|
||||||
|
# TARGTYPE "Win32 (x86) Console Application" 0x0103 |
||||||
|
|
||||||
|
CFG=dbgen - Win32 Debug |
||||||
|
!MESSAGE This is not a valid makefile. To build this project using NMAKE, |
||||||
|
!MESSAGE use the Export Makefile command and run |
||||||
|
!MESSAGE |
||||||
|
!MESSAGE NMAKE /f "dbgen.mak". |
||||||
|
!MESSAGE |
||||||
|
!MESSAGE You can specify a configuration when running NMAKE |
||||||
|
!MESSAGE by defining the macro CFG on the command line. For example: |
||||||
|
!MESSAGE |
||||||
|
!MESSAGE NMAKE /f "dbgen.mak" CFG="dbgen - Win32 Debug" |
||||||
|
!MESSAGE |
||||||
|
!MESSAGE Possible choices for configuration are: |
||||||
|
!MESSAGE |
||||||
|
!MESSAGE "dbgen - Win32 Release" (based on "Win32 (x86) Console Application") |
||||||
|
!MESSAGE "dbgen - Win32 Debug" (based on "Win32 (x86) Console Application") |
||||||
|
!MESSAGE |
||||||
|
|
||||||
|
# Begin Project |
||||||
|
# PROP AllowPerConfigDependencies 0 |
||||||
|
# PROP Scc_ProjName "" |
||||||
|
# PROP Scc_LocalPath "" |
||||||
|
CPP=cl.exe |
||||||
|
RSC=rc.exe |
||||||
|
|
||||||
|
!IF "$(CFG)" == "dbgen - Win32 Release" |
||||||
|
|
||||||
|
# PROP BASE Use_MFC 0 |
||||||
|
# PROP BASE Use_Debug_Libraries 0 |
||||||
|
# PROP BASE Output_Dir "Release" |
||||||
|
# PROP BASE Intermediate_Dir "Release" |
||||||
|
# PROP BASE Target_Dir "" |
||||||
|
# PROP Use_MFC 0 |
||||||
|
# PROP Use_Debug_Libraries 0 |
||||||
|
# PROP Output_Dir "Release" |
||||||
|
# PROP Intermediate_Dir "Release" |
||||||
|
# PROP Target_Dir "" |
||||||
|
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c |
||||||
|
# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "TPCH" /YX /FD /c |
||||||
|
# ADD BASE RSC /l 0x409 /d "NDEBUG" |
||||||
|
# ADD RSC /l 0x409 /d "NDEBUG" |
||||||
|
BSC32=bscmake.exe |
||||||
|
# ADD BASE BSC32 /nologo |
||||||
|
# ADD BSC32 /nologo |
||||||
|
LINK32=link.exe |
||||||
|
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 |
||||||
|
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 |
||||||
|
|
||||||
|
!ELSEIF "$(CFG)" == "dbgen - Win32 Debug" |
||||||
|
|
||||||
|
# PROP BASE Use_MFC 0 |
||||||
|
# PROP BASE Use_Debug_Libraries 1 |
||||||
|
# PROP BASE Output_Dir "Debug" |
||||||
|
# PROP BASE Intermediate_Dir "Debug" |
||||||
|
# PROP BASE Target_Dir "" |
||||||
|
# PROP Use_MFC 0 |
||||||
|
# PROP Use_Debug_Libraries 1 |
||||||
|
# PROP Output_Dir "Debug" |
||||||
|
# PROP Intermediate_Dir "Debug" |
||||||
|
# PROP Target_Dir "" |
||||||
|
# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c |
||||||
|
# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "TPCH" /FR /YX /FD /GZ /c |
||||||
|
# ADD BASE RSC /l 0x409 /d "_DEBUG" |
||||||
|
# ADD RSC /l 0x409 /d "_DEBUG" |
||||||
|
BSC32=bscmake.exe |
||||||
|
# ADD BASE BSC32 /nologo |
||||||
|
# ADD BSC32 /nologo |
||||||
|
LINK32=link.exe |
||||||
|
# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept |
||||||
|
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept |
||||||
|
|
||||||
|
!ENDIF |
||||||
|
|
||||||
|
# Begin Target |
||||||
|
|
||||||
|
# Name "dbgen - Win32 Release" |
||||||
|
# Name "dbgen - Win32 Debug" |
||||||
|
# Begin Group "Source Files" |
||||||
|
|
||||||
|
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" |
||||||
|
# Begin Source File |
||||||
|
|
||||||
|
SOURCE=.\bm_utils.c |
||||||
|
# End Source File |
||||||
|
# Begin Source File |
||||||
|
|
||||||
|
SOURCE=.\build.c |
||||||
|
# End Source File |
||||||
|
# Begin Source File |
||||||
|
|
||||||
|
SOURCE=.\driver.c |
||||||
|
# End Source File |
||||||
|
# Begin Source File |
||||||
|
|
||||||
|
SOURCE=.\load_stub.c |
||||||
|
# End Source File |
||||||
|
# Begin Source File |
||||||
|
|
||||||
|
SOURCE=.\permute.c |
||||||
|
# End Source File |
||||||
|
# Begin Source File |
||||||
|
|
||||||
|
SOURCE=.\print.c |
||||||
|
# End Source File |
||||||
|
# Begin Source File |
||||||
|
|
||||||
|
SOURCE=.\rnd.c |
||||||
|
# End Source File |
||||||
|
# Begin Source File |
||||||
|
|
||||||
|
SOURCE=.\rng64.c |
||||||
|
# End Source File |
||||||
|
# Begin Source File |
||||||
|
|
||||||
|
SOURCE=.\speed_seed.c |
||||||
|
# End Source File |
||||||
|
# Begin Source File |
||||||
|
|
||||||
|
SOURCE=.\text.c |
||||||
|
# End Source File |
||||||
|
# End Group |
||||||
|
# Begin Group "Header Files" |
||||||
|
|
||||||
|
# PROP Default_Filter "h;hpp;hxx;hm;inl" |
||||||
|
# Begin Source File |
||||||
|
|
||||||
|
SOURCE=.\config.h |
||||||
|
# End Source File |
||||||
|
# Begin Source File |
||||||
|
|
||||||
|
SOURCE=.\dss.h |
||||||
|
# End Source File |
||||||
|
# Begin Source File |
||||||
|
|
||||||
|
SOURCE=.\dsstypes.h |
||||||
|
# End Source File |
||||||
|
# Begin Source File |
||||||
|
|
||||||
|
SOURCE=.\permute.h |
||||||
|
# End Source File |
||||||
|
# Begin Source File |
||||||
|
|
||||||
|
SOURCE=.\rnd.h |
||||||
|
# End Source File |
||||||
|
# Begin Source File |
||||||
|
|
||||||
|
SOURCE=.\rng64.h |
||||||
|
# End Source File |
||||||
|
# Begin Source File |
||||||
|
|
||||||
|
SOURCE=.\shared.h |
||||||
|
# End Source File |
||||||
|
# Begin Source File |
||||||
|
|
||||||
|
SOURCE=.\tpcd.h |
||||||
|
# End Source File |
||||||
|
# End Group |
||||||
|
# Begin Group "Resource Files" |
||||||
|
|
||||||
|
# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" |
||||||
|
# End Group |
||||||
|
# End Target |
||||||
|
# End Project |
@ -0,0 +1,836 @@ |
|||||||
|
# |
||||||
|
# $Id: dists.dss,v 1.2 2005/01/03 20:08:58 jms Exp $ |
||||||
|
# |
||||||
|
# Revision History |
||||||
|
# =================== |
||||||
|
# $Log: dists.dss,v $ |
||||||
|
# Revision 1.2 2005/01/03 20:08:58 jms |
||||||
|
# change line terminations |
||||||
|
# |
||||||
|
# Revision 1.1.1.1 2004/11/24 23:31:46 jms |
||||||
|
# re-establish external server |
||||||
|
# |
||||||
|
# Revision 1.1.1.1 2003/04/03 18:54:21 jms |
||||||
|
# recreation after CVS crash |
||||||
|
# |
||||||
|
# Revision 1.1.1.1 2003/04/03 18:54:21 jms |
||||||
|
# initial checkin |
||||||
|
# |
||||||
|
# |
||||||
|
# |
||||||
|
# |
||||||
|
# distributions have the following format: |
||||||
|
# |
||||||
|
# <token> | <weight> # comment |
||||||
|
# |
||||||
|
# Distributions are used to bias the selection of a token |
||||||
|
# based on its associated weight. The list of tokens and values |
||||||
|
# between the keywords BEGIN and END define the distribution named after |
||||||
|
# the BEGIN. A uniformly random value from [0, sum(weights)] |
||||||
|
# will be chosen and the first token whose cumulative weight is greater than |
||||||
|
# or equal to the result will be returned. In essence, the weights for each |
||||||
|
# token represent its relative weight within a distribution. |
||||||
|
# |
||||||
|
# one special token is defined: count (number of data points in the |
||||||
|
# distribution). It MUST be defined for each named distribution. |
||||||
|
#----------------------------------------------------------------------- |
||||||
|
# currently defined distributions and their use: |
||||||
|
# NAME FIELD/NOTES |
||||||
|
# ======== ============== |
||||||
|
# category parts.category |
||||||
|
# container parts.container |
||||||
|
# instruct shipping instructions |
||||||
|
# msegmnt market segment |
||||||
|
# names parts.name |
||||||
|
# nations must be ordered along with regions |
||||||
|
# nations2 stand alone nations set for use with qgen |
||||||
|
# o_prio order priority |
||||||
|
# regions must be ordered along with nations |
||||||
|
# rflag lineitems.returnflag |
||||||
|
# types parts.type |
||||||
|
# colors embedded string creation; CANNOT BE USED FOR pick_str(), agg_str() perturbs order |
||||||
|
# articles comment generation |
||||||
|
# nouns |
||||||
|
# verbs |
||||||
|
# adverbs |
||||||
|
# auxillaries |
||||||
|
# prepositions |
||||||
|
# terminators |
||||||
|
# grammar sentence formation |
||||||
|
# np |
||||||
|
# vp |
||||||
|
### |
||||||
|
# category |
||||||
|
### |
||||||
|
BEGIN category |
||||||
|
COUNT|5 |
||||||
|
FURNITURE|1 |
||||||
|
STORAGE EQUIP|1 |
||||||
|
TOOLS|1 |
||||||
|
MACHINE TOOLS|1 |
||||||
|
OTHER|1 |
||||||
|
END category |
||||||
|
### |
||||||
|
# container |
||||||
|
### |
||||||
|
begin p_cntr |
||||||
|
count|40 |
||||||
|
SM CASE|1 |
||||||
|
SM BOX|1 |
||||||
|
SM BAG|1 |
||||||
|
SM JAR|1 |
||||||
|
SM PACK|1 |
||||||
|
SM PKG|1 |
||||||
|
SM CAN|1 |
||||||
|
SM DRUM|1 |
||||||
|
LG CASE|1 |
||||||
|
LG BOX|1 |
||||||
|
LG BAG|1 |
||||||
|
LG JAR|1 |
||||||
|
LG PACK|1 |
||||||
|
LG PKG|1 |
||||||
|
LG CAN|1 |
||||||
|
LG DRUM|1 |
||||||
|
MED CASE|1 |
||||||
|
MED BOX|1 |
||||||
|
MED BAG|1 |
||||||
|
MED JAR|1 |
||||||
|
MED PACK|1 |
||||||
|
MED PKG|1 |
||||||
|
MED CAN|1 |
||||||
|
MED DRUM|1 |
||||||
|
JUMBO CASE|1 |
||||||
|
JUMBO BOX|1 |
||||||
|
JUMBO BAG|1 |
||||||
|
JUMBO JAR|1 |
||||||
|
JUMBO PACK|1 |
||||||
|
JUMBO PKG|1 |
||||||
|
JUMBO CAN|1 |
||||||
|
JUMBO DRUM|1 |
||||||
|
WRAP CASE|1 |
||||||
|
WRAP BOX|1 |
||||||
|
WRAP BAG|1 |
||||||
|
WRAP JAR|1 |
||||||
|
WRAP PACK|1 |
||||||
|
WRAP PKG|1 |
||||||
|
WRAP CAN|1 |
||||||
|
WRAP DRUM|1 |
||||||
|
end p_cntr |
||||||
|
### |
||||||
|
# instruct |
||||||
|
### |
||||||
|
begin instruct |
||||||
|
count|4 |
||||||
|
DELIVER IN PERSON|1 |
||||||
|
COLLECT COD|1 |
||||||
|
TAKE BACK RETURN|1 |
||||||
|
NONE|1 |
||||||
|
end instruct |
||||||
|
### |
||||||
|
# msegmnt |
||||||
|
### |
||||||
|
begin msegmnt |
||||||
|
count|5 |
||||||
|
AUTOMOBILE|1 |
||||||
|
BUILDING|1 |
||||||
|
FURNITURE|1 |
||||||
|
HOUSEHOLD|1 |
||||||
|
MACHINERY|1 |
||||||
|
end msegmnt |
||||||
|
### |
||||||
|
# names |
||||||
|
### |
||||||
|
begin p_names |
||||||
|
COUNT|4 |
||||||
|
CLEANER|1 |
||||||
|
SOAP|1 |
||||||
|
DETERGENT|1 |
||||||
|
EXTRA|1 |
||||||
|
end p_names |
||||||
|
### |
||||||
|
# nations |
||||||
|
# NOTE: this is a special case; the weights here are adjustments to |
||||||
|
# map correctly into the regions table, and are *NOT* cummulative |
||||||
|
# values to mimic a distribution |
||||||
|
### |
||||||
|
begin nations |
||||||
|
count|25 |
||||||
|
ALGERIA|0 |
||||||
|
ARGENTINA|1 |
||||||
|
BRAZIL|0 |
||||||
|
CANADA|0 |
||||||
|
EGYPT|3 |
||||||
|
ETHIOPIA|-4 |
||||||
|
FRANCE|3 |
||||||
|
GERMANY|0 |
||||||
|
INDIA|-1 |
||||||
|
INDONESIA|0 |
||||||
|
IRAN|2 |
||||||
|
IRAQ|0 |
||||||
|
JAPAN|-2 |
||||||
|
JORDAN|2 |
||||||
|
KENYA|-4 |
||||||
|
MOROCCO|0 |
||||||
|
MOZAMBIQUE|0 |
||||||
|
PERU|1 |
||||||
|
CHINA|1 |
||||||
|
ROMANIA|1 |
||||||
|
SAUDI ARABIA|1 |
||||||
|
VIETNAM|-2 |
||||||
|
RUSSIA|1 |
||||||
|
UNITED KINGDOM|0 |
||||||
|
UNITED STATES|-2 |
||||||
|
end nations |
||||||
|
### |
||||||
|
# nations2 |
||||||
|
### |
||||||
|
begin nations2 |
||||||
|
count|25 |
||||||
|
ALGERIA|1 |
||||||
|
ARGENTINA|1 |
||||||
|
BRAZIL|1 |
||||||
|
CANADA|1 |
||||||
|
EGYPT|1 |
||||||
|
ETHIOPIA|1 |
||||||
|
FRANCE|1 |
||||||
|
GERMANY|1 |
||||||
|
INDIA|1 |
||||||
|
INDONESIA|1 |
||||||
|
IRAN|1 |
||||||
|
IRAQ|1 |
||||||
|
JAPAN|1 |
||||||
|
JORDAN|1 |
||||||
|
KENYA|1 |
||||||
|
MOROCCO|1 |
||||||
|
MOZAMBIQUE|1 |
||||||
|
PERU|1 |
||||||
|
CHINA|1 |
||||||
|
ROMANIA|1 |
||||||
|
SAUDI ARABIA|1 |
||||||
|
VIETNAM|1 |
||||||
|
RUSSIA|1 |
||||||
|
UNITED KINGDOM|1 |
||||||
|
UNITED STATES|1 |
||||||
|
end nations2 |
||||||
|
### |
||||||
|
# regions |
||||||
|
### |
||||||
|
begin regions |
||||||
|
count|5 |
||||||
|
AFRICA|1 |
||||||
|
AMERICA|1 |
||||||
|
ASIA|1 |
||||||
|
EUROPE|1 |
||||||
|
MIDDLE EAST|1 |
||||||
|
end regions |
||||||
|
### |
||||||
|
# o_prio |
||||||
|
### |
||||||
|
begin o_oprio |
||||||
|
count|5 |
||||||
|
1-URGENT|1 |
||||||
|
2-HIGH|1 |
||||||
|
3-MEDIUM|1 |
||||||
|
4-NOT SPECIFIED|1 |
||||||
|
5-LOW|1 |
||||||
|
end o_oprio |
||||||
|
### |
||||||
|
# rflag |
||||||
|
### |
||||||
|
begin rflag |
||||||
|
count|2 |
||||||
|
R|1 |
||||||
|
A|1 |
||||||
|
end rflag |
||||||
|
### |
||||||
|
# smode |
||||||
|
### |
||||||
|
begin smode |
||||||
|
count|7 |
||||||
|
REG AIR|1 |
||||||
|
AIR|1 |
||||||
|
RAIL|1 |
||||||
|
TRUCK|1 |
||||||
|
MAIL|1 |
||||||
|
FOB|1 |
||||||
|
SHIP|1 |
||||||
|
end smode |
||||||
|
### |
||||||
|
# types |
||||||
|
### |
||||||
|
begin p_types |
||||||
|
COUNT|150 |
||||||
|
STANDARD ANODIZED TIN|1 |
||||||
|
STANDARD ANODIZED NICKEL|1 |
||||||
|
STANDARD ANODIZED BRASS|1 |
||||||
|
STANDARD ANODIZED STEEL|1 |
||||||
|
STANDARD ANODIZED COPPER|1 |
||||||
|
STANDARD BURNISHED TIN|1 |
||||||
|
STANDARD BURNISHED NICKEL|1 |
||||||
|
STANDARD BURNISHED BRASS|1 |
||||||
|
STANDARD BURNISHED STEEL|1 |
||||||
|
STANDARD BURNISHED COPPER|1 |
||||||
|
STANDARD PLATED TIN|1 |
||||||
|
STANDARD PLATED NICKEL|1 |
||||||
|
STANDARD PLATED BRASS|1 |
||||||
|
STANDARD PLATED STEEL|1 |
||||||
|
STANDARD PLATED COPPER|1 |
||||||
|
STANDARD POLISHED TIN|1 |
||||||
|
STANDARD POLISHED NICKEL|1 |
||||||
|
STANDARD POLISHED BRASS|1 |
||||||
|
STANDARD POLISHED STEEL|1 |
||||||
|
STANDARD POLISHED COPPER|1 |
||||||
|
STANDARD BRUSHED TIN|1 |
||||||
|
STANDARD BRUSHED NICKEL|1 |
||||||
|
STANDARD BRUSHED BRASS|1 |
||||||
|
STANDARD BRUSHED STEEL|1 |
||||||
|
STANDARD BRUSHED COPPER|1 |
||||||
|
SMALL ANODIZED TIN|1 |
||||||
|
SMALL ANODIZED NICKEL|1 |
||||||
|
SMALL ANODIZED BRASS|1 |
||||||
|
SMALL ANODIZED STEEL|1 |
||||||
|
SMALL ANODIZED COPPER|1 |
||||||
|
SMALL BURNISHED TIN|1 |
||||||
|
SMALL BURNISHED NICKEL|1 |
||||||
|
SMALL BURNISHED BRASS|1 |
||||||
|
SMALL BURNISHED STEEL|1 |
||||||
|
SMALL BURNISHED COPPER|1 |
||||||
|
SMALL PLATED TIN|1 |
||||||
|
SMALL PLATED NICKEL|1 |
||||||
|
SMALL PLATED BRASS|1 |
||||||
|
SMALL PLATED STEEL|1 |
||||||
|
SMALL PLATED COPPER|1 |
||||||
|
SMALL POLISHED TIN|1 |
||||||
|
SMALL POLISHED NICKEL|1 |
||||||
|
SMALL POLISHED BRASS|1 |
||||||
|
SMALL POLISHED STEEL|1 |
||||||
|
SMALL POLISHED COPPER|1 |
||||||
|
SMALL BRUSHED TIN|1 |
||||||
|
SMALL BRUSHED NICKEL|1 |
||||||
|
SMALL BRUSHED BRASS|1 |
||||||
|
SMALL BRUSHED STEEL|1 |
||||||
|
SMALL BRUSHED COPPER|1 |
||||||
|
MEDIUM ANODIZED TIN|1 |
||||||
|
MEDIUM ANODIZED NICKEL|1 |
||||||
|
MEDIUM ANODIZED BRASS|1 |
||||||
|
MEDIUM ANODIZED STEEL|1 |
||||||
|
MEDIUM ANODIZED COPPER|1 |
||||||
|
MEDIUM BURNISHED TIN|1 |
||||||
|
MEDIUM BURNISHED NICKEL|1 |
||||||
|
MEDIUM BURNISHED BRASS|1 |
||||||
|
MEDIUM BURNISHED STEEL|1 |
||||||
|
MEDIUM BURNISHED COPPER|1 |
||||||
|
MEDIUM PLATED TIN|1 |
||||||
|
MEDIUM PLATED NICKEL|1 |
||||||
|
MEDIUM PLATED BRASS|1 |
||||||
|
MEDIUM PLATED STEEL|1 |
||||||
|
MEDIUM PLATED COPPER|1 |
||||||
|
MEDIUM POLISHED TIN|1 |
||||||
|
MEDIUM POLISHED NICKEL|1 |
||||||
|
MEDIUM POLISHED BRASS|1 |
||||||
|
MEDIUM POLISHED STEEL|1 |
||||||
|
MEDIUM POLISHED COPPER|1 |
||||||
|
MEDIUM BRUSHED TIN|1 |
||||||
|
MEDIUM BRUSHED NICKEL|1 |
||||||
|
MEDIUM BRUSHED BRASS|1 |
||||||
|
MEDIUM BRUSHED STEEL|1 |
||||||
|
MEDIUM BRUSHED COPPER|1 |
||||||
|
LARGE ANODIZED TIN|1 |
||||||
|
LARGE ANODIZED NICKEL|1 |
||||||
|
LARGE ANODIZED BRASS|1 |
||||||
|
LARGE ANODIZED STEEL|1 |
||||||
|
LARGE ANODIZED COPPER|1 |
||||||
|
LARGE BURNISHED TIN|1 |
||||||
|
LARGE BURNISHED NICKEL|1 |
||||||
|
LARGE BURNISHED BRASS|1 |
||||||
|
LARGE BURNISHED STEEL|1 |
||||||
|
LARGE BURNISHED COPPER|1 |
||||||
|
LARGE PLATED TIN|1 |
||||||
|
LARGE PLATED NICKEL|1 |
||||||
|
LARGE PLATED BRASS|1 |
||||||
|
LARGE PLATED STEEL|1 |
||||||
|
LARGE PLATED COPPER|1 |
||||||
|
LARGE POLISHED TIN|1 |
||||||
|
LARGE POLISHED NICKEL|1 |
||||||
|
LARGE POLISHED BRASS|1 |
||||||
|
LARGE POLISHED STEEL|1 |
||||||
|
LARGE POLISHED COPPER|1 |
||||||
|
LARGE BRUSHED TIN|1 |
||||||
|
LARGE BRUSHED NICKEL|1 |
||||||
|
LARGE BRUSHED BRASS|1 |
||||||
|
LARGE BRUSHED STEEL|1 |
||||||
|
LARGE BRUSHED COPPER|1 |
||||||
|
ECONOMY ANODIZED TIN|1 |
||||||
|
ECONOMY ANODIZED NICKEL|1 |
||||||
|
ECONOMY ANODIZED BRASS|1 |
||||||
|
ECONOMY ANODIZED STEEL|1 |
||||||
|
ECONOMY ANODIZED COPPER|1 |
||||||
|
ECONOMY BURNISHED TIN|1 |
||||||
|
ECONOMY BURNISHED NICKEL|1 |
||||||
|
ECONOMY BURNISHED BRASS|1 |
||||||
|
ECONOMY BURNISHED STEEL|1 |
||||||
|
ECONOMY BURNISHED COPPER|1 |
||||||
|
ECONOMY PLATED TIN|1 |
||||||
|
ECONOMY PLATED NICKEL|1 |
||||||
|
ECONOMY PLATED BRASS|1 |
||||||
|
ECONOMY PLATED STEEL|1 |
||||||
|
ECONOMY PLATED COPPER|1 |
||||||
|
ECONOMY POLISHED TIN|1 |
||||||
|
ECONOMY POLISHED NICKEL|1 |
||||||
|
ECONOMY POLISHED BRASS|1 |
||||||
|
ECONOMY POLISHED STEEL|1 |
||||||
|
ECONOMY POLISHED COPPER|1 |
||||||
|
ECONOMY BRUSHED TIN|1 |
||||||
|
ECONOMY BRUSHED NICKEL|1 |
||||||
|
ECONOMY BRUSHED BRASS|1 |
||||||
|
ECONOMY BRUSHED STEEL|1 |
||||||
|
ECONOMY BRUSHED COPPER|1 |
||||||
|
PROMO ANODIZED TIN|1 |
||||||
|
PROMO ANODIZED NICKEL|1 |
||||||
|
PROMO ANODIZED BRASS|1 |
||||||
|
PROMO ANODIZED STEEL|1 |
||||||
|
PROMO ANODIZED COPPER|1 |
||||||
|
PROMO BURNISHED TIN|1 |
||||||
|
PROMO BURNISHED NICKEL|1 |
||||||
|
PROMO BURNISHED BRASS|1 |
||||||
|
PROMO BURNISHED STEEL|1 |
||||||
|
PROMO BURNISHED COPPER|1 |
||||||
|
PROMO PLATED TIN|1 |
||||||
|
PROMO PLATED NICKEL|1 |
||||||
|
PROMO PLATED BRASS|1 |
||||||
|
PROMO PLATED STEEL|1 |
||||||
|
PROMO PLATED COPPER|1 |
||||||
|
PROMO POLISHED TIN|1 |
||||||
|
PROMO POLISHED NICKEL|1 |
||||||
|
PROMO POLISHED BRASS|1 |
||||||
|
PROMO POLISHED STEEL|1 |
||||||
|
PROMO POLISHED COPPER|1 |
||||||
|
PROMO BRUSHED TIN|1 |
||||||
|
PROMO BRUSHED NICKEL|1 |
||||||
|
PROMO BRUSHED BRASS|1 |
||||||
|
PROMO BRUSHED STEEL|1 |
||||||
|
PROMO BRUSHED COPPER|1 |
||||||
|
end p_types |
||||||
|
### |
||||||
|
# colors |
||||||
|
# NOTE: This distribution CANNOT be used by pick_str(), since agg_str() perturbs its order |
||||||
|
### |
||||||
|
begin colors |
||||||
|
COUNT|92 |
||||||
|
almond|1 |
||||||
|
antique|1 |
||||||
|
aquamarine|1 |
||||||
|
azure|1 |
||||||
|
beige|1 |
||||||
|
bisque|1 |
||||||
|
black|1 |
||||||
|
blanched|1 |
||||||
|
blue|1 |
||||||
|
blush|1 |
||||||
|
brown|1 |
||||||
|
burlywood|1 |
||||||
|
burnished|1 |
||||||
|
chartreuse|1 |
||||||
|
chiffon|1 |
||||||
|
chocolate|1 |
||||||
|
coral|1 |
||||||
|
cornflower|1 |
||||||
|
cornsilk|1 |
||||||
|
cream|1 |
||||||
|
cyan|1 |
||||||
|
dark|1 |
||||||
|
deep|1 |
||||||
|
dim|1 |
||||||
|
dodger|1 |
||||||
|
drab|1 |
||||||
|
firebrick|1 |
||||||
|
floral|1 |
||||||
|
forest|1 |
||||||
|
frosted|1 |
||||||
|
gainsboro|1 |
||||||
|
ghost|1 |
||||||
|
goldenrod|1 |
||||||
|
green|1 |
||||||
|
grey|1 |
||||||
|
honeydew|1 |
||||||
|
hot|1 |
||||||
|
indian|1 |
||||||
|
ivory|1 |
||||||
|
khaki|1 |
||||||
|
lace|1 |
||||||
|
lavender|1 |
||||||
|
lawn|1 |
||||||
|
lemon|1 |
||||||
|
light|1 |
||||||
|
lime|1 |
||||||
|
linen|1 |
||||||
|
magenta|1 |
||||||
|
maroon|1 |
||||||
|
medium|1 |
||||||
|
metallic|1 |
||||||
|
midnight|1 |
||||||
|
mint|1 |
||||||
|
misty|1 |
||||||
|
moccasin|1 |
||||||
|
navajo|1 |
||||||
|
navy|1 |
||||||
|
olive|1 |
||||||
|
orange|1 |
||||||
|
orchid|1 |
||||||
|
pale|1 |
||||||
|
papaya|1 |
||||||
|
peach|1 |
||||||
|
peru|1 |
||||||
|
pink|1 |
||||||
|
plum|1 |
||||||
|
powder|1 |
||||||
|
puff|1 |
||||||
|
purple|1 |
||||||
|
red|1 |
||||||
|
rose|1 |
||||||
|
rosy|1 |
||||||
|
royal|1 |
||||||
|
saddle|1 |
||||||
|
salmon|1 |
||||||
|
sandy|1 |
||||||
|
seashell|1 |
||||||
|
sienna|1 |
||||||
|
sky|1 |
||||||
|
slate|1 |
||||||
|
smoke|1 |
||||||
|
snow|1 |
||||||
|
spring|1 |
||||||
|
steel|1 |
||||||
|
tan|1 |
||||||
|
thistle|1 |
||||||
|
tomato|1 |
||||||
|
turquoise|1 |
||||||
|
violet|1 |
||||||
|
wheat|1 |
||||||
|
white|1 |
||||||
|
yellow|1 |
||||||
|
end colors |
||||||
|
################ |
||||||
|
################ |
||||||
|
## psuedo text distributions |
||||||
|
################ |
||||||
|
################ |
||||||
|
### |
||||||
|
# nouns |
||||||
|
### |
||||||
|
BEGIN nouns |
||||||
|
COUNT|45 |
||||||
|
packages|40 |
||||||
|
requests|40 |
||||||
|
accounts|40 |
||||||
|
deposits|40 |
||||||
|
foxes|20 |
||||||
|
ideas|20 |
||||||
|
theodolites|20 |
||||||
|
pinto beans|20 |
||||||
|
instructions|20 |
||||||
|
dependencies|10 |
||||||
|
excuses|10 |
||||||
|
platelets|10 |
||||||
|
asymptotes|10 |
||||||
|
courts|5 |
||||||
|
dolphins|5 |
||||||
|
multipliers|1 |
||||||
|
sauternes|1 |
||||||
|
warthogs|1 |
||||||
|
frets|1 |
||||||
|
dinos|1 |
||||||
|
attainments|1 |
||||||
|
somas|1 |
||||||
|
Tiresias|1 |
||||||
|
patterns|1 |
||||||
|
forges|1 |
||||||
|
braids|1 |
||||||
|
frays|1 |
||||||
|
warhorses|1 |
||||||
|
dugouts|1 |
||||||
|
notornis|1 |
||||||
|
epitaphs|1 |
||||||
|
pearls|1 |
||||||
|
tithes|1 |
||||||
|
waters|1 |
||||||
|
orbits|1 |
||||||
|
gifts|1 |
||||||
|
sheaves|1 |
||||||
|
depths|1 |
||||||
|
sentiments|1 |
||||||
|
decoys|1 |
||||||
|
realms|1 |
||||||
|
pains|1 |
||||||
|
grouches|1 |
||||||
|
escapades|1 |
||||||
|
hockey players|1 |
||||||
|
END nouns |
||||||
|
### |
||||||
|
# verbs |
||||||
|
### |
||||||
|
BEGIN verbs |
||||||
|
COUNT|40 |
||||||
|
sleep|20 |
||||||
|
wake|20 |
||||||
|
are|20 |
||||||
|
cajole|20 |
||||||
|
haggle|20 |
||||||
|
nag|10 |
||||||
|
use|10 |
||||||
|
boost|10 |
||||||
|
affix|5 |
||||||
|
detect|5 |
||||||
|
integrate|5 |
||||||
|
maintain|1 |
||||||
|
nod|1 |
||||||
|
was|1 |
||||||
|
lose|1 |
||||||
|
sublate|1 |
||||||
|
solve|1 |
||||||
|
thrash|1 |
||||||
|
promise|1 |
||||||
|
engage|1 |
||||||
|
hinder|1 |
||||||
|
print|1 |
||||||
|
x-ray|1 |
||||||
|
breach|1 |
||||||
|
eat|1 |
||||||
|
grow|1 |
||||||
|
impress|1 |
||||||
|
mold|1 |
||||||
|
poach|1 |
||||||
|
serve|1 |
||||||
|
run|1 |
||||||
|
dazzle|1 |
||||||
|
snooze|1 |
||||||
|
doze|1 |
||||||
|
unwind|1 |
||||||
|
kindle|1 |
||||||
|
play|1 |
||||||
|
hang|1 |
||||||
|
believe|1 |
||||||
|
doubt|1 |
||||||
|
END verbs |
||||||
|
### |
||||||
|
# adverbs |
||||||
|
## |
||||||
|
BEGIN adverbs |
||||||
|
COUNT|28 |
||||||
|
sometimes|1 |
||||||
|
always|1 |
||||||
|
never|1 |
||||||
|
furiously|50 |
||||||
|
slyly|50 |
||||||
|
carefully|50 |
||||||
|
blithely|40 |
||||||
|
quickly|30 |
||||||
|
fluffily|20 |
||||||
|
slowly|1 |
||||||
|
quietly|1 |
||||||
|
ruthlessly|1 |
||||||
|
thinly|1 |
||||||
|
closely|1 |
||||||
|
doggedly|1 |
||||||
|
daringly|1 |
||||||
|
bravely|1 |
||||||
|
stealthily|1 |
||||||
|
permanently|1 |
||||||
|
enticingly|1 |
||||||
|
idly|1 |
||||||
|
busily|1 |
||||||
|
regularly|1 |
||||||
|
finally|1 |
||||||
|
ironically|1 |
||||||
|
evenly|1 |
||||||
|
boldly|1 |
||||||
|
silently|1 |
||||||
|
END adverbs |
||||||
|
### |
||||||
|
# articles |
||||||
|
## |
||||||
|
BEGIN articles |
||||||
|
COUNT|3 |
||||||
|
the|50 |
||||||
|
a|20 |
||||||
|
an|5 |
||||||
|
END articles |
||||||
|
### |
||||||
|
# prepositions |
||||||
|
## |
||||||
|
BEGIN prepositions |
||||||
|
COUNT|47 |
||||||
|
about|50 |
||||||
|
above|50 |
||||||
|
according to|50 |
||||||
|
across|50 |
||||||
|
after|50 |
||||||
|
against|40 |
||||||
|
along|40 |
||||||
|
alongside of|30 |
||||||
|
among|30 |
||||||
|
around|20 |
||||||
|
at|10 |
||||||
|
atop|1 |
||||||
|
before|1 |
||||||
|
behind|1 |
||||||
|
beneath|1 |
||||||
|
beside|1 |
||||||
|
besides|1 |
||||||
|
between|1 |
||||||
|
beyond|1 |
||||||
|
by|1 |
||||||
|
despite|1 |
||||||
|
during|1 |
||||||
|
except|1 |
||||||
|
for|1 |
||||||
|
from|1 |
||||||
|
in place of|1 |
||||||
|
inside|1 |
||||||
|
instead of|1 |
||||||
|
into|1 |
||||||
|
near|1 |
||||||
|
of|1 |
||||||
|
on|1 |
||||||
|
outside|1 |
||||||
|
over|1 |
||||||
|
past|1 |
||||||
|
since|1 |
||||||
|
through|1 |
||||||
|
throughout|1 |
||||||
|
to|1 |
||||||
|
toward|1 |
||||||
|
under|1 |
||||||
|
until|1 |
||||||
|
up|1 |
||||||
|
upon|1 |
||||||
|
whithout|1 |
||||||
|
with|1 |
||||||
|
within|1 |
||||||
|
END prepositions |
||||||
|
### |
||||||
|
# auxillaries |
||||||
|
## |
||||||
|
BEGIN auxillaries |
||||||
|
COUNT|18 |
||||||
|
do|1 |
||||||
|
may|1 |
||||||
|
might|1 |
||||||
|
shall|1 |
||||||
|
will|1 |
||||||
|
would|1 |
||||||
|
can|1 |
||||||
|
could|1 |
||||||
|
should|1 |
||||||
|
ought to|1 |
||||||
|
must|1 |
||||||
|
will have to|1 |
||||||
|
shall have to|1 |
||||||
|
could have to|1 |
||||||
|
should have to|1 |
||||||
|
must have to|1 |
||||||
|
need to|1 |
||||||
|
try to|1 |
||||||
|
END auxiallaries |
||||||
|
### |
||||||
|
# terminators |
||||||
|
## |
||||||
|
BEGIN terminators |
||||||
|
COUNT|6 |
||||||
|
.|50 |
||||||
|
;|1 |
||||||
|
:|1 |
||||||
|
?|1 |
||||||
|
!|1 |
||||||
|
--|1 |
||||||
|
END terminators |
||||||
|
### |
||||||
|
# adjectives |
||||||
|
## |
||||||
|
BEGIN adjectives |
||||||
|
COUNT|29 |
||||||
|
special|20 |
||||||
|
pending|20 |
||||||
|
unusual|20 |
||||||
|
express|20 |
||||||
|
furious|1 |
||||||
|
sly|1 |
||||||
|
careful|1 |
||||||
|
blithe|1 |
||||||
|
quick|1 |
||||||
|
fluffy|1 |
||||||
|
slow|1 |
||||||
|
quiet|1 |
||||||
|
ruthless|1 |
||||||
|
thin|1 |
||||||
|
close|1 |
||||||
|
dogged|1 |
||||||
|
daring|1 |
||||||
|
brave|1 |
||||||
|
stealthy|1 |
||||||
|
permanent|1 |
||||||
|
enticing|1 |
||||||
|
idle|1 |
||||||
|
busy|1 |
||||||
|
regular|50 |
||||||
|
final|40 |
||||||
|
ironic|40 |
||||||
|
even|30 |
||||||
|
bold|20 |
||||||
|
silent|10 |
||||||
|
END adjectives |
||||||
|
### |
||||||
|
# grammar |
||||||
|
# first level grammar. N=noun phrase, V=verb phrase, |
||||||
|
# P=prepositional phrase, T=setence termination |
||||||
|
## |
||||||
|
BEGIN grammar |
||||||
|
COUNT|5 |
||||||
|
N V T|3 |
||||||
|
N V P T|3 |
||||||
|
N V N T|3 |
||||||
|
N P V N T|1 |
||||||
|
N P V P T|1 |
||||||
|
END grammar |
||||||
|
### |
||||||
|
# NP |
||||||
|
# second level grammar. Noun phrases. N=noun, A=article, |
||||||
|
# J=adjective, D=adverb |
||||||
|
## |
||||||
|
BEGIN np |
||||||
|
COUNT|4 |
||||||
|
N|10 |
||||||
|
J N|20 |
||||||
|
J, J N|10 |
||||||
|
D J N|50 |
||||||
|
END np |
||||||
|
### |
||||||
|
# VP |
||||||
|
# second level grammar. Verb phrases. V=verb, X=auxiallary, |
||||||
|
# D=adverb |
||||||
|
## |
||||||
|
BEGIN vp |
||||||
|
COUNT|4 |
||||||
|
V|30 |
||||||
|
X V|1 |
||||||
|
V D|40 |
||||||
|
X V D|1 |
||||||
|
END vp |
||||||
|
### |
||||||
|
# Q13 |
||||||
|
# Substitution parameters for Q13 |
||||||
|
## |
||||||
|
BEGIN Q13a |
||||||
|
COUNT|4 |
||||||
|
special|20 |
||||||
|
pending|20 |
||||||
|
unusual|20 |
||||||
|
express|20 |
||||||
|
END Q13a |
||||||
|
BEGIN Q13b |
||||||
|
COUNT|4 |
||||||
|
packages|40 |
||||||
|
requests|40 |
||||||
|
accounts|40 |
||||||
|
deposits|40 |
||||||
|
END Q13b |
@ -0,0 +1,800 @@ |
|||||||
|
/*
|
||||||
|
* $Id: driver.c,v 1.7 2008/09/24 22:35:21 jms Exp $ |
||||||
|
* |
||||||
|
* Revision History |
||||||
|
* =================== |
||||||
|
* $Log: driver.c,v $ |
||||||
|
* Revision 1.7 2008/09/24 22:35:21 jms |
||||||
|
* remove build number header |
||||||
|
* |
||||||
|
* Revision 1.6 2008/09/24 22:30:29 jms |
||||||
|
* remove build number from default header |
||||||
|
* |
||||||
|
* Revision 1.5 2008/03/21 17:38:39 jms |
||||||
|
* changes for 2.6.3 |
||||||
|
* |
||||||
|
* Revision 1.4 2006/04/26 23:01:10 jms |
||||||
|
* address update generation problems |
||||||
|
* |
||||||
|
* Revision 1.3 2005/10/28 02:54:35 jms |
||||||
|
* add release.h changes |
||||||
|
* |
||||||
|
* Revision 1.2 2005/01/03 20:08:58 jms |
||||||
|
* change line terminations |
||||||
|
* |
||||||
|
* Revision 1.1.1.1 2004/11/24 23:31:46 jms |
||||||
|
* re-establish external server |
||||||
|
* |
||||||
|
* Revision 1.5 2004/04/07 20:17:29 jms |
||||||
|
* bug #58 (join fails between order/lineitem) |
||||||
|
* |
||||||
|
* Revision 1.4 2004/02/18 16:26:49 jms |
||||||
|
* 32/64 bit changes for overflow handling needed additional changes when ported back to windows |
||||||
|
* |
||||||
|
* Revision 1.3 2004/01/22 05:49:29 jms |
||||||
|
* AIX porting (AIX 5.1) |
||||||
|
* |
||||||
|
* Revision 1.2 2004/01/22 03:54:12 jms |
||||||
|
* 64 bit support changes for customer address |
||||||
|
* |
||||||
|
* Revision 1.1.1.1 2003/08/08 21:50:33 jms |
||||||
|
* recreation after CVS crash |
||||||
|
* |
||||||
|
* Revision 1.3 2003/08/08 21:35:26 jms |
||||||
|
* first integration of rng64 for o_custkey and l_partkey |
||||||
|
* |
||||||
|
* Revision 1.2 2003/08/07 17:58:34 jms |
||||||
|
* Convery RNG to 64bit space as preparation for new large scale RNG |
||||||
|
* |
||||||
|
* Revision 1.1.1.1 2003/04/03 18:54:21 jms |
||||||
|
* initial checkin |
||||||
|
* |
||||||
|
* |
||||||
|
*/ |
||||||
|
/* main driver for dss banchmark */ |
||||||
|
|
||||||
|
#define DECLARER /* EXTERN references get defined here */ |
||||||
|
#define NO_FUNC (int (*) ()) NULL /* to clean up tdefs */ |
||||||
|
#define NO_LFUNC (long (*) ()) NULL /* to clean up tdefs */ |
||||||
|
|
||||||
|
#include "config.h" |
||||||
|
#include "release.h" |
||||||
|
#include <stdlib.h> |
||||||
|
#if (defined(_POSIX_)||!defined(WIN32)) /* Change for Windows NT */ |
||||||
|
#include <unistd.h> |
||||||
|
#include <sys/wait.h> |
||||||
|
#endif /* WIN32 */ |
||||||
|
#include <stdio.h> /* */ |
||||||
|
#include <limits.h> |
||||||
|
#include <math.h> |
||||||
|
#include <ctype.h> |
||||||
|
#include <signal.h> |
||||||
|
#include <string.h> |
||||||
|
#include <errno.h> |
||||||
|
#ifdef HP |
||||||
|
#include <strings.h> |
||||||
|
#endif |
||||||
|
#if (defined(WIN32)&&!defined(_POSIX_)) |
||||||
|
#include <process.h> |
||||||
|
#pragma warning(disable:4201) |
||||||
|
#pragma warning(disable:4214) |
||||||
|
#pragma warning(disable:4514) |
||||||
|
#define WIN32_LEAN_AND_MEAN |
||||||
|
#define NOATOM |
||||||
|
#define NOGDICAPMASKS |
||||||
|
#define NOMETAFILE |
||||||
|
#define NOMINMAX |
||||||
|
#define NOMSG |
||||||
|
#define NOOPENFILE |
||||||
|
#define NORASTEROPS |
||||||
|
#define NOSCROLL |
||||||
|
#define NOSOUND |
||||||
|
#define NOSYSMETRICS |
||||||
|
#define NOTEXTMETRIC |
||||||
|
#define NOWH |
||||||
|
#define NOCOMM |
||||||
|
#define NOKANJI |
||||||
|
#define NOMCX |
||||||
|
#include <windows.h> |
||||||
|
#pragma warning(default:4201) |
||||||
|
#pragma warning(default:4214) |
||||||
|
#endif |
||||||
|
|
||||||
|
#include "dss.h" |
||||||
|
#include "dsstypes.h" |
||||||
|
|
||||||
|
/*
|
||||||
|
* Function prototypes |
||||||
|
*/ |
||||||
|
void usage (void); |
||||||
|
void kill_load (void); |
||||||
|
int pload (int tbl); |
||||||
|
void gen_tbl (int tnum, DSS_HUGE start, DSS_HUGE count, long upd_num); |
||||||
|
int pr_drange (int tbl, DSS_HUGE min, DSS_HUGE cnt, long num); |
||||||
|
int set_files (int t, int pload); |
||||||
|
int partial (int, int); |
||||||
|
|
||||||
|
|
||||||
|
extern int optind, opterr; |
||||||
|
extern char *optarg; |
||||||
|
DSS_HUGE rowcnt = 0, minrow = 0; |
||||||
|
long upd_num = 0; |
||||||
|
double flt_scale; |
||||||
|
#if (defined(WIN32)&&!defined(_POSIX_)) |
||||||
|
char *spawn_args[25]; |
||||||
|
#endif |
||||||
|
#ifdef RNG_TEST |
||||||
|
extern seed_t Seed[]; |
||||||
|
#endif |
||||||
|
static int bTableSet = 0; |
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* general table descriptions. See dss.h for details on structure |
||||||
|
* NOTE: tables with no scaling info are scaled according to |
||||||
|
* another table |
||||||
|
* |
||||||
|
* |
||||||
|
* the following is based on the tdef structure defined in dss.h as: |
||||||
|
* typedef struct |
||||||
|
* { |
||||||
|
* char *name; -- name of the table;
|
||||||
|
* flat file output in <name>.tbl |
||||||
|
* long base; -- base scale rowcount of table;
|
||||||
|
* 0 if derived |
||||||
|
* int (*loader) (); -- function to present output |
||||||
|
* long (*gen_seed) (); -- functions to seed the RNG |
||||||
|
* int child; -- non-zero if there is an associated detail table |
||||||
|
* unsigned long vtotal; -- "checksum" total
|
||||||
|
* } tdef; |
||||||
|
* |
||||||
|
*/ |
||||||
|
|
||||||
|
/*
|
||||||
|
* flat file print functions; used with -F(lat) option |
||||||
|
*/ |
||||||
|
int pr_cust (customer_t * c, int mode); |
||||||
|
int pr_line (order_t * o, int mode); |
||||||
|
int pr_order (order_t * o, int mode); |
||||||
|
int pr_part (part_t * p, int mode); |
||||||
|
int pr_psupp (part_t * p, int mode); |
||||||
|
int pr_supp (supplier_t * s, int mode); |
||||||
|
int pr_order_line (order_t * o, int mode); |
||||||
|
int pr_part_psupp (part_t * p, int mode); |
||||||
|
int pr_nation (code_t * c, int mode); |
||||||
|
int pr_region (code_t * c, int mode); |
||||||
|
|
||||||
|
/*
|
||||||
|
* seed generation functions; used with '-O s' option |
||||||
|
*/ |
||||||
|
long sd_cust (int child, DSS_HUGE skip_count); |
||||||
|
long sd_line (int child, DSS_HUGE skip_count); |
||||||
|
long sd_order (int child, DSS_HUGE skip_count); |
||||||
|
long sd_part (int child, DSS_HUGE skip_count); |
||||||
|
long sd_psupp (int child, DSS_HUGE skip_count); |
||||||
|
long sd_supp (int child, DSS_HUGE skip_count); |
||||||
|
long sd_order_line (int child, DSS_HUGE skip_count); |
||||||
|
long sd_part_psupp (int child, DSS_HUGE skip_count); |
||||||
|
|
||||||
|
tdef tdefs[] = |
||||||
|
{ |
||||||
|
{"part.tbl", "part table", 200000, |
||||||
|
pr_part, sd_part, PSUPP, 0}, |
||||||
|
{"partsupp.tbl", "partsupplier table", 200000, |
||||||
|
pr_psupp, sd_psupp, NONE, 0}, |
||||||
|
{"supplier.tbl", "suppliers table", 10000, |
||||||
|
pr_supp, sd_supp, NONE, 0}, |
||||||
|
{"customer.tbl", "customers table", 150000, |
||||||
|
pr_cust, sd_cust, NONE, 0}, |
||||||
|
{"orders.tbl", "order table", 150000, |
||||||
|
pr_order, sd_order, LINE, 0}, |
||||||
|
{"lineitem.tbl", "lineitem table", 150000, |
||||||
|
pr_line, sd_line, NONE, 0}, |
||||||
|
{"orders.tbl", "orders/lineitem tables", 150000, |
||||||
|
pr_order_line, sd_order, LINE, 0}, |
||||||
|
{"part.tbl", "part/partsupplier tables", 200000, |
||||||
|
pr_part_psupp, sd_part, PSUPP, 0}, |
||||||
|
{"nation.tbl", "nation table", NATIONS_MAX, |
||||||
|
pr_nation, NO_LFUNC, NONE, 0}, |
||||||
|
{"region.tbl", "region table", NATIONS_MAX, |
||||||
|
pr_region, NO_LFUNC, NONE, 0}, |
||||||
|
}; |
||||||
|
|
||||||
|
/*
|
||||||
|
* re-set default output file names
|
||||||
|
*/ |
||||||
|
int |
||||||
|
set_files (int i, int pload) |
||||||
|
{ |
||||||
|
char line[80], *new_name; |
||||||
|
|
||||||
|
if (table & (1 << i)) |
||||||
|
child_table: |
||||||
|
{ |
||||||
|
if (pload != -1) |
||||||
|
sprintf (line, "%s.%d", tdefs[i].name, pload); |
||||||
|
else |
||||||
|
{ |
||||||
|
printf ("Enter new destination for %s data: ", |
||||||
|
tdefs[i].name); |
||||||
|
if (fgets (line, sizeof (line), stdin) == NULL) |
||||||
|
return (-1);; |
||||||
|
if ((new_name = strchr (line, '\n')) != NULL) |
||||||
|
*new_name = '\0'; |
||||||
|
if ((int)strlen (line) == 0) |
||||||
|
return (0); |
||||||
|
} |
||||||
|
new_name = (char *) malloc ((int)strlen (line) + 1); |
||||||
|
MALLOC_CHECK (new_name); |
||||||
|
strcpy (new_name, line); |
||||||
|
tdefs[i].name = new_name; |
||||||
|
if (tdefs[i].child != NONE) |
||||||
|
{ |
||||||
|
i = tdefs[i].child; |
||||||
|
tdefs[i].child = NONE; |
||||||
|
goto child_table; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return (0); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* read the distributions needed in the benchamrk |
||||||
|
*/ |
||||||
|
void |
||||||
|
load_dists (void) |
||||||
|
{ |
||||||
|
read_dist (env_config (DIST_TAG, DIST_DFLT), "p_cntr", &p_cntr_set); |
||||||
|
read_dist (env_config (DIST_TAG, DIST_DFLT), "colors", &colors); |
||||||
|
read_dist (env_config (DIST_TAG, DIST_DFLT), "p_types", &p_types_set); |
||||||
|
read_dist (env_config (DIST_TAG, DIST_DFLT), "nations", &nations); |
||||||
|
read_dist (env_config (DIST_TAG, DIST_DFLT), "regions", ®ions); |
||||||
|
read_dist (env_config (DIST_TAG, DIST_DFLT), "o_oprio", |
||||||
|
&o_priority_set); |
||||||
|
read_dist (env_config (DIST_TAG, DIST_DFLT), "instruct", |
||||||
|
&l_instruct_set); |
||||||
|
read_dist (env_config (DIST_TAG, DIST_DFLT), "smode", &l_smode_set); |
||||||
|
read_dist (env_config (DIST_TAG, DIST_DFLT), "category", |
||||||
|
&l_category_set); |
||||||
|
read_dist (env_config (DIST_TAG, DIST_DFLT), "rflag", &l_rflag_set); |
||||||
|
read_dist (env_config (DIST_TAG, DIST_DFLT), "msegmnt", &c_mseg_set); |
||||||
|
|
||||||
|
/* load the distributions that contain text generation */ |
||||||
|
read_dist (env_config (DIST_TAG, DIST_DFLT), "nouns", &nouns); |
||||||
|
read_dist (env_config (DIST_TAG, DIST_DFLT), "verbs", &verbs); |
||||||
|
read_dist (env_config (DIST_TAG, DIST_DFLT), "adjectives", &adjectives); |
||||||
|
read_dist (env_config (DIST_TAG, DIST_DFLT), "adverbs", &adverbs); |
||||||
|
read_dist (env_config (DIST_TAG, DIST_DFLT), "auxillaries", &auxillaries); |
||||||
|
read_dist (env_config (DIST_TAG, DIST_DFLT), "terminators", &terminators); |
||||||
|
read_dist (env_config (DIST_TAG, DIST_DFLT), "articles", &articles); |
||||||
|
read_dist (env_config (DIST_TAG, DIST_DFLT), "prepositions", &prepositions); |
||||||
|
read_dist (env_config (DIST_TAG, DIST_DFLT), "grammar", &grammar); |
||||||
|
read_dist (env_config (DIST_TAG, DIST_DFLT), "np", &np); |
||||||
|
read_dist (env_config (DIST_TAG, DIST_DFLT), "vp", &vp); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
* generate a particular table |
||||||
|
*/ |
||||||
|
void |
||||||
|
gen_tbl (int tnum, DSS_HUGE start, DSS_HUGE count, long upd_num) |
||||||
|
{ |
||||||
|
static order_t o; |
||||||
|
supplier_t supp; |
||||||
|
customer_t cust; |
||||||
|
part_t part; |
||||||
|
code_t code; |
||||||
|
static int completed = 0; |
||||||
|
DSS_HUGE i; |
||||||
|
|
||||||
|
DSS_HUGE rows_per_segment=0; |
||||||
|
DSS_HUGE rows_this_segment=-1; |
||||||
|
DSS_HUGE residual_rows=0; |
||||||
|
|
||||||
|
if (insert_segments) |
||||||
|
{ |
||||||
|
rows_per_segment = count / insert_segments; |
||||||
|
residual_rows = count - (rows_per_segment * insert_segments); |
||||||
|
} |
||||||
|
|
||||||
|
for (i = start; count; count--, i++) |
||||||
|
{ |
||||||
|
LIFENOISE (1000, i); |
||||||
|
row_start(tnum); |
||||||
|
|
||||||
|
switch (tnum) |
||||||
|
{ |
||||||
|
case LINE: |
||||||
|
case ORDER: |
||||||
|
case ORDER_LINE:
|
||||||
|
mk_order (i, &o, upd_num % 10000); |
||||||
|
|
||||||
|
if (insert_segments && (upd_num > 0)) |
||||||
|
if((upd_num / 10000) < residual_rows) |
||||||
|
{ |
||||||
|
if((++rows_this_segment) > rows_per_segment)
|
||||||
|
{
|
||||||
|
rows_this_segment=0; |
||||||
|
upd_num += 10000;
|
||||||
|
} |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
if((++rows_this_segment) >= rows_per_segment)
|
||||||
|
{ |
||||||
|
rows_this_segment=0; |
||||||
|
upd_num += 10000; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
if (set_seeds == 0) |
||||||
|
tdefs[tnum].loader(&o, upd_num); |
||||||
|
break; |
||||||
|
case SUPP: |
||||||
|
mk_supp (i, &supp); |
||||||
|
if (set_seeds == 0) |
||||||
|
tdefs[tnum].loader(&supp, upd_num); |
||||||
|
break; |
||||||
|
case CUST: |
||||||
|
mk_cust (i, &cust); |
||||||
|
if (set_seeds == 0) |
||||||
|
tdefs[tnum].loader(&cust, upd_num); |
||||||
|
break; |
||||||
|
case PSUPP: |
||||||
|
case PART: |
||||||
|
case PART_PSUPP:
|
||||||
|
mk_part (i, &part); |
||||||
|
if (set_seeds == 0) |
||||||
|
tdefs[tnum].loader(&part, upd_num); |
||||||
|
break; |
||||||
|
case NATION: |
||||||
|
mk_nation (i, &code); |
||||||
|
if (set_seeds == 0) |
||||||
|
tdefs[tnum].loader(&code, 0); |
||||||
|
break; |
||||||
|
case REGION: |
||||||
|
mk_region (i, &code); |
||||||
|
if (set_seeds == 0) |
||||||
|
tdefs[tnum].loader(&code, 0); |
||||||
|
break; |
||||||
|
} |
||||||
|
row_stop(tnum); |
||||||
|
if (set_seeds && (i % tdefs[tnum].base) < 2) |
||||||
|
{ |
||||||
|
printf("\nSeeds for %s at rowcount %ld\n", tdefs[tnum].comment, i); |
||||||
|
dump_seeds(tnum); |
||||||
|
} |
||||||
|
} |
||||||
|
completed |= 1 << tnum; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void |
||||||
|
usage (void) |
||||||
|
{ |
||||||
|
fprintf (stderr, "%s\n%s\n\t%s\n%s %s\n\n", |
||||||
|
"USAGE:", |
||||||
|
"dbgen [-{vf}][-T {pcsoPSOL}]", |
||||||
|
"[-s <scale>][-C <procs>][-S <step>]", |
||||||
|
"dbgen [-v] [-O m] [-s <scale>]", |
||||||
|
"[-U <updates>]"); |
||||||
|
fprintf (stderr, "Basic Options\n===========================\n"); |
||||||
|
fprintf (stderr, "-C <n> -- separate data set into <n> chunks (requires -S, default: 1)\n"); |
||||||
|
fprintf (stderr, "-f -- force. Overwrite existing files\n"); |
||||||
|
fprintf (stderr, "-h -- display this message\n"); |
||||||
|
fprintf (stderr, "-q -- enable QUIET mode\n"); |
||||||
|
fprintf (stderr, "-s <n> -- set Scale Factor (SF) to <n> (default: 1) \n"); |
||||||
|
fprintf (stderr, "-S <n> -- build the <n>th step of the data/update set (used with -C or -U)\n"); |
||||||
|
fprintf (stderr, "-U <n> -- generate <n> update sets\n"); |
||||||
|
fprintf (stderr, "-v -- enable VERBOSE mode\n"); |
||||||
|
fprintf (stderr, "\nAdvanced Options\n===========================\n"); |
||||||
|
fprintf (stderr, "-b <s> -- load distributions for <s> (default: dists.dss)\n"); |
||||||
|
fprintf (stderr, "-d <n> -- split deletes between <n> files (requires -U)\n"); |
||||||
|
fprintf (stderr, "-i <n> -- split inserts between <n> files (requires -U)\n"); |
||||||
|
fprintf (stderr, "-T c -- generate cutomers ONLY\n"); |
||||||
|
fprintf (stderr, "-T l -- generate nation/region ONLY\n"); |
||||||
|
fprintf (stderr, "-T L -- generate lineitem ONLY\n"); |
||||||
|
fprintf (stderr, "-T n -- generate nation ONLY\n"); |
||||||
|
fprintf (stderr, "-T o -- generate orders/lineitem ONLY\n"); |
||||||
|
fprintf (stderr, "-T O -- generate orders ONLY\n"); |
||||||
|
fprintf (stderr, "-T p -- generate parts/partsupp ONLY\n"); |
||||||
|
fprintf (stderr, "-T P -- generate parts ONLY\n"); |
||||||
|
fprintf (stderr, "-T r -- generate region ONLY\n"); |
||||||
|
fprintf (stderr, "-T s -- generate suppliers ONLY\n"); |
||||||
|
fprintf (stderr, "-T S -- generate partsupp ONLY\n"); |
||||||
|
fprintf (stderr, |
||||||
|
"\nTo generate the SF=1 (1GB), validation database population, use:\n"); |
||||||
|
fprintf (stderr, "\tdbgen -vf -s 1\n"); |
||||||
|
fprintf (stderr, "\nTo generate updates for a SF=1 (1GB), use:\n"); |
||||||
|
fprintf (stderr, "\tdbgen -v -U 1 -s 1\n"); |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
* int partial(int tbl, int s) -- generate the s-th part of the named tables data |
||||||
|
*/ |
||||||
|
int |
||||||
|
partial (int tbl, int s) |
||||||
|
{ |
||||||
|
DSS_HUGE rowcnt; |
||||||
|
DSS_HUGE extra; |
||||||
|
|
||||||
|
if (verbose > 0) |
||||||
|
{ |
||||||
|
fprintf (stderr, "\tStarting to load stage %d of %d for %s...", |
||||||
|
s, children, tdefs[tbl].comment); |
||||||
|
} |
||||||
|
|
||||||
|
set_files (tbl, s); |
||||||
|
|
||||||
|
rowcnt = set_state(tbl, scale, children, s, &extra); |
||||||
|
|
||||||
|
if (s == children) |
||||||
|
gen_tbl (tbl, rowcnt * (s - 1) + 1, rowcnt + extra, upd_num); |
||||||
|
else |
||||||
|
gen_tbl (tbl, rowcnt * (s - 1) + 1, rowcnt, upd_num); |
||||||
|
|
||||||
|
if (verbose > 0) |
||||||
|
fprintf (stderr, "done.\n"); |
||||||
|
|
||||||
|
return (0); |
||||||
|
} |
||||||
|
|
||||||
|
void |
||||||
|
process_options (int count, char **vector) |
||||||
|
{ |
||||||
|
int option; |
||||||
|
FILE *pF; |
||||||
|
|
||||||
|
while ((option = getopt (count, vector, |
||||||
|
"b:C:d:fi:hO:P:qs:S:T:U:v")) != -1) |
||||||
|
switch (option) |
||||||
|
{ |
||||||
|
case 'b': /* load distributions from named file */ |
||||||
|
d_path = (char *)malloc((int)strlen(optarg) + 1); |
||||||
|
MALLOC_CHECK(d_path); |
||||||
|
strcpy(d_path, optarg); |
||||||
|
if ((pF = fopen(d_path, "r")) == NULL) |
||||||
|
{ |
||||||
|
fprintf(stderr, "ERROR: Invalid argument to -b"); |
||||||
|
exit(-1); |
||||||
|
} |
||||||
|
else |
||||||
|
fclose(pF); |
||||||
|
|
||||||
|
break; |
||||||
|
case 'C': |
||||||
|
children = atoi (optarg); |
||||||
|
break; |
||||||
|
case 'd': |
||||||
|
delete_segments = atoi (optarg); |
||||||
|
break; |
||||||
|
case 'f': /* blind overwrites; Force */ |
||||||
|
force = 1; |
||||||
|
break; |
||||||
|
case 'i': |
||||||
|
insert_segments = atoi (optarg); |
||||||
|
break; |
||||||
|
case 'q': /* all prompts disabled */ |
||||||
|
verbose = -1; |
||||||
|
break; |
||||||
|
case 's': /* scale by Percentage of base rowcount */ |
||||||
|
case 'P': /* for backward compatibility */ |
||||||
|
flt_scale = atof (optarg); |
||||||
|
if (flt_scale < MIN_SCALE) |
||||||
|
{ |
||||||
|
int i; |
||||||
|
int int_scale; |
||||||
|
|
||||||
|
scale = 1; |
||||||
|
int_scale = (int)(1000 * flt_scale); |
||||||
|
for (i = PART; i < REGION; i++) |
||||||
|
{ |
||||||
|
tdefs[i].base = (DSS_HUGE)(int_scale * tdefs[i].base)/1000; |
||||||
|
if (tdefs[i].base < 1) |
||||||
|
tdefs[i].base = 1; |
||||||
|
} |
||||||
|
} |
||||||
|
else |
||||||
|
scale = (long) flt_scale; |
||||||
|
if (scale > MAX_SCALE) |
||||||
|
{ |
||||||
|
fprintf (stderr, "%s %5.0f %s\n\t%s\n\n", |
||||||
|
"NOTE: Data generation for scale factors >", |
||||||
|
MAX_SCALE, |
||||||
|
"GB is still in development,", |
||||||
|
"and is not yet supported.\n"); |
||||||
|
fprintf (stderr, |
||||||
|
"Your resulting data set MAY NOT BE COMPLIANT!\n"); |
||||||
|
} |
||||||
|
break; |
||||||
|
case 'S': /* generate a particular STEP */ |
||||||
|
step = atoi (optarg); |
||||||
|
break; |
||||||
|
case 'U': /* generate flat files for update stream */ |
||||||
|
updates = atoi (optarg); |
||||||
|
break; |
||||||
|
case 'v': /* life noises enabled */ |
||||||
|
verbose = 1; |
||||||
|
break; |
||||||
|
case 'T': /* generate a specifc table */ |
||||||
|
switch (*optarg) |
||||||
|
{ |
||||||
|
case 'c': /* generate customer ONLY */ |
||||||
|
table = 1 << CUST; |
||||||
|
bTableSet = 1; |
||||||
|
break; |
||||||
|
case 'L': /* generate lineitems ONLY */ |
||||||
|
table = 1 << LINE; |
||||||
|
bTableSet = 1; |
||||||
|
break; |
||||||
|
case 'l': /* generate code table ONLY */ |
||||||
|
table = 1 << NATION; |
||||||
|
table |= 1 << REGION; |
||||||
|
bTableSet = 1; |
||||||
|
break; |
||||||
|
case 'n': /* generate nation table ONLY */ |
||||||
|
table = 1 << NATION; |
||||||
|
bTableSet = 1; |
||||||
|
break; |
||||||
|
case 'O': /* generate orders ONLY */ |
||||||
|
table = 1 << ORDER; |
||||||
|
bTableSet = 1; |
||||||
|
break; |
||||||
|
case 'o': /* generate orders/lineitems ONLY */ |
||||||
|
table = 1 << ORDER_LINE; |
||||||
|
bTableSet = 1; |
||||||
|
break; |
||||||
|
case 'P': /* generate part ONLY */ |
||||||
|
table = 1 << PART; |
||||||
|
bTableSet = 1; |
||||||
|
break; |
||||||
|
case 'p': /* generate part/partsupp ONLY */ |
||||||
|
table = 1 << PART_PSUPP; |
||||||
|
bTableSet = 1; |
||||||
|
break; |
||||||
|
case 'r': /* generate region table ONLY */ |
||||||
|
table = 1 << REGION; |
||||||
|
bTableSet = 1; |
||||||
|
break; |
||||||
|
case 'S': /* generate partsupp ONLY */ |
||||||
|
table = 1 << PSUPP; |
||||||
|
bTableSet = 1; |
||||||
|
break; |
||||||
|
case 's': /* generate suppliers ONLY */ |
||||||
|
table = 1 << SUPP; |
||||||
|
bTableSet = 1; |
||||||
|
break; |
||||||
|
default: |
||||||
|
fprintf (stderr, "Unknown table name %s\n", |
||||||
|
optarg); |
||||||
|
usage (); |
||||||
|
exit (1); |
||||||
|
} |
||||||
|
break; |
||||||
|
case 'O': /* optional actions */ |
||||||
|
switch (tolower (*optarg)) |
||||||
|
{ |
||||||
|
case 's': /* calibrate the RNG usage */ |
||||||
|
set_seeds = 1; |
||||||
|
break; |
||||||
|
default: |
||||||
|
fprintf (stderr, "Unknown option name %s\n", |
||||||
|
optarg); |
||||||
|
usage (); |
||||||
|
exit (1); |
||||||
|
} |
||||||
|
break; |
||||||
|
default: |
||||||
|
printf ("ERROR: option '%c' unknown.\n", |
||||||
|
*(vector[optind] + 1)); |
||||||
|
case 'h': /* something unexpected */ |
||||||
|
fprintf (stderr, |
||||||
|
"%s Population Generator (Version %d.%d.%d build %d)\n", |
||||||
|
NAME, VERSION, RELEASE, PATCH, BUILD); |
||||||
|
fprintf (stderr, "Copyright %s %s\n", TPC, C_DATES); |
||||||
|
usage (); |
||||||
|
exit (1); |
||||||
|
} |
||||||
|
|
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
void validate_options(void) |
||||||
|
{ |
||||||
|
// DBGenOptions, 3.1
|
||||||
|
if (children != 1) |
||||||
|
{ |
||||||
|
if (updates != 0) |
||||||
|
{ |
||||||
|
fprintf(stderr, "ERROR: -C is not valid when generating updates\n"); |
||||||
|
exit(-1); |
||||||
|
} |
||||||
|
if (step == -1) |
||||||
|
{ |
||||||
|
fprintf(stderr, "ERROR: -S must be specified when generating data in multiple chunks\n"); |
||||||
|
exit(-1); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
// DBGenOptions, 3.3
|
||||||
|
if (updates == 0) |
||||||
|
{ |
||||||
|
if ((insert_segments != 0) || (delete_segments != 0)) |
||||||
|
{ |
||||||
|
fprintf(stderr, "ERROR: -d/-i are only valid when generating updates\n"); |
||||||
|
exit(-1); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
// DBGenOptions, 3.9
|
||||||
|
if (step != -1) |
||||||
|
{ |
||||||
|
if ((children == 1) && (updates == 0)) |
||||||
|
{ |
||||||
|
fprintf(stderr, "ERROR: -S is only valid when generating data in multiple chunks or generating updates\n"); |
||||||
|
exit(-1); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
// DBGenOptions, 3.10
|
||||||
|
if (bTableSet && (updates != 0)) |
||||||
|
{ |
||||||
|
fprintf(stderr, "ERROR: -T not valid when generating updates\n"); |
||||||
|
exit(-1); |
||||||
|
} |
||||||
|
|
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* MAIN |
||||||
|
* |
||||||
|
* assumes the existance of getopt() to clean up the command
|
||||||
|
* line handling |
||||||
|
*/ |
||||||
|
int |
||||||
|
main (int ac, char **av) |
||||||
|
{ |
||||||
|
DSS_HUGE i; |
||||||
|
|
||||||
|
table = (1 << CUST) | |
||||||
|
(1 << SUPP) | |
||||||
|
(1 << NATION) | |
||||||
|
(1 << REGION) | |
||||||
|
(1 << PART_PSUPP) | |
||||||
|
(1 << ORDER_LINE); |
||||||
|
force = 0; |
||||||
|
insert_segments=0; |
||||||
|
delete_segments=0; |
||||||
|
insert_orders_segment=0; |
||||||
|
insert_lineitem_segment=0; |
||||||
|
delete_segment=0; |
||||||
|
verbose = 0; |
||||||
|
set_seeds = 0; |
||||||
|
scale = 1; |
||||||
|
flt_scale = 1.0; |
||||||
|
updates = 0; |
||||||
|
step = -1; |
||||||
|
tdefs[ORDER].base *= |
||||||
|
ORDERS_PER_CUST; /* have to do this after init */ |
||||||
|
tdefs[LINE].base *= |
||||||
|
ORDERS_PER_CUST; /* have to do this after init */ |
||||||
|
tdefs[ORDER_LINE].base *= |
||||||
|
ORDERS_PER_CUST; /* have to do this after init */ |
||||||
|
children = 1; |
||||||
|
d_path = NULL; |
||||||
|
|
||||||
|
#ifdef NO_SUPPORT |
||||||
|
signal (SIGINT, exit); |
||||||
|
#endif /* NO_SUPPORT */ |
||||||
|
process_options (ac, av); |
||||||
|
validate_options(); |
||||||
|
#if (defined(WIN32)&&!defined(_POSIX_)) |
||||||
|
for (i = 0; i < ac; i++) |
||||||
|
{ |
||||||
|
spawn_args[i] = malloc (((int)strlen (av[i]) + 1) * sizeof (char)); |
||||||
|
MALLOC_CHECK (spawn_args[i]); |
||||||
|
strcpy (spawn_args[i], av[i]); |
||||||
|
} |
||||||
|
spawn_args[ac] = NULL; |
||||||
|
#endif |
||||||
|
|
||||||
|
if (verbose >= 0) |
||||||
|
{ |
||||||
|
fprintf (stderr, |
||||||
|
"%s Population Generator (Version %d.%d.%d)\n", |
||||||
|
NAME, VERSION, RELEASE, PATCH); |
||||||
|
fprintf (stderr, "Copyright %s %s\n", TPC, C_DATES); |
||||||
|
} |
||||||
|
|
||||||
|
load_dists (); |
||||||
|
#ifdef RNG_TEST |
||||||
|
for (i=0; i <= MAX_STREAM; i++) |
||||||
|
Seed[i].nCalls = 0; |
||||||
|
#endif |
||||||
|
/* have to do this after init */ |
||||||
|
tdefs[NATION].base = nations.count; |
||||||
|
tdefs[REGION].base = regions.count; |
||||||
|
|
||||||
|
/*
|
||||||
|
* updates are never parallelized
|
||||||
|
*/ |
||||||
|
if (updates) |
||||||
|
{ |
||||||
|
/*
|
||||||
|
* set RNG to start generating rows beyond SF=scale |
||||||
|
*/ |
||||||
|
set_state (ORDER, scale, 100, 101, &i);
|
||||||
|
rowcnt = (int)(tdefs[ORDER_LINE].base / 10000 * scale * UPD_PCT); |
||||||
|
if (step > 0) |
||||||
|
{ |
||||||
|
/*
|
||||||
|
* adjust RNG for any prior update generation |
||||||
|
*/ |
||||||
|
for (i=1; i < step; i++) |
||||||
|
{ |
||||||
|
sd_order(0, rowcnt); |
||||||
|
sd_line(0, rowcnt); |
||||||
|
} |
||||||
|
upd_num = step - 1; |
||||||
|
} |
||||||
|
else |
||||||
|
upd_num = 0; |
||||||
|
|
||||||
|
while (upd_num < updates) |
||||||
|
{ |
||||||
|
if (verbose > 0) |
||||||
|
fprintf (stderr, |
||||||
|
"Generating update pair #%d for %s", |
||||||
|
upd_num + 1, tdefs[ORDER_LINE].comment); |
||||||
|
insert_orders_segment=0; |
||||||
|
insert_lineitem_segment=0; |
||||||
|
delete_segment=0; |
||||||
|
minrow = upd_num * rowcnt + 1; |
||||||
|
gen_tbl (ORDER_LINE, minrow, rowcnt, upd_num + 1); |
||||||
|
if (verbose > 0) |
||||||
|
fprintf (stderr, "done.\n"); |
||||||
|
pr_drange (ORDER_LINE, minrow, rowcnt, upd_num + 1); |
||||||
|
upd_num++; |
||||||
|
} |
||||||
|
|
||||||
|
exit (0); |
||||||
|
} |
||||||
|
|
||||||
|
/**
|
||||||
|
** actual data generation section starts here |
||||||
|
**/ |
||||||
|
|
||||||
|
/*
|
||||||
|
* traverse the tables, invoking the appropriate data generation routine for any to be built |
||||||
|
*/ |
||||||
|
for (i = PART; i <= REGION; i++) |
||||||
|
if (table & (1 << i)) |
||||||
|
{ |
||||||
|
if (children > 1 && i < NATION) |
||||||
|
{ |
||||||
|
partial ((int)i, step); |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
minrow = 1; |
||||||
|
if (i < NATION) |
||||||
|
rowcnt = tdefs[i].base * scale; |
||||||
|
else |
||||||
|
rowcnt = tdefs[i].base; |
||||||
|
if (verbose > 0) |
||||||
|
fprintf (stderr, "Generating data for %s", tdefs[i].comment); |
||||||
|
gen_tbl ((int)i, minrow, rowcnt, upd_num); |
||||||
|
if (verbose > 0) |
||||||
|
fprintf (stderr, "done.\n"); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return (0); |
||||||
|
} |
Binary file not shown.
@ -0,0 +1,70 @@ |
|||||||
|
-- Sccsid: @(#)dss.ddl 2.1.8.1 |
||||||
|
CREATE TABLE NATION ( N_NATIONKEY INTEGER NOT NULL, |
||||||
|
N_NAME CHAR(25) NOT NULL, |
||||||
|
N_REGIONKEY INTEGER NOT NULL, |
||||||
|
N_COMMENT VARCHAR(152)); |
||||||
|
|
||||||
|
CREATE TABLE REGION ( R_REGIONKEY INTEGER NOT NULL, |
||||||
|
R_NAME CHAR(25) NOT NULL, |
||||||
|
R_COMMENT VARCHAR(152)); |
||||||
|
|
||||||
|
CREATE TABLE PART ( P_PARTKEY INTEGER NOT NULL, |
||||||
|
P_NAME VARCHAR(55) NOT NULL, |
||||||
|
P_MFGR CHAR(25) NOT NULL, |
||||||
|
P_BRAND CHAR(10) NOT NULL, |
||||||
|
P_TYPE VARCHAR(25) NOT NULL, |
||||||
|
P_SIZE INTEGER NOT NULL, |
||||||
|
P_CONTAINER CHAR(10) NOT NULL, |
||||||
|
P_RETAILPRICE DECIMAL(15,2) NOT NULL, |
||||||
|
P_COMMENT VARCHAR(23) NOT NULL ); |
||||||
|
|
||||||
|
CREATE TABLE SUPPLIER ( S_SUPPKEY INTEGER NOT NULL, |
||||||
|
S_NAME CHAR(25) NOT NULL, |
||||||
|
S_ADDRESS VARCHAR(40) NOT NULL, |
||||||
|
S_NATIONKEY INTEGER NOT NULL, |
||||||
|
S_PHONE CHAR(15) NOT NULL, |
||||||
|
S_ACCTBAL DECIMAL(15,2) NOT NULL, |
||||||
|
S_COMMENT VARCHAR(101) NOT NULL); |
||||||
|
|
||||||
|
CREATE TABLE PARTSUPP ( PS_PARTKEY INTEGER NOT NULL, |
||||||
|
PS_SUPPKEY INTEGER NOT NULL, |
||||||
|
PS_AVAILQTY INTEGER NOT NULL, |
||||||
|
PS_SUPPLYCOST DECIMAL(15,2) NOT NULL, |
||||||
|
PS_COMMENT VARCHAR(199) NOT NULL ); |
||||||
|
|
||||||
|
CREATE TABLE CUSTOMER ( C_CUSTKEY INTEGER NOT NULL, |
||||||
|
C_NAME VARCHAR(25) NOT NULL, |
||||||
|
C_ADDRESS VARCHAR(40) NOT NULL, |
||||||
|
C_NATIONKEY INTEGER NOT NULL, |
||||||
|
C_PHONE CHAR(15) NOT NULL, |
||||||
|
C_ACCTBAL DECIMAL(15,2) NOT NULL, |
||||||
|
C_MKTSEGMENT CHAR(10) NOT NULL, |
||||||
|
C_COMMENT VARCHAR(117) NOT NULL); |
||||||
|
|
||||||
|
CREATE TABLE ORDERS ( O_ORDERKEY INTEGER NOT NULL, |
||||||
|
O_CUSTKEY INTEGER NOT NULL, |
||||||
|
O_ORDERSTATUS CHAR(1) NOT NULL, |
||||||
|
O_TOTALPRICE DECIMAL(15,2) NOT NULL, |
||||||
|
O_ORDERDATE DATE NOT NULL, |
||||||
|
O_ORDERPRIORITY CHAR(15) NOT NULL, |
||||||
|
O_CLERK CHAR(15) NOT NULL, |
||||||
|
O_SHIPPRIORITY INTEGER NOT NULL, |
||||||
|
O_COMMENT VARCHAR(79) NOT NULL); |
||||||
|
|
||||||
|
CREATE TABLE LINEITEM ( L_ORDERKEY INTEGER NOT NULL, |
||||||
|
L_PARTKEY INTEGER NOT NULL, |
||||||
|
L_SUPPKEY INTEGER NOT NULL, |
||||||
|
L_LINENUMBER INTEGER NOT NULL, |
||||||
|
L_QUANTITY DECIMAL(15,2) NOT NULL, |
||||||
|
L_EXTENDEDPRICE DECIMAL(15,2) NOT NULL, |
||||||
|
L_DISCOUNT DECIMAL(15,2) NOT NULL, |
||||||
|
L_TAX DECIMAL(15,2) NOT NULL, |
||||||
|
L_RETURNFLAG CHAR(1) NOT NULL, |
||||||
|
L_LINESTATUS CHAR(1) NOT NULL, |
||||||
|
L_SHIPDATE DATE NOT NULL, |
||||||
|
L_COMMITDATE DATE NOT NULL, |
||||||
|
L_RECEIPTDATE DATE NOT NULL, |
||||||
|
L_SHIPINSTRUCT CHAR(25) NOT NULL, |
||||||
|
L_SHIPMODE CHAR(10) NOT NULL, |
||||||
|
L_COMMENT VARCHAR(44) NOT NULL); |
||||||
|
|
@ -0,0 +1,549 @@ |
|||||||
|
/*
|
||||||
|
* $Id: dss.h,v 1.10 2008/03/21 18:07:13 jms Exp $ |
||||||
|
* |
||||||
|
* Revision History |
||||||
|
* =================== |
||||||
|
* $Log: dss.h,v $ |
||||||
|
* Revision 1.10 2008/03/21 18:07:13 jms |
||||||
|
* update copyright date |
||||||
|
* |
||||||
|
* Revision 1.9 2006/07/31 17:23:09 jms |
||||||
|
* fix to parallelism problem |
||||||
|
* |
||||||
|
* Revision 1.8 2006/03/09 18:55:29 jms |
||||||
|
* remove vestigial cvs merge marker |
||||||
|
* |
||||||
|
* Revision 1.7 2005/10/28 03:05:05 jms |
||||||
|
* up maximum scale to 100TB |
||||||
|
* |
||||||
|
* Revision 1.6 2005/10/28 02:55:26 jms |
||||||
|
* add release.h changes |
||||||
|
* |
||||||
|
* Revision 1.5 2005/10/27 18:13:03 jms |
||||||
|
* a_rnd() prototype correction |
||||||
|
* |
||||||
|
* Revision 1.4 2005/10/25 17:58:59 jms |
||||||
|
* update version stamp |
||||||
|
* |
||||||
|
* Revision 1.3 2005/03/04 19:48:39 jms |
||||||
|
* Changes from Doug Johnson to address very large scale factors |
||||||
|
* |
||||||
|
* Revision 1.2 2005/01/03 20:08:58 jms |
||||||
|
* change line terminations |
||||||
|
* |
||||||
|
* Revision 1.1.1.1 2004/11/24 23:31:46 jms |
||||||
|
* re-establish external server |
||||||
|
* |
||||||
|
* Revision 1.5 2004/04/08 17:34:15 jms |
||||||
|
* cleanup SOLARIS/SUN ifdefs; now all use SUN |
||||||
|
* |
||||||
|
* Revision 1.4 2004/04/07 20:17:29 jms |
||||||
|
* bug #58 (join fails between order/lineitem) |
||||||
|
* |
||||||
|
* Revision 1.3 2004/03/16 14:37:53 jms |
||||||
|
* update version and copyright date; correct comment typo |
||||||
|
* |
||||||
|
* Revision 1.2 2004/02/18 14:07:20 jms |
||||||
|
* change to version 2.1.0 |
||||||
|
* |
||||||
|
* Revision 1.1.1.1 2003/08/08 21:50:33 jms |
||||||
|
* recreation after CVS crash |
||||||
|
* |
||||||
|
* Revision 1.3 2003/08/08 21:35:26 jms |
||||||
|
* first integration of rng64 for o_custkey and l_partkey |
||||||
|
* |
||||||
|
* Revision 1.2 2003/08/07 17:58:34 jms |
||||||
|
* Convery RNG to 64bit space as preparation for new large scale RNG |
||||||
|
* |
||||||
|
* Revision 1.1.1.1 2003/04/03 18:54:21 jms |
||||||
|
* initial checkin |
||||||
|
* |
||||||
|
* |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* 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 |
||||||
|
#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 "config.h" |
||||||
|
#include "shared.h" |
||||||
|
|
||||||
|
#include <stdio.h> |
||||||
|
#include <stdlib.h> |
||||||
|
|
||||||
|
#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, stream) dss_random(&tgt, lower, upper, stream) |
||||||
|
#define RANDOM64(tgt, lower, upper, stream) dss_random64(&tgt, lower, upper, stream) |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct |
||||||
|
{ |
||||||
|
long weight; |
||||||
|
char *text; |
||||||
|
} set_member; |
||||||
|
|
||||||
|
typedef struct |
||||||
|
{ |
||||||
|
int count; |
||||||
|
int max; |
||||||
|
set_member *list; |
||||||
|
long *permute; |
||||||
|
} distribution; |
||||||
|
/*
|
||||||
|
* some handy access functions
|
||||||
|
*/ |
||||||
|
#define DIST_SIZE(d) d->count |
||||||
|
#define DIST_MEMBER(d, i) ((set_member *)((d)->list + i))->text |
||||||
|
#define DIST_PERMUTE(d, i) (d->permute[i]) |
||||||
|
|
||||||
|
typedef struct |
||||||
|
{ |
||||||
|
char *name; |
||||||
|
char *comment; |
||||||
|
DSS_HUGE base; |
||||||
|
int (*loader) (); |
||||||
|
long (*gen_seed)(); |
||||||
|
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; |
||||||
|
|
||||||
|
|
||||||
|
#if defined(__STDC__) |
||||||
|
#define PROTO(s) s |
||||||
|
#else |
||||||
|
#define PROTO(s) () |
||||||
|
#endif |
||||||
|
|
||||||
|
/* bm_utils.c */ |
||||||
|
char *env_config PROTO((char *var, char *dflt)); |
||||||
|
long yes_no PROTO((char *prompt)); |
||||||
|
void a_rnd PROTO((int min, int max, int column, char *dest)); |
||||||
|
int tx_rnd PROTO((long min, long max, long column, char *tgt)); |
||||||
|
long julian PROTO((long date)); |
||||||
|
long unjulian PROTO((long date)); |
||||||
|
FILE *tbl_open PROTO((int tbl, char *mode)); |
||||||
|
long dssncasecmp PROTO((char *s1, char *s2, int n)); |
||||||
|
long dsscasecmp PROTO((char *s1, char *s2)); |
||||||
|
int pick_str PROTO((distribution * s, int c, char *target)); |
||||||
|
void agg_str PROTO((distribution *set, long count, long col, char *dest)); |
||||||
|
void read_dist PROTO((char *path, 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)); |
||||||
|
|
||||||
|
/* rnd.c */ |
||||||
|
DSS_HUGE NextRand PROTO((DSS_HUGE nSeed)); |
||||||
|
DSS_HUGE UnifInt PROTO((DSS_HUGE nLow, DSS_HUGE nHigh, long nStream)); |
||||||
|
void dss_random(DSS_HUGE *tgt, DSS_HUGE min, DSS_HUGE max, long seed); |
||||||
|
void row_start(int t); |
||||||
|
void row_stop(int t); |
||||||
|
void dump_seeds(int t); |
||||||
|
|
||||||
|
/* 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 dbg_text PROTO((char * t, int min, int max, int s)); |
||||||
|
|
||||||
|
#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 long scale; |
||||||
|
EXTERN int refresh; |
||||||
|
EXTERN int resume; |
||||||
|
EXTERN long verbose; |
||||||
|
EXTERN long force; |
||||||
|
EXTERN long updates; |
||||||
|
EXTERN long table; |
||||||
|
EXTERN long children; |
||||||
|
EXTERN int step; |
||||||
|
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; |
||||||
|
|
||||||
|
|
||||||
|
#ifndef DECLARER |
||||||
|
extern tdef tdefs[]; |
||||||
|
|
||||||
|
#endif /* DECLARER */ |
||||||
|
|
||||||
|
|
||||||
|
/*****************************************************************
|
||||||
|
** 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 ((tdefs[SUPP].base - 1) * scale) |
||||||
|
#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 (tdefs[CUST].base * scale) |
||||||
|
#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 (tdefs[PART].base * scale) |
||||||
|
#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) \ |
||||||
|
sprintf(tgt, "%02d-%02d-19%02d", mn, dy, yr) |
||||||
|
#else |
||||||
|
#define PR_DATE(tgt, yr, mn, dy) \ |
||||||
|
sprintf(tgt, "19%02d-%02d-%02d", yr, mn, dy) |
||||||
|
#endif /* DATE_FORMAT */ |
||||||
|
|
||||||
|
/*
|
||||||
|
* verification macros |
||||||
|
*/ |
||||||
|
#define VRF_STR(t, d) {char *xx = d; while (*xx) tdefs[t].vtotal += *xx++;} |
||||||
|
#define VRF_INT(t,d) tdefs[t].vtotal += d |
||||||
|
#define VRF_HUGE(t,d) tdefs[t].vtotal = *((long *)&d) + *((long *)(&d + 1)) |
||||||
|
/* assume float is a 64 bit quantity */ |
||||||
|
#define VRF_MONEY(t,d) tdefs[t].vtotal = *((long *)&d) + *((long *)(&d + 1)) |
||||||
|
#define VRF_CHR(t,d) 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 |
||||||
|
#endif /* DSS_H */ |
@ -0,0 +1,100 @@ |
|||||||
|
-- Sccsid: @(#)dss.ri 2.1.8.1 |
||||||
|
-- TPCD Benchmark Version 8.0 |
||||||
|
|
||||||
|
CONNECT TO TPCD; |
||||||
|
|
||||||
|
--ALTER TABLE TPCD.REGION DROP PRIMARY KEY; |
||||||
|
--ALTER TABLE TPCD.NATION DROP PRIMARY KEY; |
||||||
|
--ALTER TABLE TPCD.PART DROP PRIMARY KEY; |
||||||
|
--ALTER TABLE TPCD.SUPPLIER DROP PRIMARY KEY; |
||||||
|
--ALTER TABLE TPCD.PARTSUPP DROP PRIMARY KEY; |
||||||
|
--ALTER TABLE TPCD.ORDERS DROP PRIMARY KEY; |
||||||
|
--ALTER TABLE TPCD.LINEITEM DROP PRIMARY KEY; |
||||||
|
--ALTER TABLE TPCD.CUSTOMER DROP PRIMARY KEY; |
||||||
|
|
||||||
|
|
||||||
|
-- For table REGION |
||||||
|
ALTER TABLE TPCD.REGION |
||||||
|
ADD PRIMARY KEY (R_REGIONKEY); |
||||||
|
|
||||||
|
-- For table NATION |
||||||
|
ALTER TABLE TPCD.NATION |
||||||
|
ADD PRIMARY KEY (N_NATIONKEY); |
||||||
|
|
||||||
|
ALTER TABLE TPCD.NATION |
||||||
|
ADD FOREIGN KEY NATION_FK1 (N_REGIONKEY) references TPCD.REGION; |
||||||
|
|
||||||
|
COMMIT WORK; |
||||||
|
|
||||||
|
-- For table PART |
||||||
|
ALTER TABLE TPCD.PART |
||||||
|
ADD PRIMARY KEY (P_PARTKEY); |
||||||
|
|
||||||
|
COMMIT WORK; |
||||||
|
|
||||||
|
-- For table SUPPLIER |
||||||
|
ALTER TABLE TPCD.SUPPLIER |
||||||
|
ADD PRIMARY KEY (S_SUPPKEY); |
||||||
|
|
||||||
|
ALTER TABLE TPCD.SUPPLIER |
||||||
|
ADD FOREIGN KEY SUPPLIER_FK1 (S_NATIONKEY) references TPCD.NATION; |
||||||
|
|
||||||
|
COMMIT WORK; |
||||||
|
|
||||||
|
-- For table PARTSUPP |
||||||
|
ALTER TABLE TPCD.PARTSUPP |
||||||
|
ADD PRIMARY KEY (PS_PARTKEY,PS_SUPPKEY); |
||||||
|
|
||||||
|
COMMIT WORK; |
||||||
|
|
||||||
|
-- For table CUSTOMER |
||||||
|
ALTER TABLE TPCD.CUSTOMER |
||||||
|
ADD PRIMARY KEY (C_CUSTKEY); |
||||||
|
|
||||||
|
ALTER TABLE TPCD.CUSTOMER |
||||||
|
ADD FOREIGN KEY CUSTOMER_FK1 (C_NATIONKEY) references TPCD.NATION; |
||||||
|
|
||||||
|
COMMIT WORK; |
||||||
|
|
||||||
|
-- For table LINEITEM |
||||||
|
ALTER TABLE TPCD.LINEITEM |
||||||
|
ADD PRIMARY KEY (L_ORDERKEY,L_LINENUMBER); |
||||||
|
|
||||||
|
COMMIT WORK; |
||||||
|
|
||||||
|
-- For table ORDERS |
||||||
|
ALTER TABLE TPCD.ORDERS |
||||||
|
ADD PRIMARY KEY (O_ORDERKEY); |
||||||
|
|
||||||
|
COMMIT WORK; |
||||||
|
|
||||||
|
-- For table PARTSUPP |
||||||
|
ALTER TABLE TPCD.PARTSUPP |
||||||
|
ADD FOREIGN KEY PARTSUPP_FK1 (PS_SUPPKEY) references TPCD.SUPPLIER; |
||||||
|
|
||||||
|
COMMIT WORK; |
||||||
|
|
||||||
|
ALTER TABLE TPCD.PARTSUPP |
||||||
|
ADD FOREIGN KEY PARTSUPP_FK2 (PS_PARTKEY) references TPCD.PART; |
||||||
|
|
||||||
|
COMMIT WORK; |
||||||
|
|
||||||
|
-- For table ORDERS |
||||||
|
ALTER TABLE TPCD.ORDERS |
||||||
|
ADD FOREIGN KEY ORDERS_FK1 (O_CUSTKEY) references TPCD.CUSTOMER; |
||||||
|
|
||||||
|
COMMIT WORK; |
||||||
|
|
||||||
|
-- For table LINEITEM |
||||||
|
ALTER TABLE TPCD.LINEITEM |
||||||
|
ADD FOREIGN KEY LINEITEM_FK1 (L_ORDERKEY) references TPCD.ORDERS; |
||||||
|
|
||||||
|
COMMIT WORK; |
||||||
|
|
||||||
|
ALTER TABLE TPCD.LINEITEM |
||||||
|
ADD FOREIGN KEY LINEITEM_FK2 (L_PARTKEY,L_SUPPKEY) references |
||||||
|
TPCD.PARTSUPP; |
||||||
|
|
||||||
|
COMMIT WORK; |
||||||
|
|
||||||
|
|
@ -0,0 +1,183 @@ |
|||||||
|
/*
|
||||||
|
* $Id: dsstypes.h,v 1.3 2005/10/28 02:57:04 jms Exp $ |
||||||
|
* |
||||||
|
* Revision History |
||||||
|
* =================== |
||||||
|
* $Log: dsstypes.h,v $ |
||||||
|
* Revision 1.3 2005/10/28 02:57:04 jms |
||||||
|
* allow for larger names in customer table |
||||||
|
* |
||||||
|
* Revision 1.2 2005/01/03 20:08:58 jms |
||||||
|
* change line terminations |
||||||
|
* |
||||||
|
* Revision 1.1.1.1 2004/11/24 23:31:46 jms |
||||||
|
* re-establish external server |
||||||
|
* |
||||||
|
* Revision 1.3 2004/04/07 20:17:29 jms |
||||||
|
* bug #58 (join fails between order/lineitem) |
||||||
|
* |
||||||
|
* Revision 1.2 2004/01/22 05:49:29 jms |
||||||
|
* AIX porting (AIX 5.1) |
||||||
|
* |
||||||
|
* Revision 1.1.1.1 2003/08/07 17:58:34 jms |
||||||
|
* recreation after CVS crash |
||||||
|
* |
||||||
|
* Revision 1.2 2003/08/07 17:58:34 jms |
||||||
|
* Convery RNG to 64bit space as preparation for new large scale RNG |
||||||
|
* |
||||||
|
* Revision 1.1.1.1 2003/04/03 18:54:21 jms |
||||||
|
* initial checkin |
||||||
|
* |
||||||
|
* |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* general definitions and control information for the DSS data types |
||||||
|
* and function prototypes |
||||||
|
*/ |
||||||
|
|
||||||
|
/*
|
||||||
|
* 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)); |
||||||
|
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, 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)); |
||||||
|
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)); |
||||||
|
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)); |
||||||
|
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)); |
||||||
|
int pr_region PROTO((code_t * c, int mode)); |
||||||
|
int ld_region PROTO((code_t * c, int mode)); |
||||||
|
|
@ -0,0 +1,281 @@ |
|||||||
|
/*
|
||||||
|
* $Id: load_stub.c,v 1.2 2005/01/03 20:08:58 jms Exp $ |
||||||
|
* |
||||||
|
* Revision History |
||||||
|
* =================== |
||||||
|
* $Log: load_stub.c,v $ |
||||||
|
* Revision 1.2 2005/01/03 20:08:58 jms |
||||||
|
* change line terminations |
||||||
|
* |
||||||
|
* Revision 1.1.1.1 2004/11/24 23:31:46 jms |
||||||
|
* re-establish external server |
||||||
|
* |
||||||
|
* Revision 1.1.1.1 2003/04/03 18:54:21 jms |
||||||
|
* recreation after CVS crash |
||||||
|
* |
||||||
|
* Revision 1.1.1.1 2003/04/03 18:54:21 jms |
||||||
|
* initial checkin |
||||||
|
* |
||||||
|
* |
||||||
|
*/ |
||||||
|
/*****************************************************************
|
||||||
|
* Title: load_stub.c |
||||||
|
* Description: |
||||||
|
* stub routines for: |
||||||
|
* inline load of dss benchmark |
||||||
|
* header creation for dss benchmark |
||||||
|
* |
||||||
|
***************************************************************** |
||||||
|
*/ |
||||||
|
|
||||||
|
#include <stdio.h> |
||||||
|
#include "config.h" |
||||||
|
#include "dss.h" |
||||||
|
#include "dsstypes.h" |
||||||
|
|
||||||
|
int
|
||||||
|
close_direct(void) |
||||||
|
{ |
||||||
|
/* any post load cleanup goes here */ |
||||||
|
return(0); |
||||||
|
} |
||||||
|
|
||||||
|
int
|
||||||
|
prep_direct(void) |
||||||
|
{ |
||||||
|
/* any preload prep goes here */ |
||||||
|
return(0); |
||||||
|
} |
||||||
|
|
||||||
|
int
|
||||||
|
hd_cust (FILE *f) |
||||||
|
{ |
||||||
|
static int count = 0; |
||||||
|
|
||||||
|
if (! count++) |
||||||
|
printf("No header has been defined for the customer table\n"); |
||||||
|
|
||||||
|
return(0); |
||||||
|
} |
||||||
|
|
||||||
|
int
|
||||||
|
ld_cust (customer_t *cp, int mode) |
||||||
|
{ |
||||||
|
static int count = 0; |
||||||
|
|
||||||
|
if (! count++) |
||||||
|
printf("%s %s\n", |
||||||
|
"No load routine has been defined", |
||||||
|
"for the customer table"); |
||||||
|
|
||||||
|
return(0); |
||||||
|
} |
||||||
|
|
||||||
|
int
|
||||||
|
hd_part (FILE *f) |
||||||
|
{ |
||||||
|
static int count = 0; |
||||||
|
|
||||||
|
if (! count++) |
||||||
|
printf("No header has been defined for the part table\n"); |
||||||
|
|
||||||
|
return(0); |
||||||
|
} |
||||||
|
|
||||||
|
int
|
||||||
|
ld_part (part_t *pp, int mode) |
||||||
|
{ |
||||||
|
static int count = 0; |
||||||
|
|
||||||
|
if (! count++) |
||||||
|
printf("No load routine has been defined for the part table\n"); |
||||||
|
|
||||||
|
return(0); |
||||||
|
} |
||||||
|
|
||||||
|
int
|
||||||
|
ld_psupp (part_t *pp, int mode) |
||||||
|
{ |
||||||
|
static int count = 0; |
||||||
|
|
||||||
|
if (! count++) |
||||||
|
printf("%s %s\n", |
||||||
|
"No load routine has been defined for the", |
||||||
|
"psupp table\n"); |
||||||
|
|
||||||
|
return(0); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
hd_supp (FILE *f) |
||||||
|
{ |
||||||
|
static int count = 0; |
||||||
|
|
||||||
|
if (! count++) |
||||||
|
printf("No header has been defined for the supplier table\n"); |
||||||
|
|
||||||
|
return(0); |
||||||
|
} |
||||||
|
|
||||||
|
int
|
||||||
|
ld_supp (supplier_t *sp, int mode) |
||||||
|
{ |
||||||
|
static int count = 0; |
||||||
|
|
||||||
|
if (! count++) |
||||||
|
printf("%s %s\n", |
||||||
|
"No load routine has been defined", |
||||||
|
"for the supplier table\n"); |
||||||
|
|
||||||
|
return(0); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
hd_order (FILE *f) |
||||||
|
{ |
||||||
|
static int count = 0; |
||||||
|
|
||||||
|
if (! count++) |
||||||
|
printf("No header has been defined for the order table\n"); |
||||||
|
|
||||||
|
return(0); |
||||||
|
} |
||||||
|
|
||||||
|
int
|
||||||
|
ld_order (order_t *p, int mode) |
||||||
|
{ |
||||||
|
static int count = 0; |
||||||
|
|
||||||
|
if (! count++) |
||||||
|
printf("%s %s\n", |
||||||
|
"No load routine has been defined", |
||||||
|
"for the order table"); |
||||||
|
|
||||||
|
return(0); |
||||||
|
} |
||||||
|
|
||||||
|
int ld_line (order_t *p, int mode) |
||||||
|
{ |
||||||
|
static int count = 0; |
||||||
|
|
||||||
|
if (! count++) |
||||||
|
printf("%s %s\n", |
||||||
|
"No load routine has been defined", |
||||||
|
"for the line table"); |
||||||
|
|
||||||
|
return(0); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
hd_psupp (FILE *f) |
||||||
|
{ |
||||||
|
static int count = 0; |
||||||
|
|
||||||
|
if (! count++) |
||||||
|
printf("%s %s\n", |
||||||
|
"No header has been defined for the", |
||||||
|
"part supplier table"); |
||||||
|
|
||||||
|
return(0); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
hd_line (FILE *f) |
||||||
|
{ |
||||||
|
static int count = 0; |
||||||
|
|
||||||
|
if (! count++) |
||||||
|
printf("No header has been defined for the lineitem table\n"); |
||||||
|
|
||||||
|
return(0); |
||||||
|
} |
||||||
|
|
||||||
|
int
|
||||||
|
hd_nation (FILE *f) |
||||||
|
{ |
||||||
|
static int count = 0; |
||||||
|
|
||||||
|
if (! count++) |
||||||
|
printf("No header has been defined for the nation table\n"); |
||||||
|
|
||||||
|
return(0); |
||||||
|
} |
||||||
|
|
||||||
|
int
|
||||||
|
ld_nation (code_t *cp, int mode) |
||||||
|
{ |
||||||
|
static int count = 0; |
||||||
|
|
||||||
|
if (! count++) |
||||||
|
printf("%s %s\n", |
||||||
|
"No load routine has been defined", |
||||||
|
"for the nation table"); |
||||||
|
|
||||||
|
return(0); |
||||||
|
} |
||||||
|
|
||||||
|
int
|
||||||
|
hd_region (FILE *f) |
||||||
|
{ |
||||||
|
static int count = 0; |
||||||
|
|
||||||
|
if (! count++) |
||||||
|
printf("No header has been defined for the region table\n"); |
||||||
|
|
||||||
|
return(0); |
||||||
|
} |
||||||
|
|
||||||
|
int
|
||||||
|
ld_region (code_t *cp, int mode) |
||||||
|
{ |
||||||
|
static int count = 0; |
||||||
|
|
||||||
|
if (! count++) |
||||||
|
printf("%s %s\n", |
||||||
|
"No load routine has been defined", |
||||||
|
"for the region table"); |
||||||
|
|
||||||
|
return(0); |
||||||
|
} |
||||||
|
|
||||||
|
int
|
||||||
|
ld_order_line (order_t *p, int mode) |
||||||
|
{ |
||||||
|
ld_order(p, mode); |
||||||
|
ld_line (p, mode); |
||||||
|
|
||||||
|
return(0); |
||||||
|
} |
||||||
|
|
||||||
|
int
|
||||||
|
hd_order_line (FILE *f) |
||||||
|
{ |
||||||
|
hd_order(f); |
||||||
|
hd_line (f); |
||||||
|
|
||||||
|
return(0); |
||||||
|
} |
||||||
|
|
||||||
|
int
|
||||||
|
ld_part_psupp (part_t *p, int mode) |
||||||
|
{ |
||||||
|
ld_part(p, mode); |
||||||
|
ld_psupp (p, mode); |
||||||
|
|
||||||
|
return(0); |
||||||
|
} |
||||||
|
|
||||||
|
int
|
||||||
|
hd_part_psupp (FILE *f) |
||||||
|
{ |
||||||
|
hd_part(f); |
||||||
|
hd_psupp(f); |
||||||
|
|
||||||
|
return(0); |
||||||
|
} |
Binary file not shown.
@ -0,0 +1,199 @@ |
|||||||
|
#
|
||||||
|
# $Id: makefile.suite,v 1.25 2009/10/22 19:10:21 jms Exp $
|
||||||
|
#
|
||||||
|
# Revision History
|
||||||
|
# ===================
|
||||||
|
# $Log: makefile.suite,v $
|
||||||
|
# Revision 1.25 2009/10/22 19:10:21 jms
|
||||||
|
# update revision to 2.9.0, disable bug55 fix
|
||||||
|
#
|
||||||
|
# Revision 1.24 2009/10/22 19:06:10 jms
|
||||||
|
# update revision to 2.9.0, disable bug55 fix
|
||||||
|
#
|
||||||
|
# Revision 1.23 2009/06/28 14:01:08 jms
|
||||||
|
# bug fix for DOP
|
||||||
|
#
|
||||||
|
# Revision 1.22 2008/09/15 16:37:46 jms
|
||||||
|
# release 2.8.0 makefile.suite
|
||||||
|
#
|
||||||
|
# Revision 1.21 2008/03/21 18:26:54 jms
|
||||||
|
# recursive zip for reference data, chmod for update_release
|
||||||
|
#
|
||||||
|
# Revision 1.20 2008/03/21 17:38:39 jms
|
||||||
|
# changes for 2.6.3
|
||||||
|
#
|
||||||
|
# Revision 1.19 2007/03/08 20:36:03 jms
|
||||||
|
# update release number to 2.6.1
|
||||||
|
#
|
||||||
|
# Revision 1.18 2007/02/06 18:15:56 jms
|
||||||
|
# remove update release from general target
|
||||||
|
#
|
||||||
|
# Revision 1.17 2007/01/25 19:35:50 jms
|
||||||
|
# add sln file used by VS2005
|
||||||
|
#
|
||||||
|
# Revision 1.16 2007/01/05 20:05:41 jms
|
||||||
|
# update release number
|
||||||
|
#
|
||||||
|
# Revision 1.15 2006/09/07 17:25:57 jms
|
||||||
|
# correct dss.ddl
|
||||||
|
#
|
||||||
|
# Revision 1.14 2006/08/01 17:21:22 jms
|
||||||
|
# fix bad merge
|
||||||
|
#
|
||||||
|
# Revision 1.13 2006/08/01 16:55:44 jms
|
||||||
|
# move to 2.4.1
|
||||||
|
#
|
||||||
|
# Revision 1.12 2006/06/29 20:46:17 jms
|
||||||
|
# 2.4.0 changes from Meikel
|
||||||
|
#
|
||||||
|
# Revision 1.10 2006/05/25 22:30:44 jms
|
||||||
|
# qgen porting for 32b/64b
|
||||||
|
#
|
||||||
|
# Revision 1.9 2006/04/26 23:17:09 jms
|
||||||
|
# checking release.h prior to release build
|
||||||
|
#
|
||||||
|
# Revision 1.8 2006/04/26 23:03:00 jms
|
||||||
|
# release 2.3.4-1
|
||||||
|
#
|
||||||
|
# Revision 1.7 2006/04/12 18:13:58 jms
|
||||||
|
# release 2.3.3
|
||||||
|
#
|
||||||
|
# Revision 1.6 2006/03/09 18:59:19 jms
|
||||||
|
# move to version 2.3.2
|
||||||
|
#
|
||||||
|
# Revision 1.5 2006/01/28 23:54:32 jms
|
||||||
|
# add reference data to release
|
||||||
|
#
|
||||||
|
# Revision 1.4 2005/10/28 03:00:32 jms
|
||||||
|
# fix release target
|
||||||
|
#
|
||||||
|
# Revision 1.3 2005/10/28 02:54:14 jms
|
||||||
|
# increment build count with each release creation
|
||||||
|
#
|
||||||
|
# Revision 1.2 2005/01/03 20:08:58 jms
|
||||||
|
# change line terminations
|
||||||
|
#
|
||||||
|
# Revision 1.1.1.1 2004/11/24 23:31:47 jms
|
||||||
|
# re-establish external server
|
||||||
|
#
|
||||||
|
# Revision 1.5 2004/03/26 20:39:23 jms
|
||||||
|
# add tpch tag to release files
|
||||||
|
#
|
||||||
|
# Revision 1.4 2004/03/16 14:45:57 jms
|
||||||
|
# correct release target in makefile
|
||||||
|
#
|
||||||
|
# Revision 1.3 2004/03/02 20:49:01 jms
|
||||||
|
# simplify distributions, add Windows IDE files
|
||||||
|
# releases should use make release from now on
|
||||||
|
#
|
||||||
|
# Revision 1.2 2004/02/18 14:05:53 jms
|
||||||
|
# porting changes for LINUX and 64 bit RNG
|
||||||
|
#
|
||||||
|
# Revision 1.1.1.1 2003/04/03 18:54:21 jms
|
||||||
|
# recreation after CVS crash
|
||||||
|
#
|
||||||
|
# Revision 1.1.1.1 2003/04/03 18:54:21 jms
|
||||||
|
# initial checkin
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
################
|
||||||
|
## CHANGE NAME OF ANSI COMPILER HERE
|
||||||
|
################
|
||||||
|
CC = gcc
|
||||||
|
# Current values for DATABASE are: INFORMIX, DB2, TDAT (Teradata)
|
||||||
|
# SQLSERVER, SYBASE, ORACLE, VECTORWISE
|
||||||
|
# PIVOTAL
|
||||||
|
# Current values for MACHINE are: ATT, DOS, HP, IBM, ICL, MVS,
|
||||||
|
# SGI, SUN, U2200, VMS, LINUX, WIN32
|
||||||
|
# Current values for WORKLOAD are: TPCH
|
||||||
|
DATABASE= DB2
|
||||||
|
MACHINE = LINUX
|
||||||
|
WORKLOAD = TPCH
|
||||||
|
#
|
||||||
|
CFLAGS = -g -DDBNAME=\"dss\" -D$(MACHINE) -D$(DATABASE) -D$(WORKLOAD) -DRNG_TEST -D_FILE_OFFSET_BITS=64
|
||||||
|
LDFLAGS = -O
|
||||||
|
# The OBJ,EXE and LIB macros will need to be changed for compilation under
|
||||||
|
# Windows NT
|
||||||
|
OBJ = .o
|
||||||
|
EXE =
|
||||||
|
LIBS = -lm
|
||||||
|
#
|
||||||
|
# NO CHANGES SHOULD BE NECESSARY BELOW THIS LINE
|
||||||
|
###############
|
||||||
|
VERSION=2
|
||||||
|
RELEASE=13
|
||||||
|
PATCH=0
|
||||||
|
BUILD=`grep BUILD release.h | cut -f3 -d' '`
|
||||||
|
NEW_BUILD=`expr ${BUILD} + 1`
|
||||||
|
TREE_ROOT=/tmp/tree
|
||||||
|
#
|
||||||
|
PROG1 = dbgen$(EXE)
|
||||||
|
PROG2 = qgen$(EXE)
|
||||||
|
PROGS = $(PROG1) $(PROG2)
|
||||||
|
#
|
||||||
|
HDR1 = dss.h rnd.h config.h dsstypes.h shared.h bcd2.h rng64.h release.h
|
||||||
|
HDR2 = tpcd.h permute.h
|
||||||
|
HDR = $(HDR1) $(HDR2)
|
||||||
|
#
|
||||||
|
SRC1 = build.c driver.c bm_utils.c rnd.c print.c load_stub.c bcd2.c \
|
||||||
|
speed_seed.c text.c permute.c rng64.c
|
||||||
|
SRC2 = qgen.c varsub.c
|
||||||
|
SRC = $(SRC1) $(SRC2)
|
||||||
|
#
|
||||||
|
OBJ1 = build$(OBJ) driver$(OBJ) bm_utils$(OBJ) rnd$(OBJ) print$(OBJ) \
|
||||||
|
load_stub$(OBJ) bcd2$(OBJ) speed_seed$(OBJ) text$(OBJ) permute$(OBJ) \
|
||||||
|
rng64$(OBJ)
|
||||||
|
OBJ2 = build$(OBJ) bm_utils$(OBJ) qgen$(OBJ) rnd$(OBJ) varsub$(OBJ) \
|
||||||
|
text$(OBJ) bcd2$(OBJ) permute$(OBJ) speed_seed$(OBJ) rng64$(OBJ)
|
||||||
|
OBJS = $(OBJ1) $(OBJ2)
|
||||||
|
#
|
||||||
|
SETS = dists.dss
|
||||||
|
DOC=README HISTORY PORTING.NOTES BUGS
|
||||||
|
DDL = dss.ddl dss.ri
|
||||||
|
WINDOWS_IDE = tpch.dsw dbgen.dsp tpch.sln tpch.vcproj qgen.vcproj
|
||||||
|
OTHER=makefile.suite $(SETS) $(DDL) $(WINDOWS_IDE)
|
||||||
|
# case is *important* in TEST_RES
|
||||||
|
TEST_RES = O.res L.res c.res s.res P.res S.res n.res r.res
|
||||||
|
#
|
||||||
|
DBGENSRC=$(SRC1) $(HDR1) $(OTHER) $(DOC) $(SRC2) $(HDR2) $(SRC3)
|
||||||
|
FQD=queries/1.sql queries/2.sql queries/3.sql queries/4.sql queries/5.sql queries/6.sql queries/7.sql \
|
||||||
|
queries/8.sql queries/9.sql queries/10.sql queries/11.sql queries/12.sql queries/13.sql \
|
||||||
|
queries/14.sql queries/15.sql queries/16.sql queries/17.sql queries/18.sql queries/19.sql queries/20.sql \
|
||||||
|
queries/21.sql queries/22.sql
|
||||||
|
VARIANTS= variants/8a.sql variants/12a.sql variants/13a.sql variants/14a.sql variants/15a.sql
|
||||||
|
ANS = answers/q1.out answers/q2.out answers/q3.out answers/q4.out answers/q5.out answers/q6.out answers/q7.out answers/q8.out \
|
||||||
|
answers/q9.out answers/q10.out answers/q11.out answers/q12.out answers/q13.out answers/q14.out answers/q15.out \
|
||||||
|
answers/q16.out answers/q17.out answers/q18.out answers/q19.out answers/q20.out answers/q21.out answers/q22.out
|
||||||
|
QSRC = $(FQD) $(VARIANTS) $(ANS)
|
||||||
|
TREE_DOC=tree.readme tree.changes appendix.readme appendix.version answers.readme queries.readme variants.readme
|
||||||
|
REFERENCE=reference/[tcR]*
|
||||||
|
REFERENCE_DATA=referenceData/[13]*
|
||||||
|
SCRIPTS= check55.sh column_split.sh dop.sh gen_tasks.sh last_row.sh load_balance.sh new55.sh check_dirs.sh
|
||||||
|
ALLSRC=$(DBGENSRC) $(REFERENCE) $(QSRC) $(SCRIPTS)
|
||||||
|
JUNK =
|
||||||
|
#
|
||||||
|
all: $(PROGS) |
||||||
|
$(PROG1): $(OBJ1) $(SETS) |
||||||
|
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(OBJ1) $(LIBS)
|
||||||
|
$(PROG2): permute.h $(OBJ2) |
||||||
|
$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $(OBJ2) $(LIBS)
|
||||||
|
clean: |
||||||
|
rm -f $(PROGS) $(OBJS) $(JUNK)
|
||||||
|
lint: |
||||||
|
lint $(CFLAGS) -u -x -wO -Ma -p $(SRC1)
|
||||||
|
lint $(CFLAGS) -u -x -wO -Ma -p $(SRC2)
|
||||||
|
|
||||||
|
tar: $(ALLSRC) |
||||||
|
tar cvhf - $(ALLSRC) --exclude .svn\*/\* |gzip - > tpch_${VERSION}_${RELEASE}_${PATCH}.tar.gz
|
||||||
|
tar cvhf - $(REFERENCE_DATA) --exclude .svn\*/\* |gzip - > reference_${VERSION}_${RELEASE}_${PATCH}.tar.gz
|
||||||
|
zip: $(ALLSRC) |
||||||
|
zip -r tpch_${VERSION}_${RELEASE}_${PATCH}.zip $(ALLSRC) -x *.svn*
|
||||||
|
zip -r reference_${VERSION}_${RELEASE}_${PATCH}.zip $(REFERENCE_DATA) -x *.svn*
|
||||||
|
release: |
||||||
|
make -f makefile.suite tar
|
||||||
|
make -f makefile.suite zip
|
||||||
|
( cd tests; sh test_list.sh `date '+%Y%m%d'` )
|
||||||
|
rnd$(OBJ): rnd.h |
||||||
|
$(OBJ1): $(HDR1) |
||||||
|
$(OBJ2): dss.h tpcd.h config.h rng64.h release.h |
@ -0,0 +1,186 @@ |
|||||||
|
/*
|
||||||
|
* $Id: permute.c,v 1.3 2007/01/04 21:29:21 jms Exp $ |
||||||
|
* |
||||||
|
* Revision History |
||||||
|
* =================== |
||||||
|
* $Log: permute.c,v $ |
||||||
|
* Revision 1.3 2007/01/04 21:29:21 jms |
||||||
|
* Porting changes uncovered as part of move to VS2005. No impact on data set |
||||||
|
* |
||||||
|
* Revision 1.2 2005/01/03 20:08:59 jms |
||||||
|
* change line terminations |
||||||
|
* |
||||||
|
* Revision 1.1.1.1 2004/11/24 23:31:47 jms |
||||||
|
* re-establish external server |
||||||
|
* |
||||||
|
* Revision 1.1.1.1 2003/08/07 17:58:34 jms |
||||||
|
* recreation after CVS crash |
||||||
|
* |
||||||
|
* Revision 1.2 2003/08/07 17:58:34 jms |
||||||
|
* Convery RNG to 64bit space as preparation for new large scale RNG |
||||||
|
* |
||||||
|
* Revision 1.1.1.1 2003/04/03 18:54:21 jms |
||||||
|
* initial checkin |
||||||
|
* |
||||||
|
* |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* permute.c -- a permutation generator for the query
|
||||||
|
* sequences in TPC-H and TPC-R |
||||||
|
*/ |
||||||
|
|
||||||
|
#ifdef TEST |
||||||
|
#define DECLARER |
||||||
|
#endif |
||||||
|
#include "config.h" |
||||||
|
#include "dss.h" |
||||||
|
#ifdef TEST |
||||||
|
#include <stdlib.h> |
||||||
|
#if (defined(_POSIX_)||!defined(WIN32)) /* Change for Windows NT */ |
||||||
|
#include <unistd.h> |
||||||
|
#include <sys/wait.h> |
||||||
|
#endif /* WIN32 */ |
||||||
|
#include <stdio.h> /* */ |
||||||
|
#include <limits.h> |
||||||
|
#include <math.h> |
||||||
|
#include <ctype.h> |
||||||
|
#include <signal.h> |
||||||
|
#include <string.h> |
||||||
|
#include <errno.h> |
||||||
|
#ifdef HP |
||||||
|
#include <strings.h> |
||||||
|
#endif |
||||||
|
#if (defined(WIN32)&&!defined(_POSIX_)) |
||||||
|
#include <process.h> |
||||||
|
#pragma warning(disable:4201) |
||||||
|
#pragma warning(disable:4214) |
||||||
|
#pragma warning(disable:4514) |
||||||
|
#define WIN32_LEAN_AND_MEAN |
||||||
|
#define NOATOM |
||||||
|
#define NOGDICAPMASKS |
||||||
|
#define NOMETAFILE |
||||||
|
#define NOMINMAX |
||||||
|
#define NOMSG |
||||||
|
#define NOOPENFILE |
||||||
|
#define NORASTEROPS |
||||||
|
#define NOSCROLL |
||||||
|
#define NOSOUND |
||||||
|
#define NOSYSMETRICS |
||||||
|
#define NOTEXTMETRIC |
||||||
|
#define NOWH |
||||||
|
#define NOCOMM |
||||||
|
#define NOKANJI |
||||||
|
#define NOMCX |
||||||
|
#include <windows.h> |
||||||
|
#pragma warning(default:4201) |
||||||
|
#pragma warning(default:4214) |
||||||
|
#endif |
||||||
|
#endif |
||||||
|
|
||||||
|
DSS_HUGE NextRand(DSS_HUGE seed); |
||||||
|
void permute(long *set, int cnt, long stream); |
||||||
|
void permute_dist(distribution *d, long stream); |
||||||
|
long seed; |
||||||
|
char *eol[2] = {" ", "},"}; |
||||||
|
extern seed_t Seed[]; |
||||||
|
#ifdef TEST |
||||||
|
tdef tdefs = { NULL }; |
||||||
|
#endif |
||||||
|
|
||||||
|
|
||||||
|
#define MAX_QUERY 22 |
||||||
|
#define ITERATIONS 1000 |
||||||
|
#define UNSET 0 |
||||||
|
|
||||||
|
void permute(long *a, int c, long s) |
||||||
|
{ |
||||||
|
int i; |
||||||
|
static DSS_HUGE source; |
||||||
|
static long *set, temp; |
||||||
|
|
||||||
|
if (a != (long *)NULL) |
||||||
|
{ |
||||||
|
for (i=0; i < c; i++) |
||||||
|
{ |
||||||
|
RANDOM(source, (long)i, (long)(c - 1), s); |
||||||
|
temp = *(a + source); |
||||||
|
*(a + source) = *(a + i) ; |
||||||
|
*(a + i) = temp; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
void permute_dist(distribution *d, long stream) |
||||||
|
{ |
||||||
|
static distribution *dist = NULL; |
||||||
|
int i; |
||||||
|
|
||||||
|
if (d != NULL) |
||||||
|
{ |
||||||
|
if (d->permute == (long *)NULL) |
||||||
|
{ |
||||||
|
d->permute = (long *)malloc(sizeof(long) * DIST_SIZE(d)); |
||||||
|
MALLOC_CHECK(d->permute); |
||||||
|
} |
||||||
|
for (i=0; i < DIST_SIZE(d); i++)
|
||||||
|
*(d->permute + i) = i; |
||||||
|
permute(d->permute, DIST_SIZE(d), stream); |
||||||
|
} |
||||||
|
else |
||||||
|
INTERNAL_ERROR("Bad call to permute_dist");
|
||||||
|
|
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
#ifdef TEST |
||||||
|
|
||||||
|
main(int ac, char *av[]) |
||||||
|
{ |
||||||
|
long *sequence,
|
||||||
|
i, |
||||||
|
j, |
||||||
|
streams = UNSET, |
||||||
|
*a; |
||||||
|
char sep; |
||||||
|
int index = 0; |
||||||
|
|
||||||
|
set_seeds = 0; |
||||||
|
sequence = (long *)malloc(MAX_QUERY * sizeof(long)); |
||||||
|
a = sequence; |
||||||
|
for (i=0; i < MAX_QUERY; i++) |
||||||
|
*(sequence + i) = i; |
||||||
|
if (ac < 3)
|
||||||
|
goto usage; |
||||||
|
Seed[0].value = (long)atoi(av[1]); |
||||||
|
streams = atoi(av[2]); |
||||||
|
if (Seed[0].value == UNSET || streams == UNSET)
|
||||||
|
goto usage; |
||||||
|
|
||||||
|
index = 0; |
||||||
|
printf("long permutation[%d][%d] = {\n", streams, MAX_QUERY); |
||||||
|
for (j=0; j < streams; j++) |
||||||
|
{ |
||||||
|
sep = '{'; |
||||||
|
printf("%s\n", eol[index]); |
||||||
|
for (i=0; i < MAX_QUERY; i++) |
||||||
|
{ |
||||||
|
printf("%c%2d", sep, *permute(a, MAX_QUERY, 0) + 1); |
||||||
|
a = (long *)NULL; |
||||||
|
sep = ','; |
||||||
|
} |
||||||
|
a = sequence; |
||||||
|
index=1; |
||||||
|
} |
||||||
|
printf("}\n};\n"); |
||||||
|
return(0); |
||||||
|
|
||||||
|
usage: |
||||||
|
printf("Usage: %s <seed> <streams>\n",av[0]); |
||||||
|
printf(" uses <seed> to start the generation of <streams> permutations of [1..%d]\n", MAX_QUERY); |
||||||
|
return(-1); |
||||||
|
|
||||||
|
} |
||||||
|
#endif /* TEST */ |
@ -0,0 +1,64 @@ |
|||||||
|
/*
|
||||||
|
* $Id: permute.h,v 1.2 2005/01/03 20:08:59 jms Exp $ |
||||||
|
* |
||||||
|
* Revision History |
||||||
|
* =================== |
||||||
|
* $Log: permute.h,v $ |
||||||
|
* Revision 1.2 2005/01/03 20:08:59 jms |
||||||
|
* change line terminations |
||||||
|
* |
||||||
|
* Revision 1.1.1.1 2004/11/24 23:31:47 jms |
||||||
|
* re-establish external server |
||||||
|
* |
||||||
|
* Revision 1.1.1.1 2003/04/03 18:54:21 jms |
||||||
|
* recreation after CVS crash |
||||||
|
* |
||||||
|
* Revision 1.1.1.1 2003/04/03 18:54:21 jms |
||||||
|
* initial checkin |
||||||
|
* |
||||||
|
* |
||||||
|
*/ |
||||||
|
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} |
||||||
|
}; |
Binary file not shown.
@ -0,0 +1,444 @@ |
|||||||
|
/*
|
||||||
|
* $Id: print.c,v 1.3 2005/10/28 02:56:22 jms Exp $ |
||||||
|
* |
||||||
|
* Revision History |
||||||
|
* =================== |
||||||
|
* $Log: print.c,v $ |
||||||
|
* Revision 1.3 2005/10/28 02:56:22 jms |
||||||
|
* add platform-specific printf formats to allow for DSS_HUGE data type |
||||||
|
* |
||||||
|
* Revision 1.2 2005/01/03 20:08:59 jms |
||||||
|
* change line terminations |
||||||
|
* |
||||||
|
* Revision 1.1.1.1 2004/11/24 23:31:47 jms |
||||||
|
* re-establish external server |
||||||
|
* |
||||||
|
* Revision 1.4 2004/02/18 16:26:49 jms |
||||||
|
* 32/64 bit changes for overflow handling needed additional changes when ported back to windows |
||||||
|
* |
||||||
|
* Revision 1.3 2004/02/18 14:05:53 jms |
||||||
|
* porting changes for LINUX and 64 bit RNG |
||||||
|
* |
||||||
|
* Revision 1.2 2004/01/22 05:49:29 jms |
||||||
|
* AIX porting (AIX 5.1) |
||||||
|
* |
||||||
|
* Revision 1.1.1.1 2003/08/07 17:58:34 jms |
||||||
|
* recreation after CVS crash |
||||||
|
* |
||||||
|
* Revision 1.2 2003/08/07 17:58:34 jms |
||||||
|
* Convery RNG to 64bit space as preparation for new large scale RNG |
||||||
|
* |
||||||
|
* Revision 1.1.1.1 2003/04/03 18:54:21 jms |
||||||
|
* initial checkin |
||||||
|
* |
||||||
|
* |
||||||
|
*/ |
||||||
|
/* generate flat files for data load */ |
||||||
|
#include <stdio.h> |
||||||
|
#ifndef VMS |
||||||
|
#include <sys/types.h> |
||||||
|
#endif |
||||||
|
#if defined(SUN) |
||||||
|
#include <unistd.h> |
||||||
|
#endif |
||||||
|
#include <math.h> |
||||||
|
|
||||||
|
#include "dss.h" |
||||||
|
#include "dsstypes.h" |
||||||
|
#include <string.h> |
||||||
|
|
||||||
|
/*
|
||||||
|
* Function Prototypes |
||||||
|
*/ |
||||||
|
FILE *print_prep PROTO((int table, int update)); |
||||||
|
int pr_drange PROTO((int tbl, DSS_HUGE min, DSS_HUGE cnt, long num)); |
||||||
|
|
||||||
|
FILE * |
||||||
|
print_prep(int table, int update) |
||||||
|
{ |
||||||
|
char upath[128]; |
||||||
|
FILE *res; |
||||||
|
|
||||||
|
if (updates) |
||||||
|
{ |
||||||
|
if (update > 0) /* updates */ |
||||||
|
if ( insert_segments ) |
||||||
|
{ |
||||||
|
int this_segment; |
||||||
|
if(strcmp(tdefs[table].name,"orders.tbl")) |
||||||
|
this_segment=++insert_orders_segment; |
||||||
|
else
|
||||||
|
this_segment=++insert_lineitem_segment; |
||||||
|
sprintf(upath, "%s%c%s.u%d.%d",
|
||||||
|
env_config(PATH_TAG, PATH_DFLT), |
||||||
|
PATH_SEP, tdefs[table].name, update%10000,this_segment); |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
sprintf(upath, "%s%c%s.u%d", |
||||||
|
env_config(PATH_TAG, PATH_DFLT), |
||||||
|
PATH_SEP, tdefs[table].name, update); |
||||||
|
} |
||||||
|
else /* deletes */ |
||||||
|
if ( delete_segments ) |
||||||
|
{ |
||||||
|
++delete_segment; |
||||||
|
sprintf(upath, "%s%cdelete.u%d.%d", |
||||||
|
env_config(PATH_TAG, PATH_DFLT), PATH_SEP, -update%10000, |
||||||
|
delete_segment); |
||||||
|
} |
||||||
|
else |
||||||
|
{ |
||||||
|
sprintf(upath, "%s%cdelete.%d", |
||||||
|
env_config(PATH_TAG, PATH_DFLT), PATH_SEP, -update); |
||||||
|
} |
||||||
|
return(fopen(upath, "w")); |
||||||
|
} |
||||||
|
res = tbl_open(table, "w"); |
||||||
|
OPEN_CHECK(res, tdefs[table].name); |
||||||
|
return(res); |
||||||
|
} |
||||||
|
|
||||||
|
int |
||||||
|
dbg_print(int format, FILE *target, void *data, int len, int sep) |
||||||
|
{ |
||||||
|
int dollars, |
||||||
|
cents; |
||||||
|
|
||||||
|
switch(format) |
||||||
|
{ |
||||||
|
case DT_STR: |
||||||
|
fprintf(target, "%s", (char *)data); |
||||||
|
break; |
||||||
|
#ifdef MVS |
||||||
|
case DT_VSTR: |
||||||
|
/* note: only used in MVS, assumes columnar output */ |
||||||
|
fprintf(target, "%c%c%-*s",
|
||||||
|
(len >> 8) & 0xFF, len & 0xFF, len, (char *)data); |
||||||
|
break; |
||||||
|
#endif /* MVS */ |
||||||
|
case DT_INT: |
||||||
|
fprintf(target, "%ld", (long)data); |
||||||
|
break; |
||||||
|
case DT_HUGE: |
||||||
|
fprintf(target, HUGE_FORMAT, *(DSS_HUGE *)data); |
||||||
|
break; |
||||||
|
case DT_KEY: |
||||||
|
fprintf(target, "%ld", (long)data); |
||||||
|
break; |
||||||
|
case DT_MONEY: |
||||||
|
cents = (int)*(DSS_HUGE *)data; |
||||||
|
if (cents < 0) |
||||||
|
{ |
||||||
|
fprintf(target, "-"); |
||||||
|
cents = -cents; |
||||||
|
} |
||||||
|
dollars = cents / 100; |
||||||
|
cents %= 100; |
||||||
|
fprintf(target, "%ld.%02ld", dollars, cents); |
||||||
|
break; |
||||||
|
case DT_CHR: |
||||||
|
fprintf(target, "%c", *(char *)data); |
||||||
|
break; |
||||||
|
} |
||||||
|
|
||||||
|
#ifdef EOL_HANDLING |
||||||
|
if (sep) |
||||||
|
#endif /* EOL_HANDLING */ |
||||||
|
fprintf(target, "%c", SEPARATOR); |
||||||
|
|
||||||
|
return(0); |
||||||
|
} |
||||||
|
|
||||||
|
int |
||||||
|
pr_cust(customer_t *c, int mode) |
||||||
|
{ |
||||||
|
static FILE *fp = NULL; |
||||||
|
|
||||||
|
if (fp == NULL) |
||||||
|
fp = print_prep(CUST, 0); |
||||||
|
|
||||||
|
PR_STRT(fp); |
||||||
|
PR_HUGE(fp, &c->custkey); |
||||||
|
if (scale <= 3000) |
||||||
|
PR_VSTR(fp, c->name, C_NAME_LEN); |
||||||
|
else |
||||||
|
PR_VSTR(fp, c->name, C_NAME_LEN + 3); |
||||||
|
PR_VSTR(fp, c->address, c->alen); |
||||||
|
PR_HUGE(fp, &c->nation_code); |
||||||
|
PR_STR(fp, c->phone, PHONE_LEN); |
||||||
|
PR_MONEY(fp, &c->acctbal); |
||||||
|
PR_STR(fp, c->mktsegment, C_MSEG_LEN); |
||||||
|
PR_VSTR_LAST(fp, c->comment, c->clen); |
||||||
|
PR_END(fp); |
||||||
|
|
||||||
|
return(0); |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
* print the numbered order
|
||||||
|
*/ |
||||||
|
int |
||||||
|
pr_order(order_t *o, int mode) |
||||||
|
{ |
||||||
|
static FILE *fp_o = NULL; |
||||||
|
static int last_mode = 0; |
||||||
|
|
||||||
|
if (fp_o == NULL || mode != last_mode) |
||||||
|
{ |
||||||
|
if (fp_o)
|
||||||
|
fclose(fp_o); |
||||||
|
fp_o = print_prep(ORDER, mode); |
||||||
|
last_mode = mode; |
||||||
|
} |
||||||
|
PR_STRT(fp_o); |
||||||
|
PR_HUGE(fp_o, &o->okey); |
||||||
|
PR_HUGE(fp_o, &o->custkey); |
||||||
|
PR_CHR(fp_o, &o->orderstatus); |
||||||
|
PR_MONEY(fp_o, &o->totalprice); |
||||||
|
PR_STR(fp_o, o->odate, DATE_LEN); |
||||||
|
PR_STR(fp_o, o->opriority, O_OPRIO_LEN); |
||||||
|
PR_STR(fp_o, o->clerk, O_CLRK_LEN); |
||||||
|
PR_INT(fp_o, o->spriority); |
||||||
|
PR_VSTR_LAST(fp_o, o->comment, o->clen); |
||||||
|
PR_END(fp_o); |
||||||
|
|
||||||
|
return(0); |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
* print an order's lineitems |
||||||
|
*/ |
||||||
|
int |
||||||
|
pr_line(order_t *o, int mode) |
||||||
|
{ |
||||||
|
static FILE *fp_l = NULL; |
||||||
|
static int last_mode = 0; |
||||||
|
long i; |
||||||
|
|
||||||
|
if (fp_l == NULL || mode != last_mode) |
||||||
|
{ |
||||||
|
if (fp_l)
|
||||||
|
fclose(fp_l); |
||||||
|
fp_l = print_prep(LINE, mode); |
||||||
|
last_mode = mode; |
||||||
|
} |
||||||
|
|
||||||
|
for (i = 0; i < o->lines; i++) |
||||||
|
{ |
||||||
|
PR_STRT(fp_l); |
||||||
|
PR_HUGE(fp_l, &o->l[i].okey); |
||||||
|
PR_HUGE(fp_l, &o->l[i].partkey); |
||||||
|
PR_HUGE(fp_l, &o->l[i].suppkey); |
||||||
|
PR_HUGE(fp_l, &o->l[i].lcnt); |
||||||
|
PR_HUGE(fp_l, &o->l[i].quantity); |
||||||
|
PR_MONEY(fp_l, &o->l[i].eprice); |
||||||
|
PR_MONEY(fp_l, &o->l[i].discount); |
||||||
|
PR_MONEY(fp_l, &o->l[i].tax); |
||||||
|
PR_CHR(fp_l, &o->l[i].rflag[0]); |
||||||
|
PR_CHR(fp_l, &o->l[i].lstatus[0]); |
||||||
|
PR_STR(fp_l, o->l[i].sdate, DATE_LEN); |
||||||
|
PR_STR(fp_l, o->l[i].cdate, DATE_LEN); |
||||||
|
PR_STR(fp_l, o->l[i].rdate, DATE_LEN); |
||||||
|
PR_STR(fp_l, o->l[i].shipinstruct, L_INST_LEN); |
||||||
|
PR_STR(fp_l, o->l[i].shipmode, L_SMODE_LEN); |
||||||
|
PR_VSTR_LAST(fp_l, o->l[i].comment,o->l[i].clen); |
||||||
|
PR_END(fp_l); |
||||||
|
} |
||||||
|
|
||||||
|
return(0); |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
* print the numbered order *and* its associated lineitems |
||||||
|
*/ |
||||||
|
int |
||||||
|
pr_order_line(order_t *o, int mode) |
||||||
|
{ |
||||||
|
tdefs[ORDER].name = tdefs[ORDER_LINE].name; |
||||||
|
pr_order(o, mode); |
||||||
|
pr_line(o, mode); |
||||||
|
|
||||||
|
return(0); |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
* print the given part |
||||||
|
*/ |
||||||
|
int |
||||||
|
pr_part(part_t *part, int mode) |
||||||
|
{ |
||||||
|
static FILE *p_fp = NULL; |
||||||
|
|
||||||
|
if (p_fp == NULL) |
||||||
|
p_fp = print_prep(PART, 0); |
||||||
|
|
||||||
|
PR_STRT(p_fp); |
||||||
|
PR_HUGE(p_fp, &part->partkey); |
||||||
|
PR_VSTR(p_fp, part->name,part->nlen); |
||||||
|
PR_STR(p_fp, part->mfgr, P_MFG_LEN); |
||||||
|
PR_STR(p_fp, part->brand, P_BRND_LEN); |
||||||
|
PR_VSTR(p_fp, part->type,part->tlen); |
||||||
|
PR_HUGE(p_fp, &part->size); |
||||||
|
PR_STR(p_fp, part->container, P_CNTR_LEN); |
||||||
|
PR_MONEY(p_fp, &part->retailprice); |
||||||
|
PR_VSTR_LAST(p_fp, part->comment,part->clen); |
||||||
|
PR_END(p_fp); |
||||||
|
|
||||||
|
return(0); |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
* print the given part's suppliers |
||||||
|
*/ |
||||||
|
int |
||||||
|
pr_psupp(part_t *part, int mode) |
||||||
|
{ |
||||||
|
static FILE *ps_fp = NULL; |
||||||
|
long i; |
||||||
|
|
||||||
|
if (ps_fp == NULL) |
||||||
|
ps_fp = print_prep(PSUPP, mode); |
||||||
|
|
||||||
|
for (i = 0; i < SUPP_PER_PART; i++) |
||||||
|
{ |
||||||
|
PR_STRT(ps_fp); |
||||||
|
PR_HUGE(ps_fp, &part->s[i].partkey); |
||||||
|
PR_HUGE(ps_fp, &part->s[i].suppkey); |
||||||
|
PR_HUGE(ps_fp, &part->s[i].qty); |
||||||
|
PR_MONEY(ps_fp, &part->s[i].scost); |
||||||
|
PR_VSTR_LAST(ps_fp, part->s[i].comment,part->s[i].clen); |
||||||
|
PR_END(ps_fp); |
||||||
|
} |
||||||
|
|
||||||
|
return(0); |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
* print the given part *and* its suppliers |
||||||
|
*/ |
||||||
|
int |
||||||
|
pr_part_psupp(part_t *part, int mode) |
||||||
|
{ |
||||||
|
tdefs[PART].name = tdefs[PART_PSUPP].name; |
||||||
|
pr_part(part, mode); |
||||||
|
pr_psupp(part, mode); |
||||||
|
|
||||||
|
return(0); |
||||||
|
} |
||||||
|
|
||||||
|
int |
||||||
|
pr_supp(supplier_t *supp, int mode) |
||||||
|
{ |
||||||
|
static FILE *fp = NULL; |
||||||
|
|
||||||
|
if (fp == NULL) |
||||||
|
fp = print_prep(SUPP, mode); |
||||||
|
|
||||||
|
PR_STRT(fp); |
||||||
|
PR_HUGE(fp, &supp->suppkey); |
||||||
|
PR_STR(fp, supp->name, S_NAME_LEN); |
||||||
|
PR_VSTR(fp, supp->address, supp->alen); |
||||||
|
PR_HUGE(fp, &supp->nation_code); |
||||||
|
PR_STR(fp, supp->phone, PHONE_LEN); |
||||||
|
PR_MONEY(fp, &supp->acctbal); |
||||||
|
PR_VSTR_LAST(fp, supp->comment, supp->clen); |
||||||
|
PR_END(fp); |
||||||
|
|
||||||
|
return(0); |
||||||
|
} |
||||||
|
|
||||||
|
int |
||||||
|
pr_nation(code_t *c, int mode) |
||||||
|
{ |
||||||
|
static FILE *fp = NULL; |
||||||
|
|
||||||
|
if (fp == NULL) |
||||||
|
fp = print_prep(NATION, mode); |
||||||
|
|
||||||
|
PR_STRT(fp); |
||||||
|
PR_HUGE(fp, &c->code); |
||||||
|
PR_STR(fp, c->text, NATION_LEN); |
||||||
|
PR_INT(fp, c->join); |
||||||
|
PR_VSTR_LAST(fp, c->comment, c->clen); |
||||||
|
PR_END(fp); |
||||||
|
|
||||||
|
return(0); |
||||||
|
} |
||||||
|
|
||||||
|
int |
||||||
|
pr_region(code_t *c, int mode) |
||||||
|
{ |
||||||
|
static FILE *fp = NULL; |
||||||
|
|
||||||
|
if (fp == NULL) |
||||||
|
fp = print_prep(REGION, mode); |
||||||
|
|
||||||
|
PR_STRT(fp); |
||||||
|
PR_HUGE(fp, &c->code); |
||||||
|
PR_STR(fp, c->text, REGION_LEN); |
||||||
|
PR_VSTR_LAST(fp, c->comment, c->clen); |
||||||
|
PR_END(fp); |
||||||
|
|
||||||
|
return(0); |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
* NOTE: this routine does NOT use the BCD2_* routines. As a result, |
||||||
|
* it WILL fail if the keys being deleted exceed 32 bits. Since this |
||||||
|
* would require ~660 update iterations, this seems an acceptable |
||||||
|
* oversight |
||||||
|
*/ |
||||||
|
int |
||||||
|
pr_drange(int tbl, DSS_HUGE min, DSS_HUGE cnt, long num) |
||||||
|
{ |
||||||
|
static int last_num = 0; |
||||||
|
static FILE *dfp = NULL; |
||||||
|
DSS_HUGE child = -1; |
||||||
|
DSS_HUGE start, last, new; |
||||||
|
|
||||||
|
static DSS_HUGE rows_per_segment=0; |
||||||
|
static DSS_HUGE rows_this_segment=0; |
||||||
|
|
||||||
|
if (last_num != num) |
||||||
|
{ |
||||||
|
if (dfp) |
||||||
|
fclose(dfp); |
||||||
|
dfp = print_prep(tbl, -num); |
||||||
|
if (dfp == NULL) |
||||||
|
return(-1); |
||||||
|
last_num = num; |
||||||
|
rows_this_segment=0; |
||||||
|
} |
||||||
|
|
||||||
|
start = MK_SPARSE(min, num/ (10000 / UPD_PCT)); |
||||||
|
last = start - 1; |
||||||
|
for (child=min; cnt > 0; child++, cnt--) |
||||||
|
{ |
||||||
|
new = MK_SPARSE(child, num/ (10000 / UPD_PCT)); |
||||||
|
if (delete_segments) |
||||||
|
{ |
||||||
|
|
||||||
|
if(rows_per_segment==0)
|
||||||
|
rows_per_segment = (cnt / delete_segments) + 1; |
||||||
|
if((++rows_this_segment) > rows_per_segment) |
||||||
|
{ |
||||||
|
fclose(dfp); |
||||||
|
dfp = print_prep(tbl, -num); |
||||||
|
if (dfp == NULL) return(-1); |
||||||
|
last_num = num; |
||||||
|
rows_this_segment=1; |
||||||
|
} |
||||||
|
} |
||||||
|
PR_STRT(dfp); |
||||||
|
PR_HUGE_LAST(dfp, &new); |
||||||
|
PR_END(dfp); |
||||||
|
start = new; |
||||||
|
last = new; |
||||||
|
} |
||||||
|
|
||||||
|
return(0); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
Binary file not shown.
Binary file not shown.
@ -0,0 +1,489 @@ |
|||||||
|
/*
|
||||||
|
* $Id: qgen.c,v 1.3 2005/10/28 02:54:35 jms Exp $ |
||||||
|
* |
||||||
|
* Revision History |
||||||
|
* =================== |
||||||
|
* $Log: qgen.c,v $ |
||||||
|
* Revision 1.3 2005/10/28 02:54:35 jms |
||||||
|
* add release.h changes |
||||||
|
* |
||||||
|
* Revision 1.2 2005/01/03 20:08:59 jms |
||||||
|
* change line terminations |
||||||
|
* |
||||||
|
* Revision 1.1.1.1 2004/11/24 23:31:47 jms |
||||||
|
* re-establish external server |
||||||
|
* |
||||||
|
* Revision 1.1.1.1 2003/04/03 18:54:21 jms |
||||||
|
* recreation after CVS crash |
||||||
|
* |
||||||
|
* Revision 1.1.1.1 2003/04/03 18:54:21 jms |
||||||
|
* initial checkin |
||||||
|
* |
||||||
|
* |
||||||
|
*/ |
||||||
|
/*
|
||||||
|
* qgen.c -- routines to convert query templates to executable query |
||||||
|
* text for TPC-H and TPC-R |
||||||
|
*/ |
||||||
|
#define DECLARER |
||||||
|
|
||||||
|
#include <stdio.h> |
||||||
|
#include <string.h> |
||||||
|
#if (defined(_POSIX_)||!defined(WIN32)) |
||||||
|
#include <unistd.h> |
||||||
|
#else |
||||||
|
#include "process.h" |
||||||
|
#endif /* WIN32 */ |
||||||
|
#include <ctype.h> |
||||||
|
#include <time.h> |
||||||
|
#include "config.h" |
||||||
|
#include "dss.h" |
||||||
|
#include "tpcd.h" |
||||||
|
#include "permute.h" |
||||||
|
#include "release.h" |
||||||
|
|
||||||
|
|
||||||
|
#define LINE_SIZE 512 |
||||||
|
|
||||||
|
/*
|
||||||
|
* Function Protoypes |
||||||
|
*/ |
||||||
|
void varsub PROTO((int qnum, int vnum, int flags)); |
||||||
|
int strip_comments PROTO((char *line)); |
||||||
|
void usage PROTO((void)); |
||||||
|
int process_options PROTO((int cnt, char **args)); |
||||||
|
int setup PROTO((void)); |
||||||
|
void qsub PROTO((char *qtag, int flags)); |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
extern char *optarg; |
||||||
|
extern int optind; |
||||||
|
char **mk_ascdate(void); |
||||||
|
extern seed_t Seed[]; |
||||||
|
|
||||||
|
char **asc_date; |
||||||
|
int snum = -1; |
||||||
|
char *prog; |
||||||
|
tdef tdefs = { NULL }; |
||||||
|
long rndm; |
||||||
|
double flt_scale; |
||||||
|
distribution q13a, q13b; |
||||||
|
int qnum; |
||||||
|
char *db_name = NULL; |
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* FUNCTION strip_comments(line) |
||||||
|
* |
||||||
|
* remove all comments from 'line'; recognizes both {} and -- comments |
||||||
|
*/ |
||||||
|
int |
||||||
|
strip_comments(char *line) |
||||||
|
{ |
||||||
|
static int in_comment = 0; |
||||||
|
char *cp1, *cp2; |
||||||
|
|
||||||
|
cp1 = line; |
||||||
|
|
||||||
|
while (1) /* traverse the entire string */ |
||||||
|
{ |
||||||
|
if (in_comment) |
||||||
|
{ |
||||||
|
if ((cp2 = strchr(cp1, '}')) != NULL) /* comment ends */ |
||||||
|
{ |
||||||
|
strcpy(cp1, cp2 + 1); |
||||||
|
in_comment = 0; |
||||||
|
continue; |
||||||
|
} |
||||||
|
else
|
||||||
|
{ |
||||||
|
*cp1 = '\0'; |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
else /* not in_comment */ |
||||||
|
{ |
||||||
|
if ((cp2 = strchr(cp1, '-')) != NULL) |
||||||
|
{ |
||||||
|
if (*(cp2 + 1) == '-') /* found a '--' comment */ |
||||||
|
{ |
||||||
|
*cp2 = '\0'; |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
if ((cp2 = strchr(cp1, '{')) != NULL) /* comment starts */ |
||||||
|
{ |
||||||
|
in_comment = 1; |
||||||
|
*cp2 = ' '; |
||||||
|
continue; |
||||||
|
} |
||||||
|
else break; |
||||||
|
} |
||||||
|
} |
||||||
|
return(0); |
||||||
|
} |
||||||
|
|
||||||
|
/*
|
||||||
|
* FUNCTION qsub(char *qtag, int flags) |
||||||
|
* |
||||||
|
* based on the settings of flags, and the template file $QDIR/qtag.sql |
||||||
|
* make the following substitutions to turn a query template into EQT |
||||||
|
* |
||||||
|
* String Converted to Based on |
||||||
|
* ====== ============ =========== |
||||||
|
* first line database <db_name>; -n from command line |
||||||
|
* second line set explain on; -x from command line |
||||||
|
* :<number> parameter <number> |
||||||
|
* :k set number |
||||||
|
* :o output to outpath/qnum.snum
|
||||||
|
* -o from command line, SET_OUTPUT |
||||||
|
* :s stream number |
||||||
|
* :b BEGIN WORK; -a from command line, START_TRAN |
||||||
|
* :e COMMIT WORK; -a from command line, END_TRAN |
||||||
|
* :q query number |
||||||
|
* :n<number> sets rowcount to be returned |
||||||
|
*/ |
||||||
|
void |
||||||
|
qsub(char *qtag, int flags) |
||||||
|
{ |
||||||
|
static char *line = NULL, |
||||||
|
*qpath = NULL; |
||||||
|
FILE *qfp; |
||||||
|
char *cptr, |
||||||
|
*mark, |
||||||
|
*qroot = NULL; |
||||||
|
|
||||||
|
qnum = atoi(qtag); |
||||||
|
if (line == NULL) |
||||||
|
{ |
||||||
|
line = malloc(BUFSIZ); |
||||||
|
qpath = malloc(BUFSIZ); |
||||||
|
MALLOC_CHECK(line); |
||||||
|
MALLOC_CHECK(qpath); |
||||||
|
} |
||||||
|
|
||||||
|
qroot = env_config(QDIR_TAG, QDIR_DFLT); |
||||||
|
sprintf(qpath, "%s%c%s.sql",
|
||||||
|
qroot, PATH_SEP, qtag); |
||||||
|
qfp = fopen(qpath, "r"); |
||||||
|
OPEN_CHECK(qfp, qpath); |
||||||
|
|
||||||
|
rowcnt = rowcnt_dflt[qnum]; |
||||||
|
varsub(qnum, 0, flags); /* set the variables */ |
||||||
|
if (flags & DFLT_NUM) |
||||||
|
fprintf(ofp, SET_ROWCOUNT, rowcnt); |
||||||
|
while (fgets(line, BUFSIZ, qfp) != NULL) |
||||||
|
{ |
||||||
|
if (!(flags & COMMENT)) |
||||||
|
strip_comments(line); |
||||||
|
mark = line; |
||||||
|
while ((cptr = strchr(mark, VTAG)) != NULL) |
||||||
|
{ |
||||||
|
*cptr = '\0'; |
||||||
|
cptr++; |
||||||
|
fprintf(ofp,"%s", mark); |
||||||
|
switch(*cptr) |
||||||
|
{ |
||||||
|
case 'b': |
||||||
|
case 'B': |
||||||
|
if (!(flags & ANSI)) |
||||||
|
fprintf(ofp,"%s\n", START_TRAN); |
||||||
|
cptr++; |
||||||
|
break; |
||||||
|
case 'c': |
||||||
|
case 'C': |
||||||
|
if (flags & DBASE) |
||||||
|
fprintf(ofp, SET_DBASE, db_name); |
||||||
|
cptr++; |
||||||
|
break; |
||||||
|
case 'e': |
||||||
|
case 'E': |
||||||
|
if (!(flags & ANSI)) |
||||||
|
fprintf(ofp,"%s\n", END_TRAN); |
||||||
|
cptr++; |
||||||
|
break; |
||||||
|
case 'n': |
||||||
|
case 'N': |
||||||
|
if (!(flags & DFLT_NUM)) |
||||||
|
{ |
||||||
|
rowcnt=atoi(++cptr); |
||||||
|
while (isdigit(*cptr) || *cptr == ' ') cptr++; |
||||||
|
fprintf(ofp, SET_ROWCOUNT, rowcnt); |
||||||
|
} |
||||||
|
continue; |
||||||
|
case 'o': |
||||||
|
case 'O': |
||||||
|
if (flags & OUTPUT) |
||||||
|
fprintf(ofp,"%s '%s/%s.%d'", SET_OUTPUT, osuff,
|
||||||
|
qtag, (snum < 0)?0:snum); |
||||||
|
cptr++; |
||||||
|
break; |
||||||
|
case 'q': |
||||||
|
case 'Q': |
||||||
|
fprintf(ofp,"%s", qtag); |
||||||
|
cptr++; |
||||||
|
break; |
||||||
|
case 's': |
||||||
|
case 'S': |
||||||
|
fprintf(ofp,"%d", (snum < 0)?0:snum); |
||||||
|
cptr++; |
||||||
|
break; |
||||||
|
case 'X': |
||||||
|
case 'x': |
||||||
|
if (flags & EXPLAIN) |
||||||
|
fprintf(ofp, "%s\n", GEN_QUERY_PLAN); |
||||||
|
cptr++; |
||||||
|
break; |
||||||
|
case '1': |
||||||
|
case '2': |
||||||
|
case '3': |
||||||
|
case '4': |
||||||
|
case '5': |
||||||
|
case '6': |
||||||
|
case '7': |
||||||
|
case '8': |
||||||
|
case '9': |
||||||
|
varsub(qnum, atoi(cptr), flags & DFLT); |
||||||
|
while (isdigit(*++cptr)); |
||||||
|
break; |
||||||
|
default: |
||||||
|
fprintf(stderr, "-- unknown flag '%c%c' ignored\n",
|
||||||
|
VTAG, *cptr); |
||||||
|
cptr++; |
||||||
|
break; |
||||||
|
} |
||||||
|
mark=cptr; |
||||||
|
} |
||||||
|
fprintf(ofp,"%s", mark); |
||||||
|
} |
||||||
|
fclose(qfp); |
||||||
|
fflush(stdout); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
void |
||||||
|
usage(void) |
||||||
|
{ |
||||||
|
printf("%s Parameter Substitution (v. %d.%d.%d build %d)\n",
|
||||||
|
NAME, VERSION,RELEASE, |
||||||
|
PATCH,BUILD); |
||||||
|
printf("Copyright %s %s\n", TPC, C_DATES); |
||||||
|
printf("USAGE: %s <options> [ queries ]\n", prog); |
||||||
|
printf("Options:\n"); |
||||||
|
printf("\t-a\t\t-- use ANSI semantics.\n"); |
||||||
|
printf("\t-b <str>\t-- load distributions from <str>\n"); |
||||||
|
printf("\t-c\t\t-- retain comments found in template.\n"); |
||||||
|
printf("\t-d\t\t-- use default substitution values.\n"); |
||||||
|
printf("\t-h\t\t-- print this usage summary.\n"); |
||||||
|
printf("\t-i <str>\t-- use the contents of file <str> to begin a query.\n"); |
||||||
|
printf("\t-l <str>\t-- log parameters to <str>.\n"); |
||||||
|
printf("\t-n <str>\t-- connect to database <str>.\n"); |
||||||
|
printf("\t-N\t\t-- use default rowcounts and ignore :n directive.\n"); |
||||||
|
printf("\t-o <str>\t-- set the output file base path to <str>.\n"); |
||||||
|
printf("\t-p <n>\t\t-- use the query permutation for stream <n>\n"); |
||||||
|
printf("\t-r <n>\t\t-- seed the random number generator with <n>\n"); |
||||||
|
printf("\t-s <n>\t\t-- base substitutions on an SF of <n>\n"); |
||||||
|
printf("\t-v\t\t-- verbose.\n"); |
||||||
|
printf("\t-t <str>\t-- use the contents of file <str> to complete a query\n"); |
||||||
|
printf("\t-x\t\t-- enable SET EXPLAIN in each query.\n"); |
||||||
|
} |
||||||
|
|
||||||
|
int |
||||||
|
process_options(int cnt, char **args) |
||||||
|
{ |
||||||
|
int flag; |
||||||
|
|
||||||
|
while((flag = getopt(cnt, args, "ab:cdhi:n:Nl:o:p:r:s:t:vx")) != -1) |
||||||
|
switch(flag) |
||||||
|
{ |
||||||
|
case 'a': /* use ANSI semantics */ |
||||||
|
flags |= ANSI; |
||||||
|
break; |
||||||
|
case 'b': /* load distributions from named file */ |
||||||
|
d_path = (char *)malloc((int)strlen(optarg) + 1); |
||||||
|
MALLOC_CHECK(d_path); |
||||||
|
strcpy(d_path, optarg); |
||||||
|
break; |
||||||
|
case 'c': /* retain comments in EQT */ |
||||||
|
flags |= COMMENT; |
||||||
|
break; |
||||||
|
case 'd': /* use default substitution values */ |
||||||
|
flags |= DFLT; |
||||||
|
break; |
||||||
|
case 'h': /* just generate the usage summary */ |
||||||
|
usage(); |
||||||
|
exit(0); |
||||||
|
break; |
||||||
|
case 'i': /* set stream initialization file name */ |
||||||
|
ifile = malloc((int)strlen(optarg) + 1); |
||||||
|
MALLOC_CHECK(ifile); |
||||||
|
strcpy(ifile, optarg); |
||||||
|
flags |= INIT; |
||||||
|
break; |
||||||
|
case 'l': /* log parameter usages */ |
||||||
|
lfile = malloc((int)strlen(optarg) + 1); |
||||||
|
MALLOC_CHECK(lfile); |
||||||
|
strcpy(lfile, optarg); |
||||||
|
flags |= LOG; |
||||||
|
break; |
||||||
|
case 'N': /* use default rowcounts */ |
||||||
|
flags |= DFLT_NUM; |
||||||
|
break; |
||||||
|
case 'n': /* set database name */ |
||||||
|
db_name = malloc((int)strlen(optarg) + 1); |
||||||
|
MALLOC_CHECK(db_name); |
||||||
|
strcpy(db_name, optarg); |
||||||
|
flags |= DBASE; |
||||||
|
break; |
||||||
|
case 'o': /* set the output path */ |
||||||
|
osuff = malloc((int)strlen(optarg) + 1); |
||||||
|
MALLOC_CHECK(osuff); |
||||||
|
strcpy(osuff, optarg); |
||||||
|
flags |=OUTPUT; |
||||||
|
break; |
||||||
|
case 'p': /* permutation for a given stream */ |
||||||
|
snum = atoi(optarg); |
||||||
|
break; |
||||||
|
case 'r': /* set random number seed for parameter gen */ |
||||||
|
flags |= SEED; |
||||||
|
rndm = atol(optarg); |
||||||
|
break; |
||||||
|
case 's': /* scale of data set to run against */ |
||||||
|
flt_scale = atof(optarg); |
||||||
|
if (scale > MAX_SCALE) |
||||||
|
fprintf(stderr, "%s %5.0f %s\n%s\n", |
||||||
|
"WARNING: Support for scale factors >", |
||||||
|
MAX_SCALE, |
||||||
|
"GB is still in development.", |
||||||
|
"Data set integrity is not guaranteed.\n"); |
||||||
|
break; |
||||||
|
case 't': /* set termination file name */ |
||||||
|
tfile = malloc((int)strlen(optarg) + 1); |
||||||
|
MALLOC_CHECK(tfile); |
||||||
|
strcpy(tfile, optarg); |
||||||
|
flags |= TERMINATE; |
||||||
|
break; |
||||||
|
case 'v': /* verbose */ |
||||||
|
flags |= VERBOSE; |
||||||
|
break; |
||||||
|
case 'x': /* set explain in the queries */ |
||||||
|
flags |= EXPLAIN; |
||||||
|
break; |
||||||
|
default: |
||||||
|
printf("unknown option '%s' ignored\n", args[optind]); |
||||||
|
usage(); |
||||||
|
exit(1); |
||||||
|
break; |
||||||
|
} |
||||||
|
return(0); |
||||||
|
} |
||||||
|
|
||||||
|
int |
||||||
|
setup(void) |
||||||
|
{ |
||||||
|
asc_date = mk_ascdate(); |
||||||
|
read_dist(env_config(DIST_TAG, DIST_DFLT), "p_cntr", &p_cntr_set); |
||||||
|
read_dist(env_config(DIST_TAG, DIST_DFLT), "colors", &colors); |
||||||
|
read_dist(env_config(DIST_TAG, DIST_DFLT), "p_types", &p_types_set); |
||||||
|
read_dist(env_config(DIST_TAG, DIST_DFLT), "nations", &nations); |
||||||
|
read_dist(env_config(DIST_TAG, DIST_DFLT), "nations2", &nations2); |
||||||
|
read_dist(env_config(DIST_TAG, DIST_DFLT), "regions", ®ions); |
||||||
|
read_dist(env_config(DIST_TAG, DIST_DFLT), "o_oprio",
|
||||||
|
&o_priority_set); |
||||||
|
read_dist(env_config(DIST_TAG, DIST_DFLT), "instruct",
|
||||||
|
&l_instruct_set); |
||||||
|
read_dist(env_config(DIST_TAG, DIST_DFLT), "smode", &l_smode_set); |
||||||
|
read_dist(env_config(DIST_TAG, DIST_DFLT), "category",
|
||||||
|
&l_category_set); |
||||||
|
read_dist(env_config(DIST_TAG, DIST_DFLT), "rflag", &l_rflag_set); |
||||||
|
read_dist(env_config(DIST_TAG, DIST_DFLT), "msegmnt", &c_mseg_set); |
||||||
|
read_dist(env_config(DIST_TAG, DIST_DFLT), "Q13a", &q13a); |
||||||
|
read_dist(env_config(DIST_TAG, DIST_DFLT), "Q13b", &q13b); |
||||||
|
|
||||||
|
return(0); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
int main(int ac, char **av) |
||||||
|
{ |
||||||
|
int i; |
||||||
|
FILE *ifp; |
||||||
|
char line[LINE_SIZE]; |
||||||
|
|
||||||
|
prog = av[0]; |
||||||
|
flt_scale = (double)1.0; |
||||||
|
flags = 0; |
||||||
|
d_path = NULL; |
||||||
|
process_options(ac, av); |
||||||
|
if (flags & VERBOSE) |
||||||
|
fprintf(ofp,
|
||||||
|
"-- TPC %s Parameter Substitution (Version %d.%d.%d build %d)\n", |
||||||
|
NAME, VERSION, RELEASE, PATCH, BUILD); |
||||||
|
|
||||||
|
setup(); |
||||||
|
|
||||||
|
if (!(flags & DFLT)) /* perturb the RNG */ |
||||||
|
{ |
||||||
|
if (!(flags & SEED)) |
||||||
|
rndm = (long)((unsigned)time(NULL)); |
||||||
|
if (rndm < 0) |
||||||
|
rndm += 2147483647; |
||||||
|
Seed[0].value = rndm; |
||||||
|
for (i=1; i <= QUERIES_PER_SET; i++) |
||||||
|
{ |
||||||
|
Seed[0].value = NextRand(Seed[0].value); |
||||||
|
Seed[i].value = Seed[0].value; |
||||||
|
} |
||||||
|
printf("-- using %ld as a seed to the RNG\n", rndm); |
||||||
|
} |
||||||
|
else |
||||||
|
printf("-- using default substitutions\n"); |
||||||
|
|
||||||
|
if (flags & INIT) /* init stream with ifile */ |
||||||
|
{ |
||||||
|
ifp = fopen(ifile, "r"); |
||||||
|
OPEN_CHECK(ifp, ifile); |
||||||
|
while (fgets(line, LINE_SIZE, ifp) != NULL) |
||||||
|
fprintf(stdout, "%s", line); |
||||||
|
} |
||||||
|
|
||||||
|
if (snum >= 0) |
||||||
|
if (optind < ac) |
||||||
|
for (i=optind; i < ac; i++) |
||||||
|
{ |
||||||
|
char qname[10]; |
||||||
|
sprintf(qname, "%d", SEQUENCE(snum, atoi(av[i]))); |
||||||
|
qsub(qname, flags); |
||||||
|
} |
||||||
|
else |
||||||
|
for (i=1; i <= QUERIES_PER_SET; i++) |
||||||
|
{ |
||||||
|
char qname[10]; |
||||||
|
sprintf(qname, "%d", SEQUENCE(snum, i)); |
||||||
|
qsub(qname, flags); |
||||||
|
} |
||||||
|
else |
||||||
|
if (optind < ac) |
||||||
|
for (i=optind; i < ac; i++) |
||||||
|
qsub(av[i], flags);
|
||||||
|
else |
||||||
|
for (i=1; i <= QUERIES_PER_SET; i++) |
||||||
|
{ |
||||||
|
char qname[10]; |
||||||
|
sprintf(qname, "%d", i); |
||||||
|
qsub(qname, flags); |
||||||
|
} |
||||||
|
|
||||||
|
if (flags & TERMINATE) /* terminate stream with tfile */ |
||||||
|
{ |
||||||
|
ifp = fopen(tfile, "r"); |
||||||
|
if (ifp == NULL) |
||||||
|
OPEN_CHECK(ifp, tfile); |
||||||
|
while (fgets(line, LINE_SIZE, ifp) != NULL) |
||||||
|
fprintf(stdout, "%s", line); |
||||||
|
} |
||||||
|
|
||||||
|
return(0); |
||||||
|
} |
||||||
|
|
Binary file not shown.
@ -0,0 +1,265 @@ |
|||||||
|
<?xml version="1.0" encoding="Windows-1252"?> |
||||||
|
<VisualStudioProject |
||||||
|
ProjectType="Visual C++" |
||||||
|
Version="8.00" |
||||||
|
Name="qgen" |
||||||
|
ProjectGUID="{9BAF8942-2DFD-4BD1-B5ED-DBDDF0169E22}" |
||||||
|
RootNamespace="qgen" |
||||||
|
> |
||||||
|
<Platforms> |
||||||
|
<Platform |
||||||
|
Name="Win32" |
||||||
|
/> |
||||||
|
</Platforms> |
||||||
|
<ToolFiles> |
||||||
|
</ToolFiles> |
||||||
|
<Configurations> |
||||||
|
<Configuration |
||||||
|
Name="Debug|Win32" |
||||||
|
OutputDirectory="$(SolutionDir)$(ConfigurationName)" |
||||||
|
IntermediateDirectory="$(ConfigurationName)" |
||||||
|
ConfigurationType="1" |
||||||
|
CharacterSet="2" |
||||||
|
> |
||||||
|
<Tool |
||||||
|
Name="VCPreBuildEventTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCCustomBuildTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCXMLDataGeneratorTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCWebServiceProxyGeneratorTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCMIDLTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCCLCompilerTool" |
||||||
|
Optimization="0" |
||||||
|
PreprocessorDefinitions="WIN32;TPCH;SQLSERVER;_CRT_SECURE_NO_WARNINGS" |
||||||
|
MinimalRebuild="true" |
||||||
|
BasicRuntimeChecks="3" |
||||||
|
RuntimeLibrary="3" |
||||||
|
WarningLevel="3" |
||||||
|
Detect64BitPortabilityProblems="true" |
||||||
|
DebugInformationFormat="4" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCManagedResourceCompilerTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCResourceCompilerTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCPreLinkEventTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCLinkerTool" |
||||||
|
GenerateDebugInformation="true" |
||||||
|
TargetMachine="1" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCALinkTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCManifestTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCXDCMakeTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCBscMakeTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCFxCopTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCAppVerifierTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCWebDeploymentTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCPostBuildEventTool" |
||||||
|
/> |
||||||
|
</Configuration> |
||||||
|
<Configuration |
||||||
|
Name="Release|Win32" |
||||||
|
OutputDirectory="$(SolutionDir)$(ConfigurationName)" |
||||||
|
IntermediateDirectory="$(ConfigurationName)" |
||||||
|
ConfigurationType="1" |
||||||
|
CharacterSet="2" |
||||||
|
WholeProgramOptimization="1" |
||||||
|
> |
||||||
|
<Tool |
||||||
|
Name="VCPreBuildEventTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCCustomBuildTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCXMLDataGeneratorTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCWebServiceProxyGeneratorTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCMIDLTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCCLCompilerTool" |
||||||
|
RuntimeLibrary="2" |
||||||
|
WarningLevel="3" |
||||||
|
Detect64BitPortabilityProblems="true" |
||||||
|
DebugInformationFormat="3" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCManagedResourceCompilerTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCResourceCompilerTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCPreLinkEventTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCLinkerTool" |
||||||
|
GenerateDebugInformation="true" |
||||||
|
OptimizeReferences="2" |
||||||
|
EnableCOMDATFolding="2" |
||||||
|
TargetMachine="1" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCALinkTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCManifestTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCXDCMakeTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCBscMakeTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCFxCopTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCAppVerifierTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCWebDeploymentTool" |
||||||
|
/> |
||||||
|
<Tool |
||||||
|
Name="VCPostBuildEventTool" |
||||||
|
/> |
||||||
|
</Configuration> |
||||||
|
</Configurations> |
||||||
|
<References> |
||||||
|
</References> |
||||||
|
<Files> |
||||||
|
<Filter |
||||||
|
Name="Source Files" |
||||||
|
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx" |
||||||
|
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}" |
||||||
|
> |
||||||
|
<File |
||||||
|
RelativePath=".\bm_utils.c" |
||||||
|
> |
||||||
|
</File> |
||||||
|
<File |
||||||
|
RelativePath=".\build.c" |
||||||
|
> |
||||||
|
</File> |
||||||
|
<File |
||||||
|
RelativePath=".\permute.c" |
||||||
|
> |
||||||
|
</File> |
||||||
|
<File |
||||||
|
RelativePath=".\print.c" |
||||||
|
> |
||||||
|
</File> |
||||||
|
<File |
||||||
|
RelativePath=".\qgen.c" |
||||||
|
> |
||||||
|
</File> |
||||||
|
<File |
||||||
|
RelativePath=".\rnd.c" |
||||||
|
> |
||||||
|
</File> |
||||||
|
<File |
||||||
|
RelativePath=".\rng64.c" |
||||||
|
> |
||||||
|
</File> |
||||||
|
<File |
||||||
|
RelativePath=".\speed_seed.c" |
||||||
|
> |
||||||
|
</File> |
||||||
|
<File |
||||||
|
RelativePath=".\text.c" |
||||||
|
> |
||||||
|
</File> |
||||||
|
<File |
||||||
|
RelativePath=".\varsub.c" |
||||||
|
> |
||||||
|
</File> |
||||||
|
</Filter> |
||||||
|
<Filter |
||||||
|
Name="Header Files" |
||||||
|
Filter="h;hpp;hxx;hm;inl;inc;xsd" |
||||||
|
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}" |
||||||
|
> |
||||||
|
<File |
||||||
|
RelativePath=".\config.h" |
||||||
|
> |
||||||
|
</File> |
||||||
|
<File |
||||||
|
RelativePath=".\dss.h" |
||||||
|
> |
||||||
|
</File> |
||||||
|
<File |
||||||
|
RelativePath=".\dsstypes.h" |
||||||
|
> |
||||||
|
</File> |
||||||
|
<File |
||||||
|
RelativePath=".\permute.h" |
||||||
|
> |
||||||
|
</File> |
||||||
|
<File |
||||||
|
RelativePath=".\release.h" |
||||||
|
> |
||||||
|
</File> |
||||||
|
<File |
||||||
|
RelativePath=".\rnd.h" |
||||||
|
> |
||||||
|
</File> |
||||||
|
<File |
||||||
|
RelativePath=".\rng64.h" |
||||||
|
> |
||||||
|
</File> |
||||||
|
<File |
||||||
|
RelativePath=".\seed.h" |
||||||
|
> |
||||||
|
</File> |
||||||
|
<File |
||||||
|
RelativePath=".\shared.h" |
||||||
|
> |
||||||
|
</File> |
||||||
|
<File |
||||||
|
RelativePath=".\tpcd.h" |
||||||
|
> |
||||||
|
</File> |
||||||
|
</Filter> |
||||||
|
<Filter |
||||||
|
Name="Resource Files" |
||||||
|
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav" |
||||||
|
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}" |
||||||
|
> |
||||||
|
</Filter> |
||||||
|
</Files> |
||||||
|
<Globals> |
||||||
|
</Globals> |
||||||
|
</VisualStudioProject> |
@ -0,0 +1,29 @@ |
|||||||
|
--begin q01 |
||||||
|
-- $ID$ |
||||||
|
-- TPC-H/TPC-R Pricing Summary Report Query (Q1) |
||||||
|
-- Functional Query Definition |
||||||
|
-- Approved February 1998 |
||||||
|
:x |
||||||
|
:o |
||||||
|
select |
||||||
|
l_returnflag, |
||||||
|
l_linestatus, |
||||||
|
sum(l_quantity) as sum_qty, |
||||||
|
sum(l_extendedprice) as sum_base_price, |
||||||
|
sum(l_extendedprice * (1 - l_discount)) as sum_disc_price, |
||||||
|
sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) as sum_charge, |
||||||
|
avg(l_quantity) as avg_qty, |
||||||
|
avg(l_extendedprice) as avg_price, |
||||||
|
avg(l_discount) as avg_disc, |
||||||
|
count(*) as count_order |
||||||
|
from |
||||||
|
tpch.lineitem |
||||||
|
where |
||||||
|
l_shipdate <= ADD_DAYS(DATE '2000-02-28', -:1) |
||||||
|
group by |
||||||
|
l_returnflag, |
||||||
|
l_linestatus |
||||||
|
order by |
||||||
|
l_returnflag, |
||||||
|
l_linestatus; |
||||||
|
--end q01 |
@ -0,0 +1,40 @@ |
|||||||
|
--begin q10 |
||||||
|
-- $ID$ |
||||||
|
-- TPC-H/TPC-R Returned Item Reporting Query (Q10) |
||||||
|
-- Functional Query Definition |
||||||
|
-- Approved February 1998 |
||||||
|
:x |
||||||
|
:o |
||||||
|
select |
||||||
|
c_custkey, |
||||||
|
c_name, |
||||||
|
sum(l_extendedprice * (1 - l_discount)) as revenue, |
||||||
|
c_acctbal, |
||||||
|
n_name, |
||||||
|
c_address, |
||||||
|
c_phone, |
||||||
|
c_comment |
||||||
|
from |
||||||
|
tpch.customer, |
||||||
|
tpch.orders, |
||||||
|
tpch.lineitem, |
||||||
|
tpch.nation |
||||||
|
where |
||||||
|
c_custkey = o_custkey |
||||||
|
and l_orderkey = o_orderkey |
||||||
|
and o_orderdate >= date ':1' |
||||||
|
and o_orderdate < ADD_MONTHS(date ':1', 3) |
||||||
|
and l_returnflag = 'R' |
||||||
|
and c_nationkey = n_nationkey |
||||||
|
group by |
||||||
|
c_custkey, |
||||||
|
c_name, |
||||||
|
c_acctbal, |
||||||
|
c_phone, |
||||||
|
n_name, |
||||||
|
c_address, |
||||||
|
c_comment |
||||||
|
order by |
||||||
|
revenue desc; |
||||||
|
:n 20; |
||||||
|
--end q10 |
@ -0,0 +1,35 @@ |
|||||||
|
--begin q11 |
||||||
|
-- $ID$ |
||||||
|
-- TPC-H/TPC-R Important Stock Identification Query (Q11) |
||||||
|
-- Functional Query Definition |
||||||
|
-- Approved February 1998 |
||||||
|
:x |
||||||
|
:o |
||||||
|
select |
||||||
|
ps_partkey, |
||||||
|
sum(ps_supplycost * ps_availqty) as val |
||||||
|
from |
||||||
|
tpch.partsupp, |
||||||
|
tpch.supplier, |
||||||
|
tpch.nation |
||||||
|
where |
||||||
|
ps_suppkey = s_suppkey |
||||||
|
and s_nationkey = n_nationkey |
||||||
|
and n_name = ':1' |
||||||
|
group by |
||||||
|
ps_partkey having |
||||||
|
sum(ps_supplycost * ps_availqty) > ( |
||||||
|
select |
||||||
|
sum(ps_supplycost * ps_availqty) * :2 |
||||||
|
from |
||||||
|
tpch.partsupp, |
||||||
|
tpch.supplier, |
||||||
|
tpch.nation |
||||||
|
where |
||||||
|
ps_suppkey = s_suppkey |
||||||
|
and s_nationkey = n_nationkey |
||||||
|
and n_name = ':1' |
||||||
|
) |
||||||
|
order by |
||||||
|
val desc; |
||||||
|
--end q11 |
@ -0,0 +1,36 @@ |
|||||||
|
--begin q12 |
||||||
|
-- $ID$ |
||||||
|
-- TPC-H/TPC-R Shipping Modes and Order Priority Query (Q12) |
||||||
|
-- Functional Query Definition |
||||||
|
-- Approved February 1998 |
||||||
|
:x |
||||||
|
:o |
||||||
|
select |
||||||
|
l_shipmode, |
||||||
|
sum(case |
||||||
|
when o_orderpriority = '1-URGENT' |
||||||
|
or o_orderpriority = '2-HIGH' |
||||||
|
then 1 |
||||||
|
else 0 |
||||||
|
end) as high_line_count, |
||||||
|
sum(case |
||||||
|
when o_orderpriority <> '1-URGENT' |
||||||
|
and o_orderpriority <> '2-HIGH' |
||||||
|
then 1 |
||||||
|
else 0 |
||||||
|
end) as low_line_count |
||||||
|
from |
||||||
|
tpch.orders, |
||||||
|
tpch.lineitem |
||||||
|
where |
||||||
|
o_orderkey = l_orderkey |
||||||
|
and l_shipmode in (':1', ':2') |
||||||
|
and l_commitdate < l_receiptdate |
||||||
|
and l_shipdate < l_commitdate |
||||||
|
and l_receiptdate >= date ':3' |
||||||
|
and l_receiptdate < ADD_YEARS(DATE ':3', 1) |
||||||
|
group by |
||||||
|
l_shipmode |
||||||
|
order by |
||||||
|
l_shipmode; |
||||||
|
--end q12 |
@ -0,0 +1,28 @@ |
|||||||
|
--begin q13 |
||||||
|
-- $ID$ |
||||||
|
-- TPC-H/TPC-R Customer Distribution Query (Q13) |
||||||
|
-- Functional Query Definition |
||||||
|
-- Approved February 1998 |
||||||
|
:x |
||||||
|
:o |
||||||
|
select |
||||||
|
c_count, |
||||||
|
count(*) as custdist |
||||||
|
from |
||||||
|
( |
||||||
|
select |
||||||
|
c_custkey, |
||||||
|
count(o_orderkey) |
||||||
|
from |
||||||
|
tpch.customer left outer join tpch.orders on |
||||||
|
c_custkey = o_custkey |
||||||
|
and o_comment not like '%:1%:2%' |
||||||
|
group by |
||||||
|
c_custkey |
||||||
|
) as c_orders (c_custkey, c_count) |
||||||
|
group by |
||||||
|
c_count |
||||||
|
order by |
||||||
|
custdist desc, |
||||||
|
c_count desc; |
||||||
|
--end q13 |
@ -0,0 +1,21 @@ |
|||||||
|
--begin q14 |
||||||
|
-- $ID$ |
||||||
|
-- TPC-H/TPC-R Promotion Effect Query (Q14) |
||||||
|
-- Functional Query Definition |
||||||
|
-- Approved February 1998 |
||||||
|
:x |
||||||
|
:o |
||||||
|
select |
||||||
|
100.00 * sum(case |
||||||
|
when p_type like 'PROMO%' |
||||||
|
then l_extendedprice * (1 - l_discount) |
||||||
|
else 0 |
||||||
|
end) / sum(l_extendedprice * (1 - l_discount)) as promo_revenue |
||||||
|
from |
||||||
|
tpch.lineitem, |
||||||
|
tpch.part |
||||||
|
where |
||||||
|
l_partkey = p_partkey |
||||||
|
and l_shipdate >= date ':1' |
||||||
|
and l_shipdate < ADD_MONTHS(date ':1', 1); |
||||||
|
--end q14 |
@ -0,0 +1,38 @@ |
|||||||
|
--begin q15 |
||||||
|
-- $ID$ |
||||||
|
-- TPC-H/TPC-R Top Supplier Query (Q15) |
||||||
|
-- Variant A |
||||||
|
-- Approved February 1998 |
||||||
|
:x |
||||||
|
:o |
||||||
|
with revenue (supplier_no, total_revenue) as ( |
||||||
|
select |
||||||
|
l_suppkey, |
||||||
|
sum(l_extendedprice * (1-l_discount)) |
||||||
|
from |
||||||
|
tpch.lineitem |
||||||
|
where |
||||||
|
l_shipdate >= date ':1' |
||||||
|
and l_shipdate < ADD_MONTHS(date':1', 3) |
||||||
|
group by |
||||||
|
l_suppkey |
||||||
|
) |
||||||
|
select |
||||||
|
s_suppkey, |
||||||
|
s_name, |
||||||
|
s_address, |
||||||
|
s_phone, |
||||||
|
total_revenue |
||||||
|
from |
||||||
|
tpch.supplier, |
||||||
|
revenue |
||||||
|
where |
||||||
|
s_suppkey = supplier_no |
||||||
|
and total_revenue = ( |
||||||
|
select |
||||||
|
max(total_revenue) |
||||||
|
from |
||||||
|
revenue |
||||||
|
) |
||||||
|
order by |
||||||
|
s_suppkey; |
@ -0,0 +1,38 @@ |
|||||||
|
--begin q16 |
||||||
|
-- $ID$ |
||||||
|
-- TPC-H/TPC-R Parts/Supplier Relationship Query (Q16) |
||||||
|
-- Functional Query Definition |
||||||
|
-- Approved February 1998 |
||||||
|
:x |
||||||
|
:o |
||||||
|
select |
||||||
|
p_brand, |
||||||
|
p_type, |
||||||
|
p_size, |
||||||
|
count(distinct ps_suppkey) as supplier_cnt |
||||||
|
from |
||||||
|
tpch.partsupp, |
||||||
|
tpch.part |
||||||
|
where |
||||||
|
p_partkey = ps_partkey |
||||||
|
and p_brand <> ':1' |
||||||
|
and p_type not like ':2%' |
||||||
|
and p_size in (:3, :4, :5, :6, :7, :8, :9, :10) |
||||||
|
and ps_suppkey not in ( |
||||||
|
select |
||||||
|
s_suppkey |
||||||
|
from |
||||||
|
tpch.supplier |
||||||
|
where |
||||||
|
s_comment like '%Customer%Complaints%' |
||||||
|
) |
||||||
|
group by |
||||||
|
p_brand, |
||||||
|
p_type, |
||||||
|
p_size |
||||||
|
order by |
||||||
|
supplier_cnt desc, |
||||||
|
p_brand, |
||||||
|
p_type, |
||||||
|
p_size; |
||||||
|
--end q16 |
@ -0,0 +1,25 @@ |
|||||||
|
--begin q17 |
||||||
|
-- $ID$ |
||||||
|
-- TPC-H/TPC-R Small-Quantity-Order Revenue Query (Q17) |
||||||
|
-- Functional Query Definition |
||||||
|
-- Approved February 1998 |
||||||
|
:x |
||||||
|
:o |
||||||
|
select |
||||||
|
sum(l_extendedprice) / 7.0 as avg_yearly |
||||||
|
from |
||||||
|
tpch.lineitem, |
||||||
|
tpch.part |
||||||
|
where |
||||||
|
p_partkey = l_partkey |
||||||
|
and p_brand = ':1' |
||||||
|
and p_container = ':2' |
||||||
|
and l_quantity < ( |
||||||
|
select |
||||||
|
0.2 * avg(l_quantity) |
||||||
|
from |
||||||
|
tpch.lineitem |
||||||
|
where |
||||||
|
l_partkey = p_partkey |
||||||
|
); |
||||||
|
--end q17 |
@ -0,0 +1,41 @@ |
|||||||
|
--begin q18 |
||||||
|
-- $ID$ |
||||||
|
-- TPC-H/TPC-R Large Volume Customer Query (Q18) |
||||||
|
-- Function Query Definition |
||||||
|
-- Approved February 1998 |
||||||
|
:x |
||||||
|
:o |
||||||
|
select |
||||||
|
c_name, |
||||||
|
c_custkey, |
||||||
|
o_orderkey, |
||||||
|
o_orderdate, |
||||||
|
o_totalprice, |
||||||
|
sum(l_quantity) |
||||||
|
from |
||||||
|
tpch.customer, |
||||||
|
tpch.orders, |
||||||
|
tpch.lineitem |
||||||
|
where |
||||||
|
o_orderkey in ( |
||||||
|
select |
||||||
|
l_orderkey |
||||||
|
from |
||||||
|
tpch.lineitem |
||||||
|
group by |
||||||
|
l_orderkey having |
||||||
|
sum(l_quantity) > :1 |
||||||
|
) |
||||||
|
and c_custkey = o_custkey |
||||||
|
and o_orderkey = l_orderkey |
||||||
|
group by |
||||||
|
c_name, |
||||||
|
c_custkey, |
||||||
|
o_orderkey, |
||||||
|
o_orderdate, |
||||||
|
o_totalprice |
||||||
|
order by |
||||||
|
o_totalprice desc, |
||||||
|
o_orderdate; |
||||||
|
:n 100; |
||||||
|
--end q18 |
@ -0,0 +1,43 @@ |
|||||||
|
--begin q19 |
||||||
|
-- $ID$ |
||||||
|
-- TPC-H/TPC-R Discounted Revenue Query (Q19) |
||||||
|
-- Functional Query Definition |
||||||
|
-- Approved February 1998 |
||||||
|
:x |
||||||
|
:o |
||||||
|
select |
||||||
|
sum(l_extendedprice* (1 - l_discount)) as revenue |
||||||
|
from |
||||||
|
tpch.lineitem, |
||||||
|
tpch.part |
||||||
|
where |
||||||
|
( |
||||||
|
p_partkey = l_partkey |
||||||
|
and p_brand = ':1' |
||||||
|
and p_container in ('SM CASE', 'SM BOX', 'SM PACK', 'SM PKG') |
||||||
|
and l_quantity >= :4 and l_quantity <= :4 + 10 |
||||||
|
and p_size between 1 and 5 |
||||||
|
and l_shipmode in ('AIR', 'AIR REG') |
||||||
|
and l_shipinstruct = 'DELIVER IN PERSON' |
||||||
|
) |
||||||
|
or |
||||||
|
( |
||||||
|
p_partkey = l_partkey |
||||||
|
and p_brand = ':2' |
||||||
|
and p_container in ('MED BAG', 'MED BOX', 'MED PKG', 'MED PACK') |
||||||
|
and l_quantity >= :5 and l_quantity <= :5 + 10 |
||||||
|
and p_size between 1 and 10 |
||||||
|
and l_shipmode in ('AIR', 'AIR REG') |
||||||
|
and l_shipinstruct = 'DELIVER IN PERSON' |
||||||
|
) |
||||||
|
or |
||||||
|
( |
||||||
|
p_partkey = l_partkey |
||||||
|
and p_brand = ':3' |
||||||
|
and p_container in ('LG CASE', 'LG BOX', 'LG PACK', 'LG PKG') |
||||||
|
and l_quantity >= :6 and l_quantity <= :6 + 10 |
||||||
|
and p_size between 1 and 15 |
||||||
|
and l_shipmode in ('AIR', 'AIR REG') |
||||||
|
and l_shipinstruct = 'DELIVER IN PERSON' |
||||||
|
); |
||||||
|
--end q19 |
@ -0,0 +1,52 @@ |
|||||||
|
--begin q02 |
||||||
|
-- $ID$ |
||||||
|
-- TPC-H/TPC-R Minimum Cost Supplier Query (Q2) |
||||||
|
-- Functional Query Definition |
||||||
|
-- Approved February 1998 |
||||||
|
:x |
||||||
|
:o |
||||||
|
select |
||||||
|
s_acctbal, |
||||||
|
s_name, |
||||||
|
n_name, |
||||||
|
p_partkey, |
||||||
|
p_mfgr, |
||||||
|
s_address, |
||||||
|
s_phone, |
||||||
|
s_comment |
||||||
|
from |
||||||
|
tpch.part, |
||||||
|
tpch.supplier, |
||||||
|
tpch.partsupp, |
||||||
|
tpch.nation, |
||||||
|
tpch.region |
||||||
|
where |
||||||
|
p_partkey = ps_partkey |
||||||
|
and s_suppkey = ps_suppkey |
||||||
|
and p_size = :1 |
||||||
|
and p_type like '%:2' |
||||||
|
and s_nationkey = n_nationkey |
||||||
|
and n_regionkey = r_regionkey |
||||||
|
and r_name = ':3' |
||||||
|
and ps_supplycost = ( |
||||||
|
select |
||||||
|
min(ps_supplycost) |
||||||
|
from |
||||||
|
tpch.partsupp, |
||||||
|
tpch.supplier, |
||||||
|
tpch.nation, |
||||||
|
tpch.region |
||||||
|
where |
||||||
|
p_partkey = ps_partkey |
||||||
|
and s_suppkey = ps_suppkey |
||||||
|
and s_nationkey = n_nationkey |
||||||
|
and n_regionkey = r_regionkey |
||||||
|
and r_name = ':3' |
||||||
|
) |
||||||
|
order by |
||||||
|
s_acctbal desc, |
||||||
|
n_name, |
||||||
|
s_name, |
||||||
|
p_partkey; |
||||||
|
:n 100; |
||||||
|
--end q02 |
@ -0,0 +1,45 @@ |
|||||||
|
--begin q20 |
||||||
|
-- $ID$ |
||||||
|
-- TPC-H/TPC-R Potential Part Promotion Query (Q20) |
||||||
|
-- Function Query Definition |
||||||
|
-- Approved February 1998 |
||||||
|
:x |
||||||
|
:o |
||||||
|
select |
||||||
|
s_name, |
||||||
|
s_address |
||||||
|
from |
||||||
|
tpch.supplier, |
||||||
|
tpch.nation |
||||||
|
where |
||||||
|
s_suppkey in ( |
||||||
|
select |
||||||
|
ps_suppkey |
||||||
|
from |
||||||
|
tpch.partsupp |
||||||
|
where |
||||||
|
ps_partkey in ( |
||||||
|
select |
||||||
|
p_partkey |
||||||
|
from |
||||||
|
tpch.part |
||||||
|
where |
||||||
|
p_name like ':1%' |
||||||
|
) |
||||||
|
and ps_availqty > ( |
||||||
|
select |
||||||
|
0.5 * sum(l_quantity) |
||||||
|
from |
||||||
|
tpch.lineitem |
||||||
|
where |
||||||
|
l_partkey = ps_partkey |
||||||
|
and l_suppkey = ps_suppkey |
||||||
|
and l_shipdate >= date ':2' |
||||||
|
and l_shipdate < ADD_YEARS(date ':2', 1) |
||||||
|
) |
||||||
|
) |
||||||
|
and s_nationkey = n_nationkey |
||||||
|
and n_name = ':3' |
||||||
|
order by |
||||||
|
s_name; |
||||||
|
--end q20 |
@ -0,0 +1,48 @@ |
|||||||
|
--begin q21 |
||||||
|
-- $ID$ |
||||||
|
-- TPC-H/TPC-R Suppliers Who Kept Orders Waiting Query (Q21) |
||||||
|
-- Functional Query Definition |
||||||
|
-- Approved February 1998 |
||||||
|
:x |
||||||
|
:o |
||||||
|
select |
||||||
|
s_name, |
||||||
|
count(*) as numwait |
||||||
|
from |
||||||
|
tpch.supplier, |
||||||
|
tpch.lineitem l1, |
||||||
|
tpch.orders, |
||||||
|
tpch.nation |
||||||
|
where |
||||||
|
s_suppkey = l1.l_suppkey |
||||||
|
and o_orderkey = l1.l_orderkey |
||||||
|
and o_orderstatus = 'F' |
||||||
|
and l1.l_receiptdate > l1.l_commitdate |
||||||
|
and exists ( |
||||||
|
select |
||||||
|
* |
||||||
|
from |
||||||
|
tpch.lineitem l2 |
||||||
|
where |
||||||
|
l2.l_orderkey = l1.l_orderkey |
||||||
|
and l2.l_suppkey <> l1.l_suppkey |
||||||
|
) |
||||||
|
and not exists ( |
||||||
|
select |
||||||
|
* |
||||||
|
from |
||||||
|
tpch.lineitem l3 |
||||||
|
where |
||||||
|
l3.l_orderkey = l1.l_orderkey |
||||||
|
and l3.l_suppkey <> l1.l_suppkey |
||||||
|
and l3.l_receiptdate > l3.l_commitdate |
||||||
|
) |
||||||
|
and s_nationkey = n_nationkey |
||||||
|
and n_name = ':1' |
||||||
|
group by |
||||||
|
s_name |
||||||
|
order by |
||||||
|
numwait desc, |
||||||
|
s_name; |
||||||
|
:n 100; |
||||||
|
--end q21 |
@ -0,0 +1,45 @@ |
|||||||
|
--begin q22 |
||||||
|
-- $ID$ |
||||||
|
-- TPC-H/TPC-R Global Sales Opportunity Query (Q22) |
||||||
|
-- Functional Query Definition |
||||||
|
-- Approved February 1998 |
||||||
|
:x |
||||||
|
:o |
||||||
|
select |
||||||
|
cntrycode, |
||||||
|
count(*) as numcust, |
||||||
|
sum(c_acctbal) as totacctbal |
||||||
|
from |
||||||
|
( |
||||||
|
select |
||||||
|
substring(c_phone from 1 for 2) as cntrycode, |
||||||
|
c_acctbal |
||||||
|
from |
||||||
|
tpch.customer |
||||||
|
where |
||||||
|
substring(c_phone from 1 for 2) in |
||||||
|
(':1', ':2', ':3', ':4', ':5', ':6', ':7') |
||||||
|
and c_acctbal > ( |
||||||
|
select |
||||||
|
avg(c_acctbal) |
||||||
|
from |
||||||
|
tpch.customer |
||||||
|
where |
||||||
|
c_acctbal > 0.00 |
||||||
|
and substring(c_phone from 1 for 2) in |
||||||
|
(':1', ':2', ':3', ':4', ':5', ':6', ':7') |
||||||
|
) |
||||||
|
and not exists ( |
||||||
|
select |
||||||
|
* |
||||||
|
from |
||||||
|
tpch.orders |
||||||
|
where |
||||||
|
o_custkey = c_custkey |
||||||
|
) |
||||||
|
) as custsale |
||||||
|
group by |
||||||
|
cntrycode |
||||||
|
order by |
||||||
|
cntrycode; |
||||||
|
--end q22 |
@ -0,0 +1,31 @@ |
|||||||
|
--begin q03 |
||||||
|
-- $ID$ |
||||||
|
-- TPC-H/TPC-R Shipping Priority Query (Q3) |
||||||
|
-- Functional Query Definition |
||||||
|
-- Approved February 1998 |
||||||
|
:x |
||||||
|
:o |
||||||
|
select |
||||||
|
l_orderkey, |
||||||
|
sum(l_extendedprice * (1 - l_discount)) as revenue, |
||||||
|
o_orderdate, |
||||||
|
o_shippriority |
||||||
|
from |
||||||
|
tpch.customer, |
||||||
|
tpch.orders, |
||||||
|
tpch.lineitem |
||||||
|
where |
||||||
|
c_mktsegment = ':1' |
||||||
|
and c_custkey = o_custkey |
||||||
|
and l_orderkey = o_orderkey |
||||||
|
and o_orderdate < date ':2' |
||||||
|
and l_shipdate > date ':2' |
||||||
|
group by |
||||||
|
l_orderkey, |
||||||
|
o_orderdate, |
||||||
|
o_shippriority |
||||||
|
order by |
||||||
|
revenue desc, |
||||||
|
o_orderdate; |
||||||
|
:n 10; |
||||||
|
--end q03 |
@ -0,0 +1,29 @@ |
|||||||
|
--begin q04 |
||||||
|
-- $ID$ |
||||||
|
-- TPC-H/TPC-R Order Priority Checking Query (Q4) |
||||||
|
-- Functional Query Definition |
||||||
|
-- Approved February 1998 |
||||||
|
:x |
||||||
|
:o |
||||||
|
select |
||||||
|
o_orderpriority, |
||||||
|
count(*) as order_count |
||||||
|
from |
||||||
|
tpch.orders |
||||||
|
where |
||||||
|
o_orderdate >= date ':1' |
||||||
|
and o_orderdate < ADD_MONTHS(date ':1', 3) |
||||||
|
and exists ( |
||||||
|
select |
||||||
|
* |
||||||
|
from |
||||||
|
tpch.lineitem |
||||||
|
where |
||||||
|
l_orderkey = o_orderkey |
||||||
|
and l_commitdate < l_receiptdate |
||||||
|
) |
||||||
|
group by |
||||||
|
o_orderpriority |
||||||
|
order by |
||||||
|
o_orderpriority; |
||||||
|
--end q04 |
@ -0,0 +1,32 @@ |
|||||||
|
--begin q05 |
||||||
|
-- $ID$ |
||||||
|
-- TPC-H/TPC-R Local Supplier Volume Query (Q5) |
||||||
|
-- Functional Query Definition |
||||||
|
-- Approved February 1998 |
||||||
|
:x |
||||||
|
:o |
||||||
|
select |
||||||
|
n_name, |
||||||
|
sum(l_extendedprice * (1 - l_discount)) as revenue |
||||||
|
from |
||||||
|
tpch.customer, |
||||||
|
tpch.orders, |
||||||
|
tpch.lineitem, |
||||||
|
tpch.supplier, |
||||||
|
tpch.nation, |
||||||
|
tpch.region |
||||||
|
where |
||||||
|
c_custkey = o_custkey |
||||||
|
and l_orderkey = o_orderkey |
||||||
|
and l_suppkey = s_suppkey |
||||||
|
and c_nationkey = s_nationkey |
||||||
|
and s_nationkey = n_nationkey |
||||||
|
and n_regionkey = r_regionkey |
||||||
|
and r_name = ':1' |
||||||
|
and o_orderdate >= date ':2' |
||||||
|
and o_orderdate < ADD_YEARS(date ':2', 1) |
||||||
|
group by |
||||||
|
n_name |
||||||
|
order by |
||||||
|
revenue desc; |
||||||
|
--end q05 |
@ -0,0 +1,17 @@ |
|||||||
|
--begin q06 |
||||||
|
-- $ID$ |
||||||
|
-- TPC-H/TPC-R Forecasting Revenue Change Query (Q6) |
||||||
|
-- Functional Query Definition |
||||||
|
-- Approved February 1998 |
||||||
|
:x |
||||||
|
:o |
||||||
|
select |
||||||
|
sum(l_extendedprice * l_discount) as revenue |
||||||
|
from |
||||||
|
tpch.lineitem |
||||||
|
where |
||||||
|
l_shipdate >= date ':1' |
||||||
|
and l_shipdate < ADD_YEARS(date ':1', 1) |
||||||
|
and l_discount between :2 - 0.01 and :2 + 0.01 |
||||||
|
and l_quantity < :3; |
||||||
|
--end q06 |
@ -0,0 +1,47 @@ |
|||||||
|
--begin q07 |
||||||
|
-- $ID$ |
||||||
|
-- TPC-H/TPC-R Volume Shipping Query (Q7) |
||||||
|
-- Functional Query Definition |
||||||
|
-- Approved February 1998 |
||||||
|
:x |
||||||
|
:o |
||||||
|
select |
||||||
|
supp_nation, |
||||||
|
cust_nation, |
||||||
|
l_year, |
||||||
|
sum(volume) as revenue |
||||||
|
from |
||||||
|
( |
||||||
|
select |
||||||
|
n1.n_name as supp_nation, |
||||||
|
n2.n_name as cust_nation, |
||||||
|
extract(year from l_shipdate) as l_year, |
||||||
|
l_extendedprice * (1 - l_discount) as volume |
||||||
|
from |
||||||
|
tpch.supplier, |
||||||
|
tpch.lineitem, |
||||||
|
tpch.orders, |
||||||
|
tpch.customer, |
||||||
|
tpch.nation n1, |
||||||
|
tpch.nation n2 |
||||||
|
where |
||||||
|
s_suppkey = l_suppkey |
||||||
|
and o_orderkey = l_orderkey |
||||||
|
and c_custkey = o_custkey |
||||||
|
and s_nationkey = n1.n_nationkey |
||||||
|
and c_nationkey = n2.n_nationkey |
||||||
|
and ( |
||||||
|
(n1.n_name = ':1' and n2.n_name = ':2') |
||||||
|
or (n1.n_name = ':2' and n2.n_name = ':1') |
||||||
|
) |
||||||
|
and l_shipdate between date '1995-01-01' and date '1996-12-31' |
||||||
|
) as shipping |
||||||
|
group by |
||||||
|
supp_nation, |
||||||
|
cust_nation, |
||||||
|
l_year |
||||||
|
order by |
||||||
|
supp_nation, |
||||||
|
cust_nation, |
||||||
|
l_year; |
||||||
|
--end q07 |
@ -0,0 +1,45 @@ |
|||||||
|
--begin q08 |
||||||
|
-- $ID$ |
||||||
|
-- TPC-H/TPC-R National Market Share Query (Q8) |
||||||
|
-- Functional Query Definition |
||||||
|
-- Approved February 1998 |
||||||
|
:x |
||||||
|
:o |
||||||
|
select |
||||||
|
o_year, |
||||||
|
sum(case |
||||||
|
when nation = ':1' then volume |
||||||
|
else 0 |
||||||
|
end) / sum(volume) as mkt_share |
||||||
|
from |
||||||
|
( |
||||||
|
select |
||||||
|
extract(year from o_orderdate) as o_year, |
||||||
|
l_extendedprice * (1 - l_discount) as volume, |
||||||
|
n2.n_name as nation |
||||||
|
from |
||||||
|
tpch.part, |
||||||
|
tpch.supplier, |
||||||
|
tpch.lineitem, |
||||||
|
tpch.orders, |
||||||
|
tpch.customer, |
||||||
|
tpch.nation n1, |
||||||
|
tpch.nation n2, |
||||||
|
tpch.region |
||||||
|
where |
||||||
|
p_partkey = l_partkey |
||||||
|
and s_suppkey = l_suppkey |
||||||
|
and l_orderkey = o_orderkey |
||||||
|
and o_custkey = c_custkey |
||||||
|
and c_nationkey = n1.n_nationkey |
||||||
|
and n1.n_regionkey = r_regionkey |
||||||
|
and r_name = ':2' |
||||||
|
and s_nationkey = n2.n_nationkey |
||||||
|
and o_orderdate between date '1995-01-01' and date '1996-12-31' |
||||||
|
and p_type = ':3' |
||||||
|
) as all_nations |
||||||
|
group by |
||||||
|
o_year |
||||||
|
order by |
||||||
|
o_year; |
||||||
|
--end q08 |
@ -0,0 +1,40 @@ |
|||||||
|
--begin q09 |
||||||
|
-- $ID$ |
||||||
|
-- TPC-H/TPC-R Product Type Profit Measure Query (Q9) |
||||||
|
-- Functional Query Definition |
||||||
|
-- Approved February 1998 |
||||||
|
:x |
||||||
|
:o |
||||||
|
select |
||||||
|
nation, |
||||||
|
o_year, |
||||||
|
sum(amount) as sum_profit |
||||||
|
from |
||||||
|
( |
||||||
|
select |
||||||
|
n_name as nation, |
||||||
|
extract(year from o_orderdate) as o_year, |
||||||
|
l_extendedprice * (1 - l_discount) - ps_supplycost * l_quantity as amount |
||||||
|
from |
||||||
|
tpch.part, |
||||||
|
tpch.supplier, |
||||||
|
tpch.lineitem, |
||||||
|
tpch.partsupp, |
||||||
|
tpch.orders, |
||||||
|
tpch.nation |
||||||
|
where |
||||||
|
s_suppkey = l_suppkey |
||||||
|
and ps_suppkey = l_suppkey |
||||||
|
and ps_partkey = l_partkey |
||||||
|
and p_partkey = l_partkey |
||||||
|
and o_orderkey = l_orderkey |
||||||
|
and s_nationkey = n_nationkey |
||||||
|
and p_name like '%:1%' |
||||||
|
) as profit |
||||||
|
group by |
||||||
|
nation, |
||||||
|
o_year |
||||||
|
order by |
||||||
|
nation, |
||||||
|
o_year desc; |
||||||
|
--end q09 |
@ -0,0 +1,22 @@ |
|||||||
|
select |
||||||
|
l_returnflag, |
||||||
|
l_linestatus, |
||||||
|
sum(l_quantity) as sum_qty, |
||||||
|
sum(l_extendedprice) as sum_base_price, |
||||||
|
sum(l_extendedprice * (1 - l_discount)) as sum_disc_price, |
||||||
|
sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) as sum_charge, |
||||||
|
avg(l_quantity) as avg_qty, |
||||||
|
avg(l_extendedprice) as avg_price, |
||||||
|
avg(l_discount) as avg_disc, |
||||||
|
count(*) as count_order |
||||||
|
from |
||||||
|
tpch.lineitem |
||||||
|
where |
||||||
|
l_shipdate <= '1998-12-01'::timestamp - '90 day'::interval |
||||||
|
group by |
||||||
|
l_returnflag, |
||||||
|
l_linestatus |
||||||
|
order by |
||||||
|
l_returnflag, |
||||||
|
l_linestatus; |
||||||
|
|
@ -0,0 +1,31 @@ |
|||||||
|
select |
||||||
|
c_custkey, |
||||||
|
c_name, |
||||||
|
sum(l_extendedprice * (1 - l_discount)) as revenue, |
||||||
|
c_acctbal, |
||||||
|
n_name, |
||||||
|
c_address, |
||||||
|
c_phone, |
||||||
|
c_comment |
||||||
|
from |
||||||
|
tpch.customer, |
||||||
|
tpch.orders, |
||||||
|
tpch.lineitem, |
||||||
|
tpch.nation |
||||||
|
where |
||||||
|
c_custkey = o_custkey |
||||||
|
and l_orderkey = o_orderkey |
||||||
|
and o_orderdate >= ':1'::timestamp |
||||||
|
and o_orderdate < ':1'::timestamp + '3 month'::interval |
||||||
|
and l_returnflag = 'R' |
||||||
|
and c_nationkey = n_nationkey |
||||||
|
group by |
||||||
|
c_custkey, |
||||||
|
c_name, |
||||||
|
c_acctbal, |
||||||
|
c_phone, |
||||||
|
n_name, |
||||||
|
c_address, |
||||||
|
c_comment |
||||||
|
order by |
||||||
|
revenue desc; |
@ -0,0 +1,27 @@ |
|||||||
|
select |
||||||
|
ps_partkey, |
||||||
|
sum(ps_supplycost * ps_availqty) as value |
||||||
|
from |
||||||
|
tpch.partsupp, |
||||||
|
tpch.supplier, |
||||||
|
tpch.nation |
||||||
|
where |
||||||
|
ps_suppkey = s_suppkey |
||||||
|
and s_nationkey = n_nationkey |
||||||
|
and n_name = ':1' |
||||||
|
group by |
||||||
|
ps_partkey having |
||||||
|
sum(ps_supplycost * ps_availqty) > ( |
||||||
|
select |
||||||
|
sum(ps_supplycost * ps_availqty) * :2 |
||||||
|
from |
||||||
|
tpch.partsupp, |
||||||
|
tpch.supplier, |
||||||
|
tpch.nation |
||||||
|
where |
||||||
|
ps_suppkey = s_suppkey |
||||||
|
and s_nationkey = n_nationkey |
||||||
|
and n_name = ':1' |
||||||
|
) |
||||||
|
order by |
||||||
|
value desc; |
@ -0,0 +1,28 @@ |
|||||||
|
select |
||||||
|
l_shipmode, |
||||||
|
sum(case |
||||||
|
when o_orderpriority = '1-URGENT' |
||||||
|
or o_orderpriority = '2-HIGH' |
||||||
|
then 1 |
||||||
|
else 0 |
||||||
|
end) as high_line_count, |
||||||
|
sum(case |
||||||
|
when o_orderpriority <> '1-URGENT' |
||||||
|
and o_orderpriority <> '2-HIGH' |
||||||
|
then 1 |
||||||
|
else 0 |
||||||
|
end) as low_line_count |
||||||
|
from |
||||||
|
tpch.orders, |
||||||
|
tpch.lineitem |
||||||
|
where |
||||||
|
o_orderkey = l_orderkey |
||||||
|
and l_shipmode in (':1', ':2') |
||||||
|
and l_commitdate < l_receiptdate |
||||||
|
and l_shipdate < l_commitdate |
||||||
|
and l_receiptdate >= ':3'::timestamp |
||||||
|
and l_receiptdate < ':3'::timestamp + '1 year'::interval |
||||||
|
group by |
||||||
|
l_shipmode |
||||||
|
order by |
||||||
|
l_shipmode; |
@ -0,0 +1,20 @@ |
|||||||
|
select |
||||||
|
c_count, |
||||||
|
count(*) as custdist |
||||||
|
from |
||||||
|
( |
||||||
|
select |
||||||
|
c_custkey, |
||||||
|
count(o_orderkey) |
||||||
|
from |
||||||
|
tpch.customer left outer join tpch.orders on |
||||||
|
c_custkey = o_custkey |
||||||
|
and o_comment not like '%:1%:2%' |
||||||
|
group by |
||||||
|
c_custkey |
||||||
|
) as c_orders (c_custkey, c_count) |
||||||
|
group by |
||||||
|
c_count |
||||||
|
order by |
||||||
|
custdist desc, |
||||||
|
c_count desc; |
@ -0,0 +1,13 @@ |
|||||||
|
select |
||||||
|
100.00 * sum(case |
||||||
|
when p_type like 'PROMO%' |
||||||
|
then l_extendedprice * (1 - l_discount) |
||||||
|
else 0 |
||||||
|
end) / sum(l_extendedprice * (1 - l_discount)) as promo_revenue |
||||||
|
from |
||||||
|
tpch.lineitem, |
||||||
|
tpch.part |
||||||
|
where |
||||||
|
l_partkey = p_partkey |
||||||
|
and l_shipdate >= ':1'::timestamp |
||||||
|
and l_shipdate < ':1'::timestamp + '1 month'::interval; |
@ -0,0 +1,11 @@ |
|||||||
|
create view tpch.revenue:s as |
||||||
|
select |
||||||
|
l_suppkey as supplier_no, |
||||||
|
sum(l_extendedprice * (1 - l_discount)) as total_revenue |
||||||
|
from |
||||||
|
tpch.lineitem |
||||||
|
where |
||||||
|
l_shipdate >= ':1'::timestamp |
||||||
|
and l_shipdate < ':1'::timestamp + '3 month'::interval |
||||||
|
group by |
||||||
|
l_suppkey; |
@ -0,0 +1,30 @@ |
|||||||
|
select |
||||||
|
p_brand, |
||||||
|
p_type, |
||||||
|
p_size, |
||||||
|
count(distinct ps_suppkey) as supplier_cnt |
||||||
|
from |
||||||
|
tpch.partsupp, |
||||||
|
tpch.part |
||||||
|
where |
||||||
|
p_partkey = ps_partkey |
||||||
|
and p_brand <> ':1' |
||||||
|
and p_type not like ':2%' |
||||||
|
and p_size in (:3, :4, :5, :6, :7, :8, :9, :10) |
||||||
|
and ps_suppkey not in ( |
||||||
|
select |
||||||
|
s_suppkey |
||||||
|
from |
||||||
|
tpch.supplier |
||||||
|
where |
||||||
|
s_comment like '%Customer%Complaints%' |
||||||
|
) |
||||||
|
group by |
||||||
|
p_brand, |
||||||
|
p_type, |
||||||
|
p_size |
||||||
|
order by |
||||||
|
supplier_cnt desc, |
||||||
|
p_brand, |
||||||
|
p_type, |
||||||
|
p_size; |
@ -0,0 +1,17 @@ |
|||||||
|
select |
||||||
|
sum(l_extendedprice) / 7.0 as avg_yearly |
||||||
|
from |
||||||
|
tpch.lineitem, |
||||||
|
tpch.part |
||||||
|
where |
||||||
|
p_partkey = l_partkey |
||||||
|
and p_brand = ':1' |
||||||
|
and p_container = ':2' |
||||||
|
and l_quantity < ( |
||||||
|
select |
||||||
|
0.2 * avg(l_quantity) |
||||||
|
from |
||||||
|
tpch.lineitem |
||||||
|
where |
||||||
|
l_partkey = p_partkey |
||||||
|
); |
@ -0,0 +1,32 @@ |
|||||||
|
select |
||||||
|
c_name, |
||||||
|
c_custkey, |
||||||
|
o_orderkey, |
||||||
|
o_orderdate, |
||||||
|
o_totalprice, |
||||||
|
sum(l_quantity) |
||||||
|
from |
||||||
|
tpch.customer, |
||||||
|
tpch.orders, |
||||||
|
tpch.lineitem |
||||||
|
where |
||||||
|
o_orderkey in ( |
||||||
|
select |
||||||
|
l_orderkey |
||||||
|
from |
||||||
|
tpch.lineitem |
||||||
|
group by |
||||||
|
l_orderkey having |
||||||
|
sum(l_quantity) > :1 |
||||||
|
) |
||||||
|
and c_custkey = o_custkey |
||||||
|
and o_orderkey = l_orderkey |
||||||
|
group by |
||||||
|
c_name, |
||||||
|
c_custkey, |
||||||
|
o_orderkey, |
||||||
|
o_orderdate, |
||||||
|
o_totalprice |
||||||
|
order by |
||||||
|
o_totalprice desc, |
||||||
|
o_orderdate; |
@ -0,0 +1,35 @@ |
|||||||
|
select |
||||||
|
sum(l_extendedprice* (1 - l_discount)) as revenue |
||||||
|
from |
||||||
|
tpch.lineitem, |
||||||
|
tpch.part |
||||||
|
where |
||||||
|
( |
||||||
|
p_partkey = l_partkey |
||||||
|
and p_brand = ':1' |
||||||
|
and p_container in ('SM CASE', 'SM BOX', 'SM PACK', 'SM PKG') |
||||||
|
and l_quantity >= :4 and l_quantity <= :4 + 10 |
||||||
|
and p_size between 1 and 5 |
||||||
|
and l_shipmode in ('AIR', 'AIR REG') |
||||||
|
and l_shipinstruct = 'DELIVER IN PERSON' |
||||||
|
) |
||||||
|
or |
||||||
|
( |
||||||
|
p_partkey = l_partkey |
||||||
|
and p_brand = ':2' |
||||||
|
and p_container in ('MED BAG', 'MED BOX', 'MED PKG', 'MED PACK') |
||||||
|
and l_quantity >= :5 and l_quantity <= :5 + 10 |
||||||
|
and p_size between 1 and 10 |
||||||
|
and l_shipmode in ('AIR', 'AIR REG') |
||||||
|
and l_shipinstruct = 'DELIVER IN PERSON' |
||||||
|
) |
||||||
|
or |
||||||
|
( |
||||||
|
p_partkey = l_partkey |
||||||
|
and p_brand = ':3' |
||||||
|
and p_container in ('LG CASE', 'LG BOX', 'LG PACK', 'LG PKG') |
||||||
|
and l_quantity >= :6 and l_quantity <= :6 + 10 |
||||||
|
and p_size between 1 and 15 |
||||||
|
and l_shipmode in ('AIR', 'AIR REG') |
||||||
|
and l_shipinstruct = 'DELIVER IN PERSON' |
||||||
|
); |
@ -0,0 +1,43 @@ |
|||||||
|
select |
||||||
|
s_acctbal, |
||||||
|
s_name, |
||||||
|
n_name, |
||||||
|
p_partkey, |
||||||
|
p_mfgr, |
||||||
|
s_address, |
||||||
|
s_phone, |
||||||
|
s_comment |
||||||
|
from |
||||||
|
tpch.part, |
||||||
|
tpch.supplier, |
||||||
|
tpch.partsupp, |
||||||
|
tpch.nation, |
||||||
|
tpch.region |
||||||
|
where |
||||||
|
p_partkey = ps_partkey |
||||||
|
and s_suppkey = ps_suppkey |
||||||
|
and p_size = :1 |
||||||
|
and p_type like '%:2' |
||||||
|
and s_nationkey = n_nationkey |
||||||
|
and n_regionkey = r_regionkey |
||||||
|
and r_name = ':3' |
||||||
|
and ps_supplycost = ( |
||||||
|
select |
||||||
|
min(ps_supplycost) |
||||||
|
from |
||||||
|
tpch.partsupp, |
||||||
|
tpch.supplier, |
||||||
|
tpch.nation, |
||||||
|
tpch.region |
||||||
|
where |
||||||
|
p_partkey = ps_partkey |
||||||
|
and s_suppkey = ps_suppkey |
||||||
|
and s_nationkey = n_nationkey |
||||||
|
and n_regionkey = r_regionkey |
||||||
|
and r_name = ':3' |
||||||
|
) |
||||||
|
order by |
||||||
|
s_acctbal desc, |
||||||
|
n_name, |
||||||
|
s_name, |
||||||
|
p_partkey; |
@ -0,0 +1,37 @@ |
|||||||
|
select |
||||||
|
s_name, |
||||||
|
s_address |
||||||
|
from |
||||||
|
tpch.supplier, |
||||||
|
tpch.nation |
||||||
|
where |
||||||
|
s_suppkey in ( |
||||||
|
select |
||||||
|
ps_suppkey |
||||||
|
from |
||||||
|
tpch.partsupp |
||||||
|
where |
||||||
|
ps_partkey in ( |
||||||
|
select |
||||||
|
p_partkey |
||||||
|
from |
||||||
|
tpch.part |
||||||
|
where |
||||||
|
p_name like ':1%' |
||||||
|
) |
||||||
|
and ps_availqty > ( |
||||||
|
select |
||||||
|
0.5 * sum(l_quantity) |
||||||
|
from |
||||||
|
tpch.lineitem |
||||||
|
where |
||||||
|
l_partkey = ps_partkey |
||||||
|
and l_suppkey = ps_suppkey |
||||||
|
and l_shipdate >= ':2'::timestamp |
||||||
|
and l_shipdate < ':2'::timestamp + '1 year'::interval |
||||||
|
) |
||||||
|
) |
||||||
|
and s_nationkey = n_nationkey |
||||||
|
and n_name = ':3' |
||||||
|
order by |
||||||
|
s_name; |
@ -0,0 +1,46 @@ |
|||||||
|
--begin q21 |
||||||
|
-- $ID$ |
||||||
|
-- TPC-H/TPC-R Suppliers Who Kept Orders Waiting Query (Q21) |
||||||
|
-- Functional Query Definition |
||||||
|
-- Approved February 1998 |
||||||
|
:x |
||||||
|
:o |
||||||
|
select |
||||||
|
s_name, |
||||||
|
count(*) as numwait |
||||||
|
from |
||||||
|
tpch.supplier, |
||||||
|
tpch.lineitem l1, |
||||||
|
tpch.orders, |
||||||
|
tpch.nation |
||||||
|
where |
||||||
|
s_suppkey = l1.l_suppkey |
||||||
|
and o_orderkey = l1.l_orderkey |
||||||
|
and o_orderstatus = 'F' |
||||||
|
and l1.l_receiptdate > l1.l_commitdate |
||||||
|
and exists ( |
||||||
|
select |
||||||
|
* |
||||||
|
from |
||||||
|
tpch.lineitem l2 |
||||||
|
where |
||||||
|
l2.l_orderkey = l1.l_orderkey |
||||||
|
and l2.l_suppkey <> l1.l_suppkey |
||||||
|
) |
||||||
|
and not exists ( |
||||||
|
select |
||||||
|
* |
||||||
|
from |
||||||
|
tpch.lineitem l3 |
||||||
|
where |
||||||
|
l3.l_orderkey = l1.l_orderkey |
||||||
|
and l3.l_suppkey <> l1.l_suppkey |
||||||
|
and l3.l_receiptdate > l3.l_commitdate |
||||||
|
) |
||||||
|
and s_nationkey = n_nationkey |
||||||
|
and n_name = ':1' |
||||||
|
group by |
||||||
|
s_name |
||||||
|
order by |
||||||
|
numwait desc, |
||||||
|
s_name; |
@ -0,0 +1,35 @@ |
|||||||
|
select |
||||||
|
cntrycode, |
||||||
|
count(*) as numcust, |
||||||
|
sum(c_acctbal) as totacctbal |
||||||
|
from |
||||||
|
( |
||||||
|
select |
||||||
|
substring(c_phone from 1 for 2) as cntrycode, |
||||||
|
c_acctbal |
||||||
|
from |
||||||
|
tpch.customer |
||||||
|
where |
||||||
|
substring(c_phone from 1 for 2) in |
||||||
|
(':1', ':2', ':3', ':4', ':5', ':6', ':7') |
||||||
|
and c_acctbal > ( |
||||||
|
select |
||||||
|
avg(c_acctbal) |
||||||
|
from |
||||||
|
tpch.customer |
||||||
|
where |
||||||
|
c_acctbal > 0.00 |
||||||
|
and substring(c_phone from 1 for 2) in |
||||||
|
(':1', ':2', ':3', ':4', ':5', ':6', ':7') |
||||||
|
) |
||||||
|
and c_custkey not in ( |
||||||
|
select |
||||||
|
o_custkey |
||||||
|
from |
||||||
|
tpch.orders |
||||||
|
) |
||||||
|
) as custsale |
||||||
|
group by |
||||||
|
cntrycode |
||||||
|
order by |
||||||
|
cntrycode; |
@ -0,0 +1,22 @@ |
|||||||
|
select |
||||||
|
l_orderkey, |
||||||
|
sum(l_extendedprice * (1 - l_discount)) as revenue, |
||||||
|
o_orderdate, |
||||||
|
o_shippriority |
||||||
|
from |
||||||
|
tpch.customer, |
||||||
|
tpch.orders, |
||||||
|
tpch.lineitem |
||||||
|
where |
||||||
|
c_mktsegment = ':1' |
||||||
|
and c_custkey = o_custkey |
||||||
|
and l_orderkey = o_orderkey |
||||||
|
and o_orderdate < ':2'::timestamp |
||||||
|
and l_shipdate > ':2'::timestamp |
||||||
|
group by |
||||||
|
l_orderkey, |
||||||
|
o_orderdate, |
||||||
|
o_shippriority |
||||||
|
order by |
||||||
|
revenue desc, |
||||||
|
o_orderdate; |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue