Re: Gee vala libgda LINQ



Sorry for late response - I've had long week and I'm still catching up
with email backlog.

The core features should be in Gee already - it's just called
Traversable instead of Selectable. The 'select' part is just named a
'map' (naming in general is Haskell-inspired then SQL/LINQ-inspired).

It would not be so useful from libgee perspective but might be much more
from libgda one is ability of operating on AST syntax (I believe LINQ
have this ability but last time I've done anything in C# was ~9 years so
I may be wrong). Otherwise:

    select name from gdacollection where id = '123

would be suboptimal (query by primary key is something any database
should do before breakfast but from straightforward proposition it would
copy all the data into local memory and traverse it).

On Tue, 2013-12-03 at 20:07 -0600, Daniel Espinosa wrote:



2013/12/3 Juarez Rudsatz <juarezr gmail com>
        I checked the samples and some parts of the code.
        Nice work. :-) 
        
        Regarding language support, it seems to remain a good amount
        of work to be done yet.
        
        
Do you mean Vala features right? 

        I'm counting the language features that will be necessary:
        - Object serialization
        
        
Are you mean write some where. For XML serialization we have Vala's
GXml project[1]. On GXml's serialization branch, you'll find my work
on GObject serialization to XML, comparable with .NET but, I think
more flexible[2]. 

        - Anonymous types
        
        - Expression and type introspection
        - Type aliasing...
        - Syntax changes
        
        
At the end a Collection have objects with a set of properties, a
SELECT expression is a filter of that set of objects and a set of
properties. They could be stored in a DbRecord (as for libgda's
GdaData [3] ) to save memory and adding something like
"Methods_With_Syntax_Support" [4] , Vala compiler could transform:


     var selection = select name, salary from employees where id =
"123";

     stdout.printf (@"$(selection.name) / $(selection.salary)");



to:

       var _tmp_ = new ArrayList<Employee> ();
       _tmp_.add_all ( ((Traversable) employees).filter(
                              (g)=>{ return id.equals (g) true :
false; });

       var selection = ((Selectable) _tmp_).get_fields ("name",
"salary");

       if (selection.size != 1)

          throw new SelectableError.MULTIPLE_VALUES_TO_SINGLE ("...");

       var _tmp2_ = selection[0].get_field("name");

       var _tmp3_ = selection[0].get_field("salary");
       stdout.printf (@"$(_tmp2_) / $(_tmp3_)");

        What level of support you are planning?
        
        
Because I haven't used LINQ before, I don't know most of its features.
Just think about to allow:


a) Use a SQL like syntax to filter objects and properties, by adding
support to Vala compiler to generate corresponding Vala or C code

b) Object collection must implement at least Gee.Collection and its
items must be Gee.Comparable and Selectable

c) Add a Selectable interface to Gee to allow introspect objects
properties and create a Collection with desired DbRecord set of
values.

 

I don't think mimic LINQ is correct. May we can do better, but is
necessary to define use cases.


The only one I have in mind is:


a) select {list-of-fields} from {collection-object} where {condition}


For this simple expression Vala's compiler should generate required
code to:


a) Check for collection-object is a GObject implementing
Gee.Collection and its elements must be Gee.Comparable and Selectable
b) Check for list-of-fields are public properties in collection-object

c) Check for condition is using collection-object 's public properties

d) Generate a Predicate<G> delegate function to find object required
objects

e) Fill a Gee.Collection with filtered objects

f) Generate a Gee.Collection from Selectable, that produce rows and
values/columns (with name=properties' name)

        It would be well received by upstream developers?
        
Really don't know. I'm CC to Vala and Gee lists to hear them about
this idea. 

        I'm planning a new architecture for ouro next applications and
        considering vala. But the type safety and language support are
        the strengths of linq we really appreciate.
        
        I'm planning to help someway, but I have a long way yet to be
        produtive.
        
        Regards
        
        Juarez
        
        
[1] https://git.gnome.org/browse/gxml
[2] https://git.gnome.org/browse/gxml/log/?h=serialization

[3] https://git.gnome.org/browse/libgda/tree/libgda/data

[4]
https://wiki.gnome.org/Projects/Vala/Tutorial#Methods_With_Syntax_Support

 
        Em 03/12/2013 16:35, "Daniel Espinosa" <esodan gmail com>
        escreveu:
        
                You can see a preview of my work on current stable
                libgda.
                
                I've finished interfaces and implementations under
                GdaData name space.
                
                I've added some documentation just use
                --enable-vala-extensions --gtk-doc (some other
                switches are required) to see it installed.
                
                Missed Selectable interface or implementation.
                
                I would like to add syntax support on Vala compiler in
                order to have LINQ like one.
                
                For now is very easy to access to data using GdaData
                objects, see unit tests for more examples.
                
                El dic 3, 2013 10:03 a.m., "Juarez Rudsatz"
                <juarezr gmail com> escribió:
                        Hi,
                        
                        
                        I found that you have been working in a
                        possible implementation of LINQ in vala [1].
                        
                        I see that you have made good progress
                        regarding this support.
                        I want to know what is the current status.
                        
                        What's missing yet? How is the work for
                        getting basic support ?
                        
                        
                        Regards
                        
                        Juarez
                        
                        
                        [1]
                        https://mail.gnome.org/archives/vala-list/2011-December/msg00140.html
                        



-- 
Trabajar, la mejor arma para tu superación
"de grano en grano, se hace la arena" (R) (en trámite, pero para los
cuates: LIBRE)
_______________________________________________
libgee-list mailing list
libgee-list gnome org
https://mail.gnome.org/mailman/listinfo/libgee-list




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]