<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/'><id>tag:blogger.com,1999:blog-1301643147176033927.post3317800987764894384..comments</id><updated>2008-08-05T10:29:51.775+02:00</updated><category term='images'/><category term='data integration'/><category term='extraction'/><category term='tools'/><category term='cli'/><category term='standardizing'/><category term='cleaner'/><category term='bug'/><category term='jndi'/><category term='create table'/><category term='development'/><category term='free'/><category term='winfried'/><category term='08'/><category term='community'/><category term='maven'/><category term='recognition'/><category term='proposal'/><category term='api'/><category term='add-on'/><category term='linkedin'/><category term='query'/><category term='motivation'/><category term='academia'/><category term='job'/><category term='heuristics'/><category term='styring'/><category term='tokens'/><category term='extension'/><category term='metaphone'/><category term='write'/><category term='fluent'/><category term='preprocessing'/><category term='2008'/><category term='table'/><category term='type parameter'/><category term='visualization'/><category term='names'/><category term='to'/><category term='java'/><category term='seam'/><category term='core'/><category term='example'/><category term='graphics'/><category term='transformation'/><category term='formatting'/><category term='hierarchy'/><category term='fetch'/><category term='similarity'/><category term='huge'/><category term='django'/><category term='mutable'/><category term='preview'/><category term='data profiling'/><category term='ui'/><category term='read'/><category term='interview'/><category term='push down'/><category term='report'/><category term='text'/><category term='first time right'/><category term='build'/><category term='optimization'/><category term='marketing'/><category term='large'/><category term='project'/><category term='open source data quality release announcement datacleaner 1.5.2'/><category term='blogging'/><category term='distinct'/><category term='van'/><category term='compiler'/><category term='exploration'/><category term='svn'/><category term='customer data'/><category term='flattening'/><category term='education'/><category term='thesis'/><category term='tango'/><category term='packaging'/><category term='flush'/><category term='unittest'/><category term='type-casting'/><category term='headless'/><category term='data warehousing'/><category term='openoffice'/><category term='data quality analysis'/><category term='rows'/><category term='architechture'/><category term='interface'/><category term='it'/><category term='excel'/><category term='flow'/><category term='data processing'/><category term='plugin'/><category term='metamodel'/><category term='planning'/><category term='user interface'/><category term='afløsningsopgave'/><category term='transformer'/><category term='regular'/><category term='image'/><category term='dansk'/><category term='scripts'/><category term='repository'/><category term='string analysis'/><category term='days'/><category term='manual'/><category term='promotion'/><category term='screen'/><category term='sas7bdat'/><category term='user experience'/><category term='speed'/><category term='master data management'/><category term='data format'/><category term='transaction'/><category term='pro'/><category term='engine'/><category term='xslt'/><category term='size'/><category term='meeting'/><category term='cube'/><category term='hudson'/><category term='danish'/><category term='human inference'/><category term='regex'/><category term='meta'/><category term='wikipedia'/><category term='weekdays'/><category term='sql'/><category term='identify'/><category term='awards'/><category term='data entry'/><category term='generated'/><category term='master'/><category term='analyzerbeans'/><category term='filtering'/><category term='data quality pro'/><category term='discussion'/><category term='standard measures'/><category term='display'/><category term='documentation'/><category term='swing'/><category term='unit'/><category term='profiler'/><category term='udvikling'/><category term='etl'/><category term='annotations'/><category term='finder'/><category term='ftr'/><category term='column'/><category term='functions'/><category term='open source'/><category term='iso date'/><category term='date'/><category term='insert'/><category term='jar'/><category term='presentation'/><category term='holland'/><category term='test'/><category term='choise'/><category term='css'/><category term='datasources'/><category term='intelligence'/><category term='ejb'/><category term='window'/><category term='humaninference'/><category term='tokenize'/><category term='performance'/><category term='group'/><category term='contact data'/><category term='notes'/><category term='multiple'/><category term='acquisition'/><category term='xml'/><category term='business'/><category term='select'/><category term='diy'/><category term='mysql'/><category term='ease of use'/><category term='lightning'/><category term='jdk'/><category term='sourceforge'/><category term='schema'/><category term='keynote'/><category term='look'/><category term='datastore'/><category term='explode'/><category term='date format'/><category term='maven2'/><category term='game'/><category term='olap'/><category term='great'/><category term='filter'/><category term='ear'/><category term='speak'/><category term='resultset'/><category term='frequency'/><category term='dqa'/><category term='book publish pentaho solutions open source business intelligence'/><category term='integration'/><category term='jpa'/><category term='explore'/><category term='persistence'/><category term='lgpl'/><category term='dependency'/><category term='quality'/><category term='screenshot'/><category term='result'/><category term='release'/><category term='detail'/><category term='jms'/><category term='verify'/><category term='sas'/><category term='prototype'/><category term='datasource'/><category term='value'/><category term='value distribution'/><category term='jdbc'/><category term='analyzer'/><category term='jfreechart'/><category term='board'/><category term='documents'/><category term='look and feel'/><category term='datacleaner'/><category term='fast'/><category term='benchmark'/><category term='business intelligence'/><category term='conference'/><category term='millions'/><category term='match'/><category term='evolution'/><category term='string'/><category term='n+1'/><category term='implement'/><category term='spreadsheet'/><category term='member'/><category term='python'/><category term='analysis'/><category term='javaone'/><category term='browser'/><category term='enterprise'/><category term='sassyreader'/><category term='domain'/><category term='open'/><category term='age'/><category term='csv'/><category term='rewriting'/><category term='phonetic'/><category term='file'/><category term='matching'/><category term='intranet'/><category term='database'/><category term='uispec4j'/><category term='linux'/><category term='recommendation'/><category term='hibernate'/><category term='dataprofiling'/><category term='data quality'/><category term='process'/><category term='mdx'/><category term='relational'/><category term='convert'/><category term='programming'/><category term='tutorial'/><category term='multithreading'/><category term='name'/><category term='goals'/><category term='expression'/><category term='mapping'/><category term='website'/><category term='chart'/><category term='levenshtein'/><category term='source'/><category term='expressions'/><category term='feature'/><category term='social construction'/><category term='soundex'/><category term='flushing'/><category term='datastores'/><category term='generics'/><category term='tool support'/><category term='dataqualitypro'/><category term='icon'/><category term='mondrian'/><category term='features'/><category term='jboss'/><category term='pattern'/><category term='eobjects'/><category term='article'/><category term='command line'/><category term='model'/><category term='data'/><category term='metadata'/><category term='drill'/><category term='profiling'/><category term='distribution'/><category term='profile'/><category term='discovery'/><title type='text'>Comments on kasper's source: Considering MetaModel functions</title><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://kasper.eobjects.org/feeds/3317800987764894384/comments/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1301643147176033927/3317800987764894384/comments/default'/><link rel='alternate' type='text/html' href='http://kasper.eobjects.org/2008/08/considering-metamodel-functions.html'/><author><name>Kasper Sørensen</name><uri>http://www.blogger.com/profile/05310806961885711209</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.gravatar.com/avatar.php?gravatar_id=7dbffa8e2b37fb2f271faa3f2bec7215'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>2</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1301643147176033927.post-8312922556034205830</id><published>2008-08-05T10:29:00.000+02:00</published><updated>2008-08-05T10:29:00.000+02:00</updated><title type='text'>When referring to type-casting I meant within the ...</title><content type='html'>When referring to type-casting I meant within the query. Typically in SQL you can do something like this:&lt;BR/&gt;&lt;BR/&gt;SELECT CAST(myInteger AS VARCHAR) FROM foobar&lt;BR/&gt;&lt;BR/&gt;or&lt;BR/&gt;&lt;BR/&gt;SELECT TO_NUMBER(myStringContainingANumber) FROM foobar</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1301643147176033927/3317800987764894384/comments/default/8312922556034205830'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1301643147176033927/3317800987764894384/comments/default/8312922556034205830'/><link rel='alternate' type='text/html' href='http://kasper.eobjects.org/2008/08/considering-metamodel-functions.html?showComment=1217924940000#c8312922556034205830' title=''/><author><name>Kasper Sørensen</name><uri>http://www.blogger.com/profile/05310806961885711209</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://www.gravatar.com/avatar.php?gravatar_id=7dbffa8e2b37fb2f271faa3f2bec7215'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://kasper.eobjects.org/2008/08/considering-metamodel-functions.html' ref='tag:blogger.com,1999:blog-1301643147176033927.post-3317800987764894384' source='http://www.blogger.com/feeds/1301643147176033927/posts/default/3317800987764894384' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-1572147945'/></entry><entry><id>tag:blogger.com,1999:blog-1301643147176033927.post-8715033772604647476</id><published>2008-08-04T23:19:00.000+02:00</published><updated>2008-08-04T23:19:00.000+02:00</updated><title type='text'>Query Rewriting...&lt;br&gt;&lt;br&gt;I&amp;#39;d consider looking...</title><content type='html'>Query Rewriting...&lt;BR/&gt;&lt;BR/&gt;I&amp;#39;d consider looking around at various other OSS solutions for that piece.  Why not interface with something that generates tried and true SQL for the relational database interface?  No sense rewriting that from scratch - especially since people have already spent a ton of development time on getting projects like Hibernate (and others) to emit syntactically correct SQL for a variety of databases.&lt;BR/&gt;&lt;BR/&gt;That won&amp;#39;t really cover interfacing with CSV, XLS, etc.  But the SQL thing is pretty well covered ground at this point.&lt;BR/&gt;&lt;BR/&gt;TOP is also supported in MS-SQL Server:&lt;BR/&gt;&lt;BR/&gt;SELECT TOP 1 * FROM TableName&lt;BR/&gt;&lt;BR/&gt;Type Casting can be tricky business.  Many solutions use either a .properties file, or an XML file to specify generic casts of things like varchar -&amp;gt; string, etc.  It occurred to me that a good place for that might be the &amp;quot;Schema&amp;quot; object.  Perhaps using a fluent style interface one could do the following:&lt;BR/&gt;&lt;BR/&gt;Schema schema = dc.getDefaultSchema();&lt;BR/&gt;&lt;BR/&gt;schema.typeCast(DataType.VARCHAR, java.lang.String).typeCast(...&lt;BR/&gt;&lt;BR/&gt;Could also be useful to utilize the DataContext object there (ask it what the backing store is for the schema - CSV, MySQL, Oracle, etc).&lt;BR/&gt;&lt;BR/&gt;Or something similar.  That way the type mapping is established clearly;  Also could be done via .properties file - or XML, or via annotations...  Depending on how many ways you want people to be able to slice bread.&lt;BR/&gt;&lt;BR/&gt;Possibly the Table object should have a similar interface;  allowing for the override of the mappings established at the schema level.  So when retrieving values from a table, the code would first check to see if the Table had a type mapping for that type - and if not default to the one specified at the schema level.&lt;BR/&gt;&lt;BR/&gt;Hard to know what the best way to accomplish that might be though - making the DB do the cast, or doing it in Java.  With JDBC it has functions like getString(), etc. - so it&amp;#39;s possible that such type casting can be done by simply selecting the appropriate method call.&lt;BR/&gt;&lt;BR/&gt;One of the downsides to using constant ints as emums is the compiler won&amp;#39;t catch problems for you  (from Eff. Java 2nd. ed):&lt;BR/&gt;&lt;BR/&gt;public ststic final int APPLE_FUJI = 0;&lt;BR/&gt;public ststic final int APPLE_PIPPIN = 1;&lt;BR/&gt;public ststic final int APPLE_GRANNY_SMITH = 2;&lt;BR/&gt;&lt;BR/&gt;public ststic final int ORANGE_NAVEL = 0;&lt;BR/&gt;public ststic final int ORANGE_TEMPLE = 0;&lt;BR/&gt;public ststic final int ORANGE_BLOOD = 0;&lt;BR/&gt;&lt;BR/&gt;So - now you can do this:&lt;BR/&gt;&lt;BR/&gt;int i = (APPLE_FUJI - ORANGE_TEMPLE) / APPLE_PIPPIN;&lt;BR/&gt;&lt;BR/&gt;You can also do:&lt;BR/&gt;&lt;BR/&gt;if(APPLE_FUJI == ORANGE_NAVEL) {&lt;BR/&gt;&lt;BR/&gt;And you get _no_ type safety - you&amp;#39;re able to hand an APPLE to a method that possibly expects an ORANGE (because ultimately they&amp;#39;re all just ints, not actual types at all).</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1301643147176033927/3317800987764894384/comments/default/8715033772604647476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1301643147176033927/3317800987764894384/comments/default/8715033772604647476'/><link rel='alternate' type='text/html' href='http://kasper.eobjects.org/2008/08/considering-metamodel-functions.html?showComment=1217884740000#c8715033772604647476' title=''/><author><name>Porter Woodward</name><uri>http://www.blogger.com/profile/15602507802530401335</uri><email>noreply@blogger.com</email><gd:image xmlns:gd='http://schemas.google.com/g/2005' rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://kasper.eobjects.org/2008/08/considering-metamodel-functions.html' ref='tag:blogger.com,1999:blog-1301643147176033927.post-3317800987764894384' source='http://www.blogger.com/feeds/1301643147176033927/posts/default/3317800987764894384' type='text/html'/><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='blogger.itemClass' value='pid-140737268'/></entry></feed>
