gbak fails to restore database containing dependency between views and packaged functions -----------------------------------------------------------------------------------------
Key: CORE-4470 URL: http://tracker.firebirdsql.org/browse/CORE-4470 Project: Firebird Core Issue Type: Bug Components: GBAK Affects Versions: 3.0 Alpha 2 Reporter: Frank Schlottmann-Goedde The following isql script creates a database that can't be restored by gbak: SET SQL DIALECT 3; /* CREATE DATABASE 'localhost:C:\Users\fsg\src\weather\weather.fdb' PAGE_SIZE 16384 DEFAULT CHARACTER SET ISO8859_1; */ /* Domain definitions */ CREATE DOMAIN DBIGINT AS BIGINT; CREATE DOMAIN DBLOB AS BLOB SUB_TYPE 0 SEGMENT SIZE 80; CREATE DOMAIN DID AS BIGINT NOT NULL; CREATE DOMAIN DINTEGER AS INTEGER; CREATE DOMAIN DN31 AS NUMERIC(3, 1); CREATE DOMAIN DN41 AS NUMERIC(4, 1); CREATE DOMAIN DN51 AS NUMERIC(5, 1); CREATE DOMAIN DREAL AS DOUBLE PRECISION; CREATE DOMAIN DSMALLINT AS SMALLINT; CREATE DOMAIN DTIME AS TIMESTAMP; CREATE DOMAIN DVC255 AS VARCHAR(255); CREATE DOMAIN DVC512 AS VARCHAR(512); SET AUTODDL OFF; SET TERM ^ ; /* Package headers */ /* Package header: WF, Owner: SYSDBA */ CREATE PACKAGE WF AS begin function CEST (T dtime) returns dtime; function CET (T dtime) returns dtime; function LOCALTIME (T dtime) returns dtime; function DEWPOINT (TEMP dreal, HUM dsmallint) returns dreal; function YESTERDAY returns dtime; function altitude returns dreal; function CURRENT_XML returns dvc512; function relpressure(AirPressureAbsolute dreal,Temperature dreal,Altitude dreal, Humidity dreal) returns dreal; end^ SET TERM ; ^ COMMIT WORK; SET AUTODDL ON; /* Table: CONSTANTS, Owner: SYSDBA */ CREATE TABLE CONSTANTS (ID DID GENERATED BY DEFAULT AS IDENTITY NOT NULL, TYP DVC255, VAL DVC255, KEYS DBIGINT, PRIMARY KEY (ID)); /* Table: RAW, Owner: SYSDBA */ CREATE TABLE RAW (ID DID GENERATED BY DEFAULT AS IDENTITY NOT NULL, READTIME DTIME NOT NULL, DELAY DSMALLINT, HUM_IN DSMALLINT, TEMP_IN DREAL, HUM_OUT DSMALLINT, TEMP_OUT DREAL, ABS_PRESSURE DREAL, WIND_AVE DREAL, WIND_GUST DREAL, WIND_DIR DSMALLINT, RAIN DREAL, STATUS DSMALLINT, ILLUMINANCE DREAL, UV DSMALLINT, PRIMARY KEY (ID), CONSTRAINT UNQ1_RAW UNIQUE (READTIME)); /* Table: TIMEZONE, Owner: SYSDBA */ CREATE TABLE TIMEZONE (JAHR DSMALLINT NOT NULL, GMT_FROM DTIME, GMT_THRU DTIME, CONSTRAINT PK_TIMEZONE PRIMARY KEY (JAHR)); /* Index definitions for all user tables */ CREATE INDEX RAW_IDX1 ON RAW (HUM_IN); CREATE DESCENDING INDEX RAW_IDX10 ON RAW (ABS_PRESSURE); CREATE DESCENDING INDEX RAW_IDX11 ON RAW (READTIME); CREATE DESCENDING INDEX RAW_IDX12 ON RAW (RAIN); CREATE INDEX RAW_IDX2 ON RAW (TEMP_IN); CREATE INDEX RAW_IDX3 ON RAW (HUM_OUT); CREATE INDEX RAW_IDX4 ON RAW (TEMP_OUT); CREATE INDEX RAW_IDX5 ON RAW (ABS_PRESSURE); CREATE INDEX RAW_IDX6 ON RAW (WIND_AVE); CREATE INDEX RAW_IDX7 ON RAW (WIND_GUST); CREATE INDEX RAW_IDX8 ON RAW (WIND_DIR); CREATE INDEX RAW_IDX9 ON RAW (RAIN); /* View: METEO, Owner: SYSDBA */ CREATE VIEW METEO (TIMESTAMP_UTC, TIMESTAMP_LOCAL, TEMPINT, HUMINT, TEMP, HUM, WIND, WIND_DIR, WIND_GUST, WIND_GUST_DIR, DEW_POINT, RAIN, RAIN_RATE, PRESSURE, UV_INDEX, SOLAR_RAD) AS select READTIME, WF.LOCALTIME(READTIME), TEMP_IN, HUM_IN, TEMP_OUT, HUM_OUT, WIND_AVE / 3.6 , 22.5 * WIND_DIR, WIND_GUST / 3.6 , 22.5 * WIND_DIR, WF.DEWPOINT(TEMP_OUT, HUM_OUT), CAST(RAIN - lead(RAIN) over(order by READTIME desc) as numeric (6,3)) , 0, 2.8+WF.RELPRESSURE(ABS_PRESSURE, TEMP_OUT, WF.ALTITUDE(), HUM_OUT), 0, 0 from RAW; SET AUTODDL OFF; SET TERM ^ ; /* Package bodies */ /* Package body: WF, Owner: SYSDBA */ CREATE PACKAGE BODY WF AS begin function CEST (T dtime)returns dtime AS begin return dateadd (2 hour to t); end function CET (T dtime)returns dtime AS begin return dateadd (1 hour to t); end function altitude returns dreal as begin return (select c.val from constants c where c.typ='Altitude'); end function LOCALTIME (T dtime)returns dtime AS declare variable jahr dsmallint; declare variable gmt_from dtime; declare variable gmt_thru dtime; begin select TZ.GMT_FROM, TZ.GMT_THRU from TIMEZONE TZ where TZ.jahr=extract(year from :T) into :GMT_FROM, :GMT_THRU; if (T between :GMt_FROM and :GMT_THRU) then begin return dateadd (2 hour to t); end else return dateadd (1 hour to t); end function RELPRESSURE (AIRPRESSUREABSOLUTE DREAL, TEMPERATURE DREAL, ALTITUDE DREAL, HUMIDITY DREAL) returns DREAL as declare variable G_N DREAL; declare variable GAM DREAL; declare variable R DREAL; declare variable M DREAL; declare variable R_0 DREAL; declare variable T_0 DREAL; declare variable C DREAL; declare variable E_0 DREAL; declare variable F_REL DREAL; declare variable E_D DREAL; begin G_N = 9.80665;-- Erdbeschleunigung (m/s^2) GAM = 0.0065;--Temperaturabnahme in K pro geopotentiellen Metern (K/gpm) R = 287.06;--Gaskonstante für trockene Luft (R = R_0 / M) M = 0.0289644;--Molare Masse trockener Luft (J/kgK) R_0 = 8.314472;--allgemeine Gaskonstante (J/molK) T_0 = 273.15;--Umrechnung von C in K C = 0.11;--DWD-Beiwert für die Berücksichtigung der Luftfeuchte E_0 = 6.11213;-- (hPa) F_REL = HUMIDITY / 100;--relative Luftfeuchte (0-1.0) E_D = F_REL * E_0 * EXP((17.5043 * TEMPERATURE) / (241.2 + TEMPERATURE));--momentaner Stationsdampfdruck (hPa) return AIRPRESSUREABSOLUTE * EXP((G_N * ALTITUDE) / (R * (TEMPERATURE + T_0 + C * E_D + ((GAM * ALTITUDE) / 2)))); end function YESTERDAY returns dtime AS begin return dateadd (-1 day to current_date); end function DEWPOINT (TEMP dreal, HUM dsmallint) returns dreal AS declare variable gamma dreal; declare variable a dreal; declare variable b dreal; begin if ((coalesce(temp,0)=0) or (coalesce(hum,0)=0)) then return 0; else begin return TEMP - ((100 - HUM) / 5.0); end end function CURRENT_XML returns dvc512 as declare variable timestamp_utc type of column meteo.timestamp_utc; declare variable timestamp_local type of column meteo.timestamp_local; declare variable tempint type of column meteo.tempint; declare variable humint type of column meteo.humint; declare variable temp type of column meteo.temp; declare variable hum type of column meteo.hum; declare variable wind type of column meteo.wind; declare variable wind_dir type of column meteo.wind_dir; declare variable wind_gust type of column meteo.wind_gust; declare variable wind_gust_dir type of column meteo.wind_gust_dir; declare variable dew_point type of column meteo.dew_point; declare variable rain type of column meteo.rain; declare variable rain_rate type of column meteo.rain_rate; declare variable pressure type of column meteo.pressure; declare variable uv_index type of column meteo.uv_index; declare variable solar_rad type of column meteo.solar_rad; begin select first 1 TIMESTAMP_UTC,TIMESTAMP_LOCAL, TEMPINT, HUMINT, TEMP, HUM, WIND, WIND_DIR, WIND_GUST, WIND_GUST_DIR, DEW_POINT, RAIN, RAIN_RATE, PRESSURE, UV_INDEX, SOLAR_RAD from METEO order by timestamp_UTC desc into :TIMESTAMP_UTC, :TIMESTAMP_LOCAL, :TEMPINT, :HUMINT, :TEMP, :HUM, :WIND, :WIND_DIR, :WIND_GUST, :WIND_GUST_DIR, :DEW_POINT, :RAIN, :RAIN_RATE, :PRESSURE, :UV_INDEX, :SOLAR_RAD; return '<current><thInt><temp>'|| tempint|| '</temp><humidity>'|| humint|| '</humidity></thInt><th1><temp>'|| temp|| '</temp><humidity>'|| hum|| '</humidity></th1><rain><rate>'|| rain_rate|| '</rate></rain><wind><avgSpeed>'|| wind|| '</avgSpeed><dirDeg>'|| wind_dir|| '</dirDeg><gustSpeed>'|| wind_gust|| '</gustSpeed></wind><barometer><pressure>'|| pressure|| '</pressure></barometer><time>'|| substring (timestamp_local from 1 for 19)|| '</time></current>'; end end^ SET TERM ; ^ COMMIT WORK; SET AUTODDL ON; -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://tracker.firebirdsql.org/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira ------------------------------------------------------------------------------ HPCC Systems Open Source Big Data Platform from LexisNexis Risk Solutions Find What Matters Most in Your Big Data with HPCC Systems Open Source. Fast. Scalable. Simple. Ideal for Dirty Data. Leverages Graph Analysis for Fast Processing & Easy Data Exploration http://p.sf.net/sfu/hpccsystems Firebird-Devel mailing list, web interface at https://lists.sourceforge.net/lists/listinfo/firebird-devel