2009-06-02 09:51:38 -04:00
|
|
|
|
|
|
|
#ifndef __DAAP_QUERY_H__
|
|
|
|
#define __DAAP_QUERY_H__
|
|
|
|
|
|
|
|
#include <stdint.h>
|
|
|
|
|
2010-01-04 11:59:21 -05:00
|
|
|
#include "logger.h"
|
|
|
|
#include "misc.h"
|
|
|
|
|
2009-06-02 09:51:38 -04:00
|
|
|
struct dmap_query_field_map {
|
|
|
|
uint32_t hash;
|
|
|
|
int as_int;
|
|
|
|
char *dmap_field;
|
|
|
|
char *db_col;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
struct dmap_query_field_map *
|
|
|
|
daap_query_field_lookup(char *field);
|
|
|
|
|
|
|
|
char *
|
|
|
|
daap_query_parse_sql(const char *daap_query);
|
|
|
|
|
|
|
|
int
|
|
|
|
daap_query_init(void);
|
|
|
|
|
|
|
|
void
|
|
|
|
daap_query_deinit(void);
|
|
|
|
|
2010-01-04 11:59:21 -05:00
|
|
|
|
|
|
|
static inline int64_t
|
|
|
|
daap_songalbumid(const char *album_artist, const char *album)
|
|
|
|
{
|
|
|
|
/* album_artist & album are both VARCHAR(1024) + 2 chars + NUL */
|
|
|
|
char hashbuf[2052];
|
|
|
|
uint64_t hash;
|
|
|
|
int ret;
|
|
|
|
|
|
|
|
ret = snprintf(hashbuf, sizeof(hashbuf), "%s==%s", (album_artist) ? album_artist : "", (album) ? album : "");
|
|
|
|
if ((ret < 0) || (ret >= sizeof(hashbuf)))
|
|
|
|
{
|
|
|
|
DPRINTF(E_WARN, L_DAAP, "Not enough room for album_artist==album concatenation\n");
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* Limit hash length to 63 bits, due to signed type in sqlite */
|
|
|
|
hash = murmur_hash64(hashbuf, ret, 0);
|
|
|
|
|
|
|
|
return hash >> 1;
|
|
|
|
}
|
|
|
|
|
2009-06-02 09:51:38 -04:00
|
|
|
#endif /* !__DAAP_QUERY_H__ */
|