"""
A core that does a cheap crossmatch using positions POSTed in a string.
"""

from gavo import base
from gavo import rsc
from gavo import svcs

class Core(svcs.Core):
	def _buildInputTable(self, inputPositions, connection):
		inF = io.BytesIO(inputPositions)
		dd = self.rd.getById("upload")
		rsc.makeData(dd, connection=connection, forceSource=inF)

	def run(self, service, inputData, queryMeta):
		inputPositions = inputData.getPrimaryTable().rows[0]["inPos"]
		connection = base.getDefaultDBConnection()
		self._buildInputTable(inputPositions, connection)
		resTable = rsc.TableForDef(self.outputTable)
		with base.getTableConn() as conn:
			for row in conn.query(self.getProperty("joinQuery")):
				resTable.addRow(self.outputTable.makeRowFromTuple(row))
		return resTable
