docs: protected MappedPreparedStmt<T, ID> prepareStatement(Long limit, boolean cacheStore) throws SQLException {
  		List<ArgumentHolder> argList = new ArrayList<ArgumentHolder>();
  		String statement = buildStatementString(argList);
  		ArgumentHolder[] selectArgs = argList.toArray(new ArgumentHolder[argList.size()]);
  		FieldType[] resultFieldTypes = getResultFieldTypes();
  		FieldType[] argFieldTypes = new FieldType[argList.size()];
  		for (int selectC = 0; selectC < selectArgs.length; selectC++) {
  			argFieldTypes[selectC] = selectArgs[selectC].getFieldType();
  		}
  		if (!type.isOkForStatementBuilder()) {
  			throw new IllegalStateException("Building a statement from a " + type + " statement is not allowed");
  		}
  		return new MappedPreparedStmt<T, ID>(dao, tableInfo, statement, argFieldTypes, resultFieldTypes, selectArgs,
  				(databaseType.isLimitSqlSupported() ? null : limit), type, cacheStore);
  	}