Это старая версия документа.


dbscr.motohr.init1:

  - if not has_domain(, JROBO_MOTOHR)
 
  - do CREATE DOMAIN JROBO_MOTOHR AS INTEGER
 
  # TABLES
  - |
    do CREATE TABLE MH_COUNTER_TYPE (
        ID       INTEGER GENERATED BY DEFAULT AS IDENTITY CONSTRAINT MH_PK_COUNTERTYPE PRIMARY KEY,
        NAME     VARCHAR(64) NOT NULL CONSTRAINT MH_UQ_COUNTERTYPE_NAME UNIQUE,
        DESCR    VARCHAR(128),
        TIMER    SMALLINT DEFAULT 0,
        DELETED  SMALLINT DEFAULT 0
      )

  - |
    do CREATE TABLE MH_MACH (
        ID          INTEGER GENERATED BY DEFAULT AS IDENTITY CONSTRAINT MH_PK_MACH PRIMARY KEY,
        NAME        VARCHAR(128) NOT NULL CONSTRAINT MH_UQ_MACH_NAME UNIQUE,
        TAGNAME     VARCHAR(128),
        DESCR       VARCHAR(128)
      )

  - |
    do CREATE TABLE MH_COUNTER (
        ID              INTEGER GENERATED BY DEFAULT AS IDENTITY CONSTRAINT MH_PK_COUNTER PRIMARY KEY,
        MACH_ID         INTEGER CONSTRAINT MH_FK_COUNTER_MACH REFERENCES MH_MACH ON DELETE CASCADE ON UPDATE CASCADE,
        COUNTER_TYPE_ID INTEGER CONSTRAINT MH_FK_COUNTER_TYPE REFERENCES MH_COUNTER_TYPE ON DELETE CASCADE ON UPDATE CASCADE,
        SEC             INTEGER,
        DELETED         SMALLINT DEFAULT 0
      )

  - |
    do CREATE TABLE MH_MACH_STATE (
        MACH_ID     INTEGER CONSTRAINT MH_FK_MACHSTATE_MACH REFERENCES MH_MACH ON DELETE CASCADE ON UPDATE CASCADE,
        DT          TIMESTAMP,
        RUNNING     SMALLINT,
        STATCNT     INTEGER,
        STATSEC     INTEGER
      )

  - |
    do CREATE TABLE MH_STAT (
        ID          INTEGER GENERATED BY DEFAULT AS IDENTITY CONSTRAINT MH_PK_STAT PRIMARY KEY,
        MACH_ID     INTEGER CONSTRAINT MH_FK_STAT_MACH REFERENCES MH_MACH ON DELETE CASCADE ON UPDATE CASCADE,
        PERIOD      INTEGER,
        CNT         INTEGER,
        SEC         INTEGER
      )

  - |
    do CREATE TABLE MH_INTERVAL (
        ID          INTEGER GENERATED BY DEFAULT AS IDENTITY CONSTRAINT MH_PK_INVERVAL PRIMARY KEY,
        MACH_ID     INTEGER CONSTRAINT MH_FK_INTERVAL_MACH REFERENCES MH_MACH ON DELETE CASCADE ON UPDATE CASCADE,
        DTBEG       TIMESTAMP,
        DTEND       TIMESTAMP,
        SEC         INTEGER
      )
 

  # INDEXES
  - do CREATE INDEX MH_IX_STAT_PERIOD ON MH_STAT (PERIOD)
  - do CREATE INDEX MH_IX_COUNTER_MACHTYPE ON MH_COUNTER (MACH_ID, COUNTER_TYPE_ID)
 
  # FUNCTIONS
  - |
    do CREATE FUNCTION MH_CNT_SEC (
      SEC INTEGER,
      DT TIMESTAMP,
      RUNNING SMALLINT,
      TIMER SMALLINT)
    RETURNS INTEGER
    AS
    BEGIN
      RETURN  CAST(SEC + IIF(TIMER = 0, 1, -1) * IIF(RUNNING = 0, 0, (CURRENT_TIMESTAMP - DT) * 86400) AS INTEGER);
    END

  # VIEWS
  - |
    do CREATE VIEW MH_COUNTER_CALC
    AS
    SELECT
      M.ID MACH_ID,
      C.ID COUNTER_ID,
      CT.ID COUNTER_TYPE_ID,
      M.NAME MACH_NAME,
      M.DESCR MACH_DESCR,
      MS.RUNNING RUNNING,
      CT.NAME COUNTER_NAME,
      CT.DESCR COUNTER_DESCR,
      CT.TIMER TIMER,
      MH_CNT_SEC(C.SEC, MS.DT, MS.RUNNING, CT.TIMER) SEC
    FROM MH_COUNTER C
    JOIN MH_COUNTER_TYPE CT ON CT.ID = C.COUNTER_TYPE_ID
    JOIN MH_MACH M ON M.ID = C.MACH_ID
    JOIN MH_MACH_STATE MS ON MS.MACH_ID = M.ID
    WHERE
      C.DELETED=0
    --
    -- Usage example (clause PLAN is optional and used for better perfomance):
    --
    -- select * from mh_pivot p
    -- where counter_name = 'total' and mach_name = 'M1001'
    -- plan join ( 
    --   p m index (mh_uq_mach_name),
    --   p ct index(mh_uq_countertype_name),
    --   p c index(mh_ix_counter_machtype), 
    --   p ms index (mh_fk_machstate_mach))
doc/jroboplc/modules/motohr_dbscr.1740407748.txt.gz · Последние изменения: 2025/02/24 17:35 — denis
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0