xquery/XQuery__AnyAtomicTypeToAnyAtomicTypeCast.st
author Jan Vrany <jan.vrany@fit.cvut.cz>
Mon, 02 Jul 2018 08:46:01 +0200
changeset 305 bad21c4f64bf
parent 296 ea3dbc023c80
permissions -rw-r--r--
Tagged Smalltalk/X 8.0.0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
241
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     1
"{ Package: 'stx:goodies/xmlsuite/xquery' }"
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     2
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     3
"{ NameSpace: XQuery }"
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     4
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     5
Object subclass:#AnyAtomicTypeToAnyAtomicTypeCast
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     6
	instanceVariableNames:'atomicValue anotherType'
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     7
	classVariableNames:''
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     8
	poolDictionaries:''
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
     9
	category:'XQuery-TypeCasting'
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    10
!
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    11
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    12
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    13
!AnyAtomicTypeToAnyAtomicTypeCast methodsFor:'accessing'!
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    14
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    15
anotherType
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    16
    ^ anotherType
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    17
!
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    18
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    19
anotherType:something
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    20
    anotherType := something.
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    21
!
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    22
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    23
atomicValue
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    24
    ^ atomicValue
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    25
!
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    26
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    27
atomicValue: anAtomicValue
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    28
    atomicValue := anAtomicValue.
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    29
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    30
    "Modified: / 08-11-2009 / 14:16:18 / Jan Kurs <kursj1@fel.cvut.cz>"
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    31
! !
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    32
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    33
!AnyAtomicTypeToAnyAtomicTypeCast methodsFor:'casting'!
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    34
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    35
cast
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    36
    atomicValue typeName = anotherType typeName ifTrue:
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    37
    [
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    38
        | value |
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    39
        value := atomicValue nodeId.
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    40
        ^ AtomicItem withValue: value asType: anotherType typeName.
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    41
    ]
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    42
    ifFalse:
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    43
    [
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    44
        AtomicItemError raiseErrorString: 'cast from ', atomicValue typeName, ' to ', anotherType typeName, ' not supported'.
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    45
    ].
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    46
"/    (TypeFactory isType: anotherType typeName subtypeOf: 'xs:integer') ifTrue: [
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    47
"/        "see: 17.1.3.4 Casting to xs:integer on http://www.w3.org/TR/xpath-functions"
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    48
"/        (atomicValue isSubtypeOf: 'xs:integer') ifTrue: [
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    49
"/            ^ AtomicItem withValue: atomicValue nodeId asType: anotherType typeName.
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    50
"/        ].
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    51
"/        (atomicValue isSubtypeOf: 'xs:decimal' or: 'xs:float' or: 'xs:double') ifTrue: [
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    52
"/            ^ AtomicItem withValue: (atomicValue nodeId truncated) asType: anotherType typeName.
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    53
"/        ].
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    54
"/        (atomicValue isSubtypeOf: 'xs:boolean') ifTrue: [
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    55
"/            atomicValue nodeId ifTrue: [
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    56
"/                ^ AtomicItem withValue: 0 asType: anotherType typeName.
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    57
"/            ] ifFalse: [
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    58
"/                ^ AtomicItem withValue: 0 asType: anotherType typeName.
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    59
"/            ]
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    60
"/        ].
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    61
"/    ].
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    62
"/
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    63
"/
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    64
"/    "TODO - this is only HOT FIX - see XQuery Types for more information"
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    65
"/    (TypeFactory isType: anotherType typeName subtypeOf: 'xs:decimal') ifTrue: [
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    66
"/        ^ AtomicItem withValue: atomicValue nodeId asNumber asType: anotherType typeName.
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    67
"/    ].
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    68
"/
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    69
"/"/    (TypeFactory isType: anotherType typeName subtypeOf: 'xs:double') ifTrue: [
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    70
"/"/        ^ AtomicItem withValue: atomicValue nodeId asNumber asDouble asType: anotherType typeName.
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    71
"/"/    ].
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    72
"/
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    73
"/
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    74
"/    ^ AtomicItem withValue: atomicValue nodeId asType: anotherType typeName.
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    75
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    76
    "Created: / 08-11-2009 / 14:15:02 / Jan Kurs <kursj1@fel.cvut.cz>"
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    77
    "Modified: / 17-11-2009 / 14:33:36 / Jan Kurs <kursj1@fel.cvut.cz>"
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    78
! !
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    79
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    80
!AnyAtomicTypeToAnyAtomicTypeCast methodsFor:'error reporting'!
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    81
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    82
raiseError: errorType
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    83
    AtomicItemError raiseErrorString: 'Error no.: ', errorType.
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    84
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    85
    "Created: / 05-10-2009 / 17:20:46 / Jan Kurs <kursj1@fel.cvut.cz>"
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    86
    "Modified: / 24-10-2009 / 16:14:30 / Jan Kurs <kursj1@fel.cvut.cz>"
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    87
!
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    88
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    89
raiseError: errorType withMessage: message
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    90
    AtomicItemError raiseErrorString: message, ' Error no.: ', errorType.
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    91
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    92
    "Created: / 05-10-2009 / 17:21:52 / Jan Kurs <kursj1@fel.cvut.cz>"
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    93
    "Modified: / 24-10-2009 / 16:14:25 / Jan Kurs <kursj1@fel.cvut.cz>"
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    94
! !
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    95
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    96
!AnyAtomicTypeToAnyAtomicTypeCast class methodsFor:'documentation'!
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    97
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    98
version_SVN
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
    99
    ^ '$Id$'
e28ef0f20186 Branch datatypes reintegrated
Jan Vrany <jan.vrany@fit.cvut.cz>
parents:
diff changeset
   100
! !