(*LIB) on the AS/400
is an object
that is used as a system directory to keep track of other objects
. (It is also keeps track of PTFs
system libraries.) (The other directories that can be used are the directory (*DIR)
and folder (*FLR) objects
Objects are not actually stored in libraries. They're really nothing more than namespaces, but it's easier to refer to an object as being "in" or "stored in" a library.
Certain types of the object (database file, storage areas and executable program objects) can be compiled, copied, and stored into/from many different libraries concurrently, with the Library List hierarchy determining which instance of the object to use during execution of any application that utilizes that object name. There are commands to help move objects around, and objects may be qualified at compile time to point to specific other objects statically at runtime, in order to circumvent the Library List.
Other types of objects, designated as "system" objects cannot be replicated. Libraries are a "system" object, and therefore only one instance of any given Library "name" is possible. They're made to appear as if they're stored in the QSYS library. Other "system" objects include user profiles (*USRPRF), configuration objects (*LIND, *CTLD, & DEVD), etc.
On systems with hierarchical filing systems the norm is to have many directories, most of which are contained one within the other, and with a moderate number of files in each directory. Since libraries cannot be stored within other libraries on the AS/400
and because historically the library list
was always so small, the opposite became the norm; small numbers of libraries each of which contain large numbers of objects
Most homegrown applications have between one and three libraries. Some have program, source, and file objects together in one library. With shops that have a huge amount of data and a small backup window they usually split the database files into a separate data library and keep the source and programs in another library. In companies with a separate development systems they tend to split it further by placing the source into its own library.
Generally speaking all libraries created by IBM for use by the operating system begin with the letter 'Q'.
IBM Standard Libraries:
- QSYS - System Parent Library
- QSYS2 - System Library for CPI's
- QHLPSYS - Online Documentation
- QUSRSYS - System Library for Users
- QTCP - TCP Connectivity Utilities
- QAFP - Advanced Function Printing
- QGPL - General Purpose Library
- QTEMP - Job specific temporary Library (deleted when the job ends)
AS/400 and SQL
Most DBMS systems use SQL-based terminology to describe objects. The AS/400's terminology is unique to the AS/400 and may have generated some confusion. High-level languages have often been preferred over SQL with AS/400 programming, due to actual or perceived performance
reasons. As SQL programming has become more common on the AS/400, both traditional and SQL-based methods have become available to create and use objects, depending on preference or need. For the most part, traditional library-based objects are the same as SQL objects, with at least equivalent capabilities. For example, a Library is a Schema, a Physical File is a Table, a Logical File is a View, and an Access Path is an Index.