diff --git a/server/backend-shared/src/main/scala/cool/graph/client/database/ProjectDataresolver.scala b/server/backend-shared/src/main/scala/cool/graph/client/database/ProjectDataresolver.scala index 41556676d5..b3d513bc3e 100644 --- a/server/backend-shared/src/main/scala/cool/graph/client/database/ProjectDataresolver.scala +++ b/server/backend-shared/src/main/scala/cool/graph/client/database/ProjectDataresolver.scala @@ -27,6 +27,8 @@ class ProjectDataresolver(override val project: Project, override val requestCon .map(resultTransform(_)) } + //we could do this without validation to be faster + //also check whether the hasNext has made the overrideMaxNodeCount obsolete def loadModelRowsForExport(model: Model, args: Option[QueryArguments] = None): Future[ResolverResult] = { val (query, resultTransform) = DatabaseQueryBuilder.selectAllFromModel(project.id, model.name, args, overrideMaxNodeCount = Some(1001)) diff --git a/server/client-shared/src/main/scala/cool/graph/client/ImportExport/BulkExport.scala b/server/client-shared/src/main/scala/cool/graph/client/ImportExport/BulkExport.scala index bf6ab5e18a..838d6acd59 100644 --- a/server/client-shared/src/main/scala/cool/graph/client/ImportExport/BulkExport.scala +++ b/server/client-shared/src/main/scala/cool/graph/client/ImportExport/BulkExport.scala @@ -17,7 +17,7 @@ class BulkExport(implicit clientInjector: ClientInjector) { def executeExport(project: Project, dataResolver: DataResolver, json: JsValue): Future[JsValue] = { val start = JsonBundle(Vector.empty, 0) val request = json.convertTo[ExportRequest] - val hasListFields = project.models.flatMap(_.fields).exists(_.isList) + val hasListFields = project.models.flatMap(_.scalarListFields).nonEmpty val zippedRelations = RelationInfo(dataResolver, project.relations.map(r => toRelationData(r, project)).zipWithIndex, request.cursor) val zippedListModels = project.models.filter(m => m.scalarListFields.nonEmpty).zipWithIndex diff --git a/server/client-shared/src/main/scala/cool/graph/client/ImportExport/package.scala b/server/client-shared/src/main/scala/cool/graph/client/ImportExport/package.scala index 6ea68a1497..b3586955ff 100644 --- a/server/client-shared/src/main/scala/cool/graph/client/ImportExport/package.scala +++ b/server/client-shared/src/main/scala/cool/graph/client/ImportExport/package.scala @@ -42,18 +42,18 @@ package object ImportExport { } case class ListInfo(dataResolver: DataResolver, models: List[(Model, Int)], cursor: Cursor) extends ExportInfo { - val length: Int = models.length - val listFields: List[(String, TypeIdentifier, Int)] = currentModel.scalarListFields.zipWithIndex.map { case (f, i) => (f.name, f.typeIdentifier, i) } - val fieldLength: Int = listFields.length - val hasNext: Boolean = cursor.table < length - 1 - val hasNextField: Boolean = cursor.field < fieldLength - 1 - lazy val currentModel: Model = models.find(_._2 == cursor.table).get._1 - lazy val nextModel: Model = models.find(_._2 == cursor.table + 1).get._1 - lazy val currentField: String = listFields.find(_._3 == cursor.field).get._1 - lazy val nextField: String = listFields.find(_._3 == cursor.field + 1).get._1 - lazy val currentTypeIdentifier: TypeIdentifier = listFields.find(_._3 == cursor.field).get._2 - def arrayPlus(increase: Int): ListInfo = this.copy(cursor = this.cursor.copy(array = this.cursor.array + increase)) - def cursorAtNextField: ListInfo = this.copy(cursor = this.cursor.copy(field = this.cursor.field + 1, array = 0)) + val length: Int = models.length + val hasNext: Boolean = cursor.table < length - 1 + val hasNextField: Boolean = cursor.field < fieldLength - 1 + lazy val currentModel: Model = models.find(_._2 == cursor.table).get._1 + lazy val nextModel: Model = models.find(_._2 == cursor.table + 1).get._1 + lazy val listFields: List[(String, TypeIdentifier, Int)] = currentModel.scalarListFields.zipWithIndex.map { case (f, i) => (f.name, f.typeIdentifier, i) } + lazy val fieldLength: Int = listFields.length + lazy val currentField: String = listFields.find(_._3 == cursor.field).get._1 + lazy val nextField: String = listFields.find(_._3 == cursor.field + 1).get._1 + lazy val currentTypeIdentifier: TypeIdentifier = listFields.find(_._3 == cursor.field).get._2 + def arrayPlus(increase: Int): ListInfo = this.copy(cursor = this.cursor.copy(array = this.cursor.array + increase)) + def cursorAtNextField: ListInfo = this.copy(cursor = this.cursor.copy(field = this.cursor.field + 1, array = 0)) } case class RelationInfo(dataResolver: DataResolver, relations: List[(RelationData, Int)], cursor: Cursor) extends ExportInfo {