Queries.java

package net.metanotion.multitenant.adminapp;

/** <i>This is a SQL query class generated by the SQLC compiler.</i> */
@javax.annotation.Generated("net.metanotion.sqlc.SQLC") public final class Queries {
	private final net.metanotion.util.Dictionary<Class,net.metanotion.util.types.Parser> types;
	public Queries() { this.types = new net.metanotion.util.types.TypeDictionary(); }
	public Queries(net.metanotion.util.Dictionary<Class,net.metanotion.util.types.Parser> types) { this.types = types; }
	public int updateTitle(final java.sql.Connection _0, final @javax.inject.Named("tid") long _1, final @javax.inject.Named("uid") long _2, final @javax.inject.Named("title") String _3) throws Exception {
			try (final java.sql.PreparedStatement _4 = _0.prepareStatement("UPDATE Tenants SET Title = ? WHERE TenantId = ? AND OwnerId = ?")) {
			_4.setString(1, _3);
			_4.setLong(2, _1);
			_4.setLong(3, _2);
			final int _5 = _4.executeUpdate();
			return _5;
}
	}
	public java.util.List<net.metanotion.multitenant.adminapp.InstanceInfo> listInstances(final java.sql.Connection _0, final @javax.inject.Named("uid") long _1) throws Exception {
			try (final java.sql.PreparedStatement _2 = _0.prepareStatement("SELECT DISTINCT t.TenantId AS TenantId,\r\n\t\t\t\tt.InstancePrefix AS InstancePrefix,\r\n\t\t\t\tt.Title AS Title,\r\n\t\t\t\tCASE WHEN t.OwnerId = ? THEN true\r\n\t\t\t\t\tELSE false END AS IsOwner,\r\n\t\t\t\tpau.Username AS Owner,\r\n\t\t\t\tCASE WHEN rt.TenantId IS NULL THEN false\r\n\t\t\t\t\tELSE true END AS Active\r\n\t\t\tFROM Tenants t\r\n\t\t\t\tJOIN TenantAdministrators ta ON (t.TenantId = ta.TenantId)\r\n\t\t\t\tLEFT JOIN RunningTenants rt ON (rt.TenantId = t.TenantId)\r\n\t\t\t\tLEFT JOIN  (SELECT UserId, min(Username) AS Username\r\n\t\t\t\t\t\t\tFROM PasswordAuthenticationUsers\r\n\t\t\t\t\t\t\tGROUP BY UserId) pau ON (t.OwnerId = pau.UserId)\r\n\t\t\tWHERE ta.UserID = ?")) {
			_2.setLong(1, _1);
			_2.setLong(2, _1);
			try (final java.sql.ResultSet _3 = _2.executeQuery()) {
			final java.util.List<net.metanotion.multitenant.adminapp.InstanceInfo> _4 = new java.util.ArrayList<net.metanotion.multitenant.adminapp.InstanceInfo>();
		final net.metanotion.util.reflect.GetInitializer<net.metanotion.multitenant.adminapp.InstanceInfo> _5 = net.metanotion.util.reflect.ReflectiveFieldInitializer.getInitializer(net.metanotion.multitenant.adminapp.InstanceInfo.class, this.types);
		while(_3.next()) {
					final net.metanotion.util.reflect.Initializer<net.metanotion.multitenant.adminapp.InstanceInfo> _6 = _5.initializer();
					_6.put("TenantId", _3.getLong("TenantId"));
					_6.put("InstancePrefix", _3.getString("InstancePrefix"));
					_6.put("Title", _3.getString("Title"));
					_6.put("IsOwner", _3.getBoolean("IsOwner"));
					_6.put("Owner", _3.getString("Owner"));
					_6.put("Active", _3.getBoolean("Active"));
					_4.add(_6.instance());
		}
			return _4;
}
}
	}
	public long getOwner(final java.sql.Connection _0, final @javax.inject.Named("tid") long _1) throws Exception {
			try (final java.sql.PreparedStatement _2 = _0.prepareStatement("SELECT OwnerId FROM Tenants WHERE TenantId = ?")) {
			_2.setLong(1, _1);
			try (final java.sql.ResultSet _3 = _2.executeQuery()) {
		_3.next();
			return _3.getLong(1);
}
}
	}
	public int reassignOwner(final java.sql.Connection _0, final @javax.inject.Named("tid") long _1, final @javax.inject.Named("uid") long _2, final @javax.inject.Named("newOwnerEmail") String _3) throws Exception {
			try (final java.sql.PreparedStatement _4 = _0.prepareStatement("UPDATE Tenants\r\n\t\t\tSET OwnerID = q.UserID\r\n\t\t\tFROM (SELECT UserID\r\n\t\t\t\t\t\tFROM PasswordAuthenticationUsers\r\n\t\t\t\t\t\tWHERE Username = ? AND UserId <> ?) AS q\r\n\t\t\tWHERE TenantID = ? AND OwnerID = ?")) {
			_4.setString(1, _3);
			_4.setLong(2, _2);
			_4.setLong(3, _1);
			_4.setLong(4, _2);
			final int _5 = _4.executeUpdate();
			return _5;
}
	}
	public int stopTenant(final java.sql.Connection _0, final @javax.inject.Named("tid") long _1) throws Exception {
			try (final java.sql.PreparedStatement _2 = _0.prepareStatement("DELETE FROM RunningTenants WHERE TenantId = ?")) {
			_2.setLong(1, _1);
			final int _3 = _2.executeUpdate();
			return _3;
}
	}
	public String getOwnerEmail(final java.sql.Connection _0, final @javax.inject.Named("uid") long _1) throws Exception {
			try (final java.sql.PreparedStatement _2 = _0.prepareStatement("SELECT Username\r\n\t\t\tFROM PasswordAuthenticationUsers\r\n\t\t\tWHERE UserId = ?\r\n\t\t\tORDER BY Username ASC\r\n\t\t\tLIMIT 1")) {
			_2.setLong(1, _1);
			try (final java.sql.ResultSet _3 = _2.executeQuery()) {
		_3.next();
			return _3.getString(1);
}
}
	}
	public int deleteAdmin(final java.sql.Connection _0, final @javax.inject.Named("tid") long _1, final @javax.inject.Named("adminEmail") String _2) throws Exception {
			try (final java.sql.PreparedStatement _3 = _0.prepareStatement("DELETE FROM TenantAdministratorEmails \r\n\t\t\tWHERE TenantID = ? AND Email = ?")) {
			_3.setLong(1, _1);
			_3.setString(2, _2);
			final int _4 = _3.executeUpdate();
			return _4;
}
	}
	public int addAdmin(final java.sql.Connection _0, final @javax.inject.Named("tid") long _1, final @javax.inject.Named("adminEmail") String _2) throws Exception {
			try (final java.sql.PreparedStatement _3 = _0.prepareStatement("INSERT INTO TenantAdministratorEmails(TenantID, Email) VALUES (?, ?)")) {
			_3.setLong(1, _1);
			_3.setString(2, _2);
			final int _4 = _3.executeUpdate();
			return _4;
}
	}
	public java.util.List<net.metanotion.multitenant.adminapp.InstanceInfo> getInstance(final java.sql.Connection _0, final @javax.inject.Named("uid") long _1, final @javax.inject.Named("tid") long _2) throws Exception {
			try (final java.sql.PreparedStatement _3 = _0.prepareStatement("SELECT DISTINCT t.TenantId AS TenantId,\r\n\t\t\t\tt.InstancePrefix AS InstancePrefix,\r\n\t\t\t\tt.Title AS Title,\r\n\t\t\t\tCASE WHEN t.OwnerId = ? THEN true\r\n\t\t\t\t\tELSE false END AS IsOwner,\r\n\t\t\t\tpau.Username AS Owner,\r\n\t\t\t\tCASE WHEN rt.TenantId IS NULL THEN false\r\n\t\t\t\t\tELSE true END AS Active\r\n\t\t\tFROM Tenants t\r\n\t\t\t\tJOIN TenantAdministrators ta ON (t.TenantId = ta.TenantId)\r\n\t\t\t\tLEFT JOIN RunningTenants rt ON (rt.TenantId = t.TenantId)\r\n\t\t\t\tLEFT JOIN  (SELECT UserId, min(Username) AS Username\r\n\t\t\t\t\t\t\tFROM PasswordAuthenticationUsers\r\n\t\t\t\t\t\t\tGROUP BY UserId) pau ON (t.OwnerId = pau.UserId)\r\n\t\t\tWHERE ta.UserID = ? AND t.TenantId = ?")) {
			_3.setLong(1, _1);
			_3.setLong(2, _1);
			_3.setLong(3, _2);
			try (final java.sql.ResultSet _4 = _3.executeQuery()) {
			final java.util.List<net.metanotion.multitenant.adminapp.InstanceInfo> _5 = new java.util.ArrayList<net.metanotion.multitenant.adminapp.InstanceInfo>();
		final net.metanotion.util.reflect.GetInitializer<net.metanotion.multitenant.adminapp.InstanceInfo> _6 = net.metanotion.util.reflect.ReflectiveFieldInitializer.getInitializer(net.metanotion.multitenant.adminapp.InstanceInfo.class, this.types);
		while(_4.next()) {
					final net.metanotion.util.reflect.Initializer<net.metanotion.multitenant.adminapp.InstanceInfo> _7 = _6.initializer();
					_7.put("TenantId", _4.getLong("TenantId"));
					_7.put("InstancePrefix", _4.getString("InstancePrefix"));
					_7.put("Title", _4.getString("Title"));
					_7.put("IsOwner", _4.getBoolean("IsOwner"));
					_7.put("Owner", _4.getString("Owner"));
					_7.put("Active", _4.getBoolean("Active"));
					_5.add(_7.instance());
		}
			return _5;
}
}
	}
	public java.util.List<net.metanotion.multitenant.adminapp.AdminAccount> getTenantAdmin(final java.sql.Connection _0, final @javax.inject.Named("tid") long _1, final @javax.inject.Named("email") String _2) throws Exception {
			try (final java.sql.PreparedStatement _3 = _0.prepareStatement("SELECT CASE WHEN UserId IS NULL THEN 0\r\n\t\t\t\t\tELSE UserId END AS userId,\r\n\t\t\t\temail,\r\n\t\t\t\tactiveUser,\r\n\t\t\t\troles\r\n\t\t\tFROM TenantUserRoles\r\n\t\t\tWHERE TenantId = ? AND email = ?\r\n\t\t\tORDER BY array_length(Roles, 1) DESC, UserId ASC, Email ASC")) {
			_3.setLong(1, _1);
			_3.setString(2, _2);
			try (final java.sql.ResultSet _4 = _3.executeQuery()) {
			final java.util.List<net.metanotion.multitenant.adminapp.AdminAccount> _5 = new java.util.ArrayList<net.metanotion.multitenant.adminapp.AdminAccount>();
		final net.metanotion.util.reflect.GetInitializer<net.metanotion.multitenant.adminapp.AdminAccount> _6 = net.metanotion.util.reflect.ReflectiveFieldInitializer.getInitializer(net.metanotion.multitenant.adminapp.AdminAccount.class, this.types);
		while(_4.next()) {
					final net.metanotion.util.reflect.Initializer<net.metanotion.multitenant.adminapp.AdminAccount> _7 = _6.initializer();
					_7.put("userId", _4.getLong("userId"));
					_7.put("email", _4.getString("email"));
					_7.put("activeUser", _4.getBoolean("activeUser"));
					_7.put("roles", net.metanotion.sqlc.setters.GetArray.parse(_4.getArray("roles")));
					_5.add(_7.instance());
		}
			return _5;
}
}
	}
	public java.util.List<Long> checkAuth(final java.sql.Connection _0, final @javax.inject.Named("uid") long _1, final @javax.inject.Named("tid") long _2) throws Exception {
			try (final java.sql.PreparedStatement _3 = _0.prepareStatement("SELECT TenantId\r\n\t\t\tFROM TenantAdministrators\r\n\t\t\tWHERE UserId = ? AND TenantId = ?")) {
			_3.setLong(1, _1);
			_3.setLong(2, _2);
			try (final java.sql.ResultSet _4 = _3.executeQuery()) {
			final java.util.List<Long> _5 = new java.util.ArrayList<Long>();
		while(_4.next()) {
					_5.add(_4.getLong(1));
		}
			return _5;
}
}
	}
	public int logEvent(final java.sql.Connection _0, final @javax.inject.Named("tid") long _1, final @javax.inject.Named("uid") long _2, final @javax.inject.Named("username") String _3, final @javax.inject.Named("event") String _4) throws Exception {
			try (final java.sql.PreparedStatement _5 = _0.prepareStatement("INSERT INTO TenantLogs (TenantId, UserId, Username, Event) VALUES (?, ?, ?, ?)")) {
			_5.setLong(1, _1);
			_5.setLong(2, _2);
			_5.setString(3, _3);
			_5.setString(4, _4);
			final int _6 = _5.executeUpdate();
			return _6;
}
	}
	public java.util.List<String> listTenants(final java.sql.Connection _0) throws Exception {
			try (final java.sql.PreparedStatement _1 = _0.prepareStatement("SELECT InstancePrefix\r\n\t\t\tFROM Tenants\r\n\t\t\tWHERE TenantId IN (SELECT TenantId FROM RunningTenants)")) {
			try (final java.sql.ResultSet _2 = _1.executeQuery()) {
			final java.util.List<String> _3 = new java.util.ArrayList<String>();
		while(_2.next()) {
					_3.add(_2.getString(1));
		}
			return _3;
}
}
	}
	public java.util.List<net.metanotion.multitenant.adminapp.LogStruct> tenantLogs(final java.sql.Connection _0, final @javax.inject.Named("tid") long _1, final @javax.inject.Named("startEventId") long _2, final @javax.inject.Named("count") long _3, final @javax.inject.Named("startTime") org.joda.time.ReadableInstant _4, final @javax.inject.Named("endTime") org.joda.time.ReadableInstant _5, final @javax.inject.Named("username") String _6) throws Exception {
			try (final java.sql.PreparedStatement _7 = _0.prepareStatement("SELECT tl.TenantID AS TenantId,\r\n\t\t\t\tt.Title AS TenantName,\r\n\t\t\t\ttl.EventId AS EventId,\r\n\t\t\t\tfixtime(tl.EventTime) AS EventTime,\r\n\t\t\t\ttl.UserId AS UserId,\r\n\t\t\t\ttl.Username AS Username,\r\n\t\t\t\ttl.Event AS Event\r\n\t\t\tFROM TenantLogs tl\r\n\t\t\t\tJOIN Tenants t ON (tl.TenantId = t.TenantId)\r\n\t\t\tWHERE tl.TenantId = ?\r\n\t\t\t\tAND ((? = 0) \r\n\t\t\t\t\tOR ((EventTime < (SELECT EventTime FROM TenantLogs WHERE EventId = ?))\r\n\t\t\t\t\t\tOR ((EventTime = (SELECT EventTime FROM TenantLogs WHERE EventId = ?)) \r\n\t\t\t\t\t\t\tAND (EventId <= ?))))\r\n\t\t\t\tAND ((? IS NULL)\r\n\t\t\t\t\tOR (EventTime >= CAST(? AS TIMESTAMP WITH TIME ZONE)))\r\n\t\t\t\tAND ((? IS NULL)\r\n\t\t\t\t\tOR (EventTime <= CAST(? AS TIMESTAMP WITH TIME ZONE)))\r\n\t\t\t\tAND ((? = '')\r\n\t\t\t\t\tOR (Username ILIKE (? || '%')))\r\n\t\t\tORDER BY EventTime DESC, EventId DESC\r\n\t\t\tLIMIT ?")) {
			_7.setLong(1, _1);
			_7.setLong(2, _2);
			_7.setLong(3, _2);
			_7.setLong(4, _2);
			_7.setLong(5, _2);
			_7.setString(6, (_4 == null ? null : _4.toString()));
			_7.setString(7, (_4 == null ? null : _4.toString()));
			_7.setString(8, (_5 == null ? null : _5.toString()));
			_7.setString(9, (_5 == null ? null : _5.toString()));
			_7.setString(10, _6);
			_7.setString(11, _6);
			_7.setLong(12, _3);
			try (final java.sql.ResultSet _8 = _7.executeQuery()) {
			final java.util.List<net.metanotion.multitenant.adminapp.LogStruct> _9 = new java.util.ArrayList<net.metanotion.multitenant.adminapp.LogStruct>();
		final net.metanotion.util.reflect.GetInitializer<net.metanotion.multitenant.adminapp.LogStruct> _10 = net.metanotion.util.reflect.ReflectiveFieldInitializer.getInitializer(net.metanotion.multitenant.adminapp.LogStruct.class, this.types);
		while(_8.next()) {
					final net.metanotion.util.reflect.Initializer<net.metanotion.multitenant.adminapp.LogStruct> _11 = _10.initializer();
					_11.put("TenantId", _8.getLong("TenantId"));
					_11.put("TenantName", _8.getString("TenantName"));
					_11.put("EventId", _8.getLong("EventId"));
					_11.put("EventTime", ((_8.getString("EventTime") == null) ? null : net.metanotion.util.types.ReadableInstantP.PARSER.parseDateTime(_8.getString("EventTime"))));
					_11.put("UserId", _8.getLong("UserId"));
					_11.put("Username", _8.getString("Username"));
					_11.put("Event", _8.getString("Event"));
					_9.add(_11.instance());
		}
			return _9;
}
}
	}
	public int startTenant(final java.sql.Connection _0, final @javax.inject.Named("tid") long _1) throws Exception {
			try (final java.sql.PreparedStatement _2 = _0.prepareStatement("INSERT INTO RunningTenants(TenantId) VALUES (?)")) {
			_2.setLong(1, _1);
			final int _3 = _2.executeUpdate();
			return _3;
}
	}
	public int addTenant(final java.sql.Connection _0, final @javax.inject.Named("tid") long _1, final @javax.inject.Named("uid") long _2, final @javax.inject.Named("title") String _3, final @javax.inject.Named("instPrefix") String _4) throws Exception {
			try (final java.sql.PreparedStatement _5 = _0.prepareStatement("INSERT INTO Tenants(TenantId, OwnerId, Title, InstancePrefix) VALUES (?, ?, ?, ?)")) {
			_5.setLong(1, _1);
			_5.setLong(2, _2);
			_5.setString(3, _3);
			_5.setString(4, _4);
			final int _6 = _5.executeUpdate();
			try (final java.sql.PreparedStatement _7 = _0.prepareStatement("INSERT INTO RunningTenants(TenantId) VALUES (?)")) {
			_7.setLong(1, _1);
			final int _8 = _7.executeUpdate();
			return _8;
}
}
	}
	public Long reserveTenantId(final java.sql.Connection _0) throws Exception {
			try (final java.sql.PreparedStatement _1 = _0.prepareStatement("SELECT nextval('Tenants_TenantID_seq') AS TID")) {
			try (final java.sql.ResultSet _2 = _1.executeQuery()) {
		_2.next();
			return _2.getLong(1);
}
}
	}
	public java.util.List<net.metanotion.multitenant.adminapp.AdminAccount> listTenantAdmins(final java.sql.Connection _0, final @javax.inject.Named("tid") long _1) throws Exception {
			try (final java.sql.PreparedStatement _2 = _0.prepareStatement("SELECT CASE WHEN UserId IS NULL THEN 0\r\n\t\t\t\t\tELSE UserId END AS userId,\r\n\t\t\t\temail,\r\n\t\t\t\tactiveUser,\r\n\t\t\t\troles\r\n\t\t\tFROM TenantUserRoles\r\n\t\t\tWHERE TenantId = ?\r\n\t\t\tORDER BY array_length(Roles, 1) DESC, UserId ASC, Email ASC")) {
			_2.setLong(1, _1);
			try (final java.sql.ResultSet _3 = _2.executeQuery()) {
			final java.util.List<net.metanotion.multitenant.adminapp.AdminAccount> _4 = new java.util.ArrayList<net.metanotion.multitenant.adminapp.AdminAccount>();
		final net.metanotion.util.reflect.GetInitializer<net.metanotion.multitenant.adminapp.AdminAccount> _5 = net.metanotion.util.reflect.ReflectiveFieldInitializer.getInitializer(net.metanotion.multitenant.adminapp.AdminAccount.class, this.types);
		while(_3.next()) {
					final net.metanotion.util.reflect.Initializer<net.metanotion.multitenant.adminapp.AdminAccount> _6 = _5.initializer();
					_6.put("userId", _3.getLong("userId"));
					_6.put("email", _3.getString("email"));
					_6.put("activeUser", _3.getBoolean("activeUser"));
					_6.put("roles", net.metanotion.sqlc.setters.GetArray.parse(_3.getArray("roles")));
					_4.add(_6.instance());
		}
			return _4;
}
}
	}
	public String getPrefix(final java.sql.Connection _0, final @javax.inject.Named("tid") long _1) throws Exception {
			try (final java.sql.PreparedStatement _2 = _0.prepareStatement("SELECT InstancePrefix FROM Tenants WHERE TenantId = ?")) {
			_2.setLong(1, _1);
			try (final java.sql.ResultSet _3 = _2.executeQuery()) {
		_3.next();
			return _3.getString(1);
}
}
	}
	public int removeTenant(final java.sql.Connection _0, final @javax.inject.Named("tid") long _1, final @javax.inject.Named("uid") long _2) throws Exception {
			try (final java.sql.PreparedStatement _3 = _0.prepareStatement("DELETE FROM Tenants WHERE TenantId = ? AND OwnerId = ?")) {
			_3.setLong(1, _1);
			_3.setLong(2, _2);
			final int _4 = _3.executeUpdate();
			return _4;
}
	}
}