unit uoddface_archivos;

{$mode delphi}

interface

uses
  Classes, SysUtils, xmatdefs, ubtree, uoddface_table_nid;


(*

CREATE TABLE ofe_archivos (
    nid integer NOT NULL,
    fecha timestamp without time zone NOT NULL,
    nombre character varying(100) NOT NULL,
    nid_carpeta integer NOT NULL,
    datos bytea NOT NULL,
    checksum character varying(256) NOT NULL,
    nbloques integer DEFAULT 1
);

CREATE SEQUENCE ofe_archivos_nid_seq
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;
ALTER SEQUENCE ofe_archivos_nid_seq OWNED BY ofe_archivos.nid;

  *)

  type

    { TOddface_Archivo }

    TOddface_Archivo = class( TRec_Nid )
      fecha: TDateTime;
      nombre: string;
      nid_carpeta: integer;
      datos: TDAOfByte;
      checksum: shortstring;
      nbloques: integer;

      constructor Create(
        nid: integer;
        nid_carpeta: integer;
        datos: TDAOfByte;
        checksum: shortstring;
        nbloques: integer );
      destructor destroy; override;

      procedure WriteToBin( f: TStream );  override;
      constructor LoadFromBin( f: TStream ); override;

      procedure CopyRec(a: TRec_key); override;

    end;



    { TOddface_Archivos }

    TOddface_Archivos = class( TTable_nid )
      constructor Create;
      constructor LoadFromBin( f: TStream );
    end;

implementation

{ TOddface_Archivos }

constructor TOddface_Archivos.Create;
begin
  inherited Create( TOddface_Archivo );
end;

constructor TOddface_Archivos.LoadFromBin(f: TStream);
begin
  inherited LoadFromBin( f, TOddface_Archivo  );
end;


{ TOddface_Archivo }

constructor TOddface_Archivo.Create(nid: integer; nid_carpeta: integer;
  datos: TDAOfByte; checksum: shortstring; nbloques: integer);
begin
  inherited Create( nid );

  self.nid_carpeta := nid_carpeta;
  self.datos:= datos;
  self.checksum:= checksum;
  self.nbloques:= nbloques;

end;

destructor TOddface_Archivo.destroy;
begin
  setlength( datos, 0 );
  inherited destroy;
end;

procedure TOddface_Archivo.WriteToBin(f: TStream);
var
  NBytesOfDatos: integer;

begin
  inherited WriteToBin( f );
  f.Write( nid_carpeta, sizeOf( nid_carpeta ) );
  NBytesOfDatos:= length( datos );
  f.Write( NBytesOfDatos, sizeOf( NBytesOfDatos ) );
  if NBytesOfDatos > 0 then
   f.write( datos[0], NBytesOfDatos );
  f.Write( checksum, SizeOf( checksum ) );
  f.Write( nbloques, SizeOf( nbloques ) );
end;

constructor TOddface_Archivo.LoadFromBin(f: TStream);
var
  NBytesOfDatos: integer;
begin
  inherited LoadFromBin( f );
  f.read( nid_carpeta, sizeOf( nid_carpeta ) );
  NBytesOfDatos:= length( datos );
  f.read( NBytesOfDatos, sizeOf( NBytesOfDatos ) );
  setlength( datos, NBytesOfDatos );
  if NBytesOfDatos > 0 then
   f.read( datos[0], NBytesOfDatos );
  f.read( checksum, SizeOf( checksum ) );
  f.read( nbloques, SizeOf( nbloques ) );
end;

procedure TOddface_Archivo.CopyRec(a: TRec_key);
var
  a_: TOddface_Archivo;
begin
  a_:= a as TOddface_Archivo;
  inherited CopyRec(a_);
  fecha:= a_.fecha;
  nombre:= a_.nombre;
  nid_carpeta:= a_.nid_carpeta;
  datos:= a_.datos;
  checksum:= a_.checksum;
  nbloques:= a_.nbloques;
end;

end.

