adabas

package
v1.2.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 10, 2019 License: Apache-2.0 Imports: 21 Imported by: 1

Documentation

Overview

Package adabas contains Adabas specific Adabas buffer conversion and call functions. The Adabas file metadata will be read and requested field content is returned. The package provides three type of access to the database.

1. The local access using the Adabas client native library. This uses the classic inter process communication method and might use the Entire Network client method accessing databases using the Entire Network server node infrastructure.

2. The new Adabas TCP/IP communication for a direct point-to-point access to the database. This is support since Adabas version v6.7.

Database reference

The Adabas database is referenced using a Adabas database URL. Local databases can be referenced using the database id, the Adabas map or a remote reference with port 0. It is possible to reference remote databases with the host and port directly.

A local database reference: "24", "24","24(adatcp://host:0)".

A remote database reference: "24(adatcp://host:123)"

To use local IPC related Adabas access, please compile Adabas GO API with ADALNK library references. See documentation here: https://github.com/SoftwareAG/adabas-go-api

Example

Here a short example showing a database read accces using Adabas maps

connection, cerr := NewConnection("acj;map;config=[24,4]")
if cerr != nil {
	return cerr
}
defer connection.Close()
request, rerr := connection.CreateMapReadRequest("EMPLOYEES-NAT-DDM")
if rerr != nil {
	fmt.Println("Error create request", rerr)
	return rerr
}
err := request.QueryFields("NAME,FIRST-NAME,PERSONNEL-ID")
if !assert.NoError(b, err) {
	return err
}
request.Limit = 0
result, rErr := request.ReadLogicalBy("NAME")
result.DumpValues()

Read logic

You may read using search values and descriptor sorted searches. The received records can be analyzed using traversation logic. See documentation here: https://github.com/SoftwareAG/adabas-go-api/blob/master/doc/QUERY.md

Adabas maps

For long name and database name usage, a new Adabas map concept is introduced. The Adabas maps are stored inside the database. See documentation here: https://github.com/SoftwareAG/adabas-go-api/blob/master/doc/AdabasMap.md

Stream

It is possible to work with the records just-in-time they received in a stream. A callback function will be called to process the current received record.

Example using stream:

 func dumpStream(record *Record, x interface{}) error {
	i := x.(*uint32)
	a, _ := record.SearchValue("AE")
	fmt.Printf("Read %d -> %s = %d\n", record.Isn, a, record.Quantity)
	(*i)++
 	return nil
 }
 result, err := request.ReadLogicalWithStream("AE='SMITH'", dumpStream, &i)

Index

Examples

Constants

View Source
const (
	// AdaNormal Adabas success response code
	AdaNormal = 0
	// AdaEOF Adabas End of File reached (End of data received)
	AdaEOF = 3
	// AdaRbts Adabas record buffer too short
	AdaRbts = 53
	// AdaAnact Adabas offline
	AdaAnact = 148
	// AdaSysCe Adabas remote connection problem
	AdaSysCe = 149
)
View Source
const (
	AbdAQFb = ('F') /*      F-Format Buffer             */
	AbdAQRb = ('R') /*      R-Record Buffer             */
	AbdAQSb = ('S') /*      S-Search Buffer             */
	AbdAQVb = ('V') /*      V-Value Buffer              */
	AbdAQIb = ('I') /*      I-ISN Buffer                */
	AbdAQPb = ('P') /*      Performance Buffer          */
	AbdAQMb = ('M') /*      Multifetch  Buffer          */
	AbdAQUi = ('U') /*      U-User Info                 */
	AbdAQOb = ('O') /*      I/O Buffer (internal)       */
	AbdAQXb = ('X') /*      CLEX Info Buffer (internal) */
	AbdAQZb = ('Z') /*      Security Buffer (internal)  */
	AbdEQFb = 0xc6  /* EBCDIC F-Format Buffer           */
	AbdEQRb = 0xd9  /* EBCDIC R-Record Buffer           */
	AbdEQSb = 0xe2  /* EBCDIC S-Search Buffer           */
	AbdEQVb = 0xe5  /* EBCDIC V-Value Buffer            */
	AbdEQIb = 0xc9  /* EBCDIC I-ISN Buffer              */
	AbdEQPb = 0xd7  /* EBCDIC Performance Buffer        */
	AbdEQMb = 0xd4  /* EBCDIC Multifetch  Buffer        */
	AbdEQUi = 0xe4  /* EBCDIC User Info                 */
	AbdEQOb = 0xd6  /* EBCDIC I/O Buffer (internal)     */
	ABdEQXb = 0xe7  /* EBCDIC CLEX Info Buffer          */
	AbdEQZb = 0xe9  /* EBCDIC Security Buffer           */

)

const E_ABD_EYECATCHER = 0xc7 /* EBCDIC G - EYECATCHER */ const E_ABD_VERSION = 0xf2 /* EBCDIC 2 - VERSION */

View Source
const (

	// ConnectRequest connect
	ConnectRequest = BufferType(1)
	// ConnectReply reply after first connect
	ConnectReply = BufferType(2)
	// ConnectError connection errror
	ConnectError = BufferType(3)
	// DisconnectRequest disconnect request
	DisconnectRequest = BufferType(4)
	// DisconnetReply disconnect reply
	DisconnetReply = BufferType(5)
	// DisconnectError disconnect error
	DisconnectError = BufferType(6)
	// DataRequest data request
	DataRequest = BufferType(7)
	// DataReply data reply
	DataReply = BufferType(8)
	// DataError data error
	DataError = BufferType(9)
)
View Source
const AdaTCPConnectPayloadLength = 72

AdaTCPConnectPayloadLength ADATCP connect payload

View Source
const AdaTCPDataHeaderLength = 24

AdaTCPDataHeaderLength length of AdaTCPDataHeader structure

View Source
const AdaTCPHeaderLength = 40

AdaTCPHeaderLength length of AdaTCPHeader structure

View Source
const MaxDatabasesID = 65536

MaxDatabasesID maximum valid database id

Variables

View Source
var BuildDate string

BuildDate build date

View Source
var BuildVersion string

BuildVersion build version

Functions

func AddGlobalMapRepository added in v1.1.1

func AddGlobalMapRepository(i interface{}, fnr Fnr)

AddGlobalMapRepository add global map repository

func AddGlobalMapRepositoryReference added in v1.2.1

func AddGlobalMapRepositoryReference(reference string) error

AddGlobalMapRepositoryReference add global map repository

func AllGlobalMapNames added in v1.2.1

func AllGlobalMapNames(adabas *Adabas) (maps []string, err error)

AllGlobalMapNames search in map repositories global defined, all map names

func DelGlobalMapRepository added in v1.1.1

func DelGlobalMapRepository(i interface{}, fnr Fnr)

DelGlobalMapRepository delete global map repository

func DelGlobalMapRepositoryReference added in v1.2.1

func DelGlobalMapRepositoryReference(reference string) error

DelGlobalMapRepositoryReference delete global map repository

func DumpGlobalMapRepositories added in v1.1.1

func DumpGlobalMapRepositories()

DumpGlobalMapRepositories dump global map repositories

func Endian

func Endian() binary.ByteOrder

Endian current byte order of the client system

func ReflectSearch

func ReflectSearch(mapName string, t reflect.Type, connection *Connection, search string) ([]interface{}, error)

ReflectSearch search in map using a structure given

func ReflectStore

func ReflectStore(entries interface{}, connection *Connection, mapName string) error

ReflectStore use reflect map to store data

Types

type AID

type AID struct {
	Node      [8]byte
	User      [8]byte
	Pid       uint32
	Timestamp uint64
	// contains filtered or unexported fields
}

AID Adabas id

type Abd

type Abd struct {
	Abdlen  uint16  /* +00  ABD Length                  */
	Abdver  [2]byte /* +02  Version:                    */
	Abdid   byte    /* +04  Buffer ID:                  */
	Abdrsv1 byte    /* +05  Reserved - must be 0x00     */
	Abdloc  byte    /* +06  Buffer location flag:       */
	Abdrsv2 [9]byte /* +07  Reserved - must be 0x00     */
	Abdsize uint64  /* +10  Buffer Size                 */
	Abdsend uint64  /* +18  Len to send to database     */
	Abdrecv uint64  /* +20  Len received from database  */

	Abdaddr uint64 /* +28  8 byte aligned 64bit Ptr    */

}

Abd Adabas Buffer definition. Representation of ABD structure in the GO environment.

type Acbx

type Acbx struct {
	Acbxtyp  byte         /* +00  ADALNK function code        */
	Acbxrsv1 byte         /* +01  Reserved - must be 0x00     */
	Acbxver  [2]byte      /* +02  Version:                    */
	Acbxlen  uint16       /* +04  ACBX Length                 */
	Acbxcmd  [2]byte      /* +06  Command Code                */
	Acbxrsv2 uint16       /* +08  Reserved - must be 0x00     */
	Acbxrsp  uint16       /* +0A  Response code               */
	Acbxcid  [4]byte      /* +0C  Command ID                  */
	Acbxdbid Dbid         /* +10  Database ID                 */
	Acbxfnr  Fnr          /* +14  File number                 */
	Acbxisn  adatypes.Isn /* +18  ISN                         */
	Acbxisl  uint64       /* +20  ISN Lower Limit             */
	Acbxisq  uint64       /* +28  ISN Quantity                */
	Acbxcop  [8]byte      /* +30  Command option 1-8          */
	Acbxadd1 [8]byte      /* +38  Additions 1                 */
	Acbxadd2 [4]byte      /* +40  Additions 2                 */
	Acbxadd3 [8]byte      /* +44  Additions 3                 */
	Acbxadd4 [8]byte      /* +4C  Additions 4                 */
	Acbxadd5 [8]byte      /* +54  Additions 5 - (0x00)        */
	Acbxadd6 [8]byte      /* +5C  Additions 6                 */
	Acbxrsv3 [4]byte      /* +64  Reserved - must be 0x00     */
	Acbxerra uint64       /* +68  Error offset in buffer (64 bit)*/
	Acbxerrb [2]byte      /* +70  Error char field (FN)       */
	Acbxerrc uint16       /* +72  Error subcode               */
	Acbxerrd byte         /* +74  Error buffer ID             */
	Acbxerre byte         /* +75  Reserved for future use     */
	Acbxerrf uint16       /* +76  Error buffer seq num (per ID)*/
	Acbxsubr uint16       /* +78  Subcomp response code       */
	Acbxsubs uint16       /* +7A  Subcomp response subcode    */
	Acbxsubt [4]byte      /* +7C  Subcomp error text          */
	Acbxlcmp uint64       /* +80  Compressed record length    */
	/*      (negative of length if not  */
	/*      all of record read)         */
	Acbxldec uint64 /* +88  Decompressed length of all  */
	/*      returned data               */
	Acbxcmdt     uint64   /* +90  Command time                */
	Acbxuser     [16]byte /* +98  User field                  */
	Acbxsesstime uint64   /* +A8  Time, part of Adabas Session ID*/
	Acbxrsv4     [16]byte /* +B0  Reserved - must be 0x00     */
}

Acbx Adabas Control block extended version

func (*Acbx) String

func (acbx *Acbx) String() string

type AdaTCPConnectPayload

type AdaTCPConnectPayload struct {
	DatabaseVersion [16]byte
	DatabaseName    [16]byte
	Userid          [8]byte
	Nodeid          [8]byte
	ProcessID       uint32
	DatabaseID      uint32
	TimeStamp       uint64
	Endianness      byte
	Charset         byte
	Floatingpoint   byte
	Filler          [5]byte
}

AdaTCPConnectPayload Adabas TCP connect payload

type AdaTCPDataHeader

type AdaTCPDataHeader struct {
	Eyecatcher      [4]byte
	Version         [4]byte
	Length          uint32
	DataType        uint32
	NumberOfBuffers uint32
	ErrorCode       uint32
}

AdaTCPDataHeader Adabas TCP header

type AdaTCPHeader

type AdaTCPHeader struct {
	Eyecatcher     [6]byte
	Version        [2]byte
	Length         uint32
	BufferType     BufferType
	Identification adaUUID
	ErrorCode      uint32
	Reserved       uint32
}

AdaTCPHeader Adabas TCP Header ADATCP

func NewAdatcpHeader

func NewAdatcpHeader(bufferType BufferType) AdaTCPHeader

NewAdatcpHeader new Adabas TCP header

type Adabas

type Adabas struct {
	URL *URL
	ID  *ID

	Acbx          *Acbx
	AdabasBuffers []*Buffer
	// contains filtered or unexported fields
}

Adabas is an main Adabas structure containing all call specific parameters

Example (ReadFileDefinition9)
err := initLogWithFile("adabas.log")
if err != nil {
	fmt.Println(err)
	return
}

adabas, _ := NewAdabas(adabasModDBID)
adabas.ID.SetUser("fdt")

fmt.Println("Open database")
err = adabas.Open()
if err != nil || adabas.Acbx.Acbxrsp != 0 {
	fmt.Println("Error: ", err, " ", adabas.Acbx.Acbxrsp)
}
defer adabas.Close()
fmt.Println("Read file definition")
var definition *adatypes.Definition
definition, err = adabas.ReadFileDefinition(9)
if adabas.Acbx.Acbxrsp != 0 {
	fmt.Println("Resonse code : ", adabas.Acbx.Acbxrsp)
	return
}
if err != nil {
	fmt.Println("Error: ", err)
	return
}
definition.DumpTypes(false, false)
Output:

Open database
Read file definition
Dump all file field types:
  1, A0  ; A0  PE=false MU=false REMOVE=true
    2, AA, 8, A ,UQ DE NC NN ; AA  PE=false MU=false REMOVE=true
    2, AB  ; AB  PE=false MU=false REMOVE=true
      3, AC, 4, F ,DE ; AC  PE=false MU=false REMOVE=true
      3, AD, 8, B ,NU HF ; AD  PE=false MU=false REMOVE=true
      3, AE, 0, A ,NU NV NB ; AE  PE=false MU=false REMOVE=true
  1, B0  ; B0  PE=false MU=false REMOVE=true
    2, BA, 40, W ,NU ; BA  PE=false MU=false REMOVE=true
    2, BB, 40, W ,NU ; BB  PE=false MU=false REMOVE=true
    2, BC, 50, W ,NU DE ; BC  PE=false MU=false REMOVE=true
  1, CA, 1, A ,FI ; CA  PE=false MU=false REMOVE=true
  1, DA, 1, A ,FI ; DA  PE=false MU=false REMOVE=true
  1, EA, 4, P ,DE NC ; EA  PE=false MU=false REMOVE=true
  1, F0 ,PE ; F0  PE=true MU=true REMOVE=true PE=1-N
    2, FA, 60, W NU MU,MU; FA  PE=true MU=true REMOVE=true PE=1-N MU=1-N
      3, FA, 60, W ,NU MU ; FA  PE=true MU=true REMOVE=true
    2, FB, 40, W ,NU DE ; FB  PE=true MU=true REMOVE=true PE=1-N
    2, FC, 10, A ,NU ; FC  PE=true MU=true REMOVE=true PE=1-N
    2, FD, 3, A ,NU ; FD  PE=true MU=true REMOVE=true PE=1-N
    2, F1  ; F1  PE=true MU=true REMOVE=true PE=1-N
      3, FE, 6, A ,NU ; FE  PE=true MU=true REMOVE=true PE=1-N
      3, FF, 15, A ,NU ; FF  PE=true MU=true REMOVE=true PE=1-N
      3, FG, 15, A ,NU ; FG  PE=true MU=true REMOVE=true PE=1-N
      3, FH, 15, A ,NU ; FH  PE=true MU=true REMOVE=true PE=1-N
      3, FI, 80, A NU DE MU,MU; FI  PE=true MU=true REMOVE=true PE=1-N MU=1-N
        4, FI, 80, A ,NU DE MU ; FI  PE=true MU=true REMOVE=true
  1, I0 ,PE ; I0  PE=true MU=true REMOVE=true PE=1-N
    2, IA, 40, W NU MU,MU; IA  PE=true MU=true REMOVE=true PE=1-N MU=1-N
      3, IA, 40, W ,NU MU ; IA  PE=true MU=true REMOVE=true
    2, IB, 40, W ,NU DE ; IB  PE=true MU=true REMOVE=true PE=1-N
    2, IC, 10, A ,NU ; IC  PE=true MU=true REMOVE=true PE=1-N
    2, ID, 3, A ,NU ; ID  PE=true MU=true REMOVE=true PE=1-N
    2, IE, 5, A ,NU ; IE  PE=true MU=true REMOVE=true PE=1-N
    2, I1  ; I1  PE=true MU=true REMOVE=true PE=1-N
      3, IF, 6, A ,NU ; IF  PE=true MU=true REMOVE=true PE=1-N
      3, IG, 15, A ,NU ; IG  PE=true MU=true REMOVE=true PE=1-N
      3, IH, 15, A ,NU ; IH  PE=true MU=true REMOVE=true PE=1-N
      3, II, 15, A ,NU ; II  PE=true MU=true REMOVE=true PE=1-N
      3, IJ, 80, A NU DE MU,MU; IJ  PE=true MU=true REMOVE=true PE=1-N MU=1-N
        4, IJ, 80, A ,NU DE MU ; IJ  PE=true MU=true REMOVE=true
  1, JA, 6, A ,DE ; JA  PE=false MU=false REMOVE=true
  1, KA, 66, W ,NU DE ; KA  PE=false MU=false REMOVE=true
  1, L0 ,PE ; L0  PE=true MU=true REMOVE=true PE=1-N
    2, LA, 3, A ,NU ; LA  PE=true MU=true REMOVE=true PE=1-N
    2, LB, 6, P ,NU ; LB  PE=true MU=true REMOVE=true PE=1-N
    2, LC, 6, P NU DE MU,MU; LC  PE=true MU=true REMOVE=true PE=1-N MU=1-N
      3, LC, 6, P ,NU DE MU ; LC  PE=true MU=true REMOVE=true
  1, MA, 4, G ,NU ; MA  PE=false MU=false REMOVE=true
  1, N0  ; N0  PE=false MU=false REMOVE=true
    2, NA, 2, U  ; NA  PE=false MU=false REMOVE=true
    2, NB, 3, U ,NU ; NB  PE=false MU=false REMOVE=true
  1, O0 ,PE ; O0  PE=true MU=false REMOVE=true PE=1-N
    2, OA, 8, U ,NU DT=E(DATE) ; OA  PE=true MU=false REMOVE=true PE=1-N
    2, OB, 8, U ,NU DT=E(DATE) ; OB  PE=true MU=false REMOVE=true PE=1-N
  1, PA, 3, A NU DE MU,MU; PA  PE=false MU=true REMOVE=true MU=1-N
    2, PA, 3, A ,NU DE MU ; PA  PE=false MU=true REMOVE=true
  1, QA, 7, P  ; QA  PE=false MU=false REMOVE=true
  1, RA, 0, A ,NU NV NB ; RA  PE=false MU=false REMOVE=true
  1, S0 ,PE ; S0  PE=true MU=true REMOVE=true PE=1-N
    2, SA, 80, W ,NU ; SA  PE=true MU=true REMOVE=true PE=1-N
    2, SB, 3, A ,NU ; SB  PE=true MU=true REMOVE=true PE=1-N
    2, SC, 0, A NU NV NB MU,MU; SC  PE=true MU=true REMOVE=true PE=1-N MU=1-N
      3, SC, 0, A ,NU NV NB MU ; SC  PE=true MU=true REMOVE=true
  1, TC, 20, U ,SY=TIME DT=E(TIMESTAMP) ; TC  PE=false MU=false REMOVE=true
  1, TU, 20, U MU SY=TIME DT=E(TIMESTAMP),MU; TU  PE=false MU=true REMOVE=true MU=1-N
    2, TU, 20, U ,MU SY=TIME DT=E(TIMESTAMP) ; TU  PE=false MU=true REMOVE=true
 CN,HE=COLLATING(BC,'de@collation=phonebook',PRIMAR) ; CN  PE=false MU=false REMOVE=true
 H1=NA(1-2),NB(1-3) ; H1  PE=false MU=false REMOVE=true
 S1=JA(1-2) ; S1  PE=false MU=false REMOVE=true
 S2=JA(1-6),BC(1-40) ; S2  PE=false MU=false REMOVE=true
 S3=LA(1-3),LB(1-6) ; S3  PE=false MU=false REMOVE=true
 HO=REFINT(A,12,A/DC) ; HO  PE=false MU=false REMOVE=true
Example (ReadFileDefinition9RestrictF0)
err := initLogWithFile("adabas.log")
if err != nil {
	fmt.Println(err)
	return
}

adabas, _ := NewAdabas(adabasModDBID)
adabas.ID.SetUser("fdt")

fmt.Println("Open database")
err = adabas.Open()
if err != nil || adabas.Acbx.Acbxrsp != 0 {
	fmt.Println("Error: ", err, " ", adabas.Acbx.Acbxrsp)
}
defer adabas.Close()
fmt.Println("Read file definition")
var definition *adatypes.Definition
definition, err = adabas.ReadFileDefinition(9)
if adabas.Acbx.Acbxrsp != 0 {
	fmt.Println("Resonse code : ", adabas.Acbx.Acbxrsp)
	return
}
if err != nil {
	fmt.Println("Error: ", err)
	return
}
definition.ShouldRestrictToFields("AA,F0")
definition.DumpTypes(false, true)
Output:

Open database
Read file definition
Dump all active field types:
  1, A0  ; A0  PE=false MU=false REMOVE=true
    2, AA, 8, A ,UQ DE NC NN ; AA  PE=false MU=false REMOVE=false
  1, F0 ,PE ; F0  PE=true MU=true REMOVE=false PE=1-N
    2, FA, 60, W NU MU,MU; FA  PE=true MU=true REMOVE=false PE=1-N MU=1-N
      3, FA, 60, W ,NU MU ; FA  PE=true MU=true REMOVE=false PE=1-N MU=1-N
    2, FB, 40, W ,NU DE ; FB  PE=true MU=true REMOVE=false PE=1-N
    2, FC, 10, A ,NU ; FC  PE=true MU=true REMOVE=false PE=1-N
    2, FD, 3, A ,NU ; FD  PE=true MU=true REMOVE=false PE=1-N
    2, F1  ; F1  PE=true MU=true REMOVE=false PE=1-N
      3, FE, 6, A ,NU ; FE  PE=true MU=true REMOVE=false PE=1-N
      3, FF, 15, A ,NU ; FF  PE=true MU=true REMOVE=false PE=1-N
      3, FG, 15, A ,NU ; FG  PE=true MU=true REMOVE=false PE=1-N
      3, FH, 15, A ,NU ; FH  PE=true MU=true REMOVE=false PE=1-N
      3, FI, 80, A NU DE MU,MU; FI  PE=true MU=true REMOVE=false PE=1-N MU=1-N
        4, FI, 80, A ,NU DE MU ; FI  PE=true MU=true REMOVE=false PE=1-N MU=1-N
Example (ReadFileDefinition9Restricted)
err := initLogWithFile("adabas.log")
if err != nil {
	fmt.Println(err)
	return
}

adabas, _ := NewAdabas(adabasModDBID)
adabas.ID.SetUser("fdt")

fmt.Println("Open database")
err = adabas.Open()
if err != nil || adabas.Acbx.Acbxrsp != 0 {
	fmt.Println("Error: ", err, " ", adabas.Acbx.Acbxrsp)
}
defer adabas.Close()
fmt.Println("Read file definition")
var definition *adatypes.Definition
definition, err = adabas.ReadFileDefinition(9)
if adabas.Acbx.Acbxrsp != 0 {
	fmt.Println("Resonse code : ", adabas.Acbx.Acbxrsp)
	return
}
if err != nil {
	fmt.Println("Error: ", err)
	return
}
definition.ShouldRestrictToFields("A0,DA,L0")
definition.DumpTypes(false, true)
Output:

Open database
Read file definition
Dump all active field types:
  1, A0  ; A0  PE=false MU=false REMOVE=false
    2, AA, 8, A ,UQ DE NC NN ; AA  PE=false MU=false REMOVE=false
    2, AB  ; AB  PE=false MU=false REMOVE=false
      3, AC, 4, F ,DE ; AC  PE=false MU=false REMOVE=false
      3, AD, 8, B ,NU HF ; AD  PE=false MU=false REMOVE=false
      3, AE, 0, A ,NU NV NB ; AE  PE=false MU=false REMOVE=false
  1, DA, 1, A ,FI ; DA  PE=false MU=false REMOVE=false
  1, L0 ,PE ; L0  PE=true MU=true REMOVE=false PE=1-N
    2, LA, 3, A ,NU ; LA  PE=true MU=true REMOVE=false PE=1-N
    2, LB, 6, P ,NU ; LB  PE=true MU=true REMOVE=false PE=1-N
    2, LC, 6, P NU DE MU,MU; LC  PE=true MU=true REMOVE=false PE=1-N MU=1-N
      3, LC, 6, P ,NU DE MU ; LC  PE=true MU=true REMOVE=false PE=1-N MU=1-N
Example (ReadFileDefinitionFile11)
err := initLogWithFile("adabas.log")
if err != nil {
	fmt.Println(err)
	return
}

adabas, _ := NewAdabas(adabasModDBID)
adabas.ID.SetUser("fdt")

fmt.Println("Open database")
err = adabas.Open()
if err != nil || adabas.Acbx.Acbxrsp != 0 {
	fmt.Println("Error: ", err, " ", adabas.Acbx.Acbxrsp)
}
defer adabas.Close()
fmt.Println("Read file definition")
var definition *adatypes.Definition
definition, err = adabas.ReadFileDefinition(11)
if adabas.Acbx.Acbxrsp != 0 {
	fmt.Println("Resonse code : ", adabas.Acbx.Acbxrsp)
	return
}
if err != nil {
	fmt.Println("Error: ", err)
	return
}
definition.DumpTypes(false, false)
Output:

Open database
Read file definition
Dump all file field types:
  1, AA, 8, A ,UQ DE ; AA  PE=false MU=false REMOVE=true
  1, AB  ; AB  PE=false MU=false REMOVE=true
    2, AC, 20, A ,NU ; AC  PE=false MU=false REMOVE=true
    2, AE, 20, A ,DE ; AE  PE=false MU=false REMOVE=true
    2, AD, 20, A ,NU ; AD  PE=false MU=false REMOVE=true
  1, AF, 1, A ,FI ; AF  PE=false MU=false REMOVE=true
  1, AG, 1, A ,FI ; AG  PE=false MU=false REMOVE=true
  1, AH, 4, P ,DE NC ; AH  PE=false MU=false REMOVE=true
  1, A1  ; A1  PE=false MU=true REMOVE=true
    2, AI, 20, A NU MU,MU; AI  PE=false MU=true REMOVE=true MU=1-N
      3, AI, 20, A ,NU MU ; AI  PE=false MU=true REMOVE=true
    2, AJ, 20, A ,NU DE ; AJ  PE=false MU=true REMOVE=true
    2, AK, 10, A ,NU ; AK  PE=false MU=true REMOVE=true
    2, AL, 3, A ,NU ; AL  PE=false MU=true REMOVE=true
  1, A2  ; A2  PE=false MU=false REMOVE=true
    2, AN, 6, A ,NU ; AN  PE=false MU=false REMOVE=true
    2, AM, 15, A ,NU ; AM  PE=false MU=false REMOVE=true
  1, AO, 6, A ,DE ; AO  PE=false MU=false REMOVE=true
  1, AP, 25, A ,NU DE ; AP  PE=false MU=false REMOVE=true
  1, AQ ,PE ; AQ  PE=true MU=true REMOVE=true PE=1-N
    2, AR, 3, A ,NU ; AR  PE=true MU=true REMOVE=true PE=1-N
    2, AS, 5, P ,NU ; AS  PE=true MU=true REMOVE=true PE=1-N
    2, AT, 5, P NU MU,MU; AT  PE=true MU=true REMOVE=true PE=1-N MU=1-N
      3, AT, 5, P ,NU MU ; AT  PE=true MU=true REMOVE=true
  1, A3  ; A3  PE=false MU=false REMOVE=true
    2, AU, 2, U  ; AU  PE=false MU=false REMOVE=true
    2, AV, 2, U ,NU ; AV  PE=false MU=false REMOVE=true
  1, AW ,PE ; AW  PE=true MU=false REMOVE=true PE=1-N
    2, AX, 8, U ,NU ; AX  PE=true MU=false REMOVE=true PE=1-N
    2, AY, 8, U ,NU ; AY  PE=true MU=false REMOVE=true PE=1-N
  1, AZ, 3, A NU DE MU,MU; AZ  PE=false MU=true REMOVE=true MU=1-N
    2, AZ, 3, A ,NU DE MU ; AZ  PE=false MU=true REMOVE=true
 PH=PHON(AE) ; PH  PE=false MU=false REMOVE=true
 H1=AU(1-2),AV(1-2) ; H1  PE=false MU=false REMOVE=true
 S1=AO(1-4) ; S1  PE=false MU=false REMOVE=true
 S2=AO(1-6),AE(1-20) ; S2  PE=false MU=false REMOVE=true
 S3=AR(1-3),AS(1-9) ; S3  PE=false MU=false REMOVE=true
Example (ResetAcbx)
var acbx Acbx
acbx.resetAcbx()
acbx.Acbxcmd = et.code()
fmt.Println(acbx.String())
Output:

ACBX:
  CmdCode: ET  CmdId: 00000000
  Dbid: 0  Filenr: 0  Responsecode: 148 Subcode: 0
  Isn:  0  ISN Lower Limit:  0 ISN Quantity:  0
  CmdOption: 20 20 20 20 20 20 20 20  [        ] [........]
  Add1: 20 20 20 20 20 20 20 20  [        ] [........]
  Add2: 20 20 20 20  [    ] [....]
  Add3: 00 00 00 00 00 00 00 00  [........] [........]
  Add4: 00 00 00 00 00 00 00 00  [........] [........]
  Add5: 00 00 00 00 00 00 00 00  [........] [........]
  Add6: 00 00 00 00 00 00 00 00  [........] [........]
  User Area: 00000000000000000000000000000000 [................] [................]

func NewAdabas

func NewAdabas(p ...interface{}) (ada *Adabas, err error)

NewAdabas create a new Adabas struct instance

func NewAdabasWithID

func NewAdabasWithID(target string, ID *ID) (*Adabas, error)

NewAdabasWithID create a new Adabas struct instance using string parameter

func NewAdabasWithURL

func NewAdabasWithURL(URL *URL, ID *ID) (*Adabas, error)

NewAdabasWithURL create a new Adabas struct instance

func NewClonedAdabas

func NewClonedAdabas(clone *Adabas) *Adabas

NewClonedAdabas create a cloned Adabas struct instance

func (*Adabas) ACBX

func (adabas *Adabas) ACBX() *Acbx

ACBX Current used ACBX

func (*Adabas) BackoutTransaction

func (adabas *Adabas) BackoutTransaction() (err error)

BackoutTransaction backout transaction initiated

func (*Adabas) CallAdabas

func (adabas *Adabas) CallAdabas() (err error)

CallAdabas this method sends the call to the database

func (*Adabas) Close

func (adabas *Adabas) Close()

Close A session to the database will be closed

func (*Adabas) DeleteIsn

func (adabas *Adabas) DeleteIsn(fileNr Fnr, isn adatypes.Isn) (err error)

DeleteIsn delete a single isn

func (*Adabas) EndTransaction

func (adabas *Adabas) EndTransaction() (err error)

EndTransaction end of transaction initiated

func (*Adabas) Histogram

func (adabas *Adabas) Histogram(fileNr Fnr, adabasRequest *adatypes.Request, x interface{}) (err error)

Histogram histogram of a specific descriptor

func (*Adabas) IsRemote

func (adabas *Adabas) IsRemote() bool

IsRemote Indicate if the call uses WCL remote calls

func (*Adabas) Open

func (adabas *Adabas) Open() (err error)

Open opens a session to the database

func (*Adabas) ReadBuffer

func (adabas *Adabas) ReadBuffer(buffer *bytes.Buffer, order binary.ByteOrder, nCalBuf uint32, serverMode bool) (err error)

ReadBuffer read buffer and parse call

func (*Adabas) ReadFileDefinition

func (adabas *Adabas) ReadFileDefinition(fileNr Fnr) (definition *adatypes.Definition, err error)

ReadFileDefinition Read file definition out of Adabas file

func (*Adabas) ReadISNOrder added in v1.2.1

func (adabas *Adabas) ReadISNOrder(fileNr Fnr, adabasRequest *adatypes.Request, x interface{}) (err error)

ReadISNOrder Read logical using a descriptor

func (*Adabas) ReadLogicalWith

func (adabas *Adabas) ReadLogicalWith(fileNr Fnr, adabasRequest *adatypes.Request, x interface{}) (err error)

ReadLogicalWith Read logical using a descriptor

func (*Adabas) ReadPhysical

func (adabas *Adabas) ReadPhysical(fileNr Fnr, adabasRequest *adatypes.Request, x interface{}) (err error)

ReadPhysical read data in physical order

func (*Adabas) Release

func (adabas *Adabas) Release() (err error)

Release Any resource in the database of the session are released

func (*Adabas) SearchLogicalWith

func (adabas *Adabas) SearchLogicalWith(fileNr Fnr, adabasRequest *adatypes.Request, x interface{}) (err error)

SearchLogicalWith Search logical using a descriptor

func (*Adabas) SetAbd

func (adabas *Adabas) SetAbd(abd []*Buffer)

SetAbd Set ABD to adabas structure

func (*Adabas) SetDbid

func (adabas *Adabas) SetDbid(dbid Dbid)

SetDbid set new database id

func (*Adabas) Store

func (adabas *Adabas) Store(fileNr Fnr, adabasRequest *adatypes.Request) (err error)

Store store a record into database

func (*Adabas) String

func (adabas *Adabas) String() string

func (*Adabas) Update

func (adabas *Adabas) Update(fileNr Fnr, adabasRequest *adatypes.Request) (err error)

Update update a record in database

func (*Adabas) WriteBuffer

func (adabas *Adabas) WriteBuffer(buffer *bytes.Buffer, order binary.ByteOrder, serverMode bool) (err error)

WriteBuffer write adabas call to buffer

type Buffer

type Buffer struct {
	// contains filtered or unexported fields
}

Buffer Adabas Buffer overlay to combine the buffer itself with the Adabas buffer definition. It includes the current offset of the buffer.

func NewBuffer

func NewBuffer(id byte) *Buffer

NewBuffer Create a new buffer with given id

func NewBufferWithSize added in v1.1.1

func NewBufferWithSize(id byte, size uint32) *Buffer

NewBufferWithSize Create a new buffer with given id and predefined size

func SearchAdabasBuffer added in v1.1.1

func SearchAdabasBuffer(tree *adatypes.SearchTree) *Buffer

SearchAdabasBuffer returns search buffer of the search tree

func ValueAdabasBuffer added in v1.1.1

func ValueAdabasBuffer(tree *adatypes.SearchTree) *Buffer

ValueAdabasBuffer returns value buffer of the search tree

func (*Buffer) Allocate

func (adabasBuffer *Buffer) Allocate(size uint32)

Allocate allocate buffer of specified size

func (*Buffer) Bytes

func (adabasBuffer *Buffer) Bytes() []byte

Bytes receive buffer content

func (*Buffer) Clear

func (adabasBuffer *Buffer) Clear()

Clear buffer emptied

func (*Buffer) Received

func (adabasBuffer *Buffer) Received() uint64

Received Number of received bytes

func (*Buffer) String

func (adabasBuffer *Buffer) String() string

String common string representation of the Adabas buffer

func (*Buffer) WriteBinary

func (adabasBuffer *Buffer) WriteBinary(content []byte)

WriteBinary write binary slice into buffer

func (*Buffer) WriteString

func (adabasBuffer *Buffer) WriteString(content string)

WriteString write string intp buffer

type BufferType

type BufferType uint32

BufferType type of buffer following

type Connection

type Connection struct {
	ID *ID
	// contains filtered or unexported fields
}

Connection Adabas connection context

Example (EndTransaction)
lerr := initLogWithFile("connection.log")
if lerr != nil {
	return
}

fmt.Println("Example for EndTransaction()")
connection, err := NewConnection("acj;target=" + adabasModDBIDs)
if err != nil {
	fmt.Println("Error creating connection", err)
	return
}
defer connection.Close()
connection.Open()
storeRequest, rErr := connection.CreateStoreRequest(16)
if rErr != nil {
	return
}
// Define fields to be included in the request
sferr := storeRequest.StoreFields("AA,AB")
if sferr != nil {
	fmt.Println("Error setting fields", sferr)
	return
}
record, err := storeRequest.CreateRecord()
if err != nil {
	fmt.Println("Error creating record", err)
	return
}
err = record.SetValueWithIndex("AA", nil, "777777_0")
if err != nil {
	fmt.Println("Error set value", err)
	return
}
err = record.SetValueWithIndex("AC", nil, "WABER")
if err != nil {
	fmt.Println("Error set value", err)
	return
}
err = record.SetValueWithIndex("AD", nil, "EMIL")
if err != nil {
	fmt.Println("Error set value", err)
	return
}
err = record.SetValueWithIndex("AE", nil, "MERK")
if err != nil {
	fmt.Println("Error set value", err)
	return
}

// Store the record in the database
err = storeRequest.Store(record)
if err != nil {
	fmt.Println("Store record error", err)
	return
}

// ET end of transaction final commit the transaction
err = storeRequest.EndTransaction()
if err != nil {
	fmt.Println("End transaction error", err)
	return
}
fmt.Println("Record stored, check content ...")
readRequest, rrerr := connection.CreateFileReadRequest(16)
if rrerr != nil {
	fmt.Println("Read request error", rrerr)
	return
}
err = readRequest.QueryFields("AA,AB")
if err != nil {
	fmt.Println("Query fields error", err)
	return
}
result, rerr := readRequest.ReadLogicalWith("AA=[777777_:777777_Z]")
if rerr != nil {
	fmt.Println("Read record error", rerr)
	return
}
if len(result.Values) != 1 {
	fmt.Println("Records received not correct", len(result.Values))
	return
}
// To adapt output for example
result.Values[0].Isn = 0
result.DumpValues()
Output:

Example for EndTransaction()
Record stored, check content ...
Dump all result values
  AA = > 777777_0 <
  AB = [ 1 ]
   AC = > WABER                <
   AE = > MERK                 <
   AD = > EMIL                 <
Example (FieldType)
err := initLogWithFile("field_type.log")
if err != nil {
	fmt.Println(err)
	return
}
url := "23"
fmt.Println("Connect to ", url)
connection, cerr := NewConnection("acj;target=" + url)
if cerr != nil {
	fmt.Println("Error creating database connection", cerr)
	return
}
defer connection.Close()

fmt.Println(connection)
openErr := connection.Open()
if openErr != nil {
	fmt.Println("Error opening database", openErr)
	return
}
request, err := connection.CreateFileReadRequest(270)
if err != nil {
	fmt.Println("Error creating read request", err)
	return
}
//err = request.QueryFields("S1,U1,S2,U2,S4,U4,S8,U8,AF,BR,B1,F4,F8,A1")
err = request.QueryFields("IT,BB,TY,AA,WC,PI,UI")
//err = request.QueryFields("*")
if err != nil {
	fmt.Println("Error query fields", err)
	return
}
request.Limit = 0
request.RecordBufferShift = 64000
result, rerr := request.ReadLogicalWith("AF=" + recordNamePrefix)
if rerr != nil {
	fmt.Println("Error reading records", rerr)
	return
}
t := adatypes.TraverserValuesMethods{PrepareFunction: dumpFieldTypeTestPrepare, EnterFunction: dumpFieldTypeValues}
_, err = result.TraverseValues(t, nil)
if err != nil {
	fmt.Println("Error traversing records", err)
	return
}
Output:

Connect to  23
Adabas url=23 fnr=0
Record found:
  IT = [ 1 ]
   S1 = > 0 <
   U1 = > 0 <
   S2 = > 0 <
   U2 = > 0 <
   S4 = > 0 <
   U4 = > 0 <
   S8 = > 0 <
   U8 = > 0 <
  BB = [ 1 ]
   BR = > [0] <
   B1 = > [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] <
  TY = [ 1 ]
   F4 = > 0.000000 <
   F8 = > 0.000000 <
  AA = [ 1 ]
   A1 = >   <
   AS = >   <
   A2 = >   <
   AB = >  <
   AF = > FIELD-TYPE-TEST      <
  WC = [ 1 ]
   WU = >   <
   WL = >   <
   W4 = >   <
   WF = >                                                    <
  PI = [ 1 ]
   PA = > 0 <
   PF = > 0 <
  UI = [ 1 ]
   UP = > 0 <
   UF = > 0 <
   UE = > 0 <
Record found:
  IT = [ 1 ]
   S1 = > -1 <
   U1 = > 1 <
   S2 = > -1000 <
   U2 = > 1000 <
   S4 = > -100000 <
   U4 = > 1000 <
   S8 = > -1000 <
   U8 = > 1000 <
  BB = [ 1 ]
   BR = > [0 16 32] <
   B1 = > [255 16 5 0 16 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] <
  TY = [ 1 ]
   F4 = > 21.100000 <
   F8 = > 123456.100000 <
  AA = [ 1 ]
   A1 = > X <
   AS = > NORMALSTRING <
   A2 = > LARGESTRING <
   AB = > LOBST <
   AF = > FIELD-TYPE-TEST      <
  WC = [ 1 ]
   WU = > Санкт-Петербург <
   WL = > அ-8பவனி கொம்பிலேக் <
   W4 = > ಸೆನಿಓರ್ ಪ್ರೋಗ್ೃಾಮ್ಮೇರ್ <
   WF = > директор                                   <
  PI = [ 1 ]
   PA = > 123 <
   PF = > 1234 <
  UI = [ 1 ]
   UP = > 51234 <
   UF = > 542 <
   UE = > 1234 <
Example (Map)
initLogWithFile("connection.log")
connection, cerr := NewConnection("acj;map;config=[24,4]")
if cerr != nil {
	return
}
defer connection.Close()
request, err := connection.CreateMapReadRequest("EMPLOYEES-NAT-DDM")
if err != nil {
	fmt.Println("Error read map : ", err)
	return
}
fmt.Println("Connection :", connection)
request.QueryFields("NAME,PERSONNEL-ID")
request.Limit = 2
fmt.Println("Read logical data, two records:")
result, rerr := request.ReadLogicalWith("PERSONNEL-ID=[11100301:11100303]")
if rerr != nil {
	return
}
fmt.Println("Result data:")
result.DumpValues()
Output:

Connection : Map=EMPLOYEES-NAT-DDM Adabas url=24 fnr=0 connection file=11
Read logical data, two records:
Result data:
Dump all result values
Record Isn: 0251
  PERSONNEL-ID = > 11100301 <
  FULL-NAME = [ 1 ]
   NAME = > BERGMANN             <
Record Isn: 0383
  PERSONNEL-ID = > 11100302 <
  FULL-NAME = [ 1 ]
   NAME = > HAIBACH              <
Example (MapReadDisjunctSearch)
err := initLogWithFile("connection_map.log")
if err != nil {
	fmt.Println(err)
	return
}

connection, cerr := NewConnection("acj;map;config=[" + adabasStatDBIDs + ",4]")
if cerr != nil {
	return
}
defer connection.Close()

request, rerr := connection.CreateMapReadRequest("EMPLOYEES")
if rerr != nil {
	fmt.Println("Error create request", rerr)
	return
}
err = request.QueryFields("personnel-id")
if err != nil {
	return
}
request.Limit = 0
var result *Response
fmt.Println("Read using ISN order:")
result, err = request.ReadLogicalWith("name=SMITH")
if err != nil {
	fmt.Println("Error reading ISN order", err)
	return
}
result.DumpValues()
Output:

Read using ISN order:
Dump all result values
Record Isn: 0579
  personnel-data = [ 1 ]
   personnel-id = > 20009300 <
Record Isn: 0634
  personnel-data = [ 1 ]
   personnel-id = > 20015400 <
Record Isn: 0670
  personnel-data = [ 1 ]
   personnel-id = > 20018800 <
Record Isn: 0727
  personnel-data = [ 1 ]
   personnel-id = > 20025200 <
Record Isn: 0787
  personnel-data = [ 1 ]
   personnel-id = > 20000400 <
Example (MapReadUnicode)
err := initLogWithFile("connection_map.log")
if err != nil {
	fmt.Println(err)
	return
}

connection, cerr := NewConnection("acj;map;config=[" + adabasStatDBIDs + ",4]")
if cerr != nil {
	return
}
defer connection.Close()

request, rerr := connection.CreateMapReadRequest("EMPLOYEES-NAT-DDM")
if rerr != nil {
	fmt.Println("Error create request", rerr)
	return
}
err = request.QueryFields("PERSONNEL-ID,FULL-NAME")
if err != nil {
	return
}
request.Start = 1025
request.Limit = 3
var result *Response
fmt.Println("Read using ISN order:")
result, err = request.ReadByISN()
if err != nil {
	fmt.Println("Error reading ISN order", err)
	return
}
result.DumpValues()
Output:

Read using ISN order:
Dump all result values
Record Isn: 1025
  PERSONNEL-ID = > 30021215 <
  FULL-NAME = [ 1 ]
   FIRST-NAME = > SYLVIA               <
   NAME = > BURTON               <
   MIDDLE-I = > J <
Record Isn: 1026
  PERSONNEL-ID = > 30021311 <
  FULL-NAME = [ 1 ]
   FIRST-NAME = > GERARD               <
   NAME = > JOHNSTONE            <
   MIDDLE-I = > E <
Record Isn: 1027
  PERSONNEL-ID = > 30021312 <
  FULL-NAME = [ 1 ]
   FIRST-NAME = > NORMA                <
   NAME = > FRANCIS              <
   MIDDLE-I = >   <
Example (MapReadUnicodeNew)
err := initLogWithFile("connection_map.log")
if err != nil {
	fmt.Println(err)
	return
}

connection, cerr := NewConnection("acj;map;config=[" + adabasStatDBIDs + ",4]")
if cerr != nil {
	return
}
defer connection.Close()

request, rerr := connection.CreateMapReadRequest("EMPLOYEES")
if rerr != nil {
	fmt.Println("Error create request", rerr)
	return
}
err = request.QueryFields("personnel-id,full-name")
if err != nil {
	return
}
request.Start = 1250
request.Limit = 3
var result *Response
fmt.Println("Read using ISN order:")
result, err = request.ReadByISN()
if err != nil {
	fmt.Println("Error reading ISN order", err)
	return
}
result.DumpValues()
Output:

Read using ISN order:
Dump all result values
Record Isn: 1250
  personnel-data = [ 1 ]
   personnel-id = > 73002200 <
  full-name = [ 1 ]
   first-name = > Игорь <
   middle-name = > Петрович <
   name = > Михайлов <
Record Isn: 1251
  personnel-data = [ 1 ]
   personnel-id = > 50005801 <
  full-name = [ 1 ]
   first-name = > वासुदेव <
   middle-name = > मूर्ती <
   name = > कुमार <
Record Isn: 1252
  personnel-data = [ 1 ]
   personnel-id = > 50005501 <
  full-name = [ 1 ]
   first-name = > विनोद <
   middle-name = > अभगे <
   name = > अरविद <
Example (MapStore)
err := initLogWithFile("connection_map.log")
if err != nil {
	fmt.Println(err)
	return
}

if cErr := clearFile(16); cErr != nil {
	return
}
if cErr := clearFile(19); cErr != nil {
	return
}

dataRepository := &DatabaseURL{URL: *NewURLWithDbid(adabasModDBID), Fnr: 16}
if perr := prepareCreateTestMap(massLoadSystransStore, massLoadSystrans, dataRepository); perr != nil {
	fmt.Println("Error creating map", massLoadSystransStore, perr)
	return
}
dataRepository = &DatabaseURL{URL: *NewURLWithDbid(adabasModDBID), Fnr: 19}
vehicleMapName := mapVehicles + "Go"
if perr := prepareCreateTestMap(vehicleMapName, vehicleSystransStore, dataRepository); perr != nil {
	return
}

adatypes.Central.Log.Infof("Create connection...")
connection, err := NewConnection("acj;map;config=[" + adabasModDBIDs + ",250]")
if err != nil {
	return
}
defer connection.Close()
connection.Open()
storeRequest16, rErr := connection.CreateMapStoreRequest(massLoadSystransStore)
if err != nil {
	return
}
storeRequest16.StoreFields("PERSONNEL-ID,NAME")
record, err := storeRequest16.CreateRecord()
err = record.SetValueWithIndex("PERSONNEL-ID", nil, "26555_0")
err = record.SetValueWithIndex("NAME", nil, "WABER")
err = record.SetValueWithIndex("FIRST-NAME", nil, "EMIL")
err = record.SetValueWithIndex("MIDDLE-I", nil, "MERK")
err = storeRequest16.Store(record)
if err != nil {
	fmt.Println("Error store record", err)
	return
}
storeRequest19, rErr := connection.CreateMapStoreRequest(vehicleMapName)
if rErr != nil {
	fmt.Println("Error create store request vehicle", rErr)
	return
}
err = storeRequest19.StoreFields("REG-NUM,PERSONNEL-ID,CAR-DETAILS")
if err != nil {
	fmt.Println("Error store fields", err)
	return
}

record, err = storeRequest19.CreateRecord()
err = record.SetValueWithIndex("REG-NUM", nil, "29555_0")
if err != nil {
	fmt.Println("Error", err)
	return
}
err = record.SetValueWithIndex("PERSONNEL-ID", nil, "WABER")
if err != nil {
	fmt.Println("Error search in "+vehicleMapName, err)
	return
}
err = record.SetValueWithIndex("MAKE", nil, "EMIL")
if err != nil {
	fmt.Println("Error", err)
	return
}
err = record.SetValueWithIndex("MODEL", nil, "MERK")
if err != nil {
	fmt.Println("Error", err)
	return
}
err = storeRequest19.Store(record)
if err != nil {
	fmt.Println("Error", err)
	return
}

err = connection.EndTransaction()
if err != nil {
	fmt.Println("Error", err)
	return
}
fmt.Println("Read file ..." + massLoadSystransStore)
err = dumpMapStoredData(adabasModDBIDs, massLoadSystransStore, "26555")
if err != nil {
	fmt.Println("Error reading "+massLoadSystransStore, err)
	return
}
fmt.Println("Read file ..." + vehicleMapName)
err = dumpMapStoredData(adabasModDBIDs, vehicleMapName, "29555")
if err != nil {
	fmt.Println("Error reading "+vehicleMapName, err)
	return
}
Output:

Read file ...EMPLDDM-GOLOAD-STORE
Dump all result values
Record Isn: 0001
  PERSONNEL-ID = > 26555_0  <
  FULL-NAME = [ 1 ]
   FIRST-NAME = >                      <
   NAME = > WABER                <
   MIDDLE-I = >            <
Read file ...VEHICLESGo
Dump all result values
Record Isn: 0001
  REG-NUM = > 29555_0         <
  PERSONNEL-ID = > WABER    <
  CAR-DETAILS = [ 1 ]
   MAKE = > EMIL                 <
   MODEL = > MERK                 <
   COLOR = >            <
Example (MarhsalJSON)
initLogWithFile("connection.log")
connection, cerr := NewConnection("acj;target=" + adabasModDBIDs)
if cerr != nil {
	return
}
defer connection.Close()
request, err := connection.CreateFileReadRequest(11)
if err != nil {
	fmt.Println("Error read map : ", err)
	return
}
fmt.Println("Connection : ", connection)

fmt.Println("Limit query data:")
request.QueryFields("*")
fmt.Println("Read logical data:")
result, rErr := request.ReadISN(250)
if rErr != nil {
	fmt.Println("Error reading", rErr)
	return
}
x, jsonErr := json.Marshal(result)
if jsonErr != nil {
	fmt.Println("Error", jsonErr)
	return
}
fmt.Println(string(x))
Output:

Connection :  Adabas url=23 fnr=0
Limit query data:
Read logical data:
{"Records":[{"A1":{"AI":["C/O H.KOERBER","AM DORNKAMP 20","4590 CLOPPENBURG"],"AJ":"CLOPPENBURG","AK":"4590","AL":"D"},"A2":{"AM":"3082","AN":"04471"},"A3":{"AU":33,"AV":4},"AA":"11222222","AB":{"AC":"ANTONIA","AD":"MARIA","AE":"MARTENS"},"AF":"S","AG":"F","AH":713104,"AO":"MGMT00","AP":"DATENSCHUTZBEAUFTRAGTE","AQ":[{"AR":"EUR","AS":29743,"AT":[4615,8000]},{"AR":"EUR","AS":22153,"AT":[3589,6000]},{"AR":"EUR","AS":20769,"AT":[1538]}],"AW":[{"AX":19980701,"AY":19980702},{"AX":19980811,"AY":19980812}],"AZ":["GER","TUR"],"H1":"3304","ISN":250,"PH":"","S1":"MGMT","S2":"MGMT00MARTENS","S3":""}]}
Example (MarhsalJSONComplete)
initLogWithFile("connection.log")
connection, cerr := NewConnection("acj;target=" + adabasModDBIDs)
if cerr != nil {
	return
}
defer connection.Close()
request, err := connection.CreateFileReadRequest(11)
if err != nil {
	fmt.Println("Error read map : ", err)
	return
}
fmt.Println("Connection : ", connection)

fmt.Println("Limit query data:")
request.QueryFields("*")
fmt.Println("Read logical data:")
result, rErr := request.ReadISN(1)
if rErr != nil {
	fmt.Println("Error reading", rErr)
	return
}
x, jsonErr := json.Marshal(result)
if jsonErr != nil {
	fmt.Println("Error", jsonErr)
	return
}
fmt.Println(string(x))
Output:

Connection :  Adabas url=23 fnr=0
Limit query data:
Read logical data:
{"Records":[{"A1":{"AI":["26 AVENUE RHIN ET DA"],"AJ":"JOIGNY","AK":"89300","AL":"F"},"A2":{"AM":"44864858","AN":"1033"},"A3":{"AU":19,"AV":5},"AA":"50005800","AB":{"AC":"SIMONE","AD":"","AE":"ADAM"},"AF":"M","AG":"F","AH":712981,"AO":"VENT59","AP":"CHEF DE SERVICE","AQ":[{"AR":"EUR","AS":963,"AT":[138]}],"AW":[{"AX":19990801,"AY":19990831}],"AZ":["FRE","ENG"],"H1":"1905","ISN":1,"PH":"","S1":"VENT","S2":"VENT59ADAM","S3":""}]}
Example (MultiplefieldIndex)
initLogWithFile("connection.log")

connection, cerr := NewConnection("acj;map;config=[" + adabasStatDBIDs + ",4]")
if cerr != nil {
	fmt.Println("Error new connection", cerr)
	return
}
defer connection.Close()
openErr := connection.Open()
if openErr != nil {
	fmt.Println("Error open connection", cerr)
	return
}

request, err := connection.CreateMapReadRequest("EMPLOYEES-NAT-DDM")
if err != nil {
	fmt.Println("Error create request", err)
	return
}
err = request.QueryFields("PERSONNEL-ID,ADDRESS-LINE[2]")
if err != nil {
	fmt.Println("Query fields error", err)
	return
}
request.Limit = 0
var result *Response
result, err = request.ReadLogicalWith("PERSONNEL-ID=[11100303:11100304]")
if err != nil {
	fmt.Println("Error create request", err)
	return
}
err = result.DumpValues()
if err != nil {
	fmt.Println("Error dump values", err)
}
Output:

Dump all result values
Record Isn: 0252
  PERSONNEL-ID = > 11100303 <
  FULL-ADDRESS = [ 1 ]
   ADDRESS-LINE = [ 1 ]
    ADDRESS-LINE[02] = > WIESENGRUND 10       <
Record Isn: 0253
  PERSONNEL-ID = > 11100304 <
  FULL-ADDRESS = [ 1 ]
   ADDRESS-LINE = [ 1 ]
    ADDRESS-LINE[02] = > MANDELA-WEG 8        <
Example (PeriodGroup)
initLogWithFile("connection.log")
connection, cerr := NewConnection("acj;target=" + adabasModDBIDs)
if cerr != nil {
	return
}
defer connection.Close()
request, err := connection.CreateFileReadRequest(11)
if err != nil {
	fmt.Println("Error read map : ", err)
	return
}
fmt.Println("Connection : ", connection)

fmt.Println("Limit query data:")
request.QueryFields("AA,AB,AQ,AZ")
fmt.Println("Read logical data:")
result, rerr := request.ReadISN(250)
if rerr != nil {
	fmt.Println("Error reading", rerr)
	return
}
fmt.Println("Result data:")
result.DumpValues()
Output:

Connection :  Adabas url=23 fnr=0
Limit query data:
Read logical data:
Result data:
Dump all result values
Record Isn: 0250
  AA = > 11222222 <
  AB = [ 1 ]
   AC = > ANTONIA              <
   AE = > MARTENS              <
   AD = > MARIA                <
  AQ = [ 3 ]
   AR[01] = > EUR <
   AS[01] = > 29743 <
   AT[01] = [ 2 ]
    AT[01,01] = > 4615 <
    AT[01,02] = > 8000 <
   AR[02] = > EUR <
   AS[02] = > 22153 <
   AT[02] = [ 2 ]
    AT[02,01] = > 3589 <
    AT[02,02] = > 6000 <
   AR[03] = > EUR <
   AS[03] = > 20769 <
   AT[03] = [ 1 ]
    AT[03,01] = > 1538 <
  AZ = [ 2 ]
   AZ[01] = > GER <
   AZ[02] = > TUR <
Example (PeriodGroup2)
initLogWithFile("connection.log")

connection, cerr := NewConnection("acj;map;config=[" + adabasStatDBIDs + ",4]")
if cerr != nil {
	fmt.Println("Error new connection", cerr)
	return
}
defer connection.Close()
openErr := connection.Open()
if openErr != nil {
	fmt.Println("Error open connection", cerr)
	return
}

request, err := connection.CreateMapReadRequest("EMPLOYEES-NAT-DDM")
if err != nil {
	fmt.Println("Error create request", err)
	return
}
request.Limit = 0
var result *Response
result, err = request.ReadLogicalWith("PERSONNEL-ID=[11100303:11100304]")
if err != nil {
	fmt.Println("Error create request", err)
	return
}
err = result.DumpValues()
if err != nil {
	fmt.Println("Error dump values", err)
}
Output:

Dump all result values
Record Isn: 0252
  PERSONNEL-ID = > 11100303 <
  FULL-NAME = [ 1 ]
   FIRST-NAME = > KRISTINA             <
   NAME = > FALTER               <
   MIDDLE-I = > M <
  MAR-STAT = > M <
  SEX = > F <
  BIRTH = > 1961/07/08 <
  FULL-ADDRESS = [ 1 ]
   ADDRESS-LINE = [ 3 ]
    ADDRESS-LINE[01] = > C/O CLAASEN          <
    ADDRESS-LINE[02] = > WIESENGRUND 10       <
    ADDRESS-LINE[03] = > 6100 DARMSTADT       <
   CITY = > DARMSTADT            <
   ZIP = > 6100       <
   COUNTRY = > D   <
  TELEPHONE = [ 1 ]
   AREA-CODE = > 06151  <
   PHONE = > 453897          <
  DEPT = > FINA21 <
  JOB-TITLE = > TYPISTIN                  <
  INCOME = [ 3 ]
   CURR-CODE[01] = > EUR <
   SALARY[01] = > 21846 <
   BONUS[01] = [ 2 ]
    BONUS[01,01] = > 1717 <
    BONUS[01,02] = > 3000 <
   CURR-CODE[02] = > EUR <
   SALARY[02] = > 21025 <
   BONUS[02] = [ 1 ]
    BONUS[02,01] = > 1538 <
   CURR-CODE[03] = > EUR <
   SALARY[03] = > 20307 <
   BONUS[03] = [ 1 ]
    BONUS[03,01] = > 1282 <
  LEAVE-DATA = [ 1 ]
   LEAVE-DUE = > 30 <
   LEAVE-TAKEN = > 3 <
  LEAVE-BOOKED = [ 1 ]
   LEAVE-START[01] = > 19980520 <
   LEAVE-END[01] = > 19980523 <
  LANG = [ 1 ]
   LANG[01] = > GER <
  LEAVE-LEFT = > 3003 <
  DEPARTMENT = > FINA <
  DEPT-PERSON = > FINA21FALTER               <
  CURRENCY-SALARY = >  <
Record Isn: 0253
  PERSONNEL-ID = > 11100304 <
  FULL-NAME = [ 1 ]
   FIRST-NAME = > WOLFGANG             <
   NAME = > SCHMIDT              <
   MIDDLE-I = > J <
  MAR-STAT = > M <
  SEX = > M <
  BIRTH = > 1943/05/04 <
  FULL-ADDRESS = [ 1 ]
   ADDRESS-LINE = [ 3 ]
    ADDRESS-LINE[01] = > POSTFACH 67          <
    ADDRESS-LINE[02] = > MANDELA-WEG 8        <
    ADDRESS-LINE[03] = > 6000 FRANKFURT       <
   CITY = > FRANKFURT            <
   ZIP = > 6000       <
   COUNTRY = > D   <
  TELEPHONE = [ 1 ]
   AREA-CODE = > 069    <
   PHONE = > 549987          <
  DEPT = > FINA21 <
  JOB-TITLE = > SACHBEARBEITER            <
  INCOME = [ 2 ]
   CURR-CODE[01] = > EUR <
   SALARY[01] = > 25230 <
   BONUS[01] = [ 2 ]
    BONUS[01,01] = > 2256 <
    BONUS[01,02] = > 2000 <
   CURR-CODE[02] = > EUR <
   SALARY[02] = > 24102 <
   BONUS[02] = [ 1 ]
    BONUS[02,01] = > 1948 <
  LEAVE-DATA = [ 1 ]
   LEAVE-DUE = > 30 <
   LEAVE-TAKEN = > 0 <
  LEAVE-BOOKED = [ 0 ]
  LANG = [ 2 ]
   LANG[01] = > GER <
   LANG[02] = > ENG <
  LEAVE-LEFT = > 3000 <
  DEPARTMENT = > FINA <
  DEPT-PERSON = > FINA21SCHMIDT              <
  CURRENCY-SALARY = >  <
Example (PeriodGroupLastEntry)
initLogWithFile("connection.log")

connection, cerr := NewConnection("acj;map;config=[" + adabasStatDBIDs + ",4]")
if cerr != nil {
	fmt.Println("Error new connection", cerr)
	return
}
defer connection.Close()
openErr := connection.Open()
if openErr != nil {
	fmt.Println("Error open connection", cerr)
	return
}

request, err := connection.CreateMapReadRequest("EMPLOYEES-NAT-DDM")
if err != nil {
	fmt.Println("Error create request", err)
	return
}
err = request.QueryFields("PERSONNEL-ID,INCOME[N]")
if err != nil {
	fmt.Println("Query fields error", err)
	return
}
request.Limit = 0
var result *Response
result, err = request.ReadLogicalWith("PERSONNEL-ID=[11100303:11100304]")
if err != nil {
	fmt.Println("Error create request", err)
	return
}
err = result.DumpValues()
if err != nil {
	fmt.Println("Error dump values", err)
}
Output:

Dump all result values
Record Isn: 0252
  PERSONNEL-ID = > 11100303 <
  INCOME = [ 1 ]
   CURR-CODE[03] = > EUR <
   SALARY[03] = > 20307 <
   BONUS[03] = [ 1 ]
    BONUS[03,01] = > 1282 <
Record Isn: 0253
  PERSONNEL-ID = > 11100304 <
  INCOME = [ 1 ]
   CURR-CODE[02] = > EUR <
   SALARY[02] = > 24102 <
   BONUS[02] = [ 1 ]
    BONUS[02,01] = > 1948 <
Example (PeriodGroupMfPart)
initLogWithFile("connection.log")

network := os.Getenv("ADAMFDBID")
if network == "" {
	fmt.Println("Mainframe database not defined")
	return
}
connection, cerr := NewConnection("acj;map;config=[" + network + ",4]")
if cerr != nil {
	fmt.Println("Error new connection", cerr)
	return
}
defer connection.Close()
openErr := connection.Open()
if openErr != nil {
	fmt.Println("Error open connection", cerr)
	return
}

request, err := connection.CreateMapReadRequest("EMPLOYEES-NAT-MF")
if err != nil {
	fmt.Println("Error create request", err)
	return
}
request.QueryFields("personnnel-id,income")
request.Limit = 0
var result *Response
result, err = request.ReadLogicalWith("personnnel-id=[11100303:11100304]")
if err != nil {
	fmt.Println("Error create request", err)
	return
}
err = result.DumpValues()
if err != nil {
	fmt.Println("Error dump values", err)
}
Output:

Dump all result values
Record Isn: 0252
Record Quantity: 0002
  personnnel-id = > 11100303 <
  income = [ 3 ]
   curr-code[01] = > DM  <
   salary[01] = > 42600 <
   bonus[01] = [ 2 ]
    bonus[01,01] = > 3350 <
    bonus[01,02] = > 3000 <
   curr-code[02] = > DM  <
   salary[02] = > 41000 <
   bonus[02] = [ 1 ]
    bonus[02,01] = > 3000 <
   curr-code[03] = > DM  <
   salary[03] = > 39600 <
   bonus[03] = [ 1 ]
    bonus[03,01] = > 2500 <
Record Isn: 0253
Record Quantity: 0002
  personnnel-id = > 11100304 <
  income = [ 2 ]
   curr-code[01] = > DM  <
   salary[01] = > 49200 <
   bonus[01] = [ 2 ]
    bonus[01,01] = > 4400 <
    bonus[01,02] = > 2000 <
   curr-code[02] = > DM  <
   salary[02] = > 47000 <
   bonus[02] = [ 1 ]
    bonus[02,01] = > 3800 <
Example (PeriodGroupPart)
initLogWithFile("connection.log")

connection, cerr := NewConnection("acj;map;config=[" + adabasStatDBIDs + ",4]")
if cerr != nil {
	fmt.Println("Error new connection", cerr)
	return
}
defer connection.Close()
openErr := connection.Open()
if openErr != nil {
	fmt.Println("Error open connection", cerr)
	return
}

request, err := connection.CreateMapReadRequest("EMPLOYEES-NAT-DDM")
if err != nil {
	fmt.Println("Error create request", err)
	return
}
request.QueryFields("PERSONNEL-ID,INCOME")
request.Limit = 0
var result *Response
result, err = request.ReadLogicalWith("PERSONNEL-ID=[11100303:11100304]")
if err != nil {
	fmt.Println("Error create request", err)
	return
}
err = result.DumpValues()
if err != nil {
	fmt.Println("Error dump values", err)
}
Output:

Dump all result values
Record Isn: 0252
  PERSONNEL-ID = > 11100303 <
  INCOME = [ 3 ]
   CURR-CODE[01] = > EUR <
   SALARY[01] = > 21846 <
   BONUS[01] = [ 2 ]
    BONUS[01,01] = > 1717 <
    BONUS[01,02] = > 3000 <
   CURR-CODE[02] = > EUR <
   SALARY[02] = > 21025 <
   BONUS[02] = [ 1 ]
    BONUS[02,01] = > 1538 <
   CURR-CODE[03] = > EUR <
   SALARY[03] = > 20307 <
   BONUS[03] = [ 1 ]
    BONUS[03,01] = > 1282 <
Record Isn: 0253
  PERSONNEL-ID = > 11100304 <
  INCOME = [ 2 ]
   CURR-CODE[01] = > EUR <
   SALARY[01] = > 25230 <
   BONUS[01] = [ 2 ]
    BONUS[01,01] = > 2256 <
    BONUS[01,02] = > 2000 <
   CURR-CODE[02] = > EUR <
   SALARY[02] = > 24102 <
   BONUS[02] = [ 1 ]
    BONUS[02,01] = > 1948 <
Example (ReadBorderMainframe)
initLogWithFile("mainframe.log")
network := os.Getenv("ADAMFDBID")
if network == "" {
	fmt.Println("Mainframe database not defined")
	return
}
connection, cerr := NewConnection("acj;target=" + network)
if cerr != nil {
	fmt.Println("Connection to database error:", cerr)
	return
}
defer connection.Close()
request, err := connection.CreateFileReadRequest(1)
if err != nil {
	fmt.Println("Error creating read request : ", err)
	return
}
fmt.Println("Connection : ", connection)

fmt.Println("Limit query data:")
request.QueryFields("AA,AB")
request.Limit = 2
fmt.Println("Read logical data:")
var result *Response
result, err = request.ReadLogicalWith("AA=(11100301:11100303)")
if err != nil {
	fmt.Println("Error reading", err)
	return
}
fmt.Println("Result data:")
result.DumpValues()
Output:

Connection :  Adabas url=54712 fnr=0
Limit query data:
Read logical data:
Result data:
Dump all result values
Record Isn: 0383
Record Quantity: 0001
  AA = > 11100302 <
  AB = [ 1 ]
   AC = > ROSWITHA             <
   AE = > HAIBACH              <
   AD = > ELLEN                <
Example (ReadFileDefinitionMapGroup)
err := initLogWithFile("connection_map.log")
if err != nil {
	fmt.Println(err)
	return
}

connection, cerr := NewConnection("acj;map;config=[" + adabasStatDBIDs + ",4]")
if cerr != nil {
	return
}
defer connection.Close()
request, rerr := connection.CreateMapReadRequest("EMPLOYEES-NAT-DDM")
if rerr != nil {
	fmt.Println("Error create request", rerr)
	return
}
err = request.QueryFields("FULL-NAME,PERSONNEL-ID,SALARY")
if err != nil {
	fmt.Println("Error query fields for request", err)
	return
}
request.Limit = 0
fmt.Println("Read logigcal data:")
var result *Response
result, err = request.ReadLogicalWith("PERSONNEL-ID=[11100315:11100316]")
if err != nil {
	fmt.Println("Error read logical data", err)
	return
}
result.DumpValues()
Output:

Read logigcal data:
Dump all result values
Record Isn: 0261
  PERSONNEL-ID = > 11100315 <
  FULL-NAME = [ 1 ]
   FIRST-NAME = > GLORIA               <
   NAME = > MERTEN               <
   MIDDLE-I = > E <
  INCOME = [ 2 ]
   SALARY[01] = > 19076 <
   SALARY[02] = > 18000 <
Record Isn: 0262
  PERSONNEL-ID = > 11100316 <
  FULL-NAME = [ 1 ]
   FIRST-NAME = > HEINZ                <
   NAME = > RAMSER               <
   MIDDLE-I = > E <
  INCOME = [ 1 ]
   SALARY[01] = > 28307 <
Example (ReadIsn)
initLogWithFile("connection.log")
connection, cerr := NewConnection("acj;target=" + adabasModDBIDs)
if cerr != nil {
	return
}
defer connection.Close()
request, err := connection.CreateFileReadRequest(11)
if err != nil {
	fmt.Println("Error create request: ", err)
	return
}
fmt.Println("Connection : ", connection)

fmt.Println("Read ISN 250:")
var result *Response
result, err = request.ReadISN(250)
if err != nil {
	fmt.Println("Error reading ISN: ", err)
	return
}
fmt.Println("Result data:")
result.DumpValues()
Output:

Connection :  Adabas url=23 fnr=0
Read ISN 250:
Result data:
Dump all result values
Record Isn: 0250
  AA = > 11222222 <
  AB = [ 1 ]
   AC = > ANTONIA              <
   AE = > MARTENS              <
   AD = > MARIA                <
  AF = > S <
  AG = > F <
  AH = > 713104 <
  A1 = [ 1 ]
   AI = [ 3 ]
    AI[01] = > C/O H.KOERBER        <
    AI[02] = > AM DORNKAMP 20       <
    AI[03] = > 4590 CLOPPENBURG     <
   AJ = > CLOPPENBURG          <
   AK = > 4590       <
   AL = > D   <
  A2 = [ 1 ]
   AN = > 04471  <
   AM = > 3082            <
  AO = > MGMT00 <
  AP = > DATENSCHUTZBEAUFTRAGTE    <
  AQ = [ 3 ]
   AR[01] = > EUR <
   AS[01] = > 29743 <
   AT[01] = [ 2 ]
    AT[01,01] = > 4615 <
    AT[01,02] = > 8000 <
   AR[02] = > EUR <
   AS[02] = > 22153 <
   AT[02] = [ 2 ]
    AT[02,01] = > 3589 <
    AT[02,02] = > 6000 <
   AR[03] = > EUR <
   AS[03] = > 20769 <
   AT[03] = [ 1 ]
    AT[03,01] = > 1538 <
  A3 = [ 1 ]
   AU = > 33 <
   AV = > 4 <
  AW = [ 2 ]
   AX[01] = > 19980701 <
   AY[01] = > 19980702 <
   AX[02] = > 19980811 <
   AY[02] = > 19980812 <
  AZ = [ 2 ]
   AZ[01] = > GER <
   AZ[02] = > TUR <
  PH = >  <
  H1 = > 3304 <
  S1 = > MGMT <
  S2 = > MGMT00MARTENS              <
  S3 = >  <
Example (ReadLogicalWith)
initLogWithFile("connection.log")
connection, cerr := NewConnection("acj;target=" + adabasModDBIDs)
if cerr != nil {
	return
}
defer connection.Close()
request, err := connection.CreateFileReadRequest(11)
if err != nil {
	fmt.Println("Error read map : ", err)
	return
}
fmt.Println("Connection : ", connection)

fmt.Println("Limit query data:")
request.QueryFields("AA,AB")
request.Limit = 2
var result *Response
fmt.Println("Read logical data:")
result, err = request.ReadLogicalWith("AA=[11100301:11100303]")
if err != nil {
	fmt.Println("Error reading", err)
	return
}
fmt.Println("Result data:")
result.DumpValues()
Output:

Connection :  Adabas url=23 fnr=0
Limit query data:
Read logical data:
Result data:
Dump all result values
Record Isn: 0251
  AA = > 11100301 <
  AB = [ 1 ]
   AC = > HANS                 <
   AE = > BERGMANN             <
   AD = > WILHELM              <
Record Isn: 0383
  AA = > 11100302 <
  AB = [ 1 ]
   AC = > ROSWITHA             <
   AE = > HAIBACH              <
   AD = > ELLEN                <
Example (ReadLongMapIsn)
err := initLogWithFile("connection_map.log")
if err != nil {
	fmt.Println(err)
	return
}

adatypes.Central.Log.Infof("TEST: ExampleAdabas_readFileDefinitionMap")

connection, cerr := NewConnection("acj;map;config=[" + adabasStatDBIDs + ",4]")
if cerr != nil {
	return
}
defer connection.Close()

request, rerr := connection.CreateMapReadRequest("EMPLOYEES")
if rerr != nil {
	fmt.Println("Error create request", rerr)
	return
}
err = request.QueryFields("*")
if err != nil {
	fmt.Println("Error query fields", err)
	return
}
request.Limit = 0
var result *Response
fmt.Println("Read logigcal data:")
result, err = request.ReadISN(1)
for _, v := range result.Values {
	f, e := v.SearchValue("creation_time")
	f.SetValue(0)
	f, e = v.SearchValue("Last_Updates[01]")
	if err != nil || f == nil {
		fmt.Println(e)
		return
	}
	f.SetValue(0)
}

fmt.Println(result.String())
Output:

Read logigcal data:
Record Isn: 0001
  personnel-data = [ 1 ]
   personnel-id = > 50005800 <
   id-data = [ 1 ]
    personnel-no_-UQ_taken- = > 0 <
    id-card = > 0 <
    signature = >  <
  full-name = [ 1 ]
   first-name = > Simone <
   middle-name = >   <
   name = > Adam <
  mar-stat = > M <
  sex = > F <
  birth = > 718460 <
  private-address = [ 1 ]
   address-line[01] = [ 1 ]
    address-line[01,01] = > 26 Avenue Rhin Et Da <
   city[01] = > Joigny <
   post-code[01] = > 89300 <
   country[01] = > F <
   phone-email[01] = [ 1 ]
    area-code[01] = > 1033 <
    private-phone[01] = > 44864858 <
    private-fax[01] = >   <
    private-mobile[01] = >   <
    private-email[01] = [ 0 ]
  business-address = [ 0 ]
  dept = > VENT59 <
  job-title = > Chef de Service <
  income = [ 1 ]
   curr-code[01] = > EUR <
   salary_P9.2[01] = > 963 <
   bonus_P9.2[01] = [ 1 ]
    bonus_P9.2[01,01] = > 138 <
  total_income_-EUR- = > 0.000000 <
  leave-date = [ 1 ]
   leave-due = > 19 <
   leave-taken_N2.1 = > 5 <
  leave-booked = [ 1 ]
   leave-start[01] = > 20070801 <
   leave-end[01] = > 20070831 <
  language = [ 2 ]
   language[01] = > FRE <
   language[02] = > ENG <
  last_update_--TIMX- = > 0 <
  picture = >  <
  documents = [ 0 ]
  creation_time = > 0 <
  Last_Updates = [ 1 ]
   Last_Updates[01] = > 0 <
Example (ReadLongMapRange)
err := initLogWithFile("connection_map.log")
if err != nil {
	fmt.Println(err)
	return
}

adatypes.Central.Log.Infof("TEST: ExampleAdabas_readFileDefinitionMap")

connection, cerr := NewConnection("acj;map;config=[" + adabasStatDBIDs + ",4]")
if cerr != nil {
	return
}
defer connection.Close()

request, rerr := connection.CreateMapReadRequest("EMPLOYEES")
if rerr != nil {
	fmt.Println("Error create request", rerr)
	return
}
err = request.QueryFields("*")
if err != nil {
	return
}
request.Limit = 0
var result *Response
fmt.Println("Read logigcal data:")
result, err = request.ReadLogicalWith("personnel-id=[50005800:50005801]")
for _, v := range result.Values {
	f, e := v.SearchValue("creation_time")
	f.SetValue(0)
	f, e = v.SearchValue("Last_Updates[01]")
	if err != nil || f == nil {
		fmt.Println(e)
		return
	}
	f.SetValue(0)
}
result.DumpValues()
Output:

Read logigcal data:
Dump all result values
Record Isn: 0001
  personnel-data = [ 1 ]
   personnel-id = > 50005800 <
   id-data = [ 1 ]
    personnel-no_-UQ_taken- = > 0 <
    id-card = > 0 <
    signature = >  <
  full-name = [ 1 ]
   first-name = > Simone <
   middle-name = >   <
   name = > Adam <
  mar-stat = > M <
  sex = > F <
  birth = > 718460 <
  private-address = [ 1 ]
   address-line[01] = [ 1 ]
    address-line[01,01] = > 26 Avenue Rhin Et Da <
   city[01] = > Joigny <
   post-code[01] = > 89300 <
   country[01] = > F <
   phone-email[01] = [ 1 ]
    area-code[01] = > 1033 <
    private-phone[01] = > 44864858 <
    private-fax[01] = >   <
    private-mobile[01] = >   <
    private-email[01] = [ 0 ]
  business-address = [ 0 ]
  dept = > VENT59 <
  job-title = > Chef de Service <
  income = [ 1 ]
   curr-code[01] = > EUR <
   salary_P9.2[01] = > 963 <
   bonus_P9.2[01] = [ 1 ]
    bonus_P9.2[01,01] = > 138 <
  total_income_-EUR- = > 0.000000 <
  leave-date = [ 1 ]
   leave-due = > 19 <
   leave-taken_N2.1 = > 5 <
  leave-booked = [ 1 ]
   leave-start[01] = > 20070801 <
   leave-end[01] = > 20070831 <
  language = [ 2 ]
   language[01] = > FRE <
   language[02] = > ENG <
  last_update_--TIMX- = > 0 <
  picture = >  <
  documents = [ 0 ]
  creation_time = > 0 <
  Last_Updates = [ 1 ]
   Last_Updates[01] = > 0 <
Record Isn: 1251
  personnel-data = [ 1 ]
   personnel-id = > 50005801 <
   id-data = [ 1 ]
    personnel-no_-UQ_taken- = > 0 <
    id-card = > 0 <
    signature = >  <
  full-name = [ 1 ]
   first-name = > वासुदेव <
   middle-name = > मूर्ती <
   name = > कुमार <
  mar-stat = > M <
  sex = > M <
  birth = > 721484 <
  private-address = [ 1 ]
   address-line[01] = [ 1 ]
    address-line[01,01] = > ह-1,दिशा स्क्यलैइन म <
   city[01] = > नोयडा <
   post-code[01] = > 201301 <
   country[01] = > IND <
   phone-email[01] = [ 1 ]
    area-code[01] = > 01189 <
    private-phone[01] = > 233449 <
    private-fax[01] = >   <
    private-mobile[01] = >   <
    private-email[01] = [ 0 ]
  business-address = [ 0 ]
  dept = > COMP02 <
  job-title = > सीनियर प्रोग्रामर <
  income = [ 1 ]
   curr-code[01] = > INR <
   salary_P9.2[01] = > 45000 <
   bonus_P9.2[01] = [ 5 ]
    bonus_P9.2[01,01] = > 5000 <
    bonus_P9.2[01,02] = > 5000 <
    bonus_P9.2[01,03] = > 5000 <
    bonus_P9.2[01,04] = > 5000 <
    bonus_P9.2[01,05] = > 5000 <
  total_income_-EUR- = > 0.000000 <
  leave-date = [ 1 ]
   leave-due = > 8 <
   leave-taken_N2.1 = > 7 <
  leave-booked = [ 1 ]
   leave-start[01] = > 20060915 <
   leave-end[01] = > 20060922 <
  language = [ 2 ]
   language[01] = > HIN <
   language[02] = > ENG <
  last_update_--TIMX- = > 0 <
  picture = >  <
  documents = [ 0 ]
  creation_time = > 0 <
  Last_Updates = [ 1 ]
   Last_Updates[01] = > 0 <
Example (ReadMainframe)
initLogWithFile("mainframe.log")
network := os.Getenv("ADAMFDBID")
if network == "" {
	fmt.Println("Mainframe database not defined")
	return
}
connection, cerr := NewConnection("acj;target=" + network)
if cerr != nil {
	fmt.Println("Connection to database error:", cerr)
	return
}
defer connection.Close()
request, err := connection.CreateFileReadRequest(1)
if err != nil {
	fmt.Println("Error creating read request : ", err)
	return
}
fmt.Println("Connection : ", connection)

fmt.Println("Limit query data:")
request.QueryFields("AA,AB")
request.Limit = 2
fmt.Println("Read logical data:")
var result *Response
result, err = request.ReadLogicalWith("AA=[11100301:11100303]")
if err != nil {
	fmt.Println("Error reading", err)
	return
}
fmt.Println("Result data:")
result.DumpValues()
Output:

Connection :  Adabas url=54712 fnr=0
Limit query data:
Read logical data:
Result data:
Dump all result values
Record Isn: 0251
Record Quantity: 0003
  AA = > 11100301 <
  AB = [ 1 ]
   AC = > HANS                 <
   AE = > BERGMANN             <
   AD = > WILHELM              <
Record Isn: 0383
Record Quantity: 0003
  AA = > 11100302 <
  AB = [ 1 ]
   AC = > ROSWITHA             <
   AE = > HAIBACH              <
   AD = > ELLEN                <
Example (ReadNoMaximumMainframe)
initLogWithFile("mainframe.log")
network := os.Getenv("ADAMFDBID")
if network == "" {
	fmt.Println("Mainframe database not defined")
	return
}
connection, cerr := NewConnection("acj;target=" + network)
if cerr != nil {
	fmt.Println("Connection to database error:", cerr)
	return
}
defer connection.Close()
request, err := connection.CreateFileReadRequest(1)
if err != nil {
	fmt.Println("Error creating read request : ", err)
	return
}
fmt.Println("Connection : ", connection)

fmt.Println("Limit query data:")
err = request.QueryFields("AA,AB")
if err != nil {
	fmt.Println("Error query fields : ", err)
	return
}
request.Limit = 2
fmt.Println("Read logical data:")
var result *Response
result, err = request.ReadLogicalWith("AA=[1100301:11100303)")
if err != nil {
	fmt.Println("Error reading", err)
	return
}
if result == nil {
	fmt.Println("Result empty")
	return
}
if result.Values == nil {
	fmt.Println("Values empty")
	return
}
fmt.Println("Result data:")
result.DumpValues()
Output:

Connection :  Adabas url=54712 fnr=0
Limit query data:
Read logical data:
Result data:
Dump all result values
Record Isn: 0204
Record Quantity: 0017
  AA = > 11100102 <
  AB = [ 1 ]
   AC = > EDGAR                <
   AE = > SCHINDLER            <
   AD = > PETER                <
Record Isn: 0205
Record Quantity: 0017
  AA = > 11100105 <
  AB = [ 1 ]
   AC = > CHRISTIAN            <
   AE = > SCHIRM               <
   AD = >                      <
Example (ReadNoMinimumMainframe)
initLogWithFile("mainframe.log")
network := os.Getenv("ADAMFDBID")
if network == "" {
	fmt.Println("Mainframe database not defined")
	return
}
connection, cerr := NewConnection("acj;target=" + network)
if cerr != nil {
	fmt.Println("Connection to database error:", cerr)
	return
}
defer connection.Close()
request, err := connection.CreateFileReadRequest(1)
if err != nil {
	fmt.Println("Error creating read request : ", err)
	return
}
fmt.Println("Connection : ", connection)

fmt.Println("Limit query data:")
request.QueryFields("AA,AB")
request.Limit = 2
fmt.Println("Read logical data:")
var result *Response
result, err = request.ReadLogicalWith("AA=(11100301:11100303]")
if err != nil {
	fmt.Println("Error reading", err)
	return
}
fmt.Println("Result data:")
result.DumpValues()
Output:

Connection :  Adabas url=54712 fnr=0
Limit query data:
Read logical data:
Result data:
Dump all result values
Record Isn: 0383
Record Quantity: 0002
  AA = > 11100302 <
  AB = [ 1 ]
   AC = > ROSWITHA             <
   AE = > HAIBACH              <
   AD = > ELLEN                <
Record Isn: 0252
Record Quantity: 0002
  AA = > 11100303 <
  AB = [ 1 ]
   AC = > KRISTINA             <
   AE = > FALTER               <
   AD = > MARIA                <
Example (ReadShortMap)
err := initLogWithFile("connection_map.log")
if err != nil {
	fmt.Println(err)
	return
}

adatypes.Central.Log.Infof("TEST: ExampleAdabas_readFileDefinitionMap")

connection, cerr := NewConnection("acj;map;config=[" + adabasStatDBIDs + ",4]")
if cerr != nil {
	return
}
defer connection.Close()

request, rerr := connection.CreateMapReadRequest("EMPLSHORT")
if rerr != nil {
	fmt.Println("Error create request", rerr)
	return
}
err = request.QueryFields("*")
if err != nil {
	return
}
request.Limit = 0
var result *Response
fmt.Println("Read logigcal data:")
result, err = request.ReadLogicalWith("ID=[11100314:11100317]")
result.DumpValues()
Output:

Read logigcal data:
Dump all result values
Record Isn: 0393
  ID = > 11100314 <
  FULL-NAME = [ 1 ]
   FIRST-NAME = > WOLFGANG             <
   NAME = > SCHMIDT              <
   MIDDLE-NAME = > MARIA                <
Record Isn: 0261
  ID = > 11100315 <
  FULL-NAME = [ 1 ]
   FIRST-NAME = > GLORIA               <
   NAME = > MERTEN               <
   MIDDLE-NAME = > ELISABETH            <
Record Isn: 0262
  ID = > 11100316 <
  FULL-NAME = [ 1 ]
   FIRST-NAME = > HEINZ                <
   NAME = > RAMSER               <
   MIDDLE-NAME = > EWALD                <
Record Isn: 0263
  ID = > 11100317 <
  FULL-NAME = [ 1 ]
   FIRST-NAME = > ALFONS               <
   NAME = > DORSCH               <
   MIDDLE-NAME = > FRITZ                <
Example (ReadWithMap)
err := initLogWithFile("connection_map.log")
if err != nil {
	fmt.Println(err)
	return
}

adatypes.Central.Log.Infof("TEST: ExampleAdabas_readFileDefinitionMap")

connection, cerr := NewConnection("acj;map;config=[" + adabasStatDBIDs + ",4]")
if cerr != nil {
	return
}
defer connection.Close()

request, rerr := connection.CreateMapReadRequest("EMPLOYEES-NAT-DDM")
if rerr != nil {
	fmt.Println("Error create request", rerr)
	return
}
err = request.QueryFields("NAME,FIRST-NAME,PERSONNEL-ID")
if err != nil {
	return
}
request.Limit = 0
var result *Response
fmt.Println("Read logigcal data:")
result, err = request.ReadLogicalWith("PERSONNEL-ID=[11100314:11100317]")
result.DumpValues()
Output:

Read logigcal data:
Dump all result values
Record Isn: 0393
  PERSONNEL-ID = > 11100314 <
  FULL-NAME = [ 1 ]
   FIRST-NAME = > WOLFGANG             <
   NAME = > SCHMIDT              <
Record Isn: 0261
  PERSONNEL-ID = > 11100315 <
  FULL-NAME = [ 1 ]
   FIRST-NAME = > GLORIA               <
   NAME = > MERTEN               <
Record Isn: 0262
  PERSONNEL-ID = > 11100316 <
  FULL-NAME = [ 1 ]
   FIRST-NAME = > HEINZ                <
   NAME = > RAMSER               <
Record Isn: 0263
  PERSONNEL-ID = > 11100317 <
  FULL-NAME = [ 1 ]
   FIRST-NAME = > ALFONS               <
   NAME = > DORSCH               <
Example (ReadWithMapFormatted)
err := initLogWithFile("connection_map.log")
if err != nil {
	fmt.Println(err)
	return
}

adatypes.Central.Log.Infof("TEST: ExampleAdabas_readFileDefinitionMap")

connection, cerr := NewConnection("acj;map;config=[" + adabasStatDBIDs + ",4]")
if cerr != nil {
	return
}
defer connection.Close()

request, rerr := connection.CreateMapReadRequest("EMPLOYEES-NAT-DDM")
if rerr != nil {
	fmt.Println("Error create request", rerr)
	return
}
err = request.QueryFields("NAME,FIRST-NAME,PERSONNEL-ID,BIRTH")
if err != nil {
	return
}
request.Limit = 0
var result *Response
fmt.Println("Read logigcal data:")
result, err = request.ReadLogicalWith("PERSONNEL-ID=[11100314:11100317]")
result.DumpValues()
Output:

Read logigcal data:
Dump all result values
Record Isn: 0393
  PERSONNEL-ID = > 11100314 <
  FULL-NAME = [ 1 ]
   FIRST-NAME = > WOLFGANG             <
   NAME = > SCHMIDT              <
  BIRTH = > 1953/08/18 <
Record Isn: 0261
  PERSONNEL-ID = > 11100315 <
  FULL-NAME = [ 1 ]
   FIRST-NAME = > GLORIA               <
   NAME = > MERTEN               <
  BIRTH = > 1949/11/02 <
Record Isn: 0262
  PERSONNEL-ID = > 11100316 <
  FULL-NAME = [ 1 ]
   FIRST-NAME = > HEINZ                <
   NAME = > RAMSER               <
  BIRTH = > 1978/12/23 <
Record Isn: 0263
  PERSONNEL-ID = > 11100317 <
  FULL-NAME = [ 1 ]
   FIRST-NAME = > ALFONS               <
   NAME = > DORSCH               <
  BIRTH = > 1948/02/29 <
Example (Store)
err := initLogWithFile("connection.log")
if err != nil {
	return
}

if cErr := clearFile(16); cErr != nil {
	return
}
if cErr := clearFile(19); cErr != nil {
	return
}

connection, err := NewConnection("acj;target=" + adabasModDBIDs)
if err != nil {
	return
}
defer connection.Close()
connection.Open()
storeRequest16, rErr := connection.CreateStoreRequest(16)
if err != nil {
	return
}
storeRequest16.StoreFields("AA,AB")
record, err := storeRequest16.CreateRecord()
err = record.SetValueWithIndex("AA", nil, "16555_0")
err = record.SetValueWithIndex("AC", nil, "WABER")
err = record.SetValueWithIndex("AD", nil, "EMIL")
err = record.SetValueWithIndex("AE", nil, "MERK")
err = storeRequest16.Store(record)
if err != nil {
	return
}
storeRequest19, rErr := connection.CreateStoreRequest(19)
if rErr != nil {
	return
}
storeRequest19.StoreFields("AA,CD")
record, err = storeRequest19.CreateRecord()
err = record.SetValueWithIndex("AA", nil, "19555_0")
err = record.SetValueWithIndex("AC", nil, "WABER")
err = record.SetValueWithIndex("AD", nil, "EMIL")
err = record.SetValueWithIndex("AE", nil, "MERK")
err = storeRequest19.Store(record)
if err != nil {
	return
}

err = connection.EndTransaction()
if err != nil {
	return
}
fmt.Println("Read file 16 ...")
dumpStoredData(adabasModDBIDs, 16, "16555")
fmt.Println("Read file 19 ...")
dumpStoredData(adabasModDBIDs, 19, "19555")
Output:

Read file 16 ...
Dump all result values
Record Isn: 0001
  AA = > 16555_0  <
  AB = [ 1 ]
   AC = > WABER                <
   AE = > MERK                 <
   AD = > EMIL                 <
Read file 19 ...
Dump all result values
Record Isn: 0001
  AA = > 19555_0         <
  CD = [ 1 ]
   AD = > EMIL                 <
   AE = > MERK                 <
   AF = >            <
Example (WideCharacter)
initLogWithFile("connection.log")
connection, cerr := NewConnection("acj;target=" + adabasModDBIDs)
if cerr != nil {
	return
}
defer connection.Close()
request, err := connection.CreateFileReadRequest(9)
if err != nil {
	fmt.Println("Error read map : ", err)
	return
}
fmt.Println("Connection : ", connection)

fmt.Println("Limit query data:")
request.QueryFields("B0,F0,KA")
request.Limit = 2
fmt.Println("Read logical data:")
result, rErr := request.ReadISN(1200)
if rErr != nil {
	fmt.Println("Error reading", rErr)
	return
}
fmt.Println("Result data:")
result.DumpValues()
result, rErr = request.ReadISN(1250)
if rErr != nil {
	fmt.Println("Error reading", rErr)
	return
}
fmt.Println("Result data:")
result.DumpValues()
result, rErr = request.ReadISN(1270)
if rErr != nil {
	fmt.Println("Error reading", rErr)
	return
}
fmt.Println("Result data:")
result.DumpValues()
Output:

Connection :  Adabas url=23 fnr=0
Limit query data:
Read logical data:
Result data:
Dump all result values
Record Isn: 1200
  B0 = [ 1 ]
   BA = > Karin                                    <
   BB = >                                          <
   BC = > Norlin                                             <
  F0 = [ 1 ]
   FA[01] = [ 1 ]
    FA[01,01] = >  Trångsund 4                                                <
   FB[01] = > STOCKHOLM                                <
   FC[01] = > 111 29     <
   FD[01] = > S   <
   F1[01] = [ 1 ]
    FE[01] = >  08    <
    FF[01] = > 659803          <
    FG[01] = >                 <
    FH[01] = >                 <
    FI[01] = [ 0 ]
  KA = > försäljningsrepresentant                                         <
Result data:
Dump all result values
Record Isn: 1250
  B0 = [ 1 ]
   BA = > Игорь                               <
   BB = > Петрович                         <
   BC = > Михайлов                                   <
  F0 = [ 1 ]
   FA[01] = [ 1 ]
    FA[01,01] = > Ивановская 26-5                                    <
   FB[01] = > Санкт-Петербург            <
   FC[01] = > 190202     <
   FD[01] = > RUS <
   F1[01] = [ 1 ]
    FE[01] = > 812    <
    FF[01] = > 8781132         <
    FG[01] = >                 <
    FH[01] = >                 <
    FI[01] = [ 0 ]
  KA = > директор                                                   <
Result data:
Dump all result values
Record Isn: 1270
  B0 = [ 1 ]
   BA = > महेश                             <
   BB = > जाधव                             <
   BC = > कुलदीप                                 <
  F0 = [ 1 ]
   FA[01] = [ 1 ]
    FA[01,01] = > 18-क/12 रानीगंज कैला                 <
   FB[01] = > जयपुर                          <
   FC[01] = > 302001     <
   FD[01] = > IND <
   F1[01] = [ 1 ]
    FE[01] = > 06726  <
    FF[01] = > 672309          <
    FG[01] = >                 <
    FH[01] = >                 <
    FI[01] = [ 0 ]
  KA = > रीसेपसणिस्त                                  <

func NewConnection

func NewConnection(connectionString string) (*Connection, error)

NewConnection create new Adabas connection instance The target url will look like <dbid>(<driver prefix>://<host>:<port>). Examples are:

  • Database id: 23
  • Adabas TCP on port 60023: 23(adatcp://pchost:60023)
  • Adabas Entire Network (Java only): 23(tcpip://pchost:50001)

The connection string must contain:

  • To access database classic targets acj;target=<database url>
  • Map usage acj;map;config=[<dbid>,<file>]

func NewConnectionID

func NewConnectionID(connectionString string, adabasID *ID) (connection *Connection, err error)

NewConnectionID create new Adabas connection instance providing a Adabas ID The target url will look like <dbid>(<driver prefix>://<host>:<port>). Examples are:

  • Database id: 23
  • Adabas TCP on port 60023: 23(adatcp://pchost:60023)
  • Adabas Entire Network (Java only): 23(tcpip://pchost:50001)

The connection string must contain:

  • To access database classic targets acj;target=<database url>
  • Map usage acj;map;config=[<dbid>,<file>]

func (*Connection) AddCredential added in v1.1.2

func (connection *Connection) AddCredential(user string, pwd string)

AddCredential add user id and password credentials

func (*Connection) Close

func (connection *Connection) Close()

Close close Adabas session

func (*Connection) CreateDeleteRequest

func (connection *Connection) CreateDeleteRequest(fnr Fnr) (*DeleteRequest, error)

CreateDeleteRequest create a delete request

func (*Connection) CreateFileReadRequest added in v1.1.1

func (connection *Connection) CreateFileReadRequest(fnr Fnr) (*ReadRequest, error)

CreateFileReadRequest create a read request

func (*Connection) CreateMapDeleteRequest

func (connection *Connection) CreateMapDeleteRequest(mapName string) (request *DeleteRequest, err error)

CreateMapDeleteRequest create a read request using a given map

func (*Connection) CreateMapReadRequest

func (connection *Connection) CreateMapReadRequest(mapName string) (request *ReadRequest, err error)

CreateMapReadRequest create a read request using a given map

func (*Connection) CreateMapStoreRequest

func (connection *Connection) CreateMapStoreRequest(mapName string) (request *StoreRequest, err error)

CreateMapStoreRequest create a store request using map name

func (*Connection) CreateReadRequest

func (connection *Connection) CreateReadRequest() (request *ReadRequest, err error)

CreateReadRequest create a read request

func (*Connection) CreateStoreRequest

func (connection *Connection) CreateStoreRequest(fnr Fnr) (*StoreRequest, error)

CreateStoreRequest create a store request

func (*Connection) EndTransaction

func (connection *Connection) EndTransaction() error

EndTransaction current transaction is finally stored in the database

func (*Connection) Open

func (connection *Connection) Open() error

Open open Adabas session

func (*Connection) Release

func (connection *Connection) Release() error

Release any database resources, like command id caches assigned to a user

func (*Connection) String

func (connection *Connection) String() string

String provide the string representation of the connection

type Cursoring added in v1.1.1

type Cursoring struct {
	// contains filtered or unexported fields
}

Cursoring the structure support cursor instance handling reading record list in chunks defined by a search or descriptor

func (*Cursoring) HasNextRecord added in v1.1.1

func (cursor *Cursoring) HasNextRecord() (hasNext bool)

HasNextRecord check cursoring if a next record exist in the query

func (*Cursoring) NextRecord added in v1.1.1

func (cursor *Cursoring) NextRecord() (record *Record, err error)

NextRecord cursoring to next record, if current chunk contains record, no call is send. If the chunk is not in memory, the next chunk is read in memory

type DatabaseURL

type DatabaseURL struct {
	URL URL `json:"Target"`
	Fnr Fnr `json:"File"`
}

DatabaseURL defines the target URL of a database file. Might be a database data file or a map repository

type Dbid

type Dbid uint32

Dbid Adabas database identifier

type DeleteRequest

type DeleteRequest struct {
	// contains filtered or unexported fields
}

DeleteRequest request instance handling data store and update

func NewDeleteRequest

func NewDeleteRequest(url string, fnr Fnr) (*DeleteRequest, error)

NewDeleteRequest create a new store Request instance

func NewDeleteRequestAdabas

func NewDeleteRequestAdabas(adabas *Adabas, fnr Fnr) *DeleteRequest

NewDeleteRequestAdabas create a new Request instance

func NewMapDeleteRequest

func NewMapDeleteRequest(adabas *Adabas, adabasMap *Map) (request *DeleteRequest, err error)

NewMapDeleteRequest create a new Map Delete Request instance

func NewMapNameDeleteRequest

func NewMapNameDeleteRequest(adabas *Adabas, mapName string) (request *DeleteRequest, err error)

NewMapNameDeleteRequest create a new Request instance

func NewMapNameDeleteRequestRepo added in v1.1.1

func NewMapNameDeleteRequestRepo(mapName string, adabas *Adabas, mapRepository *Repository) (request *DeleteRequest, err error)

NewMapNameDeleteRequestRepo create a new delete Request instance

func (*DeleteRequest) BackoutTransaction added in v1.1.1

func (request *DeleteRequest) BackoutTransaction() error

Backout closes the Adabas session

func (*DeleteRequest) Close

func (request *DeleteRequest) Close()

Close closes the Adabas session

func (*DeleteRequest) Delete

func (deleteRequest *DeleteRequest) Delete(isn adatypes.Isn) (err error)

Delete delete a specific isn

func (*DeleteRequest) EndTransaction

func (request *DeleteRequest) EndTransaction() error

Endtransaction end the transaction of the Adabas session

func (*DeleteRequest) IsOpen

func (request *DeleteRequest) IsOpen() bool

IsOpen provide True if the database connection is opened

func (*DeleteRequest) Open

func (deleteRequest *DeleteRequest) Open() (err error)

Open Open the Adabas session

func (*DeleteRequest) TraverseFields added in v1.2.1

func (request *DeleteRequest) TraverseFields(t adatypes.TraverserMethods, p interface{}) error

type Error

type Error struct {
	When        time.Time
	Code        string
	Message     string
	Response    uint16
	SubResponse uint16
	Addition2   [4]byte
}

Error error message with code and time

func NewError

func NewError(adbas *Adabas) *Error

NewError Create new Adabas errror

func (Error) Error

func (e Error) Error() string

Error error main interface function, providing message error code and message

type Fnr added in v1.1.1

type Fnr uint32

Fnr Adabas file number identifier

type ID

type ID struct {
	AdaID *AID
	// contains filtered or unexported fields
}

ID Adabas Id

func NewAdabasID

func NewAdabasID() *ID

NewAdabasID create a new Adabas ID instance

func (*ID) AddCredential added in v1.1.2

func (adaid *ID) AddCredential(user string, pwd string)

AddCredential add user id and password credentials

func (*ID) SetHost added in v1.1.1

func (adaid *ID) SetHost(Host string)

SetHost set the host id name into the ID, prepare byte array correctly

func (*ID) SetID added in v1.1.1

func (adaid *ID) SetID(pid uint32)

SetID set the pid into the ID, prepare byte array correctly

func (*ID) SetUser added in v1.1.1

func (adaid *ID) SetUser(User string)

SetUser set the user id name into the ID, prepare byte array correctly

func (*ID) String

func (adaid *ID) String() string

String return string representation of Adabas ID

type Map

type Map struct {
	Name       string       `json:"Name"`
	Isn        adatypes.Isn `json:"Isn"`
	Repository *DatabaseURL
	Data       *DatabaseURL `json:"Data"`
	Fields     []*MapField  `json:"Fields"`
	// Time of last modification of the map
	Generated        uint64
	ModificationTime []uint64
	// contains filtered or unexported fields
}

Map Adabas map structure defining repository where the Map is stored at

func AllGlobalMaps added in v1.2.1

func AllGlobalMaps(adabas *Adabas) (maps []*Map, err error)

AllGlobalMaps search in map repository all maps

func LoadJSONMap added in v1.1.1

func LoadJSONMap(file string) (maps []*Map, err error)

LoadJSONMap load JSON Map file and creates Map instance of that

func NewAdabasMap

func NewAdabasMap(name string, repository *DatabaseURL) *Map

NewAdabasMap create new Adabas map instance

func ParseJSONFileForFields

func ParseJSONFileForFields(file *os.File) (mapList []*Map, err error)

ParseJSONFileForFields Parse JSON map export file

Example
lerr := initLogWithFile("mapjson.log")
if lerr != nil {
	fmt.Println("Init log error", lerr)
	return
}

p := os.Getenv("TESTFILES")
if p == "" {
	p = "."
}
name := p + string(os.PathSeparator) + "Maps.json"
fmt.Println("Loading ....Maps.json")
file, err := os.Open(name)
if err != nil {
	return
}
defer file.Close()

maps, err := ParseJSONFileForFields(file)
if err != nil {
	fmt.Println("Error parsing file", err)
	return
}
fmt.Println("Number of maps", len(maps))
for _, m := range maps {
	fmt.Println("MAP", m.Name)
	fmt.Printf("  %s %d\n", m.Data.URL.String(), m.Data.Fnr)
	for _, f := range m.Fields {
		fmt.Printf("   ln=%s sn=%s len=%d format=%s content=%s\n", f.LongName, f.ShortName, f.Length, f.FormatType, f.ContentType)
	}

}
Output:

Loading ....Maps.json
Number of maps 17
MAP NEW_EMPLOYEES
  23 9
   ln=personnel-data sn=A0 len=8 format=  content=
   ln=personnel-id sn=AA len=8 format=A content=
   ln=id-data sn=AB len=12 format=  content=
   ln=personnel-no sn=AC len=4 format=I content=
   ln=id-card sn=AD len=8 format=B content=
   ln=signature sn=AE len=0 format=A content=
   ln=full-name sn=B0 len=130 format=  content=
   ln=first-name sn=BA len=40 format=U content=charset=UTF-8
   ln=middle-name sn=BB len=40 format=U content=charset=UTF-8
   ln=name sn=BC len=50 format=U content=charset=UTF-8
   ln=mar-stat sn=CA len=1 format=A content=
   ln=sex sn=DA len=1 format=A content=
   ln=birth sn=EA len=4 format=D content=
   ln=private-address sn=F0 len=113 format=  content=
   ln=p-address-line sn=FA len=60 format=U content=charset=UTF-8
   ln=p-address-line sn=FA len=60 format=U content=charset=UTF-8
   ln=p-city sn=FB len=40 format=U content=charset=UTF-8
   ln=p-post-code sn=FC len=10 format=A content=
   ln=p-country sn=FD len=3 format=A content=
   ln=p-phone-email sn=F1 len=131 format=  content=
   ln=p-area-code sn=FE len=6 format=A content=
   ln=private-phone sn=FF len=15 format=A content=
   ln=private-fax sn=FG len=15 format=A content=
   ln=private-mobile sn=FH len=15 format=A content=
   ln=private-email sn=FI len=80 format=A content=
   ln=private-email sn=FI len=80 format=A content=
   ln=business-address sn=I0 len=98 format=  content=
   ln=b-address-line sn=IA len=40 format=U content=charset=UTF-8
   ln=b-address-line sn=IA len=40 format=U content=charset=UTF-8
   ln=b-city sn=IB len=40 format=U content=charset=UTF-8
   ln=b-post-code sn=IC len=10 format=A content=
   ln=b-country sn=ID len=3 format=A content=
   ln=room_number sn=IE len=5 format=A content=
   ln=b-phone-email sn=I1 len=131 format=  content=
   ln=b-area-code sn=IF len=6 format=A content=
   ln=business-phone sn=IG len=15 format=A content=
   ln=business-fax sn=IH len=15 format=A content=
   ln=business-mobile sn=II len=15 format=A content=
   ln=business-email sn=IJ len=80 format=A content=
   ln=business-email sn=IJ len=80 format=A content=
   ln=job-title sn=KA len=66 format=U content=charset=UTF-8
   ln=income sn=L0 len=15 format=  content=
   ln=curr-code sn=LA len=3 format=A content=
   ln=salary sn=LB len=6 format=P content=
   ln=bonus sn=LC len=6 format=P content=
   ln=bonus sn=LC len=6 format=P content=
   ln=total-income sn=MA len=4 format=F content=
   ln=leave-date sn=N0 len=5 format=  content=
   ln=leave-due sn=NA len=2 format=N content=
   ln=leave-taken sn=NB len=3 format=N content=
   ln=leave-booked sn=O0 len=16 format=  content=
   ln=leave-start sn=OA len=8 format=N content=
   ln=leave-end sn=OB len=8 format=N content=
   ln=language sn=PA len=3 format=A content=
   ln=language sn=PA len=3 format=A content=
   ln=last-update sn=QA len=7 format=P content=
   ln=picture sn=RA len=0 format=A content=
   ln=documents sn=S0 len=83 format=  content=
   ln=document-description sn=SA len=80 format=U content=charset=UTF-8
   ln=document-type sn=SB len=3 format=A content=
   ln=document sn=SC len=0 format=A content=
   ln=document sn=SC len=0 format=A content=
   ln=creation_time sn=TC len=20 format=N content=
   ln=Last_Updates sn=TU len=20 format=N content=
   ln=Last_Updates sn=TU len=20 format=N content=
MAP ADABAS_MAP
  23 4
   ln=TYPE-GROUP sn=TY len=0 format=  content=
   ln=TYPE sn=TA len=1 format=B content=
   ln=GENERATED sn=AA len=28 format=  content=
   ln=HOST sn=AB len=20 format=A content=
   ln=DATE sn=AC len=8 format=B content=
   ln=VERSION sn=AD len=2 format=B content=
   ln=LOCATION sn=RA len=45 format=  content=
   ln=FILE-NR sn=RF len=4 format=B content=
   ln=DATA-DATABASE sn=RD len=20 format=A content=
   ln=MAPNAME sn=RN len=20 format=A content=
   ln=MAP-FLAGS sn=RB len=1 format=B content=
   ln=MAP-OPTIONS sn=RO len=20 format=A content=
   ln=INDEX sn=DL len=4 format=  content=
   ln=INDEX-FILE sn=DF len=4 format=B content=
   ln=INDEX-DATABASE sn=DD len=20 format=A content=
   ln=MAPPING sn=MA len=68 format=  content=
   ln=SHORTNAME sn=MB len=20 format=A content=
   ln=TYPE-CONVERSION sn=MC len=4 format=B content=
   ln=LONGNAME sn=MD len=20 format=A content=
   ln=LENGTH sn=ML len=4 format=B content=
   ln=CONTENTTYPE sn=MT len=20 format=A content=
   ln=FORMATTYPE sn=MY len=2 format=A content=
   ln=TIMESTAMP sn=ZB len=8 format=B content=
   ln=TIMESTAMP sn=ZB len=8 format=B content=
MAP EMPLOYEES-NAT-DDM
  23 11
   ln=PERSONNEL-ID sn=AA len=8 format=A content=
   ln=FULL-NAME sn=AB len=21 format=  content=
   ln=FIRST-NAME sn=AC len=20 format=A content=
   ln=NAME sn=AE len=20 format=A content=
   ln=MIDDLE-I sn=AD len=1 format=A content=
   ln=MAR-STAT sn=AF len=1 format=A content=
   ln=SEX sn=AG len=1 format=A content=
   ln=BIRTH sn=AH len=4 format=D content=
   ln=FULL-ADDRESS sn=A1 len=50 format=  content=
   ln=ADDRESS-LINE sn=AI len=20 format=A content=
   ln=ADDRESS-LINE sn=AI len=20 format=A content=
   ln=CITY sn=AJ len=20 format=A content=
   ln=ZIP sn=AK len=10 format=A content=
   ln=COUNTRY sn=AL len=3 format=A content=
   ln=TELEPHONE sn=A2 len=6 format=  content=
   ln=AREA-CODE sn=AN len=6 format=A content=
   ln=PHONE sn=AM len=15 format=A content=
   ln=DEPT sn=AO len=6 format=A content=
   ln=JOB-TITLE sn=AP len=25 format=A content=
   ln=INCOME sn=AQ len=12 format=  content=
   ln=CURR-CODE sn=AR len=3 format=A content=
   ln=SALARY sn=AS len=9 format=P content=
   ln=BONUS sn=AT len=9 format=P content=
   ln=BONUS sn=AT len=9 format=P content=
   ln=LEAVE-DATA sn=A3 len=2 format=  content=
   ln=LEAVE-DUE sn=AU len=2 format=N content=
   ln=LEAVE-TAKEN sn=AV len=2 format=N content=
   ln=LEAVE-BOOKED sn=AW len=8 format=  content=
   ln=LEAVE-START sn=AX len=8 format=N content=
   ln=LEAVE-END sn=AY len=8 format=N content=
   ln=LANG sn=AZ len=3 format=A content=
   ln=LANG sn=AZ len=3 format=A content=
   ln=PH sn=PH len=0 format=A content=
   ln=LEAVE-LEFT sn=H1 len=0 format=A content=
   ln=DEPARTMENT sn=S1 len=0 format=A content=
   ln=DEPT-PERSON sn=S2 len=0 format=A content=
   ln=CURRENCY-SALARY sn=S3 len=0 format=A content=
MAP LOBEXAMPLE
  23 202
   ln=Generated sn=AA len=16 format=  content=
   ln=Host sn=AB len=0 format=A content=
   ln=Date sn=AC len=8 format=B content=
   ln=Version sn=AD len=8 format=B content=
   ln=Location sn=BA len=0 format=  content=
   ln=Directory sn=BB len=0 format=U content=charset=UTF-8
   ln=Filename sn=BC len=0 format=U content=charset=UTF-8
   ln=absoluteFilename sn=BD len=0 format=U content=charset=UTF-8
   ln=Type sn=CA len=4 format=  content=
   ln=Size sn=CB len=4 format=B content=
   ln=MimeType sn=CC len=0 format=U content=charset=UTF-8
   ln=Data sn=DA len=0 format=  content=
   ln=Thumbnail sn=DB len=0 format=A content=
   ln=Picture sn=DC len=0 format=A content=
   ln=Checksum sn=EA len=80 format=  content=
   ln=ThumbnailSHAchecksum sn=EB len=40 format=A content=
   ln=PictureSHAchecksum sn=EC len=40 format=A content=
   ln=EXIFinformation sn=FA len=0 format=  content=
   ln=Model sn=FB len=0 format=U content=charset=UTF-8
   ln=Orientation sn=FC len=0 format=U content=charset=UTF-8
   ln=DateExif sn=FD len=0 format=U content=charset=UTF-8
   ln=DateOriginal sn=FE len=0 format=U content=charset=UTF-8
   ln=ExposureTime sn=FF len=0 format=U content=charset=UTF-8
   ln=F-Number sn=FG len=0 format=U content=charset=UTF-8
   ln=Width sn=FH len=0 format=U content=charset=UTF-8
   ln=Height sn=FI len=0 format=U content=charset=UTF-8
MAP VEHICLES
  23 12
   ln=REG-NUM sn=AA len=15 format=A content=
   ln=CHASSIS-NUM sn=AB len=4 format=B content=
   ln=PERSONNEL-ID sn=AC len=8 format=A content=
   ln=CAR-DETAILS sn=CD len=40 format=  content=
   ln=MAKE sn=AD len=20 format=A content=
   ln=MODEL sn=AE len=20 format=A content=
   ln=COLOR sn=AF len=10 format=A content=
   ln=YEAR sn=AG len=4 format=N content=
   ln=CLASS sn=AH len=1 format=A content=
   ln=LEASE-PUR sn=AI len=1 format=A content=
   ln=DATE-ACQ sn=AJ len=8 format=N content=
   ln=CURR-CODE sn=AL len=3 format=A content=
   ln=MAINT-COST sn=AM len=7 format=P content=
   ln=MAINT-COST sn=AM len=7 format=P content=
   ln=MODEL-YEAR-MAKE sn=AO len=0 format=A content=
MAP EmployeeMap
  23 11
   ln=Id sn=AA len=-1 format=A content=
   ln=Name sn=AB len=-1 format=  content=
   ln=FirstName sn=AC len=-1 format=A content=
   ln=LastName sn=AE len=-1 format=A content=
   ln=City sn=AJ len=-1 format=A content=
   ln=Department sn=AO len=-1 format=A content=
   ln=JobTitle sn=AP len=-1 format=A content=
   ln=Income sn=AQ len=-1 format=  content=
   ln=Salary sn=AS len=-1 format=A content=
   ln=Bonus sn=AT len=-1 format=A content=
   ln=Bonus sn=AT len=-1 format=A content=
MAP VehicleMap
  23 12
   ln=Vendor sn=AD len=-1 format=A content=
   ln=Model sn=AE len=-1 format=A content=
   ln=Color sn=AF len=-1 format=A content=
MAP LOB_MAP
  23 202
   ln=Location sn=BA len=-1 format=  content=
   ln=Filename sn=BC len=-1 format=A content=
   ln=Type sn=CA len=-1 format=  content=
   ln=MimeType sn=CC len=-1 format=A content=
   ln=Data sn=DA len=-1 format=  content=
   ln=Picture sn=DC len=-1 format=A content=
   ln=Checksum sn=EA len=-1 format=  content=
   ln=PictureSHAchecksum sn=EC len=-1 format=A content=
MAP PictureStore
  23 280
   ln=Generated sn=AA len=20 format=  content=
   ln=Host sn=AB len=0 format=A content=
   ln=Date sn=AC len=8 format=B content=
   ln=Version sn=AD len=12 format=A content=
   ln=Location sn=BA len=0 format=  content=
   ln=Directory sn=BB len=0 format=U content=charset=UTF-8
   ln=Filename sn=BC len=0 format=U content=charset=UTF-8
   ln=absoluteFilename sn=BD len=0 format=U content=charset=UTF-8
   ln=Information sn=IN len=0 format=  content=
   ln=Description sn=ID len=0 format=U content=charset=UTF-8
   ln=Title sn=IT len=0 format=U content=charset=UTF-8
   ln=Type sn=CA len=4 format=  content=
   ln=Size sn=CB len=4 format=B content=
   ln=MimeType sn=CC len=0 format=U content=charset=UTF-8
   ln=Data sn=DA len=0 format=  content=
   ln=Thumbnail sn=DB len=0 format=A content=
   ln=Picture sn=DC len=0 format=A content=
   ln=Checksum sn=EA len=80 format=  content=
   ln=ThumbnailSHAchecksum sn=EB len=40 format=A content=
   ln=PictureSHAchecksum sn=EC len=40 format=A content=
   ln=EXIFinformation sn=FA len=24 format=  content=
   ln=Model sn=FB len=0 format=U content=charset=UTF-8
   ln=Orientation sn=FC len=0 format=U content=charset=UTF-8
   ln=DateExif sn=FD len=8 format=P content=
   ln=DateOriginal sn=FE len=8 format=P content=
   ln=ExposureTime sn=FF len=0 format=U content=charset=UTF-8
   ln=F-Number sn=FG len=0 format=U content=charset=UTF-8
   ln=Width sn=FH len=4 format=B content=
   ln=Height sn=FI len=4 format=B content=
   ln=Tag sn=TA len=0 format=  content=
   ln=TagName sn=TN len=0 format=U content=charset=UTF-8
   ln=TagValue sn=TV len=0 format=U content=charset=UTF-8
   ln=Album sn=AL len=0 format=A content=
   ln=Album sn=AL len=0 format=A content=
MAP LOBSTORE
  23 160
   ln=Generated sn=AA len=16 format=  content=
   ln=Host sn=AB len=0 format=A content=
   ln=Date sn=AC len=8 format=B content=
   ln=Version sn=AD len=8 format=B content=
   ln=Location sn=BA len=0 format=  content=
   ln=Directory sn=BB len=0 format=U content=charset=UTF-8
   ln=Filename sn=BC len=0 format=U content=charset=UTF-8
   ln=absoluteFilename sn=BD len=0 format=U content=charset=UTF-8
   ln=Type sn=CA len=4 format=  content=
   ln=Size sn=CB len=4 format=B content=
   ln=MimeType sn=CC len=0 format=U content=charset=UTF-8
   ln=Data sn=DA len=0 format=  content=
   ln=Thumbnail sn=DB len=0 format=A content=
   ln=Picture sn=DC len=0 format=A content=
   ln=Checksum sn=EA len=80 format=  content=
   ln=ThumbnailSHAchecksum sn=EB len=40 format=A content=
   ln=PictureSHAchecksum sn=EC len=40 format=A content=
   ln=EXIFinformation sn=FA len=0 format=  content=
   ln=Model sn=FB len=0 format=U content=charset=UTF-8
   ln=Orientation sn=FC len=0 format=U content=charset=UTF-8
   ln=DateExif sn=FD len=0 format=U content=charset=UTF-8
   ln=DateOriginal sn=FE len=0 format=U content=charset=UTF-8
   ln=ExposureTime sn=FF len=0 format=U content=charset=UTF-8
   ln=F-Number sn=FG len=0 format=U content=charset=UTF-8
   ln=Width sn=FH len=0 format=U content=charset=UTF-8
   ln=Height sn=FI len=0 format=U content=charset=UTF-8
MAP EmployeeX
  23 11
   ln=PERSONNEL-ID sn=AA len=8 format=A content=
   ln=FULL-NAME sn=AB len=0 format=  content=
   ln=FIRST-NAME sn=AC len=20 format=A content=
   ln=NAME sn=AE len=20 format=A content=
   ln=MIDDLE-I sn=AD len=1 format=A content=
   ln=MAR-STAT sn=AF len=1 format=A content=
   ln=SEX sn=AG len=1 format=A content=
   ln=BIRTH sn=AH len=11 format=P content=
   ln=FULL-ADDRESS sn=A1 len=0 format=  content=
   ln=ADDRESS-LINE sn=AI len=20 format=A content=
   ln=ADDRESS-LINE sn=AI len=20 format=A content=
   ln=CITY sn=AJ len=20 format=A content=
   ln=ZIP sn=AK len=10 format=A content=
   ln=COUNTRY sn=AL len=3 format=A content=
   ln=TELEPHONE sn=A2 len=0 format=  content=
   ln=AREA-CODE sn=AN len=6 format=A content=
   ln=PHONE sn=AM len=15 format=A content=
   ln=DEPT sn=AO len=6 format=A content=
   ln=JOB-TITLE sn=AP len=25 format=A content=
   ln=INCOME sn=AQ len=0 format=  content=
   ln=CURR-CODE sn=AR len=3 format=A content=
   ln=SALARY sn=AS len=9 format=A content=
   ln=BONUS sn=AT len=9 format=A content=
   ln=BONUS sn=AT len=9 format=A content=
   ln=LEAVE-DATA sn=A3 len=0 format=  content=
   ln=LEAVE-DUE sn=AU len=2 format=N content=
   ln=LEAVE-TAKEN sn=AV len=2 format=N content=
   ln=LEAVE-BOOKED sn=AW len=0 format=  content=
   ln=LEAVE-START sn=AX len=8 format=A content=
   ln=LEAVE-END sn=AY len=8 format=A content=
   ln=LANG sn=AZ len=3 format=A content=
   ln=LANG sn=AZ len=3 format=A content=
MAP Empl
  23 11
   ln=PERSONNEL-ID sn=AA len=8 format=A content=
   ln=FULL-NAME sn=AB len=0 format=  content=
   ln=FIRST-NAME sn=AC len=20 format=A content=
   ln=NAME sn=AE len=20 format=A content=
   ln=MIDDLE-I sn=AD len=1 format=A content=
   ln=MAR-STAT sn=AF len=1 format=A content=
   ln=SEX sn=AG len=1 format=A content=
   ln=BIRTH sn=AH len=4 format=D content=
   ln=FULL-ADDRESS sn=A1 len=0 format=  content=
   ln=ADDRESS-LINE sn=AI len=20 format=A content=
   ln=ADDRESS-LINE sn=AI len=20 format=A content=
   ln=CITY sn=AJ len=20 format=A content=
   ln=ZIP sn=AK len=10 format=A content=
   ln=COUNTRY sn=AL len=3 format=A content=
   ln=TELEPHONE sn=A2 len=0 format=  content=
   ln=AREA-CODE sn=AN len=6 format=A content=
   ln=PHONE sn=AM len=15 format=A content=
   ln=DEPT sn=AO len=6 format=A content=
   ln=JOB-TITLE sn=AP len=25 format=A content=
   ln=INCOME sn=AQ len=0 format=  content=
   ln=CURR-CODE sn=AR len=3 format=A content=
   ln=SALARY sn=AS len=9 format=A content=
   ln=BONUS sn=AT len=9 format=A content=
   ln=BONUS sn=AT len=9 format=A content=
   ln=LEAVE-DATA sn=A3 len=0 format=  content=
   ln=LEAVE-DUE sn=AU len=2 format=N content=
   ln=LEAVE-TAKEN sn=AV len=2 format=N content=
   ln=LEAVE-BOOKED sn=AW len=0 format=  content=
   ln=LEAVE-START sn=AX len=8 format=A content=
   ln=LEAVE-END sn=AY len=8 format=A content=
   ln=LANG sn=AZ len=3 format=A content=
   ln=LANG sn=AZ len=3 format=A content=
   ln=PHONETIC-NAME sn=PH len=20 format=A content=
MAP DublicateNames
  23 11
   ln=PERSONNEL-ID sn=AA len=8 format=A content=
   ln=FULL-NAME sn=AB len=21 format=  content=
   ln=FIRST-NAME sn=AC len=20 format=A content=
   ln=NAME sn=AE len=20 format=A content=
   ln=MIDDLE-I sn=AD len=1 format=A content=
   ln=MAR-STAT sn=AF len=1 format=A content=
   ln=SEX sn=AG len=1 format=A content=
   ln=BIRTH sn=AH len=4 format=D content=
   ln=FULL-ADDRESS sn=A1 len=50 format=  content=
   ln=ADDRESS-LINE sn=AI len=20 format=A content=
   ln=ADDRESS-LINE sn=AI len=20 format=A content=
   ln=CITY sn=AJ len=20 format=A content=
   ln=ZIP sn=AK len=10 format=A content=
   ln=COUNTRY sn=AL len=3 format=A content=
   ln=TELEPHONE sn=A2 len=6 format=  content=
   ln=AREA-CODE sn=AN len=6 format=A content=
   ln=PHONE sn=AM len=15 format=A content=
   ln=DEPT sn=AO len=6 format=A content=
   ln=JOB-TITLE sn=AP len=25 format=A content=
   ln=INCOME sn=AQ len=12 format=  content=
   ln=CURR-CODE sn=AR len=3 format=A content=
   ln=SALARY sn=AS len=9 format=P content=
   ln=BONUS sn=AT len=9 format=P content=
   ln=BONUS sn=AT len=9 format=P content=
   ln=LEAVE-DATA sn=A3 len=2 format=  content=
   ln=LEAVE-DUE sn=AU len=2 format=N content=
   ln=LEAVE-TAKEN sn=AV len=2 format=N content=
   ln=LEAVE-BOOKED sn=AW len=8 format=  content=
   ln=LEAVE-START sn=AX len=8 format=N content=
   ln=LEAVE-END sn=AY len=8 format=N content=
   ln=LANG sn=AZ len=3 format=A content=
   ln=LANG sn=AZ len=3 format=A content=
   ln=PH sn=PH len=0 format=A content=
   ln=LEAVE-LEFT sn=H1 len=0 format=A content=
   ln=DEPARTMENT sn=S1 len=0 format=A content=
MAP NewEmployees
  23 9
   ln=personnel-data sn=A0 len=0 format=  content=
   ln=personnel-id sn=AA len=8 format=A content=
   ln=id-data sn=AB len=0 format=  content=
   ln=personnel-no  !UQ taken! sn=AC len=4 format=I content=
   ln=id-card sn=AD len=8 format=B content=
   ln=signature sn=AE len=0 format=A content=
   ln=full-name sn=B0 len=0 format=  content=
   ln=first-name sn=BA len=40 format=U content=charset=UTF-8
   ln=middle-name sn=BB len=40 format=U content=charset=UTF-8
   ln=name sn=BC len=50 format=U content=charset=UTF-8
   ln=mar-stat sn=CA len=1 format=A content=
   ln=sex sn=DA len=1 format=A content=
   ln=birth sn=EA len=4 format=P content=
   ln=private-address sn=F0 len=0 format=  content=
   ln=address-line sn=FA len=60 format=A content=
   ln=address-line sn=FA len=60 format=A content=
   ln=city sn=FB len=40 format=A content=
   ln=post-code sn=FC len=10 format=A content=
   ln=country sn=FD len=3 format=A content=
   ln=phone-email sn=F1 len=0 format=  content=
   ln=area-code sn=FE len=6 format=A content=
   ln=private-phone sn=FF len=15 format=A content=
   ln=private-fax sn=FG len=15 format=A content=
   ln=private-mobile sn=FH len=15 format=A content=
   ln=private-email sn=FI len=80 format=A content=
   ln=private-email sn=FI len=80 format=A content=
MAP MF_TYPES_FRACTIONAL
  23 101
   ln=ISN sn=AA len=8 format=P content=
   ln=NUM_UNPACKED_W_SIGN_U sn=AB len=10 format=N content=
   ln=BINARY sn=AC len=10 format=B content=
   ln=B3_FIELD sn=AD len=3 format=B content=
   ln=ALPHA sn=AE len=32 format=A content=
   ln=PACKED_NUMERIC sn=AF len=10 format=P content=
   ln=B7_FIELD sn=AG len=7 format=B content=
   ln=B8_FIELD sn=AH len=8 format=B content=
   ln=B2_FIELD sn=AI len=2 format=B content=
   ln=P16_2 sn=AJ len=16 format=P content=
   ln=LOGICAL sn=AK len=1 format=L content=
   ln=NUM_UNPACKED_W_SIGN_N sn=AL len=10 format=N content=
   ln=FLOATING_POINT sn=AM len=8 format=F content=
   ln=B5_FIELD sn=AN len=5 format=B content=
   ln=ALPHA_NV_OPTION sn=AO len=32 format=A content=
   ln=INTEGER sn=AP len=4 format=I content=
   ln=B4_FIELD sn=AQ len=4 format=B content=
   ln=TIME sn=AR len=7 format=T content=
   ln=DATE sn=AS len=4 format=D content=
   ln=NUMERIC_UNPACKED_N sn=AT len=10 format=N content=
   ln=VARCHAR sn=AU len=0 format=A content=
   ln=B6_FIELD sn=AV len=6 format=B content=
   ln=PACKED_NUM_W_SIGN sn=AW len=10 format=P content=
   ln=B9_FIELD sn=AX len=9 format=B content=
   ln=B1_FIELD sn=AY len=1 format=B content=
   ln=NUMERIC_UNPACKED_U sn=AZ len=10 format=N content=
MAP MF_TYPES_FRACTIONAL2
  23 101
   ln=ISN sn=AA len=5 format=P content=
   ln=NUM_UNPACKED_W_SIGN_U sn=AB len=10 format=N content=
   ln=BINARY sn=AC len=10 format=B content=
   ln=B3_FIELD sn=AD len=3 format=N content=
   ln=ALPHA sn=AE len=32 format=A content=
   ln=PACKED_NUMERIC sn=AF len=6 format=N content=
   ln=B7_FIELD sn=AG len=7 format=N content=
   ln=B8_FIELD sn=AH len=8 format=B content=
   ln=B2_FIELD sn=AI len=2 format=N content=
   ln=P16_2 sn=AJ len=9 format=P content=fractionalshift=2
   ln=LOGICAL sn=AK len=1 format=N content=
   ln=NUM_UNPACKED_W_SIGN_N sn=AL len=10 format=N content=
   ln=FLOATING_POINT sn=AM len=8 format=F content=
   ln=B5_FIELD sn=AN len=5 format=N content=
   ln=ALPHA_NV_OPTION sn=AO len=32 format=A content=
   ln=INTEGER sn=AP len=4 format=N content=
   ln=B4_FIELD sn=AQ len=4 format=N content=
   ln=TIME sn=AR len=7 format=P content=
   ln=DATE sn=AS len=4 format=P content=
   ln=NUMERIC_UNPACKED_N sn=AT len=10 format=N content=
   ln=VARCHAR sn=AU len=0 format=A content=
   ln=B6_FIELD sn=AV len=6 format=N content=
   ln=PACKED_NUM_W_SIGN sn=AW len=6 format=N content=
   ln=B9_FIELD sn=AX len=9 format=B content=
   ln=B1_FIELD sn=AY len=1 format=N content=
   ln=NUMERIC_UNPACKED_U sn=AZ len=10 format=N content=
MAP Employees
  23 16
   ln=ID sn=AA len=8 format=A content=
   ln=FullName sn=AB len=40 format=  content=
   ln=FirstName sn=AC len=20 format=A content=
   ln=Name sn=AE len=20 format=A content=
   ln=MiddleName sn=AD len=20 format=A content=
   ln=MarriageState sn=AF len=1 format=A content=
   ln=Sex sn=AG len=1 format=A content=
   ln=Birth sn=AH len=4 format=D content=
   ln=Address sn=A1 len=50 format=  content=
   ln=AddressLine sn=AI len=20 format=A content=
   ln=AddressLine sn=AI len=20 format=A content=
   ln=City sn=AJ len=20 format=A content=
   ln=Zip sn=AK len=10 format=A content=
   ln=Country sn=AL len=3 format=A content=

func SearchMapRepository

func SearchMapRepository(adabas *Adabas, mapName string) (adabasMap *Map, err error)

SearchMapRepository search in map repository for a specific map name

func (*Map) FieldNames added in v1.2.1

func (adabasMap *Map) FieldNames() []string

FieldNames list of fields of map

func (*Map) FieldShortNames added in v1.2.1

func (adabasMap *Map) FieldShortNames() []string

FieldShortNames list of fields of map

func (*Map) Store

func (adabasMap *Map) Store() error

Store stores the Adabas map in the given repository

func (*Map) String

func (adabasMap *Map) String() string

String report the Map repository, data reference and the fields mapping of a map

func (*Map) URL

func (adabasMap *Map) URL() *URL

URL current map data URL reference

type MapField

type MapField struct {
	ShortName   string `json:"ShortName"`
	LongName    string `json:"LongName"`
	Length      int32  `json:"FormatLength"`
	ContentType string `json:"ContentType"`
	FormatType  string `json:"FormatType"`
	FieldType   string `json:"FieldType"`
	Charset     string `json:"Charset"`
	File        uint32 `json:"File"`
	Remarks     string
}

MapField Structure to define short name to long name mapping. In advance the DDM specific type formater like B for Boolean or N for NATDATE are available

type MapFile

type MapFile struct {
	Maps []*Map `json:"Maps"`
}

MapFile parse map JSON import/export files

type ReadRequest

type ReadRequest struct {
	Start             uint64
	Limit             uint64
	Multifetch        uint32
	RecordBufferShift uint32

	HoldRecords adatypes.HoldType
	// contains filtered or unexported fields
}

ReadRequest request instance handling field query information

Example (HistogramWith)
err := initLogWithFile("request.log")
if err != nil {
	fmt.Println(err)
	return
}

adabas, _ := NewAdabas(adabasModDBID)
request, _ := NewReadRequest(adabas, 11)
defer request.Close()
result, err := request.HistogramWith("AA=20010100")
if err == nil {
	if result != nil {
		fmt.Println("Dump result received ...")
		result.DumpValues()
	}
} else {
	fmt.Println(err)
}
Output:

Dump result received ...
Dump all result values
Record Quantity: 0001
  AA = > 20010100 <
Example (HistogramWithStream)
err := initLogWithFile("request.log")
if err != nil {
	fmt.Println("Error init log", err)
	return
}

adabas, _ := NewAdabas(24)
request, _ := NewReadRequest(adabas, 11)
defer request.Close()
i := uint32(0)
result, err := request.HistogramWithStream("AE='SMITH'", dumpStream, &i)
fmt.Println("Read done ...")
if err != nil {
	fmt.Println("Error reading histogram", err)
	return
}
if i != 1 {
	fmt.Println("Index error", i)
}
if result != nil {
	result.DumpValues()
	fmt.Println("Result set should be empty")
}
Output:

Read 0 -> SMITH                = 19
Read done ...
Dump all result values
Result set should be empty
Example (ReadISN)
err := initLogWithFile("connection.log")
if err != nil {
	fmt.Println("Log init error", err)
	return
}

url := adabasModDBIDs
connection, cerr := NewConnection("acj;target=" + url)
if cerr != nil {
	fmt.Println("Connection error", err)
	return
}
defer connection.Close()
fmt.Println(connection)
openErr := connection.Open()
if openErr != nil {
	fmt.Println("Open error", openErr)
}
request, err := connection.CreateFileReadRequest(11)
if err != nil {
	fmt.Println("Create read request error", openErr)
	return
}
request.Limit = 0
var result *Response
result, err = request.ReadISN(1)
if err != nil {
	fmt.Println("Read  error", openErr)
	return
}
if result != nil {
	err = result.DumpValues()
	if err != nil {
		fmt.Println("Dump values  error", openErr)
		return
	}
}
Output:

Adabas url=23 fnr=0
Dump all result values
Record Isn: 0001
  AA = > 50005800 <
  AB = [ 1 ]
   AC = > SIMONE               <
   AE = > ADAM                 <
   AD = >                      <
  AF = > M <
  AG = > F <
  AH = > 712981 <
  A1 = [ 1 ]
   AI = [ 1 ]
    AI[01] = > 26 AVENUE RHIN ET DA <
   AJ = > JOIGNY               <
   AK = > 89300      <
   AL = > F   <
  A2 = [ 1 ]
   AN = > 1033   <
   AM = > 44864858        <
  AO = > VENT59 <
  AP = > CHEF DE SERVICE           <
  AQ = [ 1 ]
   AR[01] = > EUR <
   AS[01] = > 963 <
   AT[01] = [ 1 ]
    AT[01,01] = > 138 <
  A3 = [ 1 ]
   AU = > 19 <
   AV = > 5 <
  AW = [ 1 ]
   AX[01] = > 19990801 <
   AY[01] = > 19990831 <
  AZ = [ 2 ]
   AZ[01] = > FRE <
   AZ[02] = > ENG <
  PH = >  <
  H1 = > 1905 <
  S1 = > VENT <
  S2 = > VENT59ADAM                 <
  S3 = >  <
Example (ReadLogicalWithCursoringLimit)
ferr := initLogWithFile("connection_map.log")
if ferr != nil {
	fmt.Println("Error initializing log", ferr)
	return
}

connection, cerr := NewConnection("acj;map;config=[" + adabasModDBIDs + ",4]")
if cerr != nil {
	fmt.Println("Error creating new connection", cerr)
	return
}
defer connection.Close()
request, rerr := connection.CreateMapReadRequest("EMPLOYEES-NAT-DDM")
if rerr != nil {
	fmt.Println("Error creating read request", cerr)
	return
}
// Define fields to be part of the request
request.QueryFields("NAME,PERSONNEL-ID")
// Define chunks of cursoring requests
request.Limit = 5

// Init cursoring using search
col, cerr := request.ReadLogicalWithCursoring("PERSONNEL-ID=[11100110:11100120]")
if cerr != nil {
	fmt.Println("Error init cursoring", cerr)
	return
}
for col.HasNextRecord() {
	record, rerr := col.NextRecord()
	if rerr != nil {
		fmt.Println("Error getting next record", rerr)
		return
	}
	fmt.Printf("New record received: ISN=%d\n", record.Isn)
	record.DumpValues()
}
Output:

New record received: ISN=210
Dump all record values
  PERSONNEL-ID = > 11100110 <
  FULL-NAME = [ 1 ]
   NAME = > BUNGERT              <
New record received: ISN=211
Dump all record values
  PERSONNEL-ID = > 11100111 <
  FULL-NAME = [ 1 ]
   NAME = > THIELE               <
New record received: ISN=212
Dump all record values
  PERSONNEL-ID = > 11100112 <
  FULL-NAME = [ 1 ]
   NAME = > THOMA                <
New record received: ISN=213
Dump all record values
  PERSONNEL-ID = > 11100113 <
  FULL-NAME = [ 1 ]
   NAME = > TREIBER              <
New record received: ISN=214
Dump all record values
  PERSONNEL-ID = > 11100114 <
  FULL-NAME = [ 1 ]
   NAME = > UNGER                <
New record received: ISN=1102
Dump all record values
  PERSONNEL-ID = > 11100115 <
  FULL-NAME = [ 1 ]
   NAME = > VETTER               <
New record received: ISN=215
Dump all record values
  PERSONNEL-ID = > 11100116 <
  FULL-NAME = [ 1 ]
   NAME = > VOGEL                <
New record received: ISN=216
Dump all record values
  PERSONNEL-ID = > 11100117 <
  FULL-NAME = [ 1 ]
   NAME = > WABER                <
New record received: ISN=217
Dump all record values
  PERSONNEL-ID = > 11100118 <
  FULL-NAME = [ 1 ]
   NAME = > WAGNER               <

func NewReadRequest added in v1.2.1

func NewReadRequest(param ...interface{}) (request *ReadRequest, err error)

NewReadRequest create a request defined by another request (not even ReadRequest required)

func (*ReadRequest) BackoutTransaction added in v1.1.1

func (request *ReadRequest) BackoutTransaction() error

Backout closes the Adabas session

func (*ReadRequest) Close

func (request *ReadRequest) Close()

Close closes the Adabas session

func (*ReadRequest) EndTransaction

func (request *ReadRequest) EndTransaction() error

Endtransaction end the transaction of the Adabas session

func (*ReadRequest) HistogramBy

func (request *ReadRequest) HistogramBy(descriptor string) (result *Response, err error)

HistogramBy read a descriptor in a descriptor order

func (*ReadRequest) HistogramByCursoring added in v1.1.2

func (request *ReadRequest) HistogramByCursoring(descriptor string) (cursor *Cursoring, err error)

HistogramByCursoring initialize the read records using cursoring

func (*ReadRequest) HistogramWith

func (request *ReadRequest) HistogramWith(search string) (result *Response, err error)

HistogramWith read a descriptor given by a search criteria

func (*ReadRequest) HistogramWithCursoring added in v1.1.2

func (request *ReadRequest) HistogramWithCursoring(search string) (cursor *Cursoring, err error)

HistogramWithCursoring initialize the read records using cursoring

func (*ReadRequest) HistogramWithStream added in v1.1.1

func (request *ReadRequest) HistogramWithStream(search string, streamFunction StreamFunction,
	x interface{}) (result *Response, err error)

HistogramWithStream read a descriptor given by a search criteria

func (*ReadRequest) IsOpen

func (request *ReadRequest) IsOpen() bool

IsOpen provide True if the database connection is opened

func (*ReadRequest) Open

func (request *ReadRequest) Open() (err error)

Open Open the Adabas session

func (*ReadRequest) QueryFields

func (request *ReadRequest) QueryFields(fieldq string) (err error)

QueryFields define the fields queried in that request

func (*ReadRequest) ReadByISN added in v1.2.1

func (request *ReadRequest) ReadByISN() (result *Response, err error)

ReadByISN read records with a logical order given by a ISN sequence

func (*ReadRequest) ReadISN

func (request *ReadRequest) ReadISN(isn adatypes.Isn) (result *Response, err error)

ReadISN read records defined by a given ISN

func (*ReadRequest) ReadISNWithParser

func (request *ReadRequest) ReadISNWithParser(isn adatypes.Isn, resultParser adatypes.RequestParser, x interface{}) (err error)

ReadISNWithParser read record defined by a ISN using request parser

func (*ReadRequest) ReadLogicalBy

func (request *ReadRequest) ReadLogicalBy(descriptors string) (result *Response, err error)

ReadLogicalBy read in logical order given by the descriptor argument

Example
err := initLogWithFile("request.log")
if err != nil {
	fmt.Println(err)
	return
}

adabas, _ := NewAdabas(adabasModDBID)
request, _ := NewReadRequest(adabas, 11)
defer request.Close()
request.Limit = 2
request.QueryFields("AA,AC,AD")
var result *Response
result, err = request.ReadLogicalBy("AA")
fmt.Println("Dump result received ...")
if result != nil {
	result.DumpValues()
}
Output:

Dump result received ...
Dump all result values
Record Isn: 0204
  AA = > 11100102 <
  AB = [ 1 ]
   AC = > EDGAR                <
   AD = > PETER                <
Record Isn: 0205
  AA = > 11100105 <
  AB = [ 1 ]
   AC = > CHRISTIAN            <
   AD = >                      <

func (*ReadRequest) ReadLogicalByStream added in v1.1.1

func (request *ReadRequest) ReadLogicalByStream(descriptor string, streamFunction StreamFunction,
	x interface{}) (result *Response, err error)

ReadLogicalByStream read records with a logical order given by a descriptor sort and calls stream function

func (*ReadRequest) ReadLogicalByWithParser

func (request *ReadRequest) ReadLogicalByWithParser(descriptors string, resultParser adatypes.RequestParser, x interface{}) (err error)

ReadLogicalByWithParser read in logical order given by the descriptor argument

func (*ReadRequest) ReadLogicalWith

func (request *ReadRequest) ReadLogicalWith(search string) (result *Response, err error)

ReadLogicalWith read records with a logical order given by a search string

func (*ReadRequest) ReadLogicalWithCursoring added in v1.1.1

func (request *ReadRequest) ReadLogicalWithCursoring(search string) (cursor *Cursoring, err error)

ReadLogicalWithCursoring initialize the read records using cursoring

Example
err := initLogWithFile("connection_map.log")
if err != nil {
	fmt.Println("Error initializing log", err)
	return
}

connection, cerr := NewConnection("acj;map;config=[" + adabasModDBIDs + ",4]")
if cerr != nil {
	fmt.Println("Error creating new connection", cerr)
	return
}
defer connection.Close()
request, rerr := connection.CreateMapReadRequest("EMPLOYEES-NAT-DDM")
if rerr != nil {
	fmt.Println("Error creating map read request", rerr)
	return
}
fmt.Println("Limit query data:")
request.QueryFields("NAME,PERSONNEL-ID")
request.Limit = 0
fmt.Println("Init cursor data...")
col, cerr := request.ReadLogicalWithCursoring("PERSONNEL-ID=[11100110:11100115]")
if cerr != nil {
	fmt.Println("Error reading logical with using cursoring", cerr)
	return
}
fmt.Println("Read next cursor record...")
counter := 0
for col.HasNextRecord() {
	record, rerr := col.NextRecord()
	if record == nil {
		fmt.Println("Record nil received")
		return
	}
	if rerr != nil {
		fmt.Println("Error reading logical with using cursoring", rerr)
		return
	}
	fmt.Println("Record received:")
	record.DumpValues()
	fmt.Println("Read next cursor record...")
	counter++
	if counter >= 7 {
		fmt.Println("Error index about 7")
		return
	}
}
fmt.Println("Last cursor record read")
Output:

Limit query data:
Init cursor data...
Read next cursor record...
Record received:
Dump all record values
  PERSONNEL-ID = > 11100110 <
  FULL-NAME = [ 1 ]
   NAME = > BUNGERT              <
Read next cursor record...
Record received:
Dump all record values
  PERSONNEL-ID = > 11100111 <
  FULL-NAME = [ 1 ]
   NAME = > THIELE               <
Read next cursor record...
Record received:
Dump all record values
  PERSONNEL-ID = > 11100112 <
  FULL-NAME = [ 1 ]
   NAME = > THOMA                <
Read next cursor record...
Record received:
Dump all record values
  PERSONNEL-ID = > 11100113 <
  FULL-NAME = [ 1 ]
   NAME = > TREIBER              <
Read next cursor record...
Record received:
Dump all record values
  PERSONNEL-ID = > 11100114 <
  FULL-NAME = [ 1 ]
   NAME = > UNGER                <
Read next cursor record...
Record received:
Dump all record values
  PERSONNEL-ID = > 11100115 <
  FULL-NAME = [ 1 ]
   NAME = > VETTER               <
Read next cursor record...
Last cursor record read

func (*ReadRequest) ReadLogicalWithStream added in v1.1.1

func (request *ReadRequest) ReadLogicalWithStream(search string, streamFunction StreamFunction,
	x interface{}) (result *Response, err error)

ReadLogicalWithStream read records with a logical order given by a search string and calls stream function

func (*ReadRequest) ReadLogicalWithWithParser

func (request *ReadRequest) ReadLogicalWithWithParser(search string, resultParser adatypes.RequestParser, x interface{}) (err error)

ReadLogicalWithWithParser read records with a logical order given by a search string

func (*ReadRequest) ReadPhysicalSequence

func (request *ReadRequest) ReadPhysicalSequence() (result *Response, err error)

ReadPhysicalSequence read records in physical order

func (*ReadRequest) ReadPhysicalSequenceStream added in v1.1.1

func (request *ReadRequest) ReadPhysicalSequenceStream(streamFunction StreamFunction,
	x interface{}) (result *Response, err error)

ReadPhysicalSequenceStream read records in physical order

func (*ReadRequest) ReadPhysicalSequenceWithParser

func (request *ReadRequest) ReadPhysicalSequenceWithParser(resultParser adatypes.RequestParser, x interface{}) (err error)

ReadPhysicalSequenceWithParser read records in physical order

func (*ReadRequest) Scan added in v1.1.2

func (request *ReadRequest) Scan(dest ...interface{}) error

Scan scan for different field entries

func (*ReadRequest) SetHoldRecords added in v1.1.2

func (request *ReadRequest) SetHoldRecords(hold adatypes.HoldType)

SetHoldRecords set hold record done

func (*ReadRequest) TraverseFields added in v1.2.1

func (request *ReadRequest) TraverseFields(t adatypes.TraverserMethods, p interface{}) error

type Record added in v1.1.1

type Record struct {
	Isn        adatypes.Isn `xml:"Isn,attr"`
	Quantity   uint64       `xml:"Quantity,attr"`
	Value      []adatypes.IAdaValue
	HashFields map[string]adatypes.IAdaValue `xml:"-" json:"-"`
	// contains filtered or unexported fields
}

Record one result record of the result

Example (DumpZeroValues)
ferr := initLogWithFile("request_result.log")
if ferr != nil {
	return
}

d := generatePEMUDefinitionTest()
record, err := NewRecord(d)
if err != nil {
	fmt.Println("Result record generation error", err)
	return
}

fmt.Println("Dump request result:")
record.DumpValues()
Output:

Dump request result:
Dump all record values
  AA = > 0 <
  PE = [ 0 ]
  U8 = > 0 <
  P2 = [ 0 ]
  I8 = > 0 <
Example (SetValue)
ferr := initLogWithFile("request_result.log")
if ferr != nil {
	return
}

d := generatePEMUDefinitionTest()

record, err := NewRecord(d)
if err != nil {
	fmt.Println("Result record generation error", err)
	return
}

for i := uint32(0); i < 3; i++ {
	adatypes.Central.Log.Infof("==> Set period group entry PP of %d", (i + 1))
	err = record.SetValueWithIndex("PP", []uint32{i + 1}, (i + 1))
	if err != nil {
		fmt.Println("Set PP error", err)
		return
	}
	adatypes.Central.Log.Infof("<== Set period group entry PP of %d", (i + 1))
}
adatypes.Central.Log.Infof("==> Set period MU")
err = record.SetValueWithIndex("MU", []uint32{1, 1}, 100)
if err != nil {
	fmt.Println("Set MU error", err)
	return
}
adatypes.Central.Log.Infof("==> Set second period MU")
err = record.SetValueWithIndex("MU", []uint32{1, 2}, 122)
if err != nil {
	fmt.Println("Set MU error", err)
	return
}
err = record.SetValue("AA", 2)
if err != nil {
	fmt.Println("Set AA error", err)
	return
}
err = record.SetValue("U8", 3)
if err != nil {
	fmt.Println("Set U8 error", err)
	return
}
err = record.SetValue("I8", 1)
if err != nil {
	fmt.Println("Set I8 error", err)
	return
}

fmt.Println("Dump request result:")
record.DumpValues()
Output:

Dump request result:
Dump all record values
  AA = > 2 <
  PE = [ 3 ]
   PP[01] = > 1 <
   MU[01] = [ 1 ]
    MU[01,01] = > 100 <
    MU[01,02] = > 122 <
   GR[01] = [ 1 ]
    PA[01] = > 0 <
    PG[01] = > 0 <
   G8[01] = > 0 <
   PP[02] = > 2 <
   MU[02] = [ 0 ]
   GR[02] = [ 1 ]
    PA[02] = > 0 <
    PG[02] = > 0 <
   G8[02] = > 0 <
   PP[03] = > 3 <
   MU[03] = [ 0 ]
   GR[03] = [ 1 ]
    PA[03] = > 0 <
    PG[03] = > 0 <
   G8[03] = > 0 <
  U8 = > 3 <
  P2 = [ 0 ]
  I8 = > 1 <
Example (SetValueWithIndex)
ferr := initLogWithFile("request_result.log")
if ferr != nil {
	return
}

d := generatePEMUDefinitionTest()
record, err := NewRecord(d)
if err != nil {
	fmt.Println("Result record generation error", err)
	return
}

err = record.SetValueWithIndex("PX", []uint32{1, 1}, 122)
if err == nil {
	fmt.Println("Error setting PX with MU error", err)
	return
}
fmt.Println("Correct error:", err)
err = record.SetValueWithIndex("PX", []uint32{1, 0}, 122)
if err != nil {
	fmt.Println("Error setting PX error", err)
	return
}

fmt.Println("Dump request result:")
record.DumpValues()
Output:

Correct error: ADG0000062: Multiple field index on an non-Multiple field
Dump request result:
Dump all record values
  AA = > 0 <
  PE = [ 0 ]
  U8 = > 0 <
  P2 = [ 1 ]
   PX[01] = > 122 <
   PY[01] = > 0 <
  I8 = > 0 <

func NewRecord added in v1.1.1

func NewRecord(definition *adatypes.Definition) (*Record, error)

NewRecord new result record

func NewRecordIsn added in v1.1.1

func NewRecordIsn(isn adatypes.Isn, isnQuantity uint64, definition *adatypes.Definition) (*Record, error)

NewRecordIsn new result record with ISN or ISN quantity

func (*Record) DumpValues added in v1.1.1

func (record *Record) DumpValues()

DumpValues traverse through the tree of values calling a callback method

func (*Record) MarshalJSON added in v1.1.1

func (record *Record) MarshalJSON() ([]byte, error)

MarshalJSON provide JSON

func (*Record) MarshalXML added in v1.1.1

func (record *Record) MarshalXML(e *xml.Encoder, start xml.StartElement) error

MarshalXML provide XML

func (*Record) Scan added in v1.1.2

func (record *Record) Scan(dest ...interface{}) (err error)

Scan scan for different field entries

func (*Record) SearchValue added in v1.1.1

func (record *Record) SearchValue(parameter ...interface{}) (adatypes.IAdaValue, error)

SearchValue search value in the tree

func (*Record) SearchValueIndex added in v1.1.1

func (record *Record) SearchValueIndex(name string, index []uint32) (adatypes.IAdaValue, error)

SearchValueIndex search value in the tree with a given index

func (*Record) SetValue added in v1.1.1

func (record *Record) SetValue(field string, value interface{}) (err error)

SetValue set the value for a specific field

func (*Record) SetValueWithIndex added in v1.1.1

func (record *Record) SetValueWithIndex(name string, index []uint32, x interface{}) error

SetValueWithIndex Add value to an node element

func (*Record) String added in v1.1.1

func (record *Record) String() string

type Repository

type Repository struct {
	sync.Mutex
	DatabaseURL

	CachedMaps map[string]*Map
	// contains filtered or unexported fields
}

Repository Adabas Map repository container

func NewMapRepository

func NewMapRepository(i interface{}, fnr Fnr) *Repository

NewMapRepository new map repository created

func NewMapRepositoryWithURL added in v1.1.1

func NewMapRepositoryWithURL(url DatabaseURL) *Repository

NewMapRepositoryWithURL new map repository created

func (*Repository) ImportMapRepository

func (repository *Repository) ImportMapRepository(adabas *Adabas, filter string,
	fileName string, mapURL *DatabaseURL) (maps []*Map, err error)

ImportMapRepository import map by file import

func (*Repository) LoadAllMaps

func (repository *Repository) LoadAllMaps(adabas *Adabas) (adabasMaps []*Map, err error)

LoadAllMaps load all map out of specific map repository

func (*Repository) LoadMapRepository

func (repository *Repository) LoadMapRepository(adabas *Adabas) (err error)

LoadMapRepository read an index for names of all Adabas maps in the repository into memory

func (*Repository) RemoveMap added in v1.2.2

func (repository *Repository) RemoveMap(mapName string) (err error)

RemoveMap remove map from hash

func (*Repository) SearchMap

func (repository *Repository) SearchMap(adabas *Adabas, mapName string) (adabasMap *Map, err error)

SearchMap search map name in specific map repository

func (*Repository) SearchMapInRepository

func (repository *Repository) SearchMapInRepository(adabas *Adabas, mapName string) (adabasMap *Map, err error)

SearchMapInRepository search map name in specific map repository

type Response added in v1.1.1

type Response struct {
	XMLName xml.Name  `xml:"-" json:"-"`
	Values  []*Record `xml:"Records" json:"Records"`

	Definition *adatypes.Definition
	// contains filtered or unexported fields
}

Response contains the result information of the request

Example (JsonMarshal)
result := generateResult()
res, err := json.Marshal(result)
if err != nil {
	fmt.Println("Error generating JSON", err)
	return
}
fmt.Println(string(res))
Output:

{"Records":[{"AA":10,"B1":0,"GR":{"G1":"0","GX":"","PA":9},"I2":0,"I8":0,"ISN":10,"U8":0,"UB":0},{"AA":20,"B1":0,"GR":{"G1":"0","GX":"","PA":3},"I2":0,"I8":0,"ISN":11,"U8":0,"UB":0}]}
Example (XmlMarshal)
ferr := initLogWithFile("request_result.log")
if ferr != nil {
	return
}

result := generateResult()
res, err := xml.Marshal(result)
if err != nil {
	fmt.Println("Error generating XML", err)
	return
}
fmt.Println(string(res))
Output:

<Response><Record ISN="10"><AA>10</AA><B1>0</B1><UB>0</UB><I2>0</I2><U8>0</U8><GR><G1>0</G1><GX> </GX><PA>9</PA></GR><I8>0</I8></Record><Record ISN="11"><AA>20</AA><B1>0</B1><UB>0</UB><I2>0</I2><U8>0</U8><GR><G1>0</G1><GX> </GX><PA>3</PA></GR><I8>0</I8></Record></Response>

func (*Response) DumpValues added in v1.1.1

func (Response *Response) DumpValues() (err error)

DumpValues traverse through the tree of values calling a callback method

func (*Response) Isn added in v1.1.1

func (Response *Response) Isn(isn adatypes.Isn) *Record

Isn Search for record with given ISN

func (*Response) MarshalJSON added in v1.1.1

func (Response *Response) MarshalJSON() ([]byte, error)

MarshalJSON provide JSON

func (*Response) MarshalXML added in v1.1.1

func (Response *Response) MarshalXML(e *xml.Encoder, start xml.StartElement) error

MarshalXML provide XML

func (*Response) NrRecords added in v1.1.1

func (Response *Response) NrRecords() int

NrRecords number of records in the result

func (*Response) String added in v1.1.1

func (Response *Response) String() string

func (*Response) TraverseValues added in v1.1.1

func (Response *Response) TraverseValues(t adatypes.TraverserValuesMethods, x interface{}) (ret adatypes.TraverseResult, err error)

TraverseValues traverse through the tree of values calling a callback method

type Status

type Status struct {
	// contains filtered or unexported fields
}

Status of the referenced connection

type StoreRequest

type StoreRequest struct {
	// contains filtered or unexported fields
}

StoreRequest request instance handling data store and update

func NewAdabasMapNameStoreRequest

func NewAdabasMapNameStoreRequest(adabas *Adabas, adabasMap *Map) (request *StoreRequest, err error)

NewAdabasMapNameStoreRequest create new map name store request

func NewStoreRequest

func NewStoreRequest(url string, fnr Fnr) (*StoreRequest, error)

NewStoreRequest create a new store Request instance

func NewStoreRequestAdabas

func NewStoreRequestAdabas(adabas *Adabas, fnr Fnr) *StoreRequest

NewStoreRequestAdabas create a new Request instance

func (*StoreRequest) BackoutTransaction added in v1.1.1

func (request *StoreRequest) BackoutTransaction() error

Backout closes the Adabas session

func (*StoreRequest) Close

func (request *StoreRequest) Close()

Close closes the Adabas session

func (*StoreRequest) CreateRecord

func (request *StoreRequest) CreateRecord() (record *Record, err error)

CreateRecord create a record for a special store request

func (*StoreRequest) EndTransaction

func (request *StoreRequest) EndTransaction() error

EndTransaction end of Adabas database transaction

func (*StoreRequest) Exchange

func (request *StoreRequest) Exchange(storeRecord *Record) error

Exchange exchange a record

func (*StoreRequest) IsOpen

func (request *StoreRequest) IsOpen() bool

IsOpen provide True if the database connection is opened

func (*StoreRequest) Open

func (request *StoreRequest) Open() (err error)

Open Open the Adabas session

func (*StoreRequest) Store

func (request *StoreRequest) Store(storeRecord *Record) error

Store store a record

func (*StoreRequest) StoreFields

func (request *StoreRequest) StoreFields(fields string) (err error)

StoreFields create record field definition for the next store

func (*StoreRequest) TraverseFields added in v1.2.1

func (request *StoreRequest) TraverseFields(t adatypes.TraverserMethods, p interface{}) error

func (*StoreRequest) Update

func (request *StoreRequest) Update(storeRecord *Record) error

Update update a record

type StreamFunction added in v1.1.1

type StreamFunction func(record *Record, x interface{}) error

StreamFunction function callback used to go through the list of received records

type URL

type URL struct {
	Dbid   Dbid
	Driver string
	Host   string
	Port   uint32
}

URL define the desination of the host. Possible types are

  • Local call with Driver="" and Port=0
  • Entire Network calls with Driver="tcpip" and corresponding host and port
  • Adabas TCP/IP calls with Driver="adatcp" and corresponding host and port

Dependent on the Driver the corresponding connection is used. To use the local call access the Adabas Client native library is used.

func NewURL added in v1.1.1

func NewURL(url string) (*URL, error)

NewURL create a URL based on a input string

func NewURLWithDbid added in v1.1.1

func NewURLWithDbid(dbid Dbid) *URL

NewURLWithDbid create a new URL based on the database id only. Simple local access to the database

func (URL) String

func (URL URL) String() string

String Full reference of the URL, like 123(adatcp://hostname:port)

func (URL) URL

func (URL URL) URL() string

URL URL representation containing the TCP/IP host and port part only

func (*URL) UnmarshalJSON

func (URL *URL) UnmarshalJSON(data []byte) error

UnmarshalJSON unmarshal JSON code

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL