| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396 |
- /*
- * The contents of this file are subject to the Interbase Public
- * License Version 1.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy
- * of the License at http://www.Inprise.com/IPL.html
- *
- * Software distributed under the License is distributed on an
- * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express
- * or implied. See the License for the specific language governing
- * rights and limitations under the License.
- *
- * The Original Code was created by Inprise Corporation
- * and its predecessors. Portions created by Inprise Corporation are
- * Copyright (C) Inprise Corporation.
- *
- * All Rights Reserved.
- * Contributor(s): ______________________________________.
- */
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- //#include "../jrd/common.h"
- #include "ibase.h"
- /* typedef char TEXT; */
- #define FINI_OK 0
- #define FINI_ERROR 44
- /*
- ** Intlbld.e International version of Empbuild.e. Default database
- ** name was changed to 'intlemp.fdb'. Two of the files
- ** executed as ISQL input files were modified: intlddl.sql
- ** and intldml.sql are used by this program.
- **
- ** GPRE with manual switch, since it creates the database
- ** This program then calls isql with various input files
- ** It installs the blobs and arrays.
- ** Usage: empbuild <db name>
- */
- static int addlang (void);
- static int addjob (void);
- static int addproj (void);
- static int addqtr (void);
- static TEXT Db_name[128];
- static FILE *Fp;
- EXEC SQL SET SQL DIALECT 3;
- EXEC SQL INCLUDE SQLCA;
- EXEC SQL SET DATABASE DB = COMPILETIME "intlbuild.fdb" RUNTIME :Db_name;
- int main (
- int argc,
- char *argv[])
- {
- /**************************************
- *
- * m a i n
- *
- **************************************
- *
- * Functional description
- *
- **************************************/
- TEXT cmd [140];
- if (argc > 1)
- strcpy (Db_name, argv[1]);
- else
- strcpy (Db_name, "intlemp.fdb");
- /* Create the database */
- printf ("creating database %s\n", Db_name);
- sprintf (cmd, "CREATE DATABASE \"%s\" DEFAULT CHARACTER SET ISO8859_1", Db_name);
- gds__trans = 0;
- EXEC SQL EXECUTE IMMEDIATE :cmd;
- if (SQLCODE)
- {
- isc_print_status (gds__status);
- exit (FINI_ERROR);
- }
- gds__trans = 0;
- EXEC SQL DISCONNECT ALL;
- if (SQLCODE)
- {
- isc_print_status (gds__status);
- exit (FINI_ERROR);
- }
- /* ddl and dml file names are different for international */
- printf ("Creating tables\n");
- sprintf (cmd, "isql %s -q -i intlddl.sql", Db_name);
- if (system (cmd))
- {
- printf ("Couldn't create tables \n");
- exit (FINI_ERROR);
- }
- printf ("Turning off indices and triggers \n");
- sprintf (cmd, "isql %s -i indexoff.sql", Db_name);
- system (cmd);
- printf ("Loading column data\n");
- sprintf (cmd, "isql %s -ch ISO8859_1 -i intldml.sql", Db_name);
- system (cmd);
- printf ("Turning on indices and triggers \n");
- sprintf (cmd, "isql %s -i indexon.sql", Db_name);
- system (cmd);
- EXEC SQL CONNECT DB;
- if (SQLCODE)
- {
- isc_print_status (gds__status);
- exit (FINI_ERROR);
- }
- EXEC SQL SET TRANSACTION;
- printf ("Loading Language blobs\n");
- addlang();
- printf ("Loading Job blobs\n");
- addjob();
- printf ("Loading project blobs \n");
- addproj();
- printf ("Loading quarter arrays \n");
- addqtr();
- exit (FINI_OK);
- }
- static int addlang (void)
- {
- /**************************************
- *
- * a d d l a n g
- *
- **************************************
- *
- * Functional description
- * Add language array to 'job' table.
- *
- **************************************/
- TEXT job_code[6], job_country[16];
- TEXT line[81];
- TEXT lang_array[5][16];
- int i, job_grade, rec_cnt = 0;
- EXEC SQL SET TRANSACTION;
- EXEC SQL WHENEVER SQLERROR GO TO Error;
- Fp = fopen ("lang.inp", "r");
- while (fgets (line, 100, Fp) != NULL)
- {
- sscanf (line, "%s %d %s", job_code, &job_grade, job_country);
- for (i = 0; i < 5; i++)
- {
- if (fgets (line, 100, Fp) == NULL)
- break;
- strcpy (lang_array [i], line);
- }
-
- EXEC SQL
- UPDATE job
- SET language_req = :lang_array
- WHERE job_code = :job_code AND
- job_grade = :job_grade AND
- job_country = :job_country;
- if (SQLCODE == 0)
- rec_cnt++;
- else
- {
- printf ("Input error -- no job record with key: %s %d %s\n",
- job_code, job_grade, job_country);
- }
- }
- EXEC SQL COMMIT;
- printf ("Added %d language arrays.\n", rec_cnt);
- fclose (Fp);
- return (0);
-
- Error:
- printf ("SQLCODE=%d\n", SQLCODE);
- isc_print_status (gds__status);
- return (1);
- }
- static int addjob (void)
- {
- /**************************************
- *
- * a d d j o b
- *
- **************************************
- *
- * Functional description
- * Add job description blobs.
- *
- **************************************/
- TEXT job_code[6];
- TEXT line[82], job_country[16];
- int len;
- ISC_QUAD job_blob;
- int job_grade, rec_cnt = 0;
- EXEC SQL SET TRANSACTION;
- EXEC SQL WHENEVER SQLERROR GO TO Error;
- EXEC SQL DECLARE be CURSOR FOR
- INSERT BLOB job_requirement INTO job;
- Fp = fopen ("job.inp", "r");
- while (fgets (line, 100, Fp) != NULL)
- {
- EXEC SQL OPEN be INTO :job_blob;
- sscanf (line, "%s %d %s", job_code, &job_grade, job_country);
- while (fgets (line, 100, Fp) != NULL)
- {
- if (*line == '\n')
- break;
- len = strlen (line);
- EXEC SQL INSERT CURSOR be VALUES (:line INDICATOR :len);
- }
- EXEC SQL CLOSE be;
- EXEC SQL
- UPDATE job
- SET job_requirement = :job_blob
- WHERE job_code = :job_code AND
- job_grade = :job_grade AND
- job_country = :job_country;
- if (SQLCODE == 0)
- rec_cnt++;
- else
- {
- printf ("Input error -- no job record with key: %s %d %s\n",
- job_code, job_grade, job_country);
- }
- }
- EXEC SQL COMMIT;
- printf ("Added %d job requirement descriptions.\n", rec_cnt);
- fclose (Fp);
- return (0);
-
- Error:
- printf ("SQLCODE=%d\n", SQLCODE);
- isc_print_status (gds__status);
- return (1);
- }
- static int addproj (void)
- {
- /**************************************
- *
- * a d d p r o j
- *
- **************************************
- *
- * Functional description
- * Add project description blobs.
- *
- **************************************/
- TEXT proj_id[6];
- TEXT line[82];
- int len;
- ISC_QUAD proj_blob;
- int rec_cnt = 0;
- EXEC SQL SET TRANSACTION;
- EXEC SQL WHENEVER SQLERROR GO TO Error;
- EXEC SQL DECLARE bd CURSOR FOR
- INSERT BLOB proj_desc INTO project;
- Fp = fopen ("proj.inp", "r");
- while (fgets (line, 100, Fp) != NULL)
- {
- EXEC SQL OPEN bd INTO :proj_blob;
- sscanf (line, "%s", proj_id);
- while (fgets (line, 100, Fp) != NULL)
- {
- if (*line == '\n')
- break;
- len = strlen (line);
- EXEC SQL INSERT CURSOR bd VALUES (:line INDICATOR :len);
- }
- EXEC SQL CLOSE bd;
- EXEC SQL
- UPDATE project
- SET proj_desc = :proj_blob
- WHERE proj_id = :proj_id;
- if (SQLCODE == 0)
- rec_cnt++;
- else
- {
- printf ("Input error -- no project record with key: %s\n", proj_id);
- }
- }
- EXEC SQL COMMIT;
- printf ("Added %d project descriptions.\n", rec_cnt);
- fclose (Fp);
- return (0);
-
- Error:
- printf ("SQLCODE=%d\n", SQLCODE);
- isc_print_status (gds__status);
- return (1);
- }
- static int addqtr (void)
- {
- /**************************************
- *
- * a d d q t r
- *
- **************************************
- *
- * Functional description
- * Add project quarterly head-count array to 'proj_dept_budget' table.
- *
- **************************************/
- TEXT proj_id[6], dept_no[4];
- int yr;
- TEXT line[81];
- int hcnt[4];
- int rec_cnt = 0;
- EXEC SQL SET TRANSACTION;
- EXEC SQL WHENEVER SQLERROR GO TO Error;
- Fp = fopen ("qtr.inp", "r");
- while (fgets (line, 100, Fp) != NULL)
- {
- sscanf (line, "%d %s %s %d %d %d %d", &yr, proj_id, dept_no,
- &hcnt[0], &hcnt[1], &hcnt[2], &hcnt[3]);
- EXEC SQL
- UPDATE proj_dept_budget
- SET quart_head_cnt = :hcnt
- WHERE fiscal_year = :yr AND proj_id = :proj_id AND dept_no = :dept_no;
- if (SQLCODE == 0)
- rec_cnt++;
- else
- {
- printf ("Input error -- no job record with key: %d %s %s\n",
- yr, proj_id, dept_no);
- }
- }
- EXEC SQL COMMIT RELEASE;
- printf ("Added %d quarter arrays.\n", rec_cnt);
- fclose (Fp);
- return (0);
-
- Error:
- printf ("SQLCODE=%d\n", SQLCODE);
- isc_print_status (gds__status);
- return (1);
- }
|