INDEX CLUSTER FEATURES SHORT FRAMES NO FRAMES

indexing

title: "Base class for database table or recordset field"
project: "Visual Eiffel"
revision: "$Revision: 1.1 $"
copyright: "Copyright (C) 1996-2005 Object Tools Group"
license: "http://visual-eiffel.com/license"
cluster: dale
class FIELD
inherit

DB_CATALOG_ITEM
redefine
out
end

DALE_SERVER
redefine
out
end
creation

make
feature -- Attributes:

attributes: FIELD_ATTRIBUTES

is_null: BOOLEAN
feature -- Commands:

make (fa: FIELD_ATTRIBUTES)
-- ...
require
valid_attributes: fa /= void

put (v: ANY)
-- put value 'v' to this field
require
valid_value: v /= void implies valid_object_type (v)
valid_value2: v = void implies not attributes.is_required

set_null
-- set Null value for this field
require
allowed: not attributes.is_required
ensure
is_null: is_null

define_type (t: INTEGER)
-- define field's type
require
allowed: attributes /= void and then type = tconst.t_unknown and tconst.valid_type (t)
ensure
valid_type: tconst.valid_type (type)
feature -- Queries:

item: ANY
-- returns field's value

size, length: INTEGER
-- size of data in bytes
require
valid_type: valid_type (attributes.type)
ensure
valid_result: Result >= 0 and then (attributes.is_fixed implies Result > 0)

out: STRING
-- redefined from ANY
feature -- Shortcuts:

name: STRING
-- name of the column

type: INTEGER
-- Eiffel type code

table_name: STRING
-- table's name

qualifier: STRING
-- table's qualifier

owner: STRING
-- table's owner

precision: INTEGER
-- value's precision

scale: INTEGER
-- value's scale

sql_type: INTEGER
-- SQL type code (from ODBC_CONSTANTS)

required: INTEGER
-- Null value acceptance; see also 'is_required'

param_type: INTEGER
-- parameter type
feature -- Type-dependent commands:

put_boolean (v: BOOLEAN_REF)
-- put BOOLEAN value
require
valid_type: valid_or_unknown_type (tconst.t_boolean) or else type = tconst.t_integer or else type = tconst.t_character or else type = tconst.t_string
valid_value: v = void implies not attributes.is_required

put_character (v: CHARACTER_REF)
-- put CHARACTER value
require
valid_type: valid_or_unknown_type (tconst.t_character) or else type = tconst.t_boolean or else type = tconst.t_string
valid_value: v = void implies not attributes.is_required

put_integer (v: INTEGER_REF)
-- put INTEGER value
require
valid_type: valid_or_unknown_type (tconst.t_integer) or else type = tconst.t_real or else type = tconst.t_double
valid_value: v = void implies not attributes.is_required

put_real (v: REAL_REF)
-- put REAL value
require
valid_type: valid_or_unknown_type (tconst.t_real) or else type = tconst.t_integer or else type = tconst.t_double
valid_value: v = void implies not attributes.is_required

put_double (v: DOUBLE_REF)
-- put DOUBLE value
require
valid_type: valid_or_unknown_type (tconst.t_double) or else type = tconst.t_real or else type = tconst.t_integer
valid_value: v = void implies not attributes.is_required

put_string (v: STRING)
-- put STRING value
require
valid_type: valid_or_unknown_type (tconst.t_string) or else type = tconst.t_boolean or else type = tconst.t_character or else type = tconst.t_integer or else type = tconst.t_real or else type = tconst.t_double or else type = tconst.t_date or else type = tconst.t_time or else type = tconst.t_datetime
valid_value: v = void implies not attributes.is_required

put_date (v: DATE)
-- put DATE value
require
valid_type: valid_or_unknown_type (tconst.t_date) or else type = tconst.t_datetime
valid_value: v = void implies not attributes.is_required

put_time (v: TIME)
-- put TIME value
require
valid_type: valid_or_unknown_type (tconst.t_time) or else type = tconst.t_datetime
valid_value: v = void implies not attributes.is_required

put_datetime (v: TIMESTAMP)
-- put DATETIME value
require
valid_type: valid_or_unknown_type (tconst.t_datetime) or else type = tconst.t_date or else type = tconst.t_time
valid_value: v = void implies not attributes.is_required

put_blob (b: BLOB)
-- put BLOB value
require
valid_type: b = void or else valid_or_unknown_type (b.type)
valid_value: b = void implies not attributes.is_required
feature -- Type-dependent queries:

to_boolean: BOOLEAN
-- converts this item value to BOOLEAN
require
valid_type: valid_or_unknown_type (tconst.t_boolean) or else type = tconst.t_string or else type = tconst.t_integer or else type = tconst.t_character
ensure
well_done: is_null implies not Result

to_character: CHARACTER
-- converts this item value to CHARACTER
require
valid_type: valid_or_unknown_type (tconst.t_character) or else type = tconst.t_string or else type = tconst.t_boolean
ensure
well_done: is_null implies Result.code = 0

to_integer: INTEGER
-- converts this item value to INTEGER
require
valid_type: valid_or_unknown_type (tconst.t_integer) or else type = tconst.t_real or else type = tconst.t_double or else type = tconst.t_string
ensure
well_done: is_null implies Result = 0

to_real: REAL
-- converts this item value to REAL
require
valid_type: valid_or_unknown_type (tconst.t_real) or else type = tconst.t_integer or else type = tconst.t_double or else type = tconst.t_string
ensure
well_done: is_null implies Result = 0.0

to_double: DOUBLE
-- converts this item value to DOUBLE
require
valid_type: valid_or_unknown_type (tconst.t_double) or else type = tconst.t_integer or else type = tconst.t_real or else type = tconst.t_string
ensure
well_done: is_null implies Result = 0.0

to_string: STRING
-- converts this item value to STRING
ensure
well_done: is_null = (Result = void)

to_date: DATE
-- converts this item value to DATE
require
valid_type: valid_or_unknown_type (tconst.t_date) or else type = tconst.t_datetime
ensure
well_done: is_null = (Result = void)

to_time: TIME
-- converts this item value to TIME
require
valid_type: valid_or_unknown_type (tconst.t_time) or else type = tconst.t_datetime
ensure
well_done: is_null = (Result = void)

to_datetime: TIMESTAMP
-- converts this item value to DATETIME
require
valid_type: valid_or_unknown_type (tconst.t_datetime) or else type = tconst.t_date or else type = tconst.t_time
ensure
well_done: is_null = (Result = void)

to_timestamp: TIMESTAMP
-- similar to to_datetime, but never delivers a void result
require
valid_type: valid_or_unknown_type (tconst.t_datetime) or else type = tconst.t_date or else type = tconst.t_time

to_blob: BLOB
-- converts this item value to BLOB
require
valid_type: valid_or_unknown_type (tconst.t_blob)
ensure
well_done: is_null = (Result = void)

get_date (d: DATE)
-- ...
require
valid_date: d /= void

get_time (t: TIME)
-- ...
require
valid_time: t /= void

get_datetime (dt: TIMESTAMP)
-- ...
require
valid_datetime: dt /= void

get_blob (bl: BLOB)
-- ...
require
valid_blob: bl /= void
valid_type: valid_or_unknown_type (bl.type)
feature -- Additional type-dependent features:

plus, plus_integer (n: INTEGER)
-- increments the contents of the INTEGER field by the
-- specified value

plus_real (r: REAL)
-- increments the contents of the REAL field by the
-- specified value

plus_double (d: DOUBLE)
-- increments the contents of the REAL field by the
-- specified value

minus, minus_integer (n: INTEGER)
-- decrements the contents of the INTEGER field by the
-- specified value

minus_real (r: REAL)
-- decrements the contents of the REAL field by the
-- specified value

minus_double (d: DOUBLE)
-- increments the contents of the REAL field by the
-- specified value
feature -- Commands and queries to work with long data in portions:

more: BOOLEAN
-- True if there's more data pending
require
implemented: false

pump
-- pump next portion of long data
require
available: more
implemented: false

done
-- accomplish pumping of long data
require
implemented: false
feature -- Validations:

valid_type (t: INTEGER): BOOLEAN
-- ...

valid_object_type (v: ANY): BOOLEAN
-- ...
require
not_void: v /= void

valid_or_unknown_type (t: INTEGER): BOOLEAN
-- ...

valid_value_type (t: INTEGER): BOOLEAN
-- ...
invariant

valid_attributes: attributes /= void
end -- class FIELD

INDEX CLUSTER FEATURES SHORT FRAMES NO FRAMES