11package org .javawebstack .orm .wrapper .builder ;
22
3- import org .javawebstack .orm .Repo ;
4- import org .javawebstack .orm .SQLMapper ;
5- import org .javawebstack .orm .TableInfo ;
3+ import org .javawebstack .orm .*;
4+ import org .javawebstack .orm .exception .ORMQueryException ;
65import org .javawebstack .orm .query .*;
76
7+ import java .lang .reflect .Field ;
8+ import java .lang .reflect .InvocationTargetException ;
9+ import java .lang .reflect .Method ;
810import java .sql .Timestamp ;
911import java .time .Instant ;
1012import java .util .ArrayList ;
@@ -18,6 +20,16 @@ public class MySQLQueryStringBuilder implements QueryStringBuilder {
1820
1921 public static final MySQLQueryStringBuilder INSTANCE = new MySQLQueryStringBuilder ();
2022
23+ private static Method accessibleAccessMethod ;
24+
25+ static {
26+ try {
27+ accessibleAccessMethod = Accessible .class .getDeclaredMethod ("access" , Query .class , QueryGroup .class , Object .class );
28+ } catch (NoSuchMethodException e ) {
29+ e .printStackTrace ();
30+ }
31+ }
32+
2133 public SQLQueryString buildInsert (TableInfo info , Map <String , Object > values ) {
2234 List <Object > params = new ArrayList <>();
2335 StringBuilder sb = new StringBuilder ("INSERT INTO `" );
@@ -49,8 +61,22 @@ public SQLQueryString buildQuery(Query<?> query) {
4961 .append (" FROM `" )
5062 .append (repo .getInfo ().getTableName ())
5163 .append ('`' );
52- QueryGroup <? > where = query .getWhereGroup ();
64+ QueryGroup <Model > where = ( QueryGroup < Model >) query .getWhereGroup ();
5365 checkWithDeleted (repo , query .isWithDeleted (), where );
66+ if (query .shouldApplyAccessible ()) {
67+ QueryGroup <Model > accessChecks ;
68+ try {
69+ accessChecks = (QueryGroup <Model >) accessibleAccessMethod .invoke (repo .getAccessible (), query , new QueryGroup <>(), query .getAccessor ());
70+ } catch (IllegalAccessException | InvocationTargetException e ) {
71+ throw new ORMQueryException (e );
72+ }
73+ QueryGroup <Model > actualWhere = where ;
74+ where = new QueryGroup <>();
75+ if (!actualWhere .getQueryElements ().isEmpty ())
76+ where .and (q -> actualWhere );
77+ if (!accessChecks .getQueryElements ().isEmpty ())
78+ where .and (q -> accessChecks );
79+ }
5480 if (!where .getQueryElements ().isEmpty ()) {
5581 SQLQueryString qs = convertGroup (repo .getInfo (), where );
5682 sb .append (" WHERE " ).append (qs .getQuery ());
0 commit comments