/fluent-sql

A Fluent SQL API for Java

Primary LanguageJava

fluent-sql

A minimalistic Fluent SQL API for Java built with one compilation unit aimed to resemble the code to your original SQL code

Example Usage:

A complex query:

   WITH LatestOrders AS
  ( SELECT MAX (ID)
   FROM dbo.Orders
   GROUP BY CustomerID )
SELECT Customers.*,
       Orders.OrderTime AS LatestOrderTime,

  (SELECT COUNT (*)
   FROM dbo.OrderItems
   WHERE OrderID IN
       (SELECT ID
        FROM dbo.Orders
        WHERE CustomerID = Customers.ID)) AS TotalItemsPurchased
FROM dbo.Customers
INNER JOIN dbo.Orders ON Customers.ID = Orders.CustomerID
WHERE Orders.ID IN
    (SELECT ID
     FROM LatestOrders)

Using String concatenation:

String sql = 		" WITH LatestOrders AS (" +
			"		SELECT MAX ( ID ) " +
			"			FROM dbo.Orders " +
			"			GROUP BY CustomerID" +
			"		) "+
			" SELECT "+
			"    Customers.*, "+
			"    Orders.OrderTime AS LatestOrderTime, "+
			"    ( SELECT COUNT ( * ) " +
			"		FROM dbo.OrderItems " +
			"		WHERE OrderID IN "+
			"        ( SELECT ID FROM dbo.Orders WHERE CustomerID = Customers.ID ) ) "+
			"            AS TotalItemsPurchased "+
			" FROM dbo.Customers " +
			" INNER JOIN dbo.Orders "+
			"        ON Customers.ID = Orders.CustomerID "+
			" WHERE "+
			"    Orders.ID IN ( SELECT ID FROM LatestOrders )";

In fluent SQL:

	String actual = new SQL()
		.WITH("LatestOrders", 
				new SQL().SELECT()
						.MAX("ID")
						.FROM("dbo.Orders")
						.GROUP_BY("CustomerID")
		)
		.SELECT()
			.FIELD("Customers.*")
			.FIELD("Orders.OrderTime").AS("LatestOrderTime")
			.FIELD(new SQL().SELECT().COUNT("*")
						.FROM("dbo.OrderItems")
						.WHERE("OrderID").IN(new SQL()
									.SELECT("ID")
									.FROM("dbo.Orders")
									.WHERE("CustomerID").EQUAL_TO_FIELD("Customers.ID"))
						
					).AS("TotalItemsPurchased")
			.FROM("dbo.Customers")
			.INNER_JOIN("dbo.Orders")
				.ON("Customers.ID", "Orders.CustomerID")
			.WHERE("Orders.ID").IN(new SQL()
						.SELECT("ID").FROM("LatestOrders"))
		.build().sql;

BSD License