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
db6dffc9
Commit
db6dffc9
authored
Jan 29, 2015
by
Harish Butani
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add more ExpressionTests, fix issues uncovered
parent
072aee8d
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
69 additions
and
7 deletions
+69
-7
Expressions.scala
.../scala/org/apache/hadoop/metadata/query/Expressions.scala
+14
-5
ExpressionTest.scala
...ala/org/apache/hadoop/metadata/query/ExpressionTest.scala
+55
-2
No files found.
typesystem/src/main/scala/org/apache/hadoop/metadata/query/Expressions.scala
View file @
db6dffc9
...
...
@@ -243,6 +243,8 @@ object Expressions {
* Fluent API methods
*/
def
field
(
fieldName
:
String
)
=
new
UnresolvedFieldExpression
(
this
,
fieldName
)
def
join
(
fieldName
:
String
)
=
field
(
fieldName
)
def
`.`
(
fieldName
:
String
)
=
field
(
fieldName
)
def
as
(
alias
:
String
)
=
new
AliasExpression
(
this
,
alias
)
def
arith
(
op
:
String
)(
rightExpr
:
Expression
)
=
new
ArithmeticExpression
(
op
,
this
,
rightExpr
)
...
...
@@ -274,11 +276,14 @@ object Expressions {
}
trait
BinaryNode
{
self
:
Expression
=>
def
left
:
Expression
def
right
:
Expression
def
children
=
Seq
(
left
,
right
)
override
def
namedExpressions
=
left
.
namedExpressions
++
right
.
namedExpressions
}
trait
LeafNode
{
...
...
@@ -286,8 +291,9 @@ object Expressions {
}
trait
UnaryNode
{
self
:
Expression
=>
def
child
:
Expression
override
def
namedExpressions
=
child
.
namedExpressions
def
children
=
child
::
Nil
}
...
...
@@ -339,9 +345,11 @@ object Expressions {
lazy
val
dataType
=
fieldInfo
.
attrInfo
.
dataType
()
override
lazy
val
resolved
:
Boolean
=
true
override
def
namedExpressions
=
if
(
child
.
isDefined
)
child
.
get
.
namedExpressions
else
Map
()
override
def
toString
=
{
if
(
child
.
isDefined
)
{
val
sep
=
if
(
dataType
.
isInstanceOf
[
ClassType
])
" "
else
"
,
"
val
sep
=
if
(
dataType
.
isInstanceOf
[
ClassType
])
" "
else
"
.
"
s
"${child.get}${sep}$fieldName"
}
else
{
fieldName
...
...
@@ -366,7 +374,7 @@ object Expressions {
case
class
BackReference
(
alias
:
String
,
reference
:
Expression
,
child
:
Option
[
Expression
])
extends
Expression
{
val
children
=
if
(
child
.
isDefined
)
List
(
child
.
get
)
else
Nil
val
dataType
=
reference
.
dataType
override
def
namedExpressions
=
if
(
child
.
isDefined
)
child
.
get
.
namedExpressions
else
Map
()
override
def
toString
=
if
(
child
.
isDefined
)
s
"${child.get} $alias"
else
alias
}
...
...
@@ -533,7 +541,7 @@ object Expressions {
DataTypes
.
BOOLEAN_TYPE
}
override
def
toString
=
children
.
mkString
(
""
,
" and
"
,
""
)
override
def
toString
=
children
.
mkString
(
""
,
s
" $symbol
"
,
""
)
}
case
class
FilterExpression
(
val
child
:
Expression
,
val
condExpr
:
Expression
)
extends
Expression
{
...
...
@@ -548,7 +556,7 @@ object Expressions {
}
child
.
dataType
}
override
def
namedExpressions
=
child
.
namedExpressions
++
condExpr
.
namedExpressions
override
def
toString
=
s
"$child where $condExpr"
}
...
...
@@ -569,6 +577,7 @@ object Expressions {
}
TypeUtils
.
createStructType
(
selectListWithAlias
)
}
override
def
namedExpressions
=
child
.
namedExpressions
++
(
selectList
.
flatMap
(
_
.
namedExpressions
))
override
def
toString
=
s
"""$child select ${selectListWithAlias.mkString("", ", ", "")}"""
}
...
...
typesystem/src/test/scala/org/apache/hadoop/metadata/query/ExpressionTest.scala
View file @
db6dffc9
...
...
@@ -42,7 +42,8 @@ class ExpressionTest extends BaseTest {
def
dbClsDef
=
new
HierarchicalTypeDefinition
[
ClassType
](
classOf
[
ClassType
],
"DB"
,
null
,
Array
(
attrDef
(
"name"
,
DataTypes
.
STRING_TYPE
),
attrDef
(
"owner"
,
DataTypes
.
STRING_TYPE
)
attrDef
(
"owner"
,
DataTypes
.
STRING_TYPE
),
attrDef
(
"createTime"
,
DataTypes
.
LONG_TYPE
)
))
def
storageDescClsDef
=
new
HierarchicalTypeDefinition
[
ClassType
](
classOf
[
ClassType
],
"StorageDesc"
,
null
,
...
...
@@ -157,7 +158,59 @@ class ExpressionTest extends BaseTest {
@Test
def
testBackReference
:
Unit
=
{
val
e
=
QueryProcessor
.
validate
(
_class
(
"DB"
).
as
(
"db"
).
field
(
"Table"
)).
where
(
id
(
"db"
).
field
(
"name"
).
`=`
(
string
(
"Reporting"
)))
_class
(
"DB"
).
as
(
"db"
).
field
(
"Table"
).
where
(
id
(
"db"
).
field
(
"name"
).
`=`
(
string
(
"Reporting"
))))
println
(
e
)
}
@Test
def
testArith
:
Unit
=
{
val
e
=
QueryProcessor
.
validate
(
_class
(
"DB"
).
where
(
id
(
"name"
).
`=`
(
string
(
"Reporting"
))).
select
(
id
(
"name"
),
id
(
"createTime"
)
+
int
(
1
)))
println
(
e
)
}
@Test
def
testComparisonLogical
:
Unit
=
{
val
e
=
QueryProcessor
.
validate
(
_class
(
"DB"
).
where
(
id
(
"name"
).
`=`
(
string
(
"Reporting"
)).
and
(
id
(
"createTime"
)
+
int
(
1
)
>
int
(
0
))))
println
(
e
)
}
@Test
def
testJoinAndSelect1
:
Unit
=
{
val
e
=
QueryProcessor
.
validate
(
_class
(
"DB"
).
as
(
"db"
).
field
(
"Table"
).
as
(
"tab"
).
where
((
id
(
"createTime"
)
+
int
(
1
)
>
int
(
0
))
.
and
(
id
(
"db"
).
field
(
"name"
).
`=`
(
string
(
"Reporting"
)))).
select
(
id
(
"db"
).
field
(
"name"
).
as
(
"dbName"
),
id
(
"tab"
).
field
(
"name"
).
as
(
"tabName"
))
)
println
(
e
)
}
@Test
def
testJoinAndSelect2
:
Unit
=
{
val
e
=
QueryProcessor
.
validate
(
_class
(
"DB"
).
as
(
"db"
).
field
(
"Table"
).
as
(
"tab"
).
where
((
id
(
"createTime"
)
+
int
(
1
)
>
int
(
0
))
.
or
(
id
(
"db"
).
field
(
"name"
).
`=`
(
string
(
"Reporting"
))))
.
select
(
id
(
"db"
).
field
(
"name"
).
as
(
"dbName"
),
id
(
"tab"
).
field
(
"name"
).
as
(
"tabName"
))
)
println
(
e
)
}
@Test
def
testJoinAndSelect3
:
Unit
=
{
val
e
=
QueryProcessor
.
validate
(
_class
(
"DB"
).
as
(
"db"
).
field
(
"Table"
).
as
(
"tab"
).
where
((
id
(
"createTime"
)
+
int
(
1
)
>
int
(
0
))
.
and
(
id
(
"db"
).
field
(
"name"
).
`=`
(
string
(
"Reporting"
)))
.
or
(
id
(
"db"
).
hasField
(
"owner"
)))
.
select
(
id
(
"db"
).
field
(
"name"
).
as
(
"dbName"
),
id
(
"tab"
).
field
(
"name"
).
as
(
"tabName"
))
)
println
(
e
)
}
@Test
def
testJoinAndSelect4
:
Unit
=
{
val
e
=
QueryProcessor
.
validate
(
_class
(
"DB"
)
as
"db"
join
"Table"
as
"tab"
where
(
id
(
"createTime"
)
+
int
(
1
)
>
int
(
0
)
and
(
id
(
"db"
)
`.`
"name"
`=`
string
(
"Reporting"
)
)
or
(
id
(
"db"
)
hasField
"owner"
)
)
select
(
id
(
"db"
)
`.`
"name"
as
"dbName"
,
id
(
"tab"
)
`.`
"name"
as
"tabName"
)
)
println
(
e
)
}
}
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