GraphQL Query for Inner Join - linq

how shall I make Query to GraphQL for inner join of 3 tables within same data source?
I have to get List of Fields from SQL DB from 3 different tables within same server.
I am passing Query from UI(angular) as string to=> API(c#,.net - REST API architecture) wherein I'll get service called based on my query.
I could not find any feature of GraphQL which is specific to getting data from more than 1 table at a time.
Can anyone help me out on how to get inner join done in GraphQL? also if not then what should be optimistic approach for same?
Note : we are using EF on backend with .net to get/filter data from SQL.
in this I have tried using Linq to filter and map data from all 3 diffrent sources :
Also I have tried using Include to directly map the data

Related

Run complex SQL Query with spring boot repositories

i have a little complex scenario using spring data and jpa currently.
My data structure is like:
And i like to create a filter: give me all events which belongs to a list of structures, within a given period and is assigned to a list of categories.
I was able to create a sample SQL statement:
select * from event e inner join period p on e.period_id=p.id
inner join category_item_ids ci on e.id=ci.item_ids
inner join category c on ci.category_id=c.id
inner join event_assignment_structure_ids es on es.event_assignment_id=e.id
where p.start between '2020-05-01 12:00:00.000000' and '2020-11-14 12:00:00.000000' and
c.id in (1) and
es.structure_ids in (1,2)
But my objects are currently not wired together by all the JPA annotations.
e.g. the "Same ID" is something i did by convention to make the parts a little more independend.
So using the JPA way is currently no option i guess due to the missing relations.
Introducing them will be also quite a lot of work.
So i was wondering if there is a possiblity to run the sql query directly (i could use native query, but thats also no option, cause the filter values are not always given, so i need 13 native queries)
I used enityManager and query Builder in the past, but thats also no option due to the missing jpa relations.
Any ideas are much welcome :-)
Regards
Oliver

Ignite SQL tool query for collections within object

I am using Ignite v2.1 and dbeaver to query caches. Is it possible to query collections within a objects in the cache, or complex object within object in the cache? And if so, what it the syntax?
For example, if I have a cache such as IgniteCache and Person looked like the following, what would the syntax be to 1) select the address and 2) select the siblings names & addresses?
class Person {
String name;
Addresss address;
Collection<Person> siblings;
}
It is not possible to do SQL over nested collections in Ignite: SQL standard does not support such things. SQL tables are flat.
Think regular SQL databases: you need to introduce Person.id and Person.parentId (for one-to-many), or a separate mapping table (for many-to-many), then use SQL JOIN to query siblings.
You will have to declare QueryEntity for this cache, with list of fields and indexes on this cache, then you can use its fields in SQL queries. Annotations driven setup is explained in the same doc, pick one which suits you better.
Then the 1) will probably be something like SELECT ADDRESS FROM PERSONCACHE.PERSON WHERE NAME = ?.
Foreign keys are not supported, however, and I'm don't think that siblings setup will work. It doesn't work like that for relational databases unless you add join tables. Ignite is not a graph database.

Optimizing Hibernate layer

After moving the logic from a legacy application (SQL/coldfushion) to Spring Rest with Hibernate, we have experienced a slowness in the application. The main reason is with Hibernate we noticed many queries are generated which we used to do with one single query in the legacy application (two pages long query).
Write now, I'm looking at selecting proper fetch strategies and try to optimize code. Could you please give me any other areas that I need to investigate to optimize the Hibernate layer or any other sujjestions?
Try to use DTO not entities(you can load DTO directly from the database)
Review the loading strategy (Eager or Lazy)
Try to use Native Queries more
Try to use more parameters to restrict the result set
You also can leverage some caching technique (cache all static data)
Try to implement hashCode and equals for each entity
If you use, HQL queries, then add the 'join fetch', It avoids the n+1 query problems. For more information on join fetch
e.g:
select a from Model a
inner join fetch a.b as b
Add 'indexes' for columns which are using in where condition.
e.g: Add index for the column 'name' which is used in where condition.
select a from Model a where a.name ='x'
Follow the below links:
http://www.thoughts-on-java.org/tips-to-boost-your-hibernate-performance/
https://docs.jboss.org/hibernate/orm/3.3/reference/en/html/performance.html

Codeigniter active record nested select issue

I am using codeigniter for my php project, but am not much experience in it. So, please help me.
I have two database. 1. Kalix2 2. Asterisk
In both the database I am having some table. I want to make a join on the tables from two different database. I have the below query, it's working fine in back-end, but I don't know how to implement it using Active record.
SELECT a.CompanyName, sum(ceil((b.billsec)/(c.Call_Limit*60))) as totalcall,
hour(b.calldate) as use_hour FROM Kalix2.ph_Companies a
INNER JOIN Asterisk.cdr b ON b.clid LIKE CONCAT('%', a.CompanyName, '%')
INNER JOIN Kalix2.ph_Plans c ON c.Comp_ID= a.Comp_ID
where date(b.calldate)>='2013-01-15' and date(b.calldate)<='2013-1-20'
and c.Plan_Type='Per_Call' and a.CompanyName='ABCD'
group by hour(b.calldate);
Please help me to convert this query into active record format.
You should be able to convert this to active record if you want but you will gain better performance by just converting this to Query Bindings. Common mistake is trying to run a query off of multiple classes:
$this->db1
$this->db2
This will not work because running $this->db1->get() because it is only aware of the data in db1 and not db2. Verbosely keep the database.table info in the joins, use only one db object, and use the profiler to debug the query generation and you should be good.
Connecting to Multiple Databases
Active Record Class and Joins
Debug the query using Profiler

update query in linq to update the data in multiple tables

I created kendo ui grid.I am able to load the data from the database.For this grid the data is coming from different tables ,I used joins in my linq query to load the data.
Now,I want to update the data using linq query,and update the data in different tables.
Any suggestions..
You have to update individual records from each table and then execute db.SubmitChanges();
In your query the output is an anonymous type, not a table type connected to the dbContext.
If you think in terms of SQL, LinqToSql works very similar.
It´s possible to select a record set with a join, but you cannot update directly on this. You need to break it up and modify entries directly one by one.
A DataContext instance tracks all the instances it loads. When you call SubmitChanges, all of the changes are send to the database in one transaction.

Resources