http://git-wip-us.apache.org/repos/asf/atlas/blob/435fe3fb/repository/src/test/scala/org/apache/atlas/query/ExpressionTest.scala ---------------------------------------------------------------------- diff --git a/repository/src/test/scala/org/apache/atlas/query/ExpressionTest.scala b/repository/src/test/scala/org/apache/atlas/query/ExpressionTest.scala deleted file mode 100755 index 918f327..0000000 --- a/repository/src/test/scala/org/apache/atlas/query/ExpressionTest.scala +++ /dev/null @@ -1,172 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.atlas.query - -import org.apache.atlas.DBSandboxer -import org.apache.atlas.query.Expressions._ -import org.apache.atlas.repository.BaseTest -import org.testng.annotations.{BeforeMethod, Listeners, Test} - -class ExpressionTest extends BaseTest { - - @BeforeMethod - override def setup { - super.setup - - QueryTestsUtils.setupTypes - - } - - @Test def testClass: Unit = { - val e = QueryProcessor.validate(_class("DB")) - println(e) - } - - @Test def testFilter: Unit = { - val e = QueryProcessor.validate(_class("DB").where(id("name").`=`(string("Reporting")))) - println(e) - } - - @Test def testSelect: Unit = { - val e = QueryProcessor.validate(_class("DB").where(id("name").`=`(string("Reporting"))). - select(id("name"), id("owner"))) - println(e) - } - - @Test def testNegTypeTest: Unit = { - try { - val e = QueryProcessor.validate(_class("DB").where(id("name"))) - println(e) - } catch { - case e: ExpressionException if e.getMessage.endsWith("expression: DB where name") => () - } - } - - @Test def testIsTrait: Unit = { - val e = QueryProcessor.validate(_class("DB").where(isTrait("JdbcAccess"))) - println(e) - } - - @Test def testIsTraitNegative: Unit = { - try { - val e = QueryProcessor.validate(_class("DB").where(isTrait("Jdb"))) - println(e) - } catch { - case e: ExpressionException if e.getMessage.endsWith("not a TraitType, expression: is Jdb") => () - } - } - - @Test def testhasField: Unit = { - val e = QueryProcessor.validate(_class("DB").where(hasField("name"))) - println(e) - } - - @Test def testHasFieldNegative: Unit = { - try { - val e = QueryProcessor.validate(_class("DB").where(hasField("nam"))) - println(e) - } catch { - case e: ExpressionException if e.getMessage.endsWith("not a TraitType, expression: is Jdb") => () - } - } - - @Test def testFieldReference: Unit = { - val e = QueryProcessor.validate(_class("DB").field("Table")) - println(e) - } - - @Test def testNegFieldReference: Unit = { - try { - val e = QueryProcessor.validate(_class("DB").where(_class("LoadProcess").hasField("name"))) - println(e) - } catch { - case e: ExpressionException - if e.getMessage.endsWith("srcType of field doesn't match input type, expression: LoadProcess has name") => () - } - } - - @Test def testFieldReferenceRedundant: Unit = { - val e = QueryProcessor.validate(_class("DB").where(_class("DB").hasField("name"))) - println(e) - } - - @Test def testBackReference: Unit = { - val e = QueryProcessor.validate( - _class("DB").as("db1").field("Table").where(id("db1").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("db1").field("Table").as("tab").where((id("db1").field("createTime") + int(1) > int(0)) - .and(id("db1").field("name").`=`(string("Reporting")))).select(id("db1").field("name").as("dbName"), - id("tab").field("name").as("tabName")) - ) - println(e) - } - - @Test def testJoinAndSelect2: Unit = { - val e = QueryProcessor.validate( - _class("DB").as("db1").field("Table").as("tab").where((id("db1").field("createTime") + int(1) > int(0)) - .or(id("db1").field("name").`=`(string("Reporting")))) - .select(id("db1").field("name").as("dbName"), id("tab").field("name").as("tabName")) - ) - println(e) - } - - @Test def testJoinAndSelect3: Unit = { - val e = QueryProcessor.validate( - _class("DB").as("db1").field("Table").as("tab").where((id("db1").field("createTime") + int(1) > int(0)) - .and(id("db1").field("name").`=`(string("Reporting"))) - .or(id("db1").hasField("owner"))) - .select(id("db1").field("name").as("dbName"), id("tab").field("name").as("tabName")) - ) - println(e) - } - - @Test def testJoinAndSelect4: Unit = { - val e = QueryProcessor.validate( - _class("DB") as "db1" join "Table" as "tab" where ( - id("db1").field("createTime") + int(1) > int(0) and - (id("db1") `.` "name" `=` string("Reporting")) or - (id("db1") hasField "owner") - ) select( - id("db1") `.` "name" as "dbName", id("tab") `.` "name" as "tabName" - ) - ) - println(e) - } - - @Test def testLineageAll: Unit = { - val e = QueryProcessor.validate(_class("Table").loop(id("LoadProcess").field("outputTable"))) - println(e) - } -}
http://git-wip-us.apache.org/repos/asf/atlas/blob/435fe3fb/repository/src/test/scala/org/apache/atlas/query/GremlinTest.scala ---------------------------------------------------------------------- diff --git a/repository/src/test/scala/org/apache/atlas/query/GremlinTest.scala b/repository/src/test/scala/org/apache/atlas/query/GremlinTest.scala deleted file mode 100755 index a948d16..0000000 --- a/repository/src/test/scala/org/apache/atlas/query/GremlinTest.scala +++ /dev/null @@ -1,1068 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.atlas.query - -import org.apache.atlas.repository.graphdb.AtlasGraph -import org.apache.atlas.discovery.graph.DefaultGraphPersistenceStrategy -import org.apache.atlas.query.Expressions._ -import org.apache.atlas.repository.graph.{AtlasGraphProvider, GraphBackedMetadataRepository} -import org.apache.atlas.typesystem.types.TypeSystem -import org.testng.annotations._ -import org.apache.atlas.repository.graph.AtlasGraphProvider -import org.apache.atlas.{DBSandboxer, TestUtils} -import org.apache.atlas.graph.GraphSandboxUtil - -class GremlinTest extends BaseGremlinTest { - - var g: AtlasGraph[_,_] = null - var gp: GraphPersistenceStrategies = null; - - @BeforeMethod - def resetRequestContext() { - TestUtils.resetRequestContext() - } - - @BeforeClass - def beforeAll() { - TypeSystem.getInstance().reset() - var repo = new GraphBackedMetadataRepository(null, new AtlasGraphProvider().get()) - TestUtils.setupGraphProvider(repo) - //force graph to be initialized first - AtlasGraphProvider.getGraphInstance() - - //create types and indices up front. Without this, some of the property keys (particularly __traitNames and __superTypes) - //get ended up created implicitly with some graph backends with the wrong multiplicity. This also makes the queries - //we execute perform better :-) - QueryTestsUtils.setupTypesAndIndices() - - gp = new DefaultGraphPersistenceStrategy(repo) - g = QueryTestsUtils.setupTestGraph(repo) - } - - @AfterClass - def afterAll() { - AtlasGraphProvider.cleanup() - } - - - @Test def testClass { - val r = QueryProcessor.evaluate(_class("DB"), g, gp) - validateJson(r, """{ - | "query": "DB", - | "dataType": { - | "superTypes": [ - | - | ], - | "hierarchicalMetaTypeName": "org.apache.atlas.typesystem.types.ClassType", - | "typeName": "DB", - | "attributeDefinitions": [ - | { - | "name": "name", - | "dataTypeName": "string", - | "multiplicity": { - | "lower": 0, - | "upper": 1, - | "isUnique": false - | }, - | "isComposite": false, - | "isUnique": false, - | "isIndexable": false, - | "reverseAttributeName": null - | }, - | { - | "name": "owner", - | "dataTypeName": "string", - | "multiplicity": { - | "lower": 0, - | "upper": 1, - | "isUnique": false - | }, - | "isComposite": false, - | "isUnique": false, - | "isIndexable": false, - | "reverseAttributeName": null - | }, - | { - | "name": "createTime", - | "dataTypeName": "int", - | "multiplicity": { - | "lower": 0, - | "upper": 1, - | "isUnique": false - | }, - | "isComposite": false, - | "isUnique": false, - | "isIndexable": false, - | "reverseAttributeName": null - | - | }, - | { - | "name": "clusterName", - | "dataTypeName": "string", - | "multiplicity": { - | "lower": 0, - | "upper": 1, - | "isUnique": false - | }, - | "isComposite": false, - | "isUnique": false, - | "isIndexable": false, - | "reverseAttributeName": null - | } - | ] - | }, - | "rows": [ - | { - | "$typeName$": "DB", - | "$id$": { - | "$typeName$": "DB", - | "version": 0 - | }, - | "owner": "John ETL", - | "name": "Sales", - | "createTime": 1000, - | "clusterName": "test" - | }, - | { - | "$typeName$": "DB", - | "$id$": { - | "$typeName$": "DB", - | "version": 0 - | }, - | "owner": "Jane BI", - | "name": "Reporting", - | "createTime": 1500, - | "clusterName": "test" - | } - | ] - | }""".stripMargin) - } - - @Test def testName { - val r = QueryProcessor.evaluate(_class("DB").field("name"), g, gp) - validateJson(r, "{\n \"query\":\"DB.name\",\n \"dataType\":\"string\",\n \"rows\":[\n \"Sales\",\n \"Reporting\"\n ]\n}") - } - - @Test def testFilter { - var r = QueryProcessor.evaluate(_class("DB").where(id("name").`=`(string("Reporting"))), g, gp) - validateJson(r, """{ - | "query": "DB where (name = \"Reporting\")", - | "dataType": { - | "superTypes": [], - | "hierarchicalMetaTypeName": "org.apache.atlas.typesystem.types.ClassType", - | "typeName": "DB", - | "attributeDefinitions": [ - | { - | "name": "name", - | "dataTypeName": "string", - | "multiplicity": { - | "lower": 0, - | "upper": 1, - | "isUnique": false - | }, - | "isComposite": false, - | "isUnique": false, - | "isIndexable": false, - | "reverseAttributeName": null - | }, - | { - | "name": "owner", - | "dataTypeName": "string", - | "multiplicity": { - | "lower": 0, - | "upper": 1, - | "isUnique": false - | }, - | "isComposite": false, - | "isUnique": false, - | "isIndexable": false, - | "reverseAttributeName": null - | }, - | { - | "name": "createTime", - | "dataTypeName": "int", - | "multiplicity": { - | "lower": 0, - | "upper": 1, - | "isUnique": false - | }, - | "isComposite": false, - | "isUnique": false, - | "isIndexable": false, - | "reverseAttributeName": null - | }, - | { - | "name": "clusterName", - | "dataTypeName": "string", - | "multiplicity": { - | "lower": 0, - | "upper": 1, - | "isUnique": false - | }, - | "isComposite": false, - | "isUnique": false, - | "isIndexable": false, - | "reverseAttributeName": null - | } - | ] - | }, - | "rows": [ - | { - | "$typeName$": "DB", - | "$id$": { - | "$typeName$": "DB", - | "version": 0 - | }, - | "owner": "Jane BI", - | "name": "Reporting", - | "createTime": 1500, - | "clusterName": "test" - | } - | ] - |}""".stripMargin) - } - - @Test def testFilter2 { - var r = QueryProcessor.evaluate(_class("DB").where(id("DB").field("name").`=`(string("Reporting"))), g, gp) - validateJson(r, """{ - | "query": "DB where (name = \"Reporting\")", - | "dataType": { - | "superTypes": [], - | "hierarchicalMetaTypeName": "org.apache.atlas.typesystem.types.ClassType", - | "typeName": "DB", - | "attributeDefinitions": [ - | { - | "name": "name", - | "dataTypeName": "string", - | "multiplicity": { - | "lower": 0, - | "upper": 1, - | "isUnique": false - | }, - | "isComposite": false, - | "isUnique": false, - | "isIndexable": false, - | "reverseAttributeName": null - | }, - | { - | "name": "owner", - | "dataTypeName": "string", - | "multiplicity": { - | "lower": 0, - | "upper": 1, - | "isUnique": false - | }, - | "isComposite": false, - | "isUnique": false, - | "isIndexable": false, - | "reverseAttributeName": null - | }, - | { - | "name": "createTime", - | "dataTypeName": "int", - | "multiplicity": { - | "lower": 0, - | "upper": 1, - | "isUnique": false - | }, - | "isComposite": false, - | "isUnique": false, - | "isIndexable": false, - | "reverseAttributeName": null - | }, - | { - | "name": "clusterName", - | "dataTypeName": "string", - | "multiplicity": { - | "lower": 0, - | "upper": 1, - | "isUnique": false - | }, - | "isComposite": false, - | "isUnique": false, - | "isIndexable": false, - | "reverseAttributeName": null - | } - | ] - | }, - | "rows": [ - | { - | "$typeName$": "DB", - | "$id$": { - | "$typeName$": "DB", - | "version": 0 - | }, - | "owner": "Jane BI", - | "name": "Reporting", - | "createTime": 1500, - | "clusterName": "test" - | } - | ] - |}""".stripMargin) - } - - @Test def testSelect { - val r = QueryProcessor.evaluate(_class("DB").where(id("name").`=`(string("Reporting"))). - select(id("name"), id("owner")), g, gp) - validateJson(r, """{ - | "query": "DB where (name = \"Reporting\") as _src1 select _src1.name as _src1.name, _src1.owner as _src1.owner", - | "dataType": { - | "typeName": "__tempQueryResultStruct1", - | "attributeDefinitions": [ - | { - | "name": "_src1.name", - | "dataTypeName": "string", - | "multiplicity": { - | "lower": 0, - | "upper": 1, - | "isUnique": false - | }, - | "isComposite": false, - | "isUnique": false, - | "isIndexable": false, - | "reverseAttributeName": null - | }, - | { - | "name": "_src1.owner", - | "dataTypeName": "string", - | "multiplicity": { - | "lower": 0, - | "upper": 1, - | "isUnique": false - | }, - | "isComposite": false, - | "isUnique": false, - | "isIndexable": false, - | "reverseAttributeName": null - | } - | ] - | }, - | "rows": [ - | { - | "$typeName$": "__tempQueryResultStruct1", - | "_src1.owner": "Jane BI", - | "_src1.name": "Reporting" - | } - | ] - |}""".stripMargin) - } - - @Test def testIsTrait { - val r = QueryProcessor.evaluate(_class("Table").where(isTrait("Dimension")), g, gp) - validateJson(r, """{ - | "query":"Table where Table is Dimension", - | "dataType":{ - | "superTypes":[ - | - | ], - | "hierarchicalMetaTypeName":"org.apache.atlas.typesystem.types.ClassType", - | "typeName":"Table", - | "attributeDefinitions":[ - | { - | "name":"name", - | "dataTypeName":"string", - | "multiplicity":{ - | "lower":0, - | "upper":1, - | "isUnique":false - | }, - | "isComposite":false, - | "isUnique":false, - | "isIndexable":false, - | "reverseAttributeName":null - | }, - | { - | "name":"db", - | "dataTypeName":"DB", - | "multiplicity":{ - | "lower":1, - | "upper":1, - | "isUnique":false - | }, - | "isComposite":false, - | "isUnique":false, - | "isIndexable":false, - | "reverseAttributeName":null - | }, - | { - | "name":"sd", - | "dataTypeName":"StorageDescriptor", - | "multiplicity":{ - | "lower":1, - | "upper":1, - | "isUnique":false - | }, - | "isComposite":false, - | "isUnique":false, - | "isIndexable":false, - | "reverseAttributeName":null - | }, - | { - | "name":"created", - | "dataTypeName":"date", - | "multiplicity":{ - | "lower":0, - | "upper":1, - | "isUnique":false - | }, - | "isComposite":false, - | "isUnique":false, - | "isIndexable":false, - | "reverseAttributeName":null - | } - | ] - | }, - | "rows":[ - | { - | "$typeName$":"Table", - | "$id$":{ - | "$typeName$":"Table", - | "version":0 - | }, - | "created":"2014-12-11T02:35:58.440Z", - | "sd":{ - | "$typeName$":"StorageDescriptor", - | "version":0 - | }, - | "db":{ - | "$typeName$":"DB", - | "version":0 - | }, - | "name":"product_dim", - | "$traits$":{ - | "Dimension":{ - | "$typeName$":"Dimension" - | } - | } - | }, - | { - | "$typeName$":"Table", - | "$id$":{ - | "$typeName$":"Table", - | "version":0 - | }, - | "created":"2014-12-11T02:35:58.440Z", - | "sd":{ - | "$typeName$":"StorageDescriptor", - | "version":0 - | }, - | "db":{ - | "$typeName$":"DB", - | "version":0 - | }, - | "name":"time_dim", - | "$traits$":{ - | "Dimension":{ - | "$typeName$":"Dimension" - | } - | } - | }, - | { - | "$typeName$":"Table", - | "$id$":{ - | "$typeName$":"Table", - | "version":0 - | }, - | "created":"2014-12-11T02:35:58.440Z", - | "sd":{ - | "$typeName$":"StorageDescriptor", - | "version":0 - | }, - | "db":{ - | "$typeName$":"DB", - | "version":0 - | }, - | "name":"customer_dim", - | "$traits$":{ - | "Dimension":{ - | "$typeName$":"Dimension" - | } - | } - | } - | ] - |}""".stripMargin) - } - - @Test def testhasField { - val r = QueryProcessor.evaluate(_class("DB").where(hasField("name")), g, gp) - validateJson(r, """{ - | "query":"DB where DB has name", - | "dataType":{ - | "superTypes":[ - | - | ], - | "hierarchicalMetaTypeName":"org.apache.atlas.typesystem.types.ClassType", - | "typeName":"DB", - | "attributeDefinitions":[ - | { - | "name":"name", - | "dataTypeName":"string", - | "multiplicity":{ - | "lower":0, - | "upper":1, - | "isUnique":false - | }, - | "isComposite":false, - | "isUnique":false, - | "isIndexable":false, - | "reverseAttributeName":null - | }, - | { - | "name":"owner", - | "dataTypeName":"string", - | "multiplicity":{ - | "lower":0, - | "upper":1, - | "isUnique":false - | }, - | "isComposite":false, - | "isUnique":false, - | "isIndexable":false, - | "reverseAttributeName":null - | }, - | { - | "name":"createTime", - | "dataTypeName":"int", - | "multiplicity":{ - | "lower":0, - | "upper":1, - | "isUnique":false - | }, - | "isComposite":false, - | "isUnique":false, - | "isIndexable":false, - | "reverseAttributeName":null - | }, - | { - | "name":"clusterName", - | "dataTypeName":"string", - | "multiplicity":{ - | "lower":0, - | "upper":1, - | "isUnique":false - | }, - | "isComposite":false, - | "isUnique":false, - | "isIndexable":false, - | "reverseAttributeName":null - | } - | ] - | }, - | "rows":[ - | { - | "$typeName$":"DB", - | "$id$":{ - | "$typeName$":"DB", - | "version":0 - | }, - | "owner":"John ETL", - | "name":"Sales", - | "createTime":1000, - | "clusterName":"test" - | }, - | { - | "$typeName$":"DB", - | "$id$":{ - | "$typeName$":"DB", - | "version":0 - | }, - | "owner":"Jane BI", - | "name":"Reporting", - | "createTime":1500, - | "clusterName":"test" - | } - | ] - |}""".stripMargin) - } - - @Test def testFieldReference { - val r = QueryProcessor.evaluate(_class("DB").field("Table"), g, gp) - validateJson(r, """{ - | "query":"DB Table", - | "dataType":{ - | "superTypes":[ ], - | "hierarchicalMetaTypeName":"org.apache.atlas.typesystem.types.ClassType", - | "typeName":"Table", - | "attributeDefinitions":[ - | { - | "name":"name", - | "dataTypeName":"string", - | "multiplicity":{ - | "lower":0, - | "upper":1, - | "isUnique":false - | }, - | "isComposite":false, - | "isUnique":false, - | "isIndexable":false, - | "reverseAttributeName":null - | }, - | { - | "name":"db", - | "dataTypeName":"DB", - | "multiplicity":{ - | "lower":1, - | "upper":1, - | "isUnique":false - | }, - | "isComposite":false, - | "isUnique":false, - | "isIndexable":false, - | "reverseAttributeName":null - | }, - | { - | "name":"sd", - | "dataTypeName":"StorageDescriptor", - | "multiplicity":{ - | "lower":1, - | "upper":1, - | "isUnique":false - | }, - | "isComposite":false, - | "isUnique":false, - | "isIndexable":false, - | "reverseAttributeName":null - | }, - | { - | "name":"created", - | "dataTypeName":"date", - | "multiplicity":{ - | "lower":0, - | "upper":1, - | "isUnique":false - | }, - | "isComposite":false, - | "isUnique":false, - | "isIndexable":false, - | "reverseAttributeName":null - | } - | ] - | }, - | "rows":[ - | { - | "$typeName$":"Table", - | "$id$":{ - | "$typeName$":"Table", - | "version":0 - | }, - | "created":"2014-12-11T02:35:58.440Z", - | "sd":{ - | "$typeName$":"StorageDescriptor", - | "version":0 - | }, - | "db":{ - | "$typeName$":"DB", - | "version":0 - | }, - | "name":"sales_fact" - | }, - | { - | "$typeName$":"Table", - | "$id$":{ - | "$typeName$":"Table", - | "version":0 - | }, - | "created":"2014-12-11T02:35:58.440Z", - | "sd":{ - | "$typeName$":"StorageDescriptor", - | "version":0 - | }, - | "db":{ - | "$typeName$":"DB", - | "version":0 - | }, - | "name":"product_dim", - | "$traits$":{ - | "Dimension":{ - | "$typeName$":"Dimension" - | } - | } - | }, - | { - | "$typeName$":"Table", - | "$id$":{ - | "$typeName$":"Table", - | "version":0 - | }, - | "created":"2014-12-11T02:35:58.440Z", - | "sd":{ - | "$typeName$":"StorageDescriptor", - | "version":0 - | }, - | "db":{ - | "$typeName$":"DB", - | "version":0 - | }, - | "name":"time_dim", - | "$traits$":{ - | "Dimension":{ - | "$typeName$":"Dimension" - | } - | } - | }, - | { - | "$typeName$":"Table", - | "$id$":{ - | "$typeName$":"Table", - | "version":0 - | }, - | "created":"2014-12-11T02:35:58.440Z", - | "sd":{ - | "$typeName$":"StorageDescriptor", - | "version":0 - | }, - | "db":{ - | "$typeName$":"DB", - | "version":0 - | }, - | "name":"customer_dim", - | "$traits$":{ - | "Dimension":{ - | "$typeName$":"Dimension" - | } - | } - | }, - | { - | "$typeName$":"Table", - | "$id$":{ - | "$typeName$":"Table", - | "version":0 - | }, - | "created":"2014-12-11T02:35:58.440Z", - | "sd":{ - | "$typeName$":"StorageDescriptor", - | "version":0 - | }, - | "db":{ - | "$typeName$":"DB", - | "version":0 - | }, - | "name":"sales_fact_daily_mv" - | }, - | { - | "$typeName$":"Table", - | "$id$":{ - | "$typeName$":"Table", - | "version":0 - | }, - | "created":"2014-12-11T02:35:58.440Z", - | "sd":{ - | "$typeName$":"StorageDescriptor", - | "version":0 - | }, - | "db":{ - | "$typeName$":"DB", - | "version":0 - | }, - | "name":"sales_fact_monthly_mv" - | } - | ] - |}""".stripMargin) - } - - @Test def testBackReference { - val r = QueryProcessor.evaluate( - _class("DB").as("db").field("Table").where(id("db").field("name").`=`(string("Reporting"))), g, gp) - validateJson(r, null) - } - - @Test def testArith { - val r = QueryProcessor.evaluate(_class("DB").where(id("name").`=`(string("Reporting"))). - select(id("name"), id("createTime") + int(1)), g, gp) - validateJson(r, "{\n \"query\":\"DB where (name = \\\"Reporting\\\") as _src1 select _src1.name as _src1.name, (_src1.createTime + 1) as (_src1.createTime + 1)\",\n \"dataType\":{\n \"typeName\":\"__tempQueryResultStruct3\",\n \"attributeDefinitions\":[\n {\n \"name\":\"_src1.name\",\n \"dataTypeName\":\"string\",\n \"multiplicity\":{\n \"lower\":0,\n \"upper\":1,\n \"isUnique\":false\n },\n \"isComposite\":false,\n \"isUnique\":false,\n \"isIndexable\":false,\n \"reverseAttributeName\":null\n },\n {\n \"name\":\"(_src1.createTime + 1)\",\n \"dataTypeName\":\"int\",\n \"multiplicity\":{\n \"lower\":0,\n \"upper\":1,\n \"isUnique\":false\n },\n \"isComposite\":false,\n \"isUnique\":false,\n \"isIndexable\":false,\n \"reverseAttributeName\":null\n }\n ]\n },\n \"rows\":[\n {\n \"$typeName$\":\"__tempQueryResultStruct3\",\n \"(_src1.createTime + 1)\":1501,\n \"_src1.name\":\"Reporting\"\n }\n ]\n}") - } - - @Test def testComparisonLogical { - val r = QueryProcessor.evaluate(_class("DB").where(id("name").`=`(string("Reporting")). - and(id("createTime") > int(0))), g, gp) - validateJson(r, """{ - | "query": "DB where (name = \"Reporting\") and (createTime > 0)", - | "dataType": { - | "superTypes": [ - | - | ], - | "hierarchicalMetaTypeName": "org.apache.atlas.typesystem.types.ClassType", - | "typeName": "DB", - | "attributeDefinitions": [ - | { - | "name": "name", - | "dataTypeName": "string", - | "multiplicity": { - | "lower": 0, - | "upper": 1, - | "isUnique": false - | }, - | "isComposite": false, - | "isUnique": false, - | "isIndexable": false, - | "reverseAttributeName": null - | }, - | { - | "name": "owner", - | "dataTypeName": "string", - | "multiplicity": { - | "lower": 0, - | "upper": 1, - | "isUnique": false - | }, - | "isComposite": false, - | "isUnique": false, - | "isIndexable": false, - | "reverseAttributeName": null - | }, - | { - | "name": "createTime", - | "dataTypeName": "int", - | "multiplicity": { - | "lower": 0, - | "upper": 1, - | "isUnique": false - | }, - | "isComposite": false, - | "isUnique": false, - | "isIndexable": false, - | "reverseAttributeName": null - | }, - | { - | "name": "clusterName", - | "dataTypeName": "string", - | "multiplicity": { - | "lower": 0, - | "upper": 1, - | "isUnique": false - | }, - | "isComposite": false, - | "isUnique": false, - | "isIndexable": false, - | "reverseAttributeName": null - | } - | ] - | }, - | "rows": [ - | { - | "$typeName$": "DB", - | "$id$": { - | "$typeName$": "DB", - | "version": 0 - | }, - | "owner": "Jane BI", - | "name": "Reporting", - | "createTime": 1500, - | "clusterName": "test" - | } - | ] - |}""".stripMargin) - } - - @Test def testJoinAndSelect1 { - val r = QueryProcessor.evaluate( - _class("DB").as("db1").where(id("name").`=`(string("Sales"))).field("Table").as("tab"). - where(isTrait("Dimension")). - select(id("db1").field("name").as("dbName"), id("tab").field("name").as("tabName")), g, gp - ) - validateJson(r, "{\n \"query\":\"DB as db1 where (name = \\\"Sales\\\") Table as tab where DB as db1 where (name = \\\"Sales\\\") Table as tab is Dimension as _src1 select db1.name as dbName, tab.name as tabName\",\n \"dataType\":{\n \"typeName\":\"__tempQueryResultStruct5\",\n \"attributeDefinitions\":[\n {\n \"name\":\"dbName\",\n \"dataTypeName\":\"string\",\n \"multiplicity\":{\n \"lower\":0,\n \"upper\":1,\n \"isUnique\":false\n },\n \"isComposite\":false,\n \"isUnique\":false,\n \"isIndexable\":false,\n \"reverseAttributeName\":null\n },\n {\n \"name\":\"tabName\",\n \"dataTypeName\":\"string\",\n \"multiplicity\":{\n \"lower\":0,\n \"upper\":1,\n \"isUnique\":false\n },\n \"isComposite\":false,\n \"isUnique\":false,\n \"isIndexable\":false,\n \"reverseAttributeName\":null\n }\n ]\n },\n \"rows\":[\n {\n \"$typeName$\":\"__tempQueryResultStruct5\",\n \"dbName\":\"Sales\",\n \"tabName\":\"product_dim\"\n },\n {\n \"$typeName$\":\"__tempQueryResultStruct5\",\n \"dbName\":\"Sales\",\n \"tabName\":\"time_dim\"\n },\n {\n \"$typeName$\":\"__tempQueryResultStruct5\",\n \"dbName\":\"Sales\",\n \"tabName\":\"customer_dim\"\n }\n ]\n}") - } - - @Test def testJoinAndSelect2 { - val r = QueryProcessor.evaluate( - _class("DB").as("db1").where((id("db1").field("createTime") > int(0)) - .or(id("name").`=`(string("Reporting")))).field("Table").as("tab") - .select(id("db1").field("name").as("dbName"), id("tab").field("name").as("tabName")), g, gp - ) - validateJson(r, "{\n \"query\":\"DB as db1 where (createTime > 0) or (name = \\\"Reporting\\\") Table as tab select db1.name as dbName, tab.name as tabName\",\n \"dataType\":{\n \"typeName\":\"__tempQueryResultStruct6\",\n \"attributeDefinitions\":[\n {\n \"name\":\"dbName\",\n \"dataTypeName\":\"string\",\n \"multiplicity\":{\n \"lower\":0,\n \"upper\":1,\n \"isUnique\":false\n },\n \"isComposite\":false,\n \"isUnique\":false,\n \"isIndexable\":false,\n \"reverseAttributeName\":null\n },\n {\n \"name\":\"tabName\",\n \"dataTypeName\":\"string\",\n \"multiplicity\":{\n \"lower\":0,\n \"upper\":1,\n \"isUnique\":false\n },\n \"isComposite\":false,\n \"isUnique\":false,\n \"isIndexable\":false,\n \"reverseAttributeName\":null\n }\n ]\n },\n \"rows\":[\n {\n \"$typeName$\":\"__t empQueryResultStruct6\",\n \"dbName\":\"Sales\",\n \"tabName\":\"sales_fact\"\n },\n {\n \"$typeName$\":\"__tempQueryResultStruct6\",\n \"dbName\":\"Sales\",\n \"tabName\":\"product_dim\"\n },\n {\n \"$typeName$\":\"__tempQueryResultStruct6\",\n \"dbName\":\"Sales\",\n \"tabName\":\"time_dim\"\n },\n {\n \"$typeName$\":\"__tempQueryResultStruct6\",\n \"dbName\":\"Sales\",\n \"tabName\":\"customer_dim\"\n },\n {\n \"$typeName$\":\"__tempQueryResultStruct6\",\n \"dbName\":\"Reporting\",\n \"tabName\":\"sales_fact_daily_mv\"\n },\n {\n \"$typeName$\":\"__tempQueryResultStruct6\",\n \"dbName\":\"Reporting\",\n \"tabName\":\"sales_fact_monthly_mv\"\n }\n ]\n}") - } - - @Test def testJoinAndSelect3 { - val r = QueryProcessor.evaluate( - _class("DB").as("db1").where((id("db1").field("createTime") > int(0)) - .and(id("db1").field("name").`=`(string("Reporting"))) - .or(id("db1").hasField("owner"))).field("Table").as("tab") - .select(id("db1").field("name").as("dbName"), id("tab").field("name").as("tabName")), g, gp - ) - validateJson(r, "{\n \"query\":\"DB as db1 where (createTime > 0) and (name = \\\"Reporting\\\") or db1 has owner Table as tab select db1.name as dbName, tab.name as tabName\",\n \"dataType\":{\n \"typeName\":\"__tempQueryResultStruct7\",\n \"attributeDefinitions\":[\n {\n \"name\":\"dbName\",\n \"dataTypeName\":\"string\",\n \"multiplicity\":{\n \"lower\":0,\n \"upper\":1,\n \"isUnique\":false\n },\n \"isComposite\":false,\n \"isUnique\":false,\n \"isIndexable\":false,\n \"reverseAttributeName\":null\n },\n {\n \"name\":\"tabName\",\n \"dataTypeName\":\"string\",\n \"multiplicity\":{\n \"lower\":0,\n \"upper\":1,\n \"isUnique\":false\n },\n \"isComposite\":false,\n \"isUnique\":false,\n \"isIndexable\":false,\n \"reverseAttributeName\":null\n }\n ]\n },\n \"rows\":[\n {\n \" $typeName$\":\"__tempQueryResultStruct7\",\n \"dbName\":\"Sales\",\n \"tabName\":\"sales_fact\"\n },\n {\n \"$typeName$\":\"__tempQueryResultStruct7\",\n \"dbName\":\"Sales\",\n \"tabName\":\"product_dim\"\n },\n {\n \"$typeName$\":\"__tempQueryResultStruct7\",\n \"dbName\":\"Sales\",\n \"tabName\":\"time_dim\"\n },\n {\n \"$typeName$\":\"__tempQueryResultStruct7\",\n \"dbName\":\"Sales\",\n \"tabName\":\"customer_dim\"\n },\n {\n \"$typeName$\":\"__tempQueryResultStruct7\",\n \"dbName\":\"Reporting\",\n \"tabName\":\"sales_fact_daily_mv\"\n },\n {\n \"$typeName$\":\"__tempQueryResultStruct7\",\n \"dbName\":\"Reporting\",\n \"tabName\":\"sales_fact_monthly_mv\"\n }\n ]\n}") - } - - @Test def testJoinAndSelect4 { - val r = QueryProcessor.evaluate( - _class("DB").as("db1").where(id("name").`=`(string("Sales"))).field("Table").as("tab"). - where(isTrait("Dimension")). - select(id("db1").as("dbO"), id("tab").field("name").as("tabName")), g, gp - ) - validateJson(r, "{\n \"query\":\"DB as db1 where (name = \\\"Sales\\\") Table as tab where DB as db1 where (name = \\\"Sales\\\") Table as tab is Dimension as _src1 select db1 as dbO, tab.name as tabName\",\n \"dataType\":{\n \"typeName\":\"\",\n \"attributeDefinitions\":[\n {\n \"name\":\"dbO\",\n \"dataTypeName\":\"DB\",\n \"multiplicity\":{\n \"lower\":0,\n \"upper\":1,\n \"isUnique\":false\n },\n \"isComposite\":false,\n \"isUnique\":false,\n \"isIndexable\":false,\n \"reverseAttributeName\":null\n },\n {\n \"name\":\"tabName\",\n \"dataTypeName\":\"string\",\n \"multiplicity\":{\n \"lower\":0,\n \"upper\":1,\n \"isUnique\":false\n },\n \"isComposite\":false,\n \"isUnique\":false,\n \"isIndexable\":false,\n \"reverseAttributeName\":null\n }\n ]\n },\n \"rows\":[\n {\n \"$ typeName$\":\"\",\n \"dbO\":{\n \"$typeName$\":\"DB\",\n \"version\":0\n },\n \"tabName\":\"product_dim\"\n },\n {\n \"$typeName$\":\"\",\n \"dbO\":{\n \"$typeName$\":\"DB\",\n \"version\":0\n },\n \"tabName\":\"time_dim\"\n },\n {\n \"$typeName$\":\"\",\n \"dbO\":{\n \"$typeName$\":\"DB\",\n \"version\":0\n },\n \"tabName\":\"customer_dim\"\n }\n ]\n}") - } - - @Test def testArrayComparision { - val p = QueryParser - val e = p("Partition as p where values = ['2015-01-01']," + - " table where name = 'sales_fact_daily_mv'," + - " db where name = 'Reporting' and clusterName = 'test' select p").right.get - val r = QueryProcessor.evaluate(e, g, gp) - validateJson(r, """{ - | "query":"Partition as p where (values = [\"2015-01-01\"]) table where (name = \"sales_fact_daily_mv\") db where (name = \"Reporting\") and (clusterName = \"test\") as _src1 select p as p", - | "dataType":{ - | "typeName":"__tempQueryResultStruct2", - | "attributeDefinitions":[ - | { - | "name":"p", - | "dataTypeName":"Partition", - | "multiplicity":{ - | "lower":0, - | "upper":1, - | "isUnique":false - | }, - | "isComposite":false, - | "isUnique":false, - | "isIndexable":false, - | "reverseAttributeName":null - | } - | ] - | }, - | "rows":[ - | { - | "$typeName$":"__tempQueryResultStruct2", - | "p":{ - | "$typeName$":"Partition", - | "version":0 - | } - | } - | ] - |}""".stripMargin) - } - - @Test def testArrayComparisionWithSelectOnArray { - val p = QueryParser - val e = p("Partition as p where values = ['2015-01-01']," + - " table where name = 'sales_fact_daily_mv'," + - " db where name = 'Reporting' and clusterName = 'test' select p.values").right.get - val r = QueryProcessor.evaluate(e, g, gp) - validateJson(r, - """{ - | "query":"Partition as p where (values = [\"2015-01-01\"]) table where (name = \"sales_fact_daily_mv\") db where (name = \"Reporting\") and (clusterName = \"test\") as _src1 select p.values as p.values", - | "dataType":{ - | "typeName":"__tempQueryResultStruct2", - | "attributeDefinitions":[ - | { - | "name":"p.values", - | "dataTypeName":"array<string>", - | "multiplicity":{ - | "lower":0, - | "upper":1, - | "isUnique":false - | }, - | "isComposite":false, - | "isUnique":false, - | "isIndexable":false, - | "reverseAttributeName":null - | } - | ] - | }, - | "rows":[ - | { - | "$typeName$":"__tempQueryResultStruct2", - | "p.values":[ - | "2015-01-01" - | ] - | } - | ] - |} - """.stripMargin) - } - - @Test def testArrayInWhereClause { - val p = QueryParser - val e = p("Partition as p where values = ['2015-01-01']").right.get - val r = QueryProcessor.evaluate(e, g, gp) - validateJson(r, """{ - | "query":"Partition as p where (values = [\"2015-01-01\"])", - | "dataType":{ - | "superTypes":[ - | - | ], - | "hierarchicalMetaTypeName":"org.apache.atlas.typesystem.types.ClassType", - | "typeName":"Partition", - | "attributeDefinitions":[ - | { - | "name":"values", - | "dataTypeName":"array<string>", - | "multiplicity":{ - | "lower":1, - | "upper":1, - | "isUnique":false - | }, - | "isComposite":false, - | "isUnique":false, - | "isIndexable":false, - | "reverseAttributeName":null - | }, - | { - | "name":"table", - | "dataTypeName":"Table", - | "multiplicity":{ - | "lower":1, - | "upper":1, - | "isUnique":false - | }, - | "isComposite":false, - | "isUnique":false, - | "isIndexable":false, - | "reverseAttributeName":null - | } - | ] - | }, - | "rows":[ - | { - | "$typeName$":"Partition", - | "$id$":{ - | "$typeName$":"Partition", - | "version":0 - | }, - | "values":[ - | "2015-01-01" - | ], - | "table":{ - | "$typeName$":"Table", - | "version":0 - | } - | } - | ] - |}""".stripMargin) - } - - @Test def testArrayWithStruct { -// val p = new QueryParser -// val e = p("from LoadProcess select inputTables").right.get -// val r = QueryProcessor.evaluate(e, g) - val r = QueryProcessor.evaluate(_class("LoadProcess").field("inputTables"), g, gp) - validateJson(r) - } - - @Test(expectedExceptions = Array(classOf[ExpressionException])) - def testNegativeInvalidType { - val p = QueryParser - val e = p("from blah").right.get - QueryProcessor.evaluate(e, g, gp) - } - - @Test def testJoinAndSelect5 { - val p = QueryParser - val e = p("Table as t where name = 'sales_fact' db where name = 'Sales' and owner = 'John ETL' select t").right.get - val r = QueryProcessor.evaluate(e, g, gp) - validateJson(r) - } -} http://git-wip-us.apache.org/repos/asf/atlas/blob/435fe3fb/repository/src/test/scala/org/apache/atlas/query/GremlinTest2.scala ---------------------------------------------------------------------- diff --git a/repository/src/test/scala/org/apache/atlas/query/GremlinTest2.scala b/repository/src/test/scala/org/apache/atlas/query/GremlinTest2.scala deleted file mode 100755 index 880a0c6..0000000 --- a/repository/src/test/scala/org/apache/atlas/query/GremlinTest2.scala +++ /dev/null @@ -1,154 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.atlas.query - -import org.apache.atlas.{DBSandboxer, TestUtils} -import org.apache.atlas.discovery.graph.DefaultGraphPersistenceStrategy -import org.apache.atlas.query.Expressions._class -import org.apache.atlas.query.Expressions._trait -import org.apache.atlas.query.Expressions.id -import org.apache.atlas.repository.graph.GraphBackedMetadataRepository -import org.apache.atlas.repository.graphdb.AtlasGraph -import org.apache.atlas.typesystem.types.TypeSystem -import org.testng.annotations._ -import org.apache.atlas.repository.graph.AtlasGraphProvider - -class GremlinTest2 extends BaseGremlinTest { - - var g: AtlasGraph[_,_] = null - var gp:GraphPersistenceStrategies = null; - - @BeforeMethod - def resetRequestContext() { - TestUtils.resetRequestContext(); - } - - @BeforeClass - def beforeAll() { - TypeSystem.getInstance().reset() - QueryTestsUtils.setupTypes - var repo = new GraphBackedMetadataRepository(null, null); - gp = new DefaultGraphPersistenceStrategy(repo) - g = QueryTestsUtils.setupTestGraph(repo) - } - - @AfterClass - def afterAll() { - AtlasGraphProvider.cleanup(); - } - - @Test def testTraitSelect { - val r = QueryProcessor.evaluate(_class("Table").as("t").join("Dimension").as("dim").select(id("t"), id("dim")), g) - validateJson(r, "{\n \"query\":\"Table as t.Dimension as dim select t as _col_0, dim as _col_1\",\n \"dataType\":{\n \"typeName\":\"\",\n \"attributeDefinitions\":[\n {\n \"name\":\"_col_0\",\n \"dataTypeName\":\"Table\",\n \"multiplicity\":{\n \"lower\":0,\n \"upper\":1,\n \"isUnique\":false\n },\n \"isComposite\":false,\n \"isUnique\":false,\n \"isIndexable\":true,\n \"reverseAttributeName\":null\n },\n {\n \"name\":\"_col_1\",\n \"dataTypeName\":\"Dimension\",\n \"multiplicity\":{\n \"lower\":0,\n \"upper\":1,\n \"isUnique\":false\n },\n \"isComposite\":false,\n \"isUnique\":false,\n \"isIndexable\":true,\n \"reverseAttributeName\":null\n }\n ]\n },\n \"rows\":[\n {\n \"$typeName$\":\"\",\n \"_col_1\":{\n \"$typeName$\":\"Dimension\"\n },\n \"_col_0\" :{\n \"id\":\"3328\",\n \"$typeName$\":\"Table\",\n \"version\":0\n }\n },\n {\n \"$typeName$\":\"\",\n \"_col_1\":{\n \"$typeName$\":\"Dimension\"\n },\n \"_col_0\":{\n \"id\":\"4864\",\n \"$typeName$\":\"Table\",\n \"version\":0\n }\n },\n {\n \"$typeName$\":\"\",\n \"_col_1\":{\n \"$typeName$\":\"Dimension\"\n },\n \"_col_0\":{\n \"id\":\"6656\",\n \"$typeName$\":\"Table\",\n \"version\":0\n }\n }\n ]\n}") - } - - @Test def testTrait { - val r = QueryProcessor.evaluate(_trait("Dimension"), g) - validateJson(r) - } - - @Test def testTraitInstance { - val r = QueryProcessor.evaluate(_trait("Dimension").traitInstance(), g) - validateJson(r) - } - - @Test def testInstanceAddedToFilter { - val r = QueryProcessor.evaluate(_trait("Dimension").hasField("typeName"), g) - validateJson(r) - } - - @Test def testInstanceFilter { - val r = QueryProcessor.evaluate(_trait("Dimension").traitInstance().hasField("name"), g) - validateJson(r) - } - - @Test def testLineageWithPath { - val r = QueryProcessor.evaluate(_class("Table").loop(id("LoadProcess").field("outputTable")).path(), g) - validateJson(r) - } - - @Test def testLineageAllSelectWithPath { - val r = QueryProcessor.evaluate(_class("Table").as("src").loop(id("LoadProcess").field("outputTable")).as("dest"). - select(id("src").field("name").as("srcTable"), id("dest").field("name").as("destTable")).path(), g) - validateJson(r) - } - - @Test def testLineageAllSelectWithPathFromParser { - val p = QueryParser - val e = p("Table as src loop (LoadProcess outputTable) as dest " + - "select src.name as srcTable, dest.name as destTable withPath").right.get - //Table as src loop (LoadProcess where LoadProcess.outputTable) as dest select src.name as srcTable, dest.name as destTable withPath - val r = QueryProcessor.evaluate(e, g) - validateJson(r) - } - - @Test def testLineageAllSelectWithPathFromParser2 { - val p = QueryParser - - val e = p("Table as src loop (`LoadProcess->outputTable` inputTables) as dest " + - "select src.name as srcTable, dest.name as destTable withPath").right.get - val r = QueryProcessor.evaluate(e, g) - validateJson(r) - } - - @Test def testHighLevelLineage { - val r = InputLineageClosureQuery("Table", "name", "sales_fact_monthly_mv", - "LoadProcess", - "inputTables", - "outputTable", - None, Some(List("name")), true, getPersistenceStrategy(g), g).evaluate() - validateJson(r) - } - - @Test def testHighLevelLineageReturnGraph { - val q = InputLineageClosureQuery("Table", "name", "sales_fact_monthly_mv", - "LoadProcess", - "inputTables", - "outputTable", - None, Some(List("name")), true, getPersistenceStrategy(g), g); - val gr = q.evaluate(); - val r = q.graph(gr); - - println(r.toInstanceJson) - //validateJson(r) - } - - @Test def testHighLevelWhereUsed { - val r = OutputLineageClosureQuery("Table", "name", "sales_fact", - "LoadProcess", - "inputTables", - "outputTable", - None, Some(List("name")), true, getPersistenceStrategy(g), g).evaluate() - validateJson(r) - } - - @Test def testHighLevelWhereUsedReturnGraph { - val q = OutputLineageClosureQuery("Table", "name", "sales_fact", - "LoadProcess", - "inputTables", - "outputTable", - None, Some(List("name")), true, getPersistenceStrategy(g), g) - val gr = q.evaluate(); - val r = q.graph(gr); - println(r.toInstanceJson) - } - - private def getPersistenceStrategy(g: AtlasGraph[_,_]) : GraphPersistenceStrategies = return GraphPersistenceStrategy1(g) - -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/atlas/blob/435fe3fb/repository/src/test/scala/org/apache/atlas/query/HiveTitanSample.scala ---------------------------------------------------------------------- diff --git a/repository/src/test/scala/org/apache/atlas/query/HiveTitanSample.scala b/repository/src/test/scala/org/apache/atlas/query/HiveTitanSample.scala deleted file mode 100644 index fa0d341..0000000 --- a/repository/src/test/scala/org/apache/atlas/query/HiveTitanSample.scala +++ /dev/null @@ -1,243 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.atlas.query - -import scala.collection.JavaConversions._ - - -import org.apache.atlas.typesystem.ITypedReferenceableInstance -import org.apache.atlas.typesystem.json.TypedReferenceableInstanceSerializer -import org.apache.atlas.utils.HiveModel.Column -import org.apache.atlas.utils.HiveModel.DB -import org.apache.atlas.utils.HiveModel.HiveOrder -import org.apache.atlas.utils.HiveModel.LoadProcess -import org.apache.atlas.utils.HiveModel.Partition -import org.apache.atlas.utils.HiveModel.StorageDescriptor -import org.apache.atlas.utils.HiveModel.Table -import org.apache.atlas.utils.HiveModel.View -import scala.collection.mutable.Buffer - - - -object HiveTitanSample { - - val MetricTrait = "Metric" - val DimensionTrait = "Dimension" - val ETLTrait = "ETL" - val JdbcAccessTrait = "JdbcAccess" - - val salesDB = new DB("Sales", "John ETL", 1000, "test") - - - - val salesFact = new Table("sales_fact", - salesDB, - new StorageDescriptor("TextInputFormat", - "TextOutputFormat", List(new HiveOrder("customer_id", 0))), - List( - new Column("time_id", "int"), - new Column("product_id", "int"), - new Column("customer_id", "int"), - new Column("created", "date"), - new Column("sales", "double").withTrait(MetricTrait) - ) - ); - - - val productDim = new Table("product_dim", - salesDB, - new StorageDescriptor("TextInputFormat", - "TextOutputFormat", List(new HiveOrder("product_id", 0))), - List( - new Column("product_id", "int"), - new Column("product_name", "string"), - new Column("brand_name", "string") - ) - ).withTrait(DimensionTrait) - - val timeDim = new Table("time_dim", - salesDB, - new StorageDescriptor("TextInputFormat", - "TextOutputFormat", List(new HiveOrder("time_id", 0))), - List( - new Column("time_id", "int"), - new Column("dayOfYear", "int"), - new Column("weekDay", "string") - ) - ).withTrait(DimensionTrait) - - val customerDim = new Table("customer_dim", - salesDB, - new StorageDescriptor("TextInputFormat", - "TextOutputFormat", List(new HiveOrder("customer_id", 0))), - List( - new Column("customer_id", "int"), - new Column("name", "int"), - new Column("address", "string").withTrait("PII") - ) - ).withTrait(DimensionTrait) - - - val reportingDB = new DB("Reporting", "Jane BI", 1500, "test") - val salesFactDaily = new Table("sales_fact_daily_mv", - reportingDB, - new StorageDescriptor("TextInputFormat", - "TextOutputFormat", List(new HiveOrder("customer_id", 0))), - List( - new Column("time_id", "int"), - new Column("product_id", "int"), - new Column("customer_id", "int"), - new Column("sales", "double").withTrait(MetricTrait) - ) - ) - - val loadSalesFactDaily = new LoadProcess( - "loadSalesDaily", - List(salesFact, timeDim), - salesFactDaily - ).withTrait(ETLTrait) - - - - val productDimView = new View( - "product_dim_view", - reportingDB, - List(productDim) - ).withTraits(List(DimensionTrait, JdbcAccessTrait)) - - val customerDimView = new View( - "customer_dim_view", - reportingDB, - List(customerDim) - - ).withTraits(List(DimensionTrait, JdbcAccessTrait)) - - val salesFactMonthly = new Table("sales_fact_monthly_mv", - reportingDB, - new StorageDescriptor( - "TextInputFormat", - "TextOutputFormat", - List(new HiveOrder("customer_id", 0)) - ), - List( - new Column("time_id", "int"), - new Column("product_id", "int"), - new Column("customer_id", "int"), - new Column("sales", "double").withTrait(MetricTrait) - ) - ) - val loadSalesFactMonthly = new LoadProcess("loadSalesMonthly", - List(salesFactDaily), salesFactMonthly).withTraits(List(ETLTrait)) - - val salesDailyPartition = new Partition(List("2015-01-01"), salesFactDaily) - - import scala.collection.JavaConversions._ - - def getEntitiesToCreate() : Buffer[ITypedReferenceableInstance] = { - var list = salesDB.getTypedReferencebles() ++ - salesFact.getTypedReferencebles() ++ - productDim.getTypedReferencebles() ++ - timeDim.getTypedReferencebles() ++ - customerDim.getTypedReferencebles() ++ - reportingDB.getTypedReferencebles() ++ - salesFactDaily.getTypedReferencebles() ++ - loadSalesFactDaily.getTypedReferencebles() ++ - productDimView.getTypedReferencebles() ++ - customerDimView.getTypedReferencebles() ++ - salesFactMonthly.getTypedReferencebles() ++ - loadSalesFactMonthly.getTypedReferencebles() ++ - salesDailyPartition.getTypedReferencebles(); - return list; - - } - - - - val GremlinQueries = List( - // 1. List all DBs - """g.V.has("typeName", "DB")""", - - // 2. List all DB nmes - """g.V.has("typeName", "DB").name""", - - // 3. List all Tables in Reporting DB - """g.V.has("typeName", "DB").has("name", "Reporting").inE("Table.db").outV""", - """g.V.has("typeName", "DB").as("db").inE("Table.db").outV.and(_().back("db").has("name", "Reporting"))""", - - // 4. List all Tables in Reporting DB, list as D.name, Tbl.name - """ - g.V.has("typeName", "DB").has("name", "Reporting").as("db").inE("Table.db").outV.as("tbl").select{it.name}{it.name} - """.stripMargin, - - // 5. List all tables that are Dimensions and have the TextInputFormat - """ - g.V.as("v").and(_().outE("Table.Dimension"), _().out("Table.sd").has("inputFormat", "TextInputFormat")).name - """.stripMargin, - - // 6. List all tables that are Dimensions or have the TextInputFormat - """ - g.V.as("v").or(_().outE("Table.Dimension"), _().out("Table.sd").has("inputFormat", "TextInputFormat")).name - """.stripMargin, - - // 7. List tables that have at least 1 PII column - """ - g.V.has("typeName", "Table").as("tab").out("Table.sd").in("Column.sd").as("column"). \ - out("Column.PII").select.groupBy{it.getColumn("tab")}{it.getColumn("column")}{[ "c" : it.size]}.cap.scatter.filter{it.value.c > 0}. \ - transform{it.key}.name """.stripMargin - - // 7.a from Table as tab -> g.V.has("typeName", "Table").as("tab") - // 7.b sd.Column as column -> out("Table.sd").in("Column.sd").as("column") - // 7.c is PII -> out("Column.PII") - // 7.d select tab, column -> select{it}{it} - // 7.e groupBy tab compute count(column) as c - // 7.f where c > 0 - - // 7.a Alias(Type("Table"), "tab") - // 7b. Field("sd", Alias(Type("Table"), "tab")) - // Alias(Field("Column", Field("sd", Alias(Type("Table"), "tab"))), "column") - // 7.c Filter(is("PII"), Alias(Field("Column", Field("sd", Alias(Type("Table"), "tab"))), "column")) - // 7.d - ) -} - -//object TestApp extends App with GraphUtils { -// -// val g: TitanGraph = TitanGraphProvider.getGraphInstance -// val manager: ScriptEngineManager = new ScriptEngineManager -// val engine: ScriptEngine = manager.getEngineByName("gremlin-groovy") -// val bindings: Bindings = engine.createBindings -// bindings.put("g", g) -// -// val hiveGraphFile = FileUtils.getTempDirectory().getPath + File.separator + System.nanoTime() + ".gson" -// HiveTitanSample.writeGson(hiveGraphFile) -// bindings.put("hiveGraphFile", hiveGraphFile) -// -// try { -// engine.eval("g.loadGraphSON(hiveGraphFile)", bindings) -// -// println(engine.eval("g.V.typeName.toList()", bindings)) -// -// HiveTitanSample.GremlinQueries.foreach { q => -// println(q) -// println("Result: " + engine.eval(q + ".toList()", bindings)) -// } -// } finally { -// g.shutdown() -// } -//} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/atlas/blob/435fe3fb/repository/src/test/scala/org/apache/atlas/query/LexerTest.scala ---------------------------------------------------------------------- diff --git a/repository/src/test/scala/org/apache/atlas/query/LexerTest.scala b/repository/src/test/scala/org/apache/atlas/query/LexerTest.scala deleted file mode 100755 index 10237a9..0000000 --- a/repository/src/test/scala/org/apache/atlas/query/LexerTest.scala +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.atlas.query - -import org.apache.atlas.DBSandboxer -import org.testng.Assert -import org.testng.annotations.{Listeners, Test} - -import scala.util.parsing.input.CharArrayReader - -class LexerTest { - - def scan(str: String): QueryParser.lexical.ParseResult[_] = { - val l = QueryParser.lexical - var s: l.Input = new CharArrayReader(str.toCharArray) - var r = (l.whitespace.? ~ l.token)(s) - s = r.next - - while (r.successful && !s.atEnd) { - s = r.next - if (!s.atEnd) { - r = (l.whitespace.? ~ l.token)(s) - } - } - r.asInstanceOf[QueryParser.lexical.ParseResult[_]] - } - - @Test def testSimple { - val r = scan("""DB where db1.name""") - Assert.assertTrue(r.successful) - - } -}