Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
atlas
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
dataplatform
atlas
Commits
537cc23c
Commit
537cc23c
authored
Feb 03, 2015
by
Harish Butani
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
resolve reverse references for Array types; favor arrayType over scalar fields…
resolve reverse references for Array types; favor arrayType over scalar fields in reverese resolution
parent
57a10073
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
36 additions
and
4 deletions
+36
-4
Expressions.scala
.../scala/org/apache/hadoop/metadata/query/Expressions.scala
+17
-2
TypeUtils.scala
...in/scala/org/apache/hadoop/metadata/query/TypeUtils.scala
+19
-2
No files found.
typesystem/src/main/scala/org/apache/hadoop/metadata/query/Expressions.scala
View file @
537cc23c
...
...
@@ -19,7 +19,7 @@
package
org.apache.hadoop.metadata.query
import
org.apache.hadoop.metadata.MetadataException
import
org.apache.hadoop.metadata.types.DataTypes.
PrimitiveType
import
org.apache.hadoop.metadata.types.DataTypes.
{
ArrayType
,
TypeCategory
,
PrimitiveType
}
import
org.apache.hadoop.metadata.types._
object
Expressions
{
...
...
@@ -367,8 +367,23 @@ object Expressions {
case
class
FieldExpression
(
fieldName
:
String
,
fieldInfo
:
FieldInfo
,
child
:
Option
[
Expression
])
extends
Expression
{
def
elemType
(
t
:
IDataType
[
_
])
:
IDataType
[
_
]
=
{
if
(
t
.
getTypeCategory
==
TypeCategory
.
ARRAY
)
{
val
aT
=
t
.
asInstanceOf
[
ArrayType
]
if
(
aT
.
getElemType
.
getTypeCategory
==
TypeCategory
.
CLASS
||
aT
.
getElemType
.
getTypeCategory
==
TypeCategory
.
STRUCT
)
{
return
aT
.
getElemType
}
}
t
}
val
children
=
if
(
child
.
isDefined
)
List
(
child
.
get
)
else
Nil
lazy
val
dataType
=
if
(!
fieldInfo
.
isReverse
)
fieldInfo
.
attrInfo
.
dataType
()
else
fieldInfo
.
reverseDataType
lazy
val
dataType
=
{
val
t
=
if
(!
fieldInfo
.
isReverse
)
fieldInfo
.
attrInfo
.
dataType
()
else
fieldInfo
.
reverseDataType
elemType
(
t
)
}
override
lazy
val
resolved
:
Boolean
=
true
override
def
namedExpressions
=
if
(
child
.
isDefined
)
child
.
get
.
namedExpressions
else
Map
()
...
...
typesystem/src/main/scala/org/apache/hadoop/metadata/query/TypeUtils.scala
View file @
537cc23c
...
...
@@ -21,7 +21,7 @@ package org.apache.hadoop.metadata.query
import
java.util.concurrent.atomic.AtomicInteger
import
org.apache.hadoop.metadata.MetadataException
import
org.apache.hadoop.metadata.types.DataTypes.
PrimitiveType
import
org.apache.hadoop.metadata.types.DataTypes.
{
ArrayType
,
TypeCategory
,
PrimitiveType
}
import
org.apache.hadoop.metadata.types._
object
TypeUtils
{
...
...
@@ -72,6 +72,10 @@ object TypeUtils {
case
_
=>
None
}
def
hasFields
(
iDataType
:
IDataType
[
_
])
:
Boolean
=
{
fieldMapping
(
iDataType
).
isDefined
}
import
scala.language.existentials
case
class
FieldInfo
(
dataType
:
IDataType
[
_
],
attrInfo
:
AttributeInfo
,
reverseDataType
:
IDataType
[
_
]
=
null
)
{
def
isReverse
=
reverseDataType
!=
null
...
...
@@ -109,11 +113,24 @@ object TypeUtils {
if
(
idTypFMap
.
isDefined
)
{
import
scala.collection.JavaConversions._
val
fields
:
Seq
[
AttributeInfo
]
=
idTypFMap
.
get
.
fields
.
values
().
filter
{
aInfo
=>
aInfo
.
dataType
()
==
typ
aInfo
.
dataType
()
==
typ
||
(
aInfo
.
dataType
().
getTypeCategory
==
TypeCategory
.
ARRAY
&&
aInfo
.
dataType
().
asInstanceOf
[
ArrayType
].
getElemType
==
typ
)
}.
toSeq
if
(
fields
.
size
==
1
)
{
return
Some
(
FieldInfo
(
typ
,
fields
(
0
),
idTyp
))
}
/*
* is there only 1 array field of this type?
* If yes resolve to it.
* @todo: allow user to specify the relationship to follow by further qualifying the type. for e.g.
* field("LoadProcess.inputTables")
*/
val
aFields
=
fields
.
filter
{
aInfo
=>
aInfo
.
dataType
().
getTypeCategory
==
TypeCategory
.
ARRAY
}
if
(
aFields
.
size
==
1
)
{
return
Some
(
FieldInfo
(
typ
,
aFields
(
0
),
idTyp
))
}
}
}
catch
{
case
_
:
MetadataException
=>
None
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment